From 91d61b613e5571f2ab343be33307cab544dc264a Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Thu, 29 Aug 2019 08:34:16 -0500 Subject: [PATCH] Update lexer : char recognition --- version0.7/nasal_lexer.h | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/version0.7/nasal_lexer.h b/version0.7/nasal_lexer.h index 83796ef..b74c6d0 100644 --- a/version0.7/nasal_lexer.h +++ b/version0.7/nasal_lexer.h @@ -6,14 +6,15 @@ #include #include -#define OPERATOR 1 //界符 or 运算符 -#define IDENTIFIER 2 //自定义标识符 -#define NUMBER 3 //数字 -#define RESERVEWORD 4 //关键字 -#define STRING 5 //字符串类型 -#define FAIL -1 //失败 -#define SCANEND -2 //扫描完成 -#define ERRORFOUND -3 //异常错误 +#define OPERATOR 1 //operator +#define IDENTIFIER 2 //id +#define NUMBER 3 //number +#define RESERVEWORD 4 //reserve word +#define STRING 5 //string +#define CHAR 6 //char +#define FAIL -1 //fail +#define SCANEND -2 //complete scanning +#define ERRORFOUND -3 //error occurred std::string reserve_word[15]= { @@ -218,13 +219,27 @@ class nasal_lexer } else if(temp=='(' || temp==')' || temp=='[' || temp==']' || temp=='{' || temp=='}' || temp==',' || temp==';' || temp=='|' || temp==':' || - temp=='?' || temp=='.' || temp=='`' || temp=='\'' || temp=='&'|| + temp=='?' || temp=='.' || temp=='`' || temp=='&'|| temp=='%' || temp=='$' || temp=='^') { __token+=temp; ++ptr; syn=OPERATOR; } + else if(temp=='\'') + { + __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=='~') { syn=OPERATOR; @@ -346,6 +361,8 @@ class nasal_lexer std::cout<<"( ReserveWord | "; else if(temp.type==STRING) std::cout<<"( String | "; + else if(temp.type==CHAR) + std::cout<<"( Char | "; std::cout<