解决词法分析token错误的问题

This commit is contained in:
ranchuan
2024-11-28 19:11:39 +08:00
parent c9874d1eaa
commit 4b2011f336
4 changed files with 89 additions and 14 deletions

View File

@@ -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;