解决词法分析token错误的问题
This commit is contained in:
@@ -252,8 +252,9 @@ int lex_analysis(const char *text,int len){
|
||||
lex.input_len = len;
|
||||
lex_get_next(&lex);
|
||||
lex.current_line_pos = 0;
|
||||
while(in_loop){
|
||||
switch (lex.current_c)
|
||||
while (in_loop) {
|
||||
int _char = lex.current_c;
|
||||
switch (_char)
|
||||
{
|
||||
case 0: {
|
||||
in_loop = 0;
|
||||
@@ -289,7 +290,7 @@ int lex_analysis(const char *text,int len){
|
||||
case ':':
|
||||
{
|
||||
lex_save_char(&lex);
|
||||
lex.token_buff.token = lex.current_c;
|
||||
lex.token_buff.token = _char;
|
||||
lex_save_token(&lex);
|
||||
lex_get_next(&lex);
|
||||
break;
|
||||
@@ -322,7 +323,7 @@ int lex_analysis(const char *text,int len){
|
||||
lex_get_next(&lex);
|
||||
lex.token_buff.token = TOKEN_INC;
|
||||
}else{
|
||||
lex.token_buff.token = lex.current_c;
|
||||
lex.token_buff.token = _char;
|
||||
}
|
||||
lex_save_token(&lex);
|
||||
break;
|
||||
@@ -335,7 +336,7 @@ int lex_analysis(const char *text,int len){
|
||||
lex_get_next(&lex);
|
||||
lex.token_buff.token = TOKEN_DEC;
|
||||
}else{
|
||||
lex.token_buff.token = lex.current_c;
|
||||
lex.token_buff.token = _char;
|
||||
}
|
||||
lex_save_token(&lex);
|
||||
break;
|
||||
@@ -343,15 +344,24 @@ int lex_analysis(const char *text,int len){
|
||||
case '!':
|
||||
case '>':
|
||||
case '<':
|
||||
case '=':{
|
||||
case '=': {
|
||||
lex_save_char(&lex);
|
||||
lex_get_next(&lex);
|
||||
if(lex.current_c=='='){
|
||||
lex_save_char(&lex);
|
||||
lex_get_next(&lex);
|
||||
lex.token_buff.token = TOKEN_EQ;
|
||||
switch (_char)
|
||||
{
|
||||
case '!':lex.token_buff.token = TOKEN_NEQ;break;
|
||||
case '>':lex.token_buff.token = TOKEN_GEQ;break;
|
||||
case '<':lex.token_buff.token = TOKEN_LEQ;break;
|
||||
case '=':lex.token_buff.token = TOKEN_EQ;break;
|
||||
default:
|
||||
DBG_ERR("未知的情况('%c'): 在 %d 行" , lex.current_c , lex.current_line);
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
lex.token_buff.token = lex.current_c;
|
||||
lex.token_buff.token = _char;
|
||||
}
|
||||
lex_save_token(&lex);
|
||||
break;
|
||||
@@ -380,7 +390,7 @@ int lex_analysis(const char *text,int len){
|
||||
int token_len=0;
|
||||
token_def *tlist=lex_cpy_token_list(&lex , &token_len);
|
||||
lex_del_token_list(&lex);
|
||||
par_parser(tlist , token_len);
|
||||
// par_parser(tlist , token_len);
|
||||
mem_free(tlist);
|
||||
DBG_LOG("解析结束.");
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user