summaryrefslogtreecommitdiff
path: root/other/parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'other/parser.cpp')
-rw-r--r--other/parser.cpp61
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);
-}