Update lexer : char recognition
This commit is contained in:
parent
a0126f9537
commit
91d61b613e
|
@ -6,14 +6,15 @@
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#define OPERATOR 1 //界符 or 运算符
|
#define OPERATOR 1 //operator
|
||||||
#define IDENTIFIER 2 //自定义标识符
|
#define IDENTIFIER 2 //id
|
||||||
#define NUMBER 3 //数字
|
#define NUMBER 3 //number
|
||||||
#define RESERVEWORD 4 //关键字
|
#define RESERVEWORD 4 //reserve word
|
||||||
#define STRING 5 //字符串类型
|
#define STRING 5 //string
|
||||||
#define FAIL -1 //失败
|
#define CHAR 6 //char
|
||||||
#define SCANEND -2 //扫描完成
|
#define FAIL -1 //fail
|
||||||
#define ERRORFOUND -3 //异常错误
|
#define SCANEND -2 //complete scanning
|
||||||
|
#define ERRORFOUND -3 //error occurred
|
||||||
|
|
||||||
std::string reserve_word[15]=
|
std::string reserve_word[15]=
|
||||||
{
|
{
|
||||||
|
@ -218,13 +219,27 @@ class nasal_lexer
|
||||||
}
|
}
|
||||||
else if(temp=='(' || temp==')' || temp=='[' || temp==']' || temp=='{' ||
|
else if(temp=='(' || temp==')' || temp=='[' || temp==']' || temp=='{' ||
|
||||||
temp=='}' || temp==',' || temp==';' || temp=='|' || temp==':' ||
|
temp=='}' || temp==',' || temp==';' || temp=='|' || temp==':' ||
|
||||||
temp=='?' || temp=='.' || temp=='`' || temp=='\'' || temp=='&'||
|
temp=='?' || temp=='.' || temp=='`' || temp=='&'||
|
||||||
temp=='%' || temp=='$' || temp=='^')
|
temp=='%' || temp=='$' || temp=='^')
|
||||||
{
|
{
|
||||||
__token+=temp;
|
__token+=temp;
|
||||||
++ptr;
|
++ptr;
|
||||||
syn=OPERATOR;
|
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<<" ."<<std::endl;
|
||||||
|
syn=CHAR;
|
||||||
|
}
|
||||||
else if(temp=='=' || temp=='+' || temp=='-' || temp=='*' || temp=='!' || temp=='/' || temp=='<' || temp=='>' || temp=='~')
|
else if(temp=='=' || temp=='+' || temp=='-' || temp=='*' || temp=='!' || temp=='/' || temp=='<' || temp=='>' || temp=='~')
|
||||||
{
|
{
|
||||||
syn=OPERATOR;
|
syn=OPERATOR;
|
||||||
|
@ -346,6 +361,8 @@ class nasal_lexer
|
||||||
std::cout<<"( ReserveWord | ";
|
std::cout<<"( ReserveWord | ";
|
||||||
else if(temp.type==STRING)
|
else if(temp.type==STRING)
|
||||||
std::cout<<"( String | ";
|
std::cout<<"( String | ";
|
||||||
|
else if(temp.type==CHAR)
|
||||||
|
std::cout<<"( Char | ";
|
||||||
std::cout<<temp.content<<" )"<<std::endl;
|
std::cout<<temp.content<<" )"<<std::endl;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue