#ifndef __AST_H__ #define __AST_H__ #include "token_type.h" #include #include #include enum tree_node_type { __syntax_tree_begin=128, __error_syntax, __null_statement, __definition, __assignment, __loop, __choose }; struct node { int type; int line; std::string content; std::list children; }; class abstract_syntax_tree { private: node tree; std::stack parser_stack; public: abstract_syntax_tree() { tree.type=__syntax_tree_begin; tree.line=0; tree.content=""; tree.children.clear(); } void init_parser_stack(std::stack& temp) { parser_stack=temp; return; } void tree_generator(std::list& error_list) { while(!parser_stack.empty()) { int type=parser_stack.top().type; node child_node; child_node.line=parser_stack.top().line; child_node.content=""; child_node.children.clear(); switch(type) { case __var:break; case __id:break; case __number:break; case __string:break; case __if:break; case __for:break; case __forindex:break; case __foreach:break; case __while:break; case __semi:child_node.type=__null_statement;break; default:child_node.type=__error_syntax;break; } if(child_node.type==__error_syntax) error_list.push_back(parser_stack.top().line); parser_stack.pop(); } return; } void run() { ; return; } }; #endif