Bison中的变量与Flex返回的变量不同

时间:2014-12-13 22:29:40

标签: bison flex-lexer

相关的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 xReturning y

野牛打印:$1 is 'x;'$1 is 'y+';

为什么附加';'而'+'到$ 1?

谢谢

1 个答案:

答案 0 :(得分:1)

在'flex'中,yytext在flex动作本身期间只是一个有效的以null结尾的字符串指针。您需要复制到yylval.name,通常使用strdup(),,并确保在相应的yacc操作中发布。