#include using namespace std; class Expr { public: virtual void to_bytecode() = 0; }; class Inte : public Expr { int value; public: Inte(int _value){ value = _value; } void to_bytecode(){ cout << "push_int " << value << endl; } }; class Real : public Expr { double value; public: Real(double _value){ value = _value; } void to_bytecode(){ cout << "push_double " << value << endl; } }; enum OperKind {ADD, SUB, MUL, DIV, MOD}; class Oper : public Expr { OperKind kind; public: Expr* left; Expr* right; Oper(OperKind _kind){ kind = _kind; } void to_bytecode(){ left->to_bytecode(); right->to_bytecode(); switch(kind){ case ADD: cout << "add" << endl; break; case SUB: cout << "sub" << endl; break; case MUL: cout << "mul" << endl; break; case DIV: cout << "div" << endl; break; case MOD: cout << "mod" << endl; break; } } };