diff options
Diffstat (limited to 'other/parser.cpp')
| -rw-r--r-- | other/parser.cpp | 61 |
1 files changed, 0 insertions, 61 deletions
diff --git a/other/parser.cpp b/other/parser.cpp deleted file mode 100644 index 94b7829..0000000 --- a/other/parser.cpp +++ /dev/null @@ -1,61 +0,0 @@ -struct Token { // In globalem Vektor, Zugriff über globale Variable. - int type; // Definiere Konstanten. - double value; - Token(int type) : type(type) {} - Token(int type, int value) : type(type), value(value) {} -}; - -struct Expression { // Die folgenden Klassen nur für den AST. - virtual ~Expression() {}; - virtual double getValue() = 0; -}; - -struct Atom : public Expression { - double value; - Atom(int value) : value(value) {}; - double getValue() { return value; } -}; - -struct BinaryExpression : public Expression { - Expression *lhs, *rhs; - BinaryExpression(Expression *lhs, Expression *rhs) : lhs(lhs), rhs(rhs) {} - ~BinaryExpression() { delete lhs; delete rhs; } -}; - -struct Addition : public BinaryExpression { - Addition(Expression *lhs, Expression *rhs) : BinaryExpression(lhs, rhs) {} - double getValue() { return lhs->getValue() + rhs->getValue(); } -}; - -Expression* parseF() { - Expression *lhs; - switch(tokens[token].type) { - case NUMBER: return new Atom(tokens[token++].value); - case LEFT_PAR: - token++; - lhs = parseA(); - token++; - return lhs; - default: - return NULL; -}} - -Expression* parseA_(Expression *lhs) { - Expression *plus, *minus; - if (token >= (int)tokens.size()) return lhs; - switch(tokens[token].type) { - case ADDITION: - token++; - plus = new Addition(lhs, parseS()); - return parseA_(plus); - case SUBTRACTION: - token++; - minus = new Subtraction(lhs, parseS()); - return parseA_(minus); - default: - return lhs; -}} - -Expression* parseA() { - Expression *lhs = parseS(); return parseA_(lhs); -} |
