From 493b09acfed0de7d73a1bb4d5836e163389546ef Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Thu, 5 Sep 2019 20:43:36 +0800 Subject: [PATCH] Update --- version0.11/nasal_lexer.h | 92 +++++++++++++++----------------------- version0.11/nasal_parser.h | 34 ++++++-------- 2 files changed, 49 insertions(+), 77 deletions(-) diff --git a/version0.11/nasal_lexer.h b/version0.11/nasal_lexer.h index d2e0958..40dd597 100644 --- a/version0.11/nasal_lexer.h +++ b/version0.11/nasal_lexer.h @@ -11,14 +11,7 @@ #define NUMBER 3 // number #define RESERVEWORD 4 // reserve word #define STRING 5 // string -#define CHAR 6 // char -#define CALL_LIST 7 // id[ -#define CALL_FUNC 8 // id( -#define FUNC_HEAD 9 // func( -#define DYNAMIC_ID 10 // id... -#define IF_HEAD 11 // if ( -#define ELSIF_HEAD 12 // elsif ( -#define WHILE_HEAD 13 // while ( +#define DYNAMIC_ID 6 // id... #define FAIL -1 //fail #define SCANEND -2 //complete scanning #define ERRORFOUND -3 //error occurred @@ -176,33 +169,11 @@ class nasal_lexer syn=IDENTIFIER; else syn=RESERVEWORD; - if((syn==IDENTIFIER) && ((source[ptr]=='(') || (source[ptr]=='[') || (source[ptr]=='.' && source[ptr+1]=='.' && source[ptr+2]=='.'))) + if((syn==IDENTIFIER) && source[ptr]=='.' && source[ptr+1]=='.' && source[ptr+2]=='.') { - __token+=source[ptr]; - if(source[ptr]=='(') - syn=CALL_FUNC; - else if(source[ptr]=='[') - syn=CALL_LIST; - else if(source[ptr]=='.' && source[ptr+1]=='.' && source[ptr+2]=='.') - { - __token+=".."; - syn=DYNAMIC_ID; - ptr+=2; - } - ++ptr; - } - else if((syn==RESERVEWORD) && ((__token=="func") || (__token=="if") || (__token=="elsif") || (__token=="while")) && (source[ptr]=='(')) - { - if(__token=="func") - syn=FUNC_HEAD; - else if(__token=="if") - syn=IF_HEAD; - else if(__token=="elsif") - syn=ELSIF_HEAD; - else if(__token=="while") - syn=WHILE_HEAD; - __token+=source[ptr]; - ++ptr; + __token+="..."; + syn=DYNAMIC_ID; + ptr+=3; } } else if(isNumber(temp)) @@ -263,17 +234,40 @@ class nasal_lexer } else if(temp=='\'') { + syn=STRING; __token+=temp; ++ptr; temp=source[ptr]; - __token+=temp; - ++ptr; - temp=source[ptr]; - __token+=temp; - ++ptr; - if(temp!='\'') - std::cout<<">>[Lexer] Abnormal char type detected: "<<__token<<" ."<' || temp=='~') { @@ -396,22 +390,8 @@ class nasal_lexer std::cout<<"( ReserveWord | "; else if(temp.type==STRING) std::cout<<"( String | "; - else if(temp.type==CHAR) - std::cout<<"( Char | "; - else if(temp.type==CALL_LIST) - std::cout<<"( Call list head | "; - else if(temp.type==CALL_FUNC) - std::cout<<"( Call func head | "; - else if(temp.type==FUNC_HEAD) - std::cout<<"( Func head | "; else if(temp.type==DYNAMIC_ID) std::cout<<"( Identifier | "; - else if(temp.type==IF_HEAD) - std::cout<<"( If head | "; - else if(temp.type==ELSIF_HEAD) - std::cout<<"( Elsif head | "; - else if(temp.type==WHILE_HEAD) - std::cout<<"( While head | "; std::cout< >= __and_operator,__or_operator,__nor_operator,// and or ! - __add_operator,__sub_operator,__mul_operator,__div_operator,__link_operator,// + - * / ~ - __add_equal,__sub_equal,__mul_equal,__div_equal,__link_equal,// += -= *= /= ~= + __add_operator,__sub_operator,// + - + __mul_operator,__div_operator,__link_operator,// * / ~ + __add_equal,__sub_equal,// += -= + __mul_equal,__div_equal,__link_equal,// *= /= ~= __left_brace,__right_brace,// {} __left_bracket,__right_bracket,// [] __left_curve,__right_curve,// () - __semi,// ; - __comma,// , - __colon,// : - __dot,// . - __var, - __func, - __id,__dynamic_id, - __return, + __semi,__comma,__colon,__dot,// ; , : . + + __var,__func,__return, __if,__elsif,__else, - __continue,__break,__for,__forindex,__foreach,__while, + __id,__dynamic_id, + __continue,__break, + __for,__forindex,__foreach,__while, //end of operators & reserve words __two_operator, __scalar,__data_list, - __number,__string,__char, + __number,__string, __list, __hash, __hash_member,__hash_member_list, @@ -81,7 +79,6 @@ cmp_seq par[]= {{__number},__scalar}, {{__string},__scalar}, - {{__char},__scalar}, {{__calculation},__scalar}, {{__call_list},__call}, @@ -442,9 +439,6 @@ void print_token(int type) case __string: context="string"; break; - case __char: - context="char"; - break; case __continue: context="continue"; break; @@ -818,14 +812,12 @@ class nasal_parser else if((*i).content==".") temp_parse.type=__dot; } - else if(((*i).type==NUMBER) || ((*i).type==STRING) || ((*i).type==CHAR)) + else if(((*i).type==NUMBER) || ((*i).type==STRING)) { if((*i).type==NUMBER) temp_parse.type=__number; else if((*i).type==STRING) temp_parse.type=__string; - else if((*i).type==CHAR) - temp_parse.type=__char; } else if(((*i).content=="+") || ((*i).content=="-") || ((*i).content=="*") || ((*i).content=="/") || ((*i).content=="~") || ((*i).content=="!")) {