Skip to content

Commit

Permalink
Some simple cleanups
Browse files Browse the repository at this point in the history
  • Loading branch information
lefticus committed Nov 18, 2023
1 parent c81b528 commit 1516328
Show file tree
Hide file tree
Showing 11 changed files with 65 additions and 91 deletions.
30 changes: 13 additions & 17 deletions legacy/Evaluator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
#include "Evaluator.hpp"

enum Operators{
PLUS_SIGN,
CLOSE_PAREN,
OPEN_PAREN,
MINUS_SIGN,
DIVIDE_SIGN,
MULTIPLY_SIGN
PLUS_SIGN,
CLOSE_PAREN,
OPEN_PAREN,
MINUS_SIGN,
DIVIDE_SIGN,
MULTIPLY_SIGN
};

int precedence(int op) {
Expand All @@ -31,7 +31,7 @@ int precedence(int op) {
}


void evaluateStacks(Stack<RationalNumber> &numbers, Stack<int> &operators, int num) {
void evaluateStacks(Stack<RationalNumber> &numbers, Stack<int> &operators) {
bool eatOpenParen = false;
bool cont = true;

Expand Down Expand Up @@ -81,14 +81,11 @@ void evaluateStacks(Stack<RationalNumber> &numbers, Stack<int> &operators, int n
operators.pop();
RationalNumber operand2 = numbers.pop();
RationalNumber operand1 = numbers.pop();
numbers.push(operand1/operand2);
numbers.push(operand1 / operand2);
break;
}
}

if (num == 1)
cont = false;

}
}

Expand All @@ -106,7 +103,7 @@ RationalNumber evaluateExpression(StringTokenizer & st) {

std::string next = st.nextToken();

int value = 0;
Operators value = PLUS_SIGN;
bool op = false;

if (!next.empty()) {
Expand Down Expand Up @@ -137,9 +134,8 @@ RationalNumber evaluateExpression(StringTokenizer & st) {
break;

default:
value = atoi(next.c_str());
op = false;
numbers.push(RationalNumber(value, 1));
numbers.push(RationalNumber(atoi(next.c_str()), 1));
break;
}

Expand All @@ -152,12 +148,12 @@ RationalNumber evaluateExpression(StringTokenizer & st) {
break;
case CLOSE_PAREN:
operators.push(value);
evaluateStacks(numbers, operators, 0);
evaluateStacks(numbers, operators);
break;
default:
if (operators.peek() != NULL
&& precedence(value) <= precedence(*operators.peek()) ) {
evaluateStacks(numbers, operators, 0);
evaluateStacks(numbers, operators);
}
operators.push(value);
break;
Expand All @@ -167,7 +163,7 @@ RationalNumber evaluateExpression(StringTokenizer & st) {
}

if (operators.peek() != NULL)
evaluateStacks(numbers, operators, 0);
evaluateStacks(numbers, operators);

if (numbers.peek() != NULL) {
return *numbers.peek();
Expand Down
2 changes: 1 addition & 1 deletion legacy/Evaluator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@

int precedence(int op);
RationalNumber evaluateExpression(StringTokenizer &st);
void evaluateStacks(Stack<RationalNumber> &numbers, Stack<int> &operators, int num);
void evaluateStacks(Stack<RationalNumber> &numbers, Stack<int> &operators);

#endif
6 changes: 3 additions & 3 deletions legacy/RationalNumber.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

#include "RationalNumber.h"

RationalNumber::RationalNumber(int num, int den) {
numerator = num;
denominator = den;
RationalNumber::RationalNumber(int num, int den)
: numerator(num), denominator(den)
{
}

RationalNumber RationalNumber::operator/(const RationalNumber & rn) const {
Expand Down
11 changes: 4 additions & 7 deletions legacy/Stack.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,17 @@ class Stack
data.pop_back();
return toReturn;
}

bool moreThanOne() const {
return data.size() > 1;
}


void push(const Contained &newElem) {
data.push_back(newElem);
}

const Contained * peek() const {
if (data.empty())
if (data.empty()) {
return NULL;
else
} else {
return &data.back();
}
}
private:
std::vector<Contained> data;
Expand Down
40 changes: 9 additions & 31 deletions legacy/StringTokenizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ std::string StringTokenizer::nextToken()
{
while (currentOffset<string.size()
&& isWhiteSpace(string[currentOffset])) {
currentOffset++;
++currentOffset;
}

int endOfToken = findTokenEnd(currentOffset, string);
size_type endOfToken = findTokenEnd(currentOffset, string);

std::string toReturn = string.substr(currentOffset, endOfToken-currentOffset);
currentOffset = endOfToken;
Expand All @@ -30,7 +30,7 @@ bool StringTokenizer::hasMoreTokens() const {
return moreTokens;
}

int StringTokenizer::findTokenEnd(int start, const std::string& string) {
StringTokenizer::size_type StringTokenizer::findTokenEnd(size_type start, const std::string& string) {
if (string.empty()) {
return start;
}
Expand All @@ -49,7 +49,7 @@ int StringTokenizer::findTokenEnd(int start, const std::string& string) {



std::string StringTokenizer::getSubString(const std::string &string, int start, int end) {
std::string StringTokenizer::getSubString(const std::string &string, size_type start, size_type end) {
return string.substr(start, end);
}

Expand All @@ -62,10 +62,10 @@ bool StringTokenizer::isOperator(char c) {
case '*':
case '(':
case ')':
return 1;
return true;
break;
default:
return 0;
return false;
break;
}
}
Expand All @@ -83,39 +83,17 @@ bool StringTokenizer::isNumber(char c) {
case '8':
case '9':
case '0':
return 1;
return true;
break;
default:
return 0;
return false;
break;
}
}


bool StringTokenizer::isWhiteSpace(char c) {
switch (c) {
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
case '+':
case '-':
case '/':
case '*':
case '(':
case ')':
return 0;
break;
default:
return 1;
break;
}
return !isNumber(c) && !isOperator(c);
}


8 changes: 5 additions & 3 deletions legacy/StringTokenizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
class StringTokenizer
{
public:
typedef std::string::size_type size_type;

StringTokenizer(const std::string &n_string);

bool hasMoreTokens() const;
Expand All @@ -21,14 +23,14 @@ class StringTokenizer

private:
std::string string;
int currentOffset;
size_type currentOffset;
bool moreTokens;

static bool isNumber(char c);
static bool isOperator(char c);
static bool isWhiteSpace(char c);
static std::string getSubString(const std::string &, int start, int end);
static int findTokenEnd(int start, const std::string &);
static std::string getSubString(const std::string &, size_type start, size_type end);
static size_type findTokenEnd(size_type start, const std::string &);
};

#endif
4 changes: 3 additions & 1 deletion legacy/infiz.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@ void main(int argc, char * args[]) {
StringTokenizer st(input);
RationalNumber answer = evaluateExpression(st);
cout << "answer: ";

if (answer.getDenominator()==1)
cout <<answer.getNumerator()<<endl<<flush;
cout <<answer.getNumerator()<< '\n';
else
cout <<answer.getNumerator()<<'/'<<answer.getDenominator()<<" ("<<answer.getFloat()<<")"<< '\n';

cin.getline(input,254, '\n');
}
}
Expand Down
Binary file modified legacy/infiz.ncb
Binary file not shown.
Binary file modified legacy/infiz.opt
Binary file not shown.
39 changes: 23 additions & 16 deletions legacy/tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@
#include "Evaluator.hpp"


void run_test(const std::string &input, RationalNumber expected)
void run_test(const std::string &input, RationalNumber expected, bool &success)
{
StringTokenizer st(input);
RationalNumber result = evaluateExpression(st);


if (result.getDenominator() != expected.getDenominator() ||
result.getNumerator() != expected.getNumerator()) {
success = false;
std::cout << "FAIL: ";
} else {
std::cout << "PASS: ";
Expand All @@ -30,19 +32,24 @@ void run_test(const std::string &input, RationalNumber expected)
}

int main() {
run_test("(3 + 2)", RationalNumber(5, 1));
run_test("(3 / 2)", RationalNumber(3, 2));
run_test("(4 / 2)", RationalNumber(4, 2));
run_test("(4 / 2) * 5", RationalNumber(20, 2));
run_test("(1 / 2) / 3", RationalNumber(1, 6));
run_test("((1 + 2) + 3) + 4", RationalNumber(10, 1));


run_test("1 / 2 / 3", RationalNumber(1, 6));
run_test("1 + 2 + 3 + 4", RationalNumber(10, 1));
run_test("1+2+3+4", RationalNumber(10, 1));
run_test("10/2*3", RationalNumber(30, 2));
run_test("10/(2*3)", RationalNumber(10, 6));

return 0;
bool all_passed = true;

run_test("(3 + 2)", RationalNumber(5, 1), all_passed);
run_test("(3 / 2)", RationalNumber(3, 2), all_passed);
run_test("(4 / 2)", RationalNumber(4, 2), all_passed);
run_test("(4 / 2) * 5", RationalNumber(20, 2), all_passed);
run_test("(1 / 2) / 3", RationalNumber(1, 6), all_passed);
run_test("((1 + 2) + 3) + 4", RationalNumber(10, 1), all_passed);

run_test("1 / 2 / 3", RationalNumber(1, 6), all_passed);
run_test("1 + 2 + 3 + 4", RationalNumber(10, 1), all_passed);
run_test("1+2+3+4", RationalNumber(10, 1), all_passed);
run_test("10/2*3", RationalNumber(30, 2), all_passed);
run_test("10/(2*3)", RationalNumber(10, 6), all_passed);

if (all_passed) {
return EXIT_SUCCESS;
} else {
return EXIT_FAILURE;
}
}
16 changes: 4 additions & 12 deletions legacy/tests/tests.plg
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
--------------------Configuration: InfixEvaluator - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\Users\Jason\AppData\Local\Temp\RSP9AF5.tmp" with contents
Creating temporary file "C:\Users\Jason\AppData\Local\Temp\RSP47B5.tmp" with contents
[
/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"Debug/InfixEvaluator.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
"C:\Users\Jason\Documents\GitHub\infiz\legacy\Evaluator.cpp"
]
Creating command line "cl.exe @C:\Users\Jason\AppData\Local\Temp\RSP9AF5.tmp"
Creating command line "cl.exe @C:\Users\Jason\AppData\Local\Temp\RSP47B5.tmp"
Creating command line "link.exe -lib /nologo /out:"Debug\InfixEvaluator.lib" .\Debug\Evaluator.obj .\Debug\RationalNumber.obj .\Debug\StringTokenizer.obj "
<h3>Output Window</h3>
Compiling...
Expand All @@ -21,22 +21,14 @@ Creating library...
--------------------Configuration: tests - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\Users\Jason\AppData\Local\Temp\RSP9CBB.tmp" with contents
[
/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/tests.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
"C:\Users\Jason\Documents\GitHub\infiz\legacy\tests.cpp"
]
Creating command line "cl.exe @C:\Users\Jason\AppData\Local\Temp\RSP9CBB.tmp"
Creating temporary file "C:\Users\Jason\AppData\Local\Temp\RSP9CBC.tmp" with contents
Creating temporary file "C:\Users\Jason\AppData\Local\Temp\RSP495C.tmp" with contents
[
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/tests.pdb" /debug /machine:I386 /out:"Debug/tests.exe" /pdbtype:sept
.\Debug\tests.obj
\Users\Jason\Documents\GitHub\infiz\legacy\InfixEvaluator\Debug\InfixEvaluator.lib
]
Creating command line "link.exe @C:\Users\Jason\AppData\Local\Temp\RSP9CBC.tmp"
Creating command line "link.exe @C:\Users\Jason\AppData\Local\Temp\RSP495C.tmp"
<h3>Output Window</h3>
Compiling...
tests.cpp
Linking...


Expand Down

0 comments on commit 1516328

Please sign in to comment.