From 0384e1932321633c4d1961aad21cd9fe0578925f Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Thu, 10 Oct 2019 10:33:49 -0500 Subject: [PATCH] Prepare for abstract syntax tree --- version1.0/ast.h | 94 ++++ version1.0/ast_generator.h | 1029 ++++++++++++++++++++++++++++++++++++ 2 files changed, 1123 insertions(+) create mode 100644 version1.0/ast_generator.h diff --git a/version1.0/ast.h b/version1.0/ast.h index 53adf86..d8b3fc8 100644 --- a/version1.0/ast.h +++ b/version1.0/ast.h @@ -9,6 +9,7 @@ class abstract_syntax_tree std::list children; double var_number; std::string var_string; + std::string id_name; public: abstract_syntax_tree() { @@ -17,6 +18,7 @@ class abstract_syntax_tree children.clear(); var_number=0; var_string=""; + id_name="ukn"; } abstract_syntax_tree(const abstract_syntax_tree& temp) { @@ -32,6 +34,55 @@ class abstract_syntax_tree var_number=temp.var_number; var_string=temp.var_string; } + void print_ast_node(int tab_num) + { + for(int i=0;i::iterator i=children.begin();i!=children.end();++i) + i->print_ast_node(tab_num+1); + for(int i=0;i parse; + std::stack node_cache; + token this_token; + public: + generator() + { + this_token.type=0; + } + void get_token() + { + if(parse.empty()) + { + this_token.type=0; + return; + } + this_token=parse.top(); + parse.pop(); + return; + } + void gen_process(std::list& lexer) + { + while(!parse.empty()) + parse.pop(); + std::stack temp; + for(std::list::iterator i=lexer.begin();i!=lexer.end();++i) + { + token temp_parse; + temp_parse=*i; + temp.push(temp_parse);//push this into stack + } + if(temp.empty()) + { + std::cout<<">>[Abstract-syntax-tree] warning: empty lexer list."<>\n[Abstract-syntax-tree]"<>[Abstract-syntax-tree] complete generation."<