【发布时间】:2020-06-03 20:44:58
【问题描述】:
我正在编写一个 lex 程序。我已经初始化了 3 个字符指针。然后,如果它们满足标准,我将它们定义为令牌。但是当我之后打印它们时,第一个打印所有 3 的值,最后两个的第二个和它自己的最后一个。为什么会这样?这是我的代码:
%{
#include<stdio.h>
#include<string.h>
int for_cond = 0;
char *cond1, *cond2, *cond3;
char * for_body = "";
//char * loop = "";
%}
VAR [a-zA-Z_]+[a-zA-Z0-9_]*
%%
for[ ]*\( {for_cond++;}
int[ ]+{VAR}[ ]*\=[ ]*[0-9]+ {if(for_cond==1){cond1 = yytext;}else if(for_cond==4){for_body = strcat(for_body,yytext);}}
; {if(for_cond==1||for_cond==2){for_cond++;} else if(for_cond==4){for_body = strcat(for_body,yytext);}}
{VAR}[ ]*(\<|\>|\<\=|\>\=|\=\=)[ ]*[0-9]+ {if(for_cond==2){cond2 = yytext;}else if(for_cond==4){for_body = strcat(for_body,yytext);}}
{VAR}[ ]*((\+\+|\-\-)|((\+\=|\-\=|\*\=|\/\=)[ ]*({VAR}|[0-9]+))) {if(for_cond==3){cond3 = yytext;}else if(for_cond==4){for_body = strcat(for_body,yytext);}}
%%
int yywrap(void){}
int main(){
yylex();
printf("cond1 = %s\ncond2 = %s\ncond3 = %s\n", cond1, cond2, cond3);
return 0;
}
示例输入:
for(int i=0;i<=2;i++)
预期输出:
cond1 = int i=0
cond2 = i<=2
cond3 = i++
我得到了什么:
cond1 = int i=0;i<=2;i++)
cond2 = i<=2;i++)
cond3 = i++)
为什么会这样?我该如何解决这个问题?
【问题讨论】:
-
你能把代码分成多行,正常缩进,以便我们更容易阅读吗?
标签: c string pointers lex char-pointer