#include #include #include #include #include #include using std::string; using std::vector; using std::map; using std::pair; class AnalysisError { string type; public: AnalysisError(string type); const string what() const; }; class Tree; class Node { public: string rule; string symbol; bool isTerminal; string value; vector children; Tree *t; Node(string rule, Tree *t); ~Node(); void print(); void traverse(); void checkParam(); void checkVar(); string getType(); void generate(); }; class Tree { public: Node *root; vector &parsedTokens; map, map>> tables; map table; vector params; string currentProcedure; int varCount; int argCount; map varOffset; map, int>> varOffsets; int loopCount; Tree(vector &parsedTokens); ~Tree(); void print(); void traverse(); void generate(); string getNextToken(); };