From 679e36686bdd4a07bba963b683acb01e0c181e3d Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Tue, 28 Jan 2020 23:17:34 +0800 Subject: [PATCH] update --- version2.0/nasal.h | 1 + version2.0/nasal_scope.h | 135 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 version2.0/nasal_scope.h diff --git a/version2.0/nasal.h b/version2.0/nasal.h index 1a43514..944b54f 100644 --- a/version2.0/nasal.h +++ b/version2.0/nasal.h @@ -11,6 +11,7 @@ #include #include "numeral_misc.h" +#include "nasal_scope.h" #include "nasal_enum.h" #include "abstract_syntax_tree.h" #include "nasal_lexer.h" diff --git a/version2.0/nasal_scope.h b/version2.0/nasal_scope.h new file mode 100644 index 0000000..e746002 --- /dev/null +++ b/version2.0/nasal_scope.h @@ -0,0 +1,135 @@ +#ifndef __NASAL_SCOPE_H__ +#define __NASAL_SCOPE_H__ + +struct symbol_table_unit +{ + std::string symbol_name; + int symbol_number; + int symbol_line; + symbol_table_unit(const symbol_table_unit& tmp) + { + symbol_name=tmp.symbol_name; + symbol_number=tmp.symbol_number; + symbol_line=tmp.symbol_line; + return; + } + symbol_table_unit& operator=(const symbol_table_unit& tmp) + { + symbol_line=tmp.symbol_line; + symbol_name=tmp.symbol_name; + symbol_number=tmp.symbol_number; + return *this; + } +}; + +class nasal_scope +{ + private: + int error; + std::list main_scope; + std::list > block_list; + public: + nasal_scope(); + ~nasal_scope(); + void print_symbol_table(); + void set_scope_clear(); + void main_scope_add_symbol(symbol_table_unit); + void block_list_add_scope(); + void block_list_del_scope(); + void block_scope_add_symbol(symbol_table_unit); +}; + +nasal_scope::nasal_scope() +{ + error=0; + main_scope.clear(); + block_list.clear(); + return; +} + +nasal_scope::~nasal_scope() +{ + error=0; + main_scope.clear(); + block_list.clear(); + return; +} + +void nasal_scope::print_symbol_table() +{ + std::cout<<"main scope:"<::iterator i=main_scope.begin();i!=main_scope.end();++i) + std::cout<<"line "<symbol_line<<": "<symbol_name<<" |symbol number: "<symbol_number<<'.'< >::iterator i=block_list.begin();i!=block_list.end();++i) + { + for(std::list::iterator j=i->begin();j!=i->end();++j) + std::cout<<"line "<symbol_line<<": "<symbol_name<<" |symbol number: "<symbol_number<<'.'< new_scope; + block_list.push_back(new_scope); + return; +} + +void nasal_scope::block_list_del_scope() +{ + if(block_list.empty()) + { + ++error; + std::cout<<">>[Symbol-error] fatal error: empty block_scope_list."<>[Symbol-error] fatal error: empty block_scope_list."<