diff --git a/version1.2/ast.h b/version1.2/ast.h index 84fa126..09f21ef 100644 --- a/version1.2/ast.h +++ b/version1.2/ast.h @@ -71,6 +71,23 @@ class abstract_syntax_tree } return; } + void run_tree() + { + if(!children.empty()) + { + for(auto i=children.begin();i!=children.end();++i) + { + switch(i->ast_node_type) + { + case __number:std::cout<var_number<var_string<var_name<run_tree();break; + } + } + } + return; + } void set_node_type(const int type) { ast_node_type=type; @@ -164,15 +181,15 @@ class abstract_syntax_tree children.push_back(p); return; } - double return_var_number() + double get_var_number() { return var_number; } - std::string return_var_string() + std::string get_var_string() { return var_string; } - std::string return_var_name() + std::string get_var_name() { return var_name; } diff --git a/version1.2/main.cpp b/version1.2/main.cpp index 9fd5aa5..c1b1353 100644 --- a/version1.2/main.cpp +++ b/version1.2/main.cpp @@ -4,6 +4,7 @@ int main() resource_programme_process prog; nasal_lexer lex; nasal_parser pas; + runtime rt; std::string command; std::cout<<">> Nasal interpreter by ValKmjolnir"<> Input [help] to find help."<>[Abstract_syntax_tree] error(s) occurred,stop."<>[Runtime] error(s) occurred,stop."<>[Abstract-syntax-tree]"< var_list; + std::list var_hash; + abstract_syntax_tree function; + public: + var() + { + type=0; + name=""; + number=0; + str=""; + function.set_clear(); + } + var(const var& p) + { + type=p.type; + name=p.name; + number=p.number; + str=p.str; + function=p.function; + } + var& operator=(const var& p) + { + type=p.type; + name=p.name; + number=p.number; + str=p.str; + function=p.function; + return *this; + } + void set_type(const int var_type) + { + type=var_type; + return; + } + void set_name(std::string& var_name_str) + { + name=var_name_str; + return; + } + void set_number(const double var_number) + { + number=var_number; + return; + } + void set_string(std::string& s) + { + str=s; + return; + } + void set_function(abstract_syntax_tree& func) + { + function=func; + return; + } + void set_list(std::list& p) + { + var_list=p; + return; + } + void append_list(var& p) + { + var_list.push_back(p); + return; + } + void set_hash(std::list& p) + { + var_hash=p; + return; + } + void append_hash(var& p) + { + var_hash.push_back(p); + return; + } + std::string get_name() + { + return name; + } + double get_number() + { + return number; + } + std::string get_string() + { + return str; + } + abstract_syntax_tree get_function() + { + return function; + } + std::list& get_list() + { + return var_list; + } + std::list& get_hash() + { + return var_hash; + } +}; + +class var_list_manager +{ + private: + std::list var_list; + public: + var_list_manager() + { + var_list.clear(); + var null_var; + var_list.push_back(null_var); + return; + } + void add_var(var& tmp) + { + for(auto i=var_list.begin();i!=var_list.end();++i) + if(i->get_name()==tmp.get_name()) + { + std::cout<<">>[Runtime-error] redeclaration of '"<get_name()==str) + return *i; + std::cout<<">>[Runtime-error] '"<