Basic expression parsing

This commit is contained in:
Rafał Grodziński
2025-05-30 13:33:45 +09:00
parent d5d21aa422
commit 1aceef1273
7 changed files with 197 additions and 35 deletions

View File

@@ -3,23 +3,43 @@
#include "Token.h"
class ExpressionInvalid;
using namespace std;
class Expression {
public:
static ExpressionInvalid Invalid;
enum Kind {
LITERAL,
BINARY,
INVALID
};
virtual std::string toString() = 0;
};
enum Operation {
ADD,
SUB,
MUL,
DIV,
MOD,
NONE
};
class ExpressionInvalid {
private:
Kind kind = INVALID;
int64_t integer = 0;
Operation operation = NONE;
shared_ptr<Expression> left = nullptr;
shared_ptr<Expression> right = nullptr;
};
void setupLiteral(Token token);
void setupBinary(Token token, shared_ptr<Expression> left, shared_ptr<Expression> right);
/*class ExpressionInteger: Expression {
public:
ExpressionInteger(Token token);
std::string toString() override;
};*/
Expression(Kind kind, Token token, shared_ptr<Expression> left, shared_ptr<Expression> right);
Kind getKind();
bool operator==(Expression const& other);
bool operator!=(Expression const& other);
string toString();
static shared_ptr<Expression> Invalid;
};
#endif