diff --git a/version2.0/abstract_syntax_tree.h b/version2.0/abstract_syntax_tree.h index 7867cd1..9e7b634 100644 --- a/version2.0/abstract_syntax_tree.h +++ b/version2.0/abstract_syntax_tree.h @@ -79,6 +79,13 @@ abstract_syntax_tree::abstract_syntax_tree(const abstract_syntax_tree& tmp) abstract_syntax_tree::~abstract_syntax_tree() { + node_type=__null_type; + line=0; + symbol_number=-1; + symbol_is_global=false; + var_number=0; + var_string.clear(); + var_name.clear(); children.clear(); return; } @@ -117,10 +124,10 @@ void abstract_syntax_tree::print_tree_block(const int n) case __string: std::cout<<": "<>command; if(command=="help") { + std::cout<<">> be careful that this program does not support unicode(unicode will be set to \'?\')"<> [\'file\'] input a file."<> [cls ] clear the screen."<> [del ] clear the resource code."< token_list; std::list detail_token_list; int error; + std::string utf8_clear(std::string tmp) + { + /* + 0xxx xxxx 0x0 1 byte + 110x xxxx 0xc0 2 byte + 1110 xxxx 0xe0 3 byte + 1111 0xxx 0xf0 4 byte + 1111 10xx 0xf8 5 byte + 1111 110x 0xfc 6 byte + bytes after it is: + 10xx xxxx 0x80 + + so utf-8 format is: + 0xxxxxxx + 110xxxxx 10xxxxxx + 1110xxxx 10xxxxxx 10xxxxxx + 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + */ + unsigned char utf8head[6]={0x0,0xc0,0xe0,0xf0,0xf8,0xfc}; + std::string ret=""; + for(int i=0;i=0) + ret+=tmp[i]; + else + { + int utf8byte=0; + for(int j=5;j>=0;--j) + if((tmp[i] & utf8head[j])==utf8head[j]) + { + utf8byte=j; + break; + } + for(int j=0;jsymbol_table_block_generate(*i); } } - else if(node_type==__id) + else if((node_type==__id) || (node_type==__call_hash)) { symbol_table_unit tmp; tmp.symbol_line=node.get_node_line();