change some names of identifiers

This commit is contained in:
Valk Richard Li 2019-12-25 13:47:57 +08:00 committed by GitHub
parent 3325416b10
commit 2387fe764d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 120 additions and 117 deletions

View File

@ -1,6 +1,6 @@
#include "nasal.h" #include "nasal.h"
resource_file res; resource_file resource;
nasal_lexer lexer; nasal_lexer lexer;
nasal_parse parser; nasal_parse parser;
@ -36,25 +36,25 @@ int main()
} }
else if(command=="del") else if(command=="del")
{ {
res.delete_all_source(); resource.delete_all_source();
std::cout<<">>[Delete] complete."<<std::endl; std::cout<<">>[Delete] complete."<<std::endl;
} }
else if(command=="lib") else if(command=="lib")
{ {
res.load_lib_file(); resource.load_lib_file();
std::cout<<">>[Lib] loaded."<<std::endl; std::cout<<">>[Lib] loaded."<<std::endl;
} }
else if(command=="rs") else if(command=="rs")
{ {
res.print_resource(false); resource.print_resource(false);
} }
else if(command=="total") else if(command=="total")
{ {
res.print_resource(true); resource.print_resource(true);
} }
else if(command=="lexer") else if(command=="lexer")
{ {
lexer.scanner(res.get_source()); lexer.scanner(resource.get_source());
lexer.generate_detail_token(); lexer.generate_detail_token();
if(!lexer.get_error()) if(!lexer.get_error())
lexer.print_token_list(); lexer.print_token_list();
@ -63,11 +63,11 @@ int main()
} }
else if(command=="parser") else if(command=="parser")
{ {
lexer.scanner(res.get_source()); lexer.scanner(resource.get_source());
lexer.generate_detail_token(); lexer.generate_detail_token();
if(!lexer.get_error()) if(!lexer.get_error())
{ {
parser.get_token_list(lexer.get_detail_token()); parser.get_token_list(lexer.get_detail_token_list());
parser.print_detail_token(); parser.print_detail_token();
parser.main_generate(); parser.main_generate();
} }
@ -76,11 +76,11 @@ int main()
} }
else if(command=="ast") else if(command=="ast")
{ {
lexer.scanner(res.get_source()); lexer.scanner(resource.get_source());
lexer.generate_detail_token(); lexer.generate_detail_token();
if(!lexer.get_error()) if(!lexer.get_error())
{ {
parser.get_token_list(lexer.get_detail_token()); parser.get_token_list(lexer.get_detail_token_list());
parser.main_generate(); parser.main_generate();
if(!parser.get_error()) if(!parser.get_error())
parser.get_root().print_tree(1); parser.get_root().print_tree(1);
@ -93,7 +93,7 @@ int main()
else if(command=="exit") else if(command=="exit")
break; break;
else else
res.input_file(command); resource.input_file(command);
} }
return 0; return 0;
} }

View File

@ -52,7 +52,7 @@ class resource_file
private: private:
std::list<char> libsource; std::list<char> libsource;
std::list<char> resource; std::list<char> resource;
std::list<char> total; std::list<char> totalcode;
public: public:
/* /*
resource_file(); resource_file();
@ -67,21 +67,21 @@ class resource_file
{ {
libsource.clear(); libsource.clear();
resource.clear(); resource.clear();
total.clear(); totalcode.clear();
return; return;
} }
~resource_file() ~resource_file()
{ {
libsource.clear(); libsource.clear();
resource.clear(); resource.clear();
total.clear(); totalcode.clear();
return; return;
} }
void delete_all_source() void delete_all_source()
{ {
libsource.clear(); libsource.clear();
resource.clear(); resource.clear();
total.clear(); totalcode.clear();
return; return;
} }
void input_file(std::string filename) void input_file(std::string filename)
@ -107,16 +107,19 @@ class resource_file
void load_lib_file() void load_lib_file()
{ {
libsource.clear(); libsource.clear();
/*
ifstream lib files here
*/
return; return;
} }
std::list<char>& get_source() std::list<char>& get_source()
{ {
total.clear(); totalcode.clear();
for(std::list<char>::iterator i=libsource.begin();i!=libsource.end();++i) for(std::list<char>::iterator i=libsource.begin();i!=libsource.end();++i)
total.push_back(*i); totalcode.push_back(*i);
for(std::list<char>::iterator i=resource.begin();i!=resource.end();++i) for(std::list<char>::iterator i=resource.begin();i!=resource.end();++i)
total.push_back(*i); totalcode.push_back(*i);
return total; return totalcode;
} }
void print_resource(bool withlib) void print_resource(bool withlib)
{ {
@ -157,7 +160,7 @@ class nasal_lexer
{ {
private: private:
std::list<token> token_list; std::list<token> token_list;
std::list<token> detail_token; std::list<token> detail_token_list;
int error; int error;
public: public:
/* /*
@ -172,14 +175,14 @@ class nasal_lexer
nasal_lexer() nasal_lexer()
{ {
token_list.clear(); token_list.clear();
detail_token.clear(); detail_token_list.clear();
error=0; error=0;
return; return;
} }
~nasal_lexer() ~nasal_lexer()
{ {
token_list.clear(); token_list.clear();
detail_token.clear(); detail_token_list.clear();
return; return;
} }
void print_token_list() void print_token_list()
@ -195,7 +198,7 @@ class nasal_lexer
void scanner(std::list<char>& res) void scanner(std::list<char>& res)
{ {
token_list.clear(); token_list.clear();
detail_token.clear(); detail_token_list.clear();
error=0; error=0;
int line=1; int line=1;
@ -365,107 +368,107 @@ class nasal_lexer
} }
void generate_detail_token() void generate_detail_token()
{ {
token detail; token detail_token;
detail_token.clear(); detail_token_list.clear();
for(std::list<token>::iterator i=token_list.begin();i!=token_list.end();++i) for(std::list<token>::iterator i=token_list.begin();i!=token_list.end();++i)
{ {
if(i->type==__token_number) if(i->type==__token_number)
{ {
detail.line=i->line; detail_token.line=i->line;
detail.str =i->str; detail_token.str =i->str;
detail.type=__number; detail_token.type=__number;
detail_token.push_back(detail); detail_token_list.push_back(detail_token);
} }
else if(i->type==__token_string) else if(i->type==__token_string)
{ {
detail.line=i->line; detail_token.line=i->line;
detail.str =i->str; detail_token.str =i->str;
detail.type=__string; detail_token.type=__string;
detail_token.push_back(detail); detail_token_list.push_back(detail_token);
} }
else if(i->type==__token_reserve_word) else if(i->type==__token_reserve_word)
{ {
detail.line=i->line; detail_token.line=i->line;
detail.str =""; detail_token.str ="";
if(i->str=="for") detail.type=__for; if(i->str=="for") detail_token.type=__for;
else if(i->str=="foreach") detail.type=__foreach; else if(i->str=="foreach") detail_token.type=__foreach;
else if(i->str=="forindex") detail.type=__forindex; else if(i->str=="forindex") detail_token.type=__forindex;
else if(i->str=="while") detail.type=__while; else if(i->str=="while") detail_token.type=__while;
else if(i->str=="var") detail.type=__var; else if(i->str=="var") detail_token.type=__var;
else if(i->str=="func") detail.type=__func; else if(i->str=="func") detail_token.type=__func;
else if(i->str=="break") detail.type=__break; else if(i->str=="break") detail_token.type=__break;
else if(i->str=="continue") detail.type=__continue; else if(i->str=="continue") detail_token.type=__continue;
else if(i->str=="return") detail.type=__return; else if(i->str=="return") detail_token.type=__return;
else if(i->str=="if") detail.type=__if; else if(i->str=="if") detail_token.type=__if;
else if(i->str=="else") detail.type=__else; else if(i->str=="else") detail_token.type=__else;
else if(i->str=="elsif") detail.type=__elsif; else if(i->str=="elsif") detail_token.type=__elsif;
else if(i->str=="nil") detail.type=__nil; else if(i->str=="nil") detail_token.type=__nil;
else if(i->str=="and") detail.type=__and_operator; else if(i->str=="and") detail_token.type=__and_operator;
else if(i->str=="or") detail.type=__or_operator; else if(i->str=="or") detail_token.type=__or_operator;
detail_token.push_back(detail); detail_token_list.push_back(detail_token);
} }
else if(i->type==__token_identifier) else if(i->type==__token_identifier)
{ {
detail.line=i->line; detail_token.line=i->line;
detail.str =i->str; detail_token.str =i->str;
if(i->str.length()<=3) if(i->str.length()<=3)
detail.type=__id; detail_token.type=__id;
else else
{ {
std::string tempstr=i->str; std::string tempstr=i->str;
int strback=tempstr.length()-1; int strback=tempstr.length()-1;
if(tempstr.length()>3 &&tempstr[strback]=='.' && tempstr[strback-1]=='.' && tempstr[strback-2]=='.') if(tempstr.length()>3 &&tempstr[strback]=='.' && tempstr[strback-1]=='.' && tempstr[strback-2]=='.')
{ {
detail.str=""; detail_token.str="";
for(int j=0;j<tempstr.length()-3;++j) for(int j=0;j<tempstr.length()-3;++j)
detail.str+=tempstr[j]; detail_token.str+=tempstr[j];
detail.type=__dynamic_id; detail_token.type=__dynamic_id;
} }
else else
detail.type=__id; detail_token.type=__id;
} }
detail_token.push_back(detail); detail_token_list.push_back(detail_token);
} }
else if(i->type==__token_operator) else if(i->type==__token_operator)
{ {
detail.line=i->line; detail_token.line=i->line;
detail.str =""; detail_token.str ="";
if(i->str=="+") detail.type=__add_operator; if(i->str=="+") detail_token.type=__add_operator;
else if(i->str=="-") detail.type=__sub_operator; else if(i->str=="-") detail_token.type=__sub_operator;
else if(i->str=="*") detail.type=__mul_operator; else if(i->str=="*") detail_token.type=__mul_operator;
else if(i->str=="/") detail.type=__div_operator; else if(i->str=="/") detail_token.type=__div_operator;
else if(i->str=="~") detail.type=__link_operator; else if(i->str=="~") detail_token.type=__link_operator;
else if(i->str=="+=") detail.type=__add_equal; else if(i->str=="+=") detail_token.type=__add_equal;
else if(i->str=="-=") detail.type=__sub_equal; else if(i->str=="-=") detail_token.type=__sub_equal;
else if(i->str=="*=") detail.type=__mul_equal; else if(i->str=="*=") detail_token.type=__mul_equal;
else if(i->str=="/=") detail.type=__div_equal; else if(i->str=="/=") detail_token.type=__div_equal;
else if(i->str=="~=") detail.type=__link_equal; else if(i->str=="~=") detail_token.type=__link_equal;
else if(i->str=="=") detail.type=__equal; else if(i->str=="=") detail_token.type=__equal;
else if(i->str=="==") detail.type=__cmp_equal; else if(i->str=="==") detail_token.type=__cmp_equal;
else if(i->str=="!=") detail.type=__cmp_not_equal; else if(i->str=="!=") detail_token.type=__cmp_not_equal;
else if(i->str=="<") detail.type=__cmp_less; else if(i->str=="<") detail_token.type=__cmp_less;
else if(i->str=="<=") detail.type=__cmp_less_or_equal; else if(i->str=="<=") detail_token.type=__cmp_less_or_equal;
else if(i->str==">") detail.type=__cmp_more; else if(i->str==">") detail_token.type=__cmp_more;
else if(i->str==">=") detail.type=__cmp_more_or_equal; else if(i->str==">=") detail_token.type=__cmp_more_or_equal;
else if(i->str==";") detail.type=__semi; else if(i->str==";") detail_token.type=__semi;
else if(i->str==".") detail.type=__dot; else if(i->str==".") detail_token.type=__dot;
else if(i->str==":") detail.type=__colon; else if(i->str==":") detail_token.type=__colon;
else if(i->str==",") detail.type=__comma; else if(i->str==",") detail_token.type=__comma;
else if(i->str=="?") detail.type=__ques_mark; else if(i->str=="?") detail_token.type=__ques_mark;
else if(i->str=="!") detail.type=__nor_operator; else if(i->str=="!") detail_token.type=__nor_operator;
else if(i->str=="[") detail.type=__left_bracket; else if(i->str=="[") detail_token.type=__left_bracket;
else if(i->str=="]") detail.type=__right_bracket; else if(i->str=="]") detail_token.type=__right_bracket;
else if(i->str=="(") detail.type=__left_curve; else if(i->str=="(") detail_token.type=__left_curve;
else if(i->str==")") detail.type=__right_curve; else if(i->str==")") detail_token.type=__right_curve;
else if(i->str=="{") detail.type=__left_brace; else if(i->str=="{") detail_token.type=__left_brace;
else if(i->str=="}") detail.type=__right_brace; else if(i->str=="}") detail_token.type=__right_brace;
else else
{ {
++error; ++error;
std::cout<<">>[Lexer-error] line "<<detail.line<<": unknown operator \'"<<i->str<<"\'."<<std::endl; std::cout<<">>[Lexer-error] line "<<detail_token.line<<": unknown operator \'"<<i->str<<"\'."<<std::endl;
detail.type=__unknown_operator; detail_token.type=__unknown_operator;
} }
detail_token.push_back(detail); detail_token_list.push_back(detail_token);
} }
} }
std::cout<<">>[Detail-Lexer] complete generating. "<<error<<" error(s)."<<std::endl; std::cout<<">>[Detail-Lexer] complete generating. "<<error<<" error(s)."<<std::endl;
@ -475,9 +478,9 @@ class nasal_lexer
{ {
return error; return error;
} }
std::list<token>& get_detail_token() std::list<token>& get_detail_token_list()
{ {
return detail_token; return detail_token_list;
} }
}; };

View File

@ -4,8 +4,8 @@
class nasal_parse class nasal_parse
{ {
private: private:
std::stack<token> parse; std::stack<token> parse_token_stream;
std::stack<token> checked; std::stack<token> checked_tokens;
token this_token; token this_token;
int error; int error;
int warning; int warning;
@ -28,7 +28,7 @@ class nasal_parse
void nasal_parse::print_detail_token() void nasal_parse::print_detail_token()
{ {
std::stack<token> tmp=parse; std::stack<token> tmp=parse_token_stream;
std::string space=""; std::string space="";
int line=1; int line=1;
std::cout<<line<<"\t"; std::cout<<line<<"\t";
@ -58,31 +58,31 @@ void nasal_parse::print_detail_token()
return; return;
} }
void nasal_parse::get_token_list(std::list<token>& detail_token) void nasal_parse::get_token_list(std::list<token>& detail_token_stream)
{ {
while(!parse.empty()) while(!parse_token_stream.empty())
parse.pop(); parse_token_stream.pop();
while(!checked.empty()) while(!checked_tokens.empty())
checked.pop(); checked_tokens.pop();
// clear stack // clear stack
std::stack<token> tmp; std::stack<token> backward_tmp;
for(std::list<token>::iterator i=detail_token.begin();i!=detail_token.end();++i) for(std::list<token>::iterator i=detail_token_stream.begin();i!=detail_token_stream.end();++i)
tmp.push(*i); backward_tmp.push(*i);
while(!tmp.empty()) while(!backward_tmp.empty())
{ {
parse.push(tmp.top()); parse_token_stream.push(backward_tmp.top());
tmp.pop(); backward_tmp.pop();
} }
return; return;
} }
void nasal_parse::get_token() void nasal_parse::get_token()
{ {
if(!parse.empty()) if(!parse_token_stream.empty())
{ {
this_token=parse.top(); this_token=parse_token_stream.top();
parse.pop(); parse_token_stream.pop();
checked.push(this_token); checked_tokens.push(this_token);
} }
else else
{ {
@ -95,10 +95,10 @@ void nasal_parse::get_token()
void nasal_parse::push_token() void nasal_parse::push_token()
{ {
if(!checked.empty()) if(!checked_tokens.empty())
{ {
parse.push(checked.top()); parse_token_stream.push(checked_tokens.top());
checked.pop(); checked_tokens.pop();
} }
else else
std::cout<<">>[Parse-error] empty checked token stack."<<std::endl; std::cout<<">>[Parse-error] empty checked token stack."<<std::endl;
@ -123,7 +123,7 @@ void nasal_parse::main_generate()
root.set_line(1); root.set_line(1);
root.set_type(__root); root.set_type(__root);
while(!parse.empty()) while(!parse_token_stream.empty())
{ {
get_token(); get_token();
switch(this_token.type) switch(this_token.type)