From 058dd0feef92317932e1aac5e265acff3be8ae97 Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Sat, 9 Nov 2019 00:02:21 +0800 Subject: [PATCH] Update --- balloon/abstract_syntax_tree.cpp | 32 ++++++++++++++++++++++++-------- balloon/abstract_syntax_tree.h | 2 ++ balloon/balloon_var.h | 1 + balloon/main.cpp | 8 +++++--- balloon/test.txt | 23 +++++++++++++++++++++++ 5 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 balloon/test.txt diff --git a/balloon/abstract_syntax_tree.cpp b/balloon/abstract_syntax_tree.cpp index 4611161..b81111d 100644 --- a/balloon/abstract_syntax_tree.cpp +++ b/balloon/abstract_syntax_tree.cpp @@ -1,15 +1,14 @@ #ifndef __ABSTRACT_SYNTAX_TREE_CPP__ #define __ABSTRACT_SYNTAX_TREE_CPP__ -balloon_scope global; int exit_type=0; var abstract_syntax_tree::call_id() { var temp; if(children.empty()) { - if(global.search_var(name)) - temp=global.get_var(name); + if(scope.search_var(name)) + temp=scope.get_var(name); else { std::cout<<">>[Runtime-error] cannot find a var named \'"<::iterator j=i->children.begin(); std::string _name=j->name; - if(!global.search_var(_name)) + if(!scope.search_var(_name)) { new_var.set_name(_name); - global.add_var(new_var); + scope.add_new_var(new_var); } else { @@ -87,7 +86,7 @@ void abstract_syntax_tree::run_root() else if(i->type==__string) std::cout<str<type==__id) - i->call_id(); + std::cout<call_id().get_name()<type==__while) { ; @@ -96,17 +95,34 @@ void abstract_syntax_tree::run_root() { ; } - if(exit_type!=__process_exited_successfully) break; } end_time=time(NULL); + std::cout<<"-------------------------------------------------------------------------------------------"<>[Runtime] process exited after "<> Balloon interpreter by ValKmjolnir"<> Input [help] to find help."<