#ifndef EXPRESSION_H #define EXPRESSION_H #include "Token.h" using namespace std; class Expression { public: enum Kind { LITERAL, BINARY, INVALID }; enum Operator { ADD, SUB, MUL, DIV, MOD, NONE }; private: Kind kind = INVALID; int64_t integer = 0; Operator operation = NONE; shared_ptr left = nullptr; shared_ptr right = nullptr; void setupLiteral(Token token); void setupBinary(Token token, shared_ptr left, shared_ptr right); public: Expression(Kind kind, Token token, shared_ptr left, shared_ptr right); Kind getKind(); int64_t getInteger(); Operator getOperator(); shared_ptr getLeft(); shared_ptr getRight(); bool operator==(Expression const& other); bool operator!=(Expression const& other); string toString(); static shared_ptr Invalid; }; #endif