class expression { public:
virtual ~expression();
expression();
virtual char *text() = 0;
virtual bool is_constant() = 0;
virtual expr *optimize() = 0;
virtual void generate_code() = 0;
etc etc etc }; |
expression_plus::~expression_plus() {
delete lhs;
delete rhs; }
expression_plus::expression_plus(expression *a1,
expression *a2) :
lhs(a1),
rhs(a2) { }
bool expression_plus::is_constant() {
return lhs->is_constant() && rhs->is_constant(); }
void expression_plus::generate_code() {
lhs->generate_code();
rhs->generate_code();
emit_opcode(OP_ADI); } |