Bison / Yacc,make literal token返回自己的值?

时间:2009-11-16 13:34:55

标签: yacc bison token

以下是我的规则,当我用'='替换$ 2时,我的代码有效。我知道默认情况下所有文字标记都使用它们的ascii值(因此多字符标记需要定义的原因)

以下不起作用。该函数调用0而不是'=',就像我期望的那样。我可以设置一个选项吗? (通过手册页不会出现这种情况)

AssignExpr: var '=' rval            { $$ = func($1, $2, $3); } 

在另一段代码中我有MathOp: '=' | '+' | '%' ...因此我感兴趣的原因。

2 个答案:

答案 0 :(得分:3)

此上下文中$ 2的值将是yylex函数在返回标记'='之前放入全局变量yylval的任何值。如果词法分析器没有将任何东西放入yylval中,那么它可能仍然是0,正如你所看到的那样。

答案 1 :(得分:2)

我认为你是对的,Bison不会这样做。

当然,您可以轻松修复它:

  • 只需为=声明一个标记,在你的词法分析器中识别它,然后返回它的语义值,或者......
  • 为其声明制作并使用$$返回 或...
  • 在yylex()
  • 中将'='分配给yylval