#include "ast.hpp" #include using namespace std; InnerSynTree::~InnerSynTree() { for (unsigned i = 0; i < _v.size(); i++) delete _v[i]; } InnerSynTree::InnerSynTree(SynTree *t) { _v.push_back(t); } InnerSynTree::InnerSynTree(SynTree *l, SynTree *r) { _v.push_back(l); _v.push_back(r); } void Number::compile() const { cout << "push " << _num << endl; } void Variable::compile() const { cout << "push " << _name << endl; } void Add::compile() const { _v[0]->compile(); _v[1]->compile(); cout << "add" << endl; } void Sub::compile() const { _v[0]->compile(); _v[1]->compile(); cout << "sub" << endl; } void Mul::compile() const { _v[0]->compile(); _v[1]->compile(); cout << "mul" << endl; } void Div::compile() const { _v[0]->compile(); _v[1]->compile(); cout << "div" << endl; } void Assign::compile() const { _v[0]->compile(); cout << "pop " << _id << endl; } void Print::compile() const { _v[0]->compile(); cout << "print" << endl; } void Block::compile() const { for (unsigned i = 0; i < _v.size(); i++) _v[i]->compile(); }