相关的Flex部分:
[A-Za-z][A-Za-z]* {yylval.name=yytext;printf ("Returning %s \n" ,yytext);return tID;}
相关的野牛部分:
Expr: tINTNUM
|tREALNUM
|tFALSE
|tTRUE
|tID {printf("$1 is '%s' ",$1);}
我的意见:
int x; int y; begin x = 72; y=79; x=y + x; end
它解析得很好但我的问题是:
Flex打印:Returning x
和Returning y
野牛打印:$1 is 'x;'
和$1 is 'y+'
;
为什么附加';'而'+'到$ 1?
谢谢
答案 0 :(得分:1)
在'flex'中,yytext
在flex动作本身期间只是一个有效的以null结尾的字符串指针。您需要将复制到yylval.name
,通常使用strdup(),
,并确保在相应的yacc
操作中发布。