Files
bits-runner-builder/src/Expression.h
2025-05-30 22:32:04 +09:00

49 lines
1.0 KiB
C++

#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<Expression> left = nullptr;
shared_ptr<Expression> right = nullptr;
void setupLiteral(Token token);
void setupBinary(Token token, shared_ptr<Expression> left, shared_ptr<Expression> right);
public:
Expression(Kind kind, Token token, shared_ptr<Expression> left, shared_ptr<Expression> right);
Kind getKind();
int64_t getInteger();
Operator getOperator();
shared_ptr<Expression> getLeft();
shared_ptr<Expression> getRight();
bool operator==(Expression const& other);
bool operator!=(Expression const& other);
string toString();
static shared_ptr<Expression> Invalid;
};
#endif