2

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

以下不起作用。该函数使用 0 而不是我期望的'='调用。我可以设置一个选项吗?(通过手册页并没有这样显示)

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

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

4

2 回答 2

3

在这种情况下,$2 的值将是 yylex 函数在返回标记“=”之前放入全局变量 yylval 中的任何值。如果词法分析器没有将任何内容放入 yylval,它可能仍为 0,如您所见。

于 2009-11-22T20:33:43.673 回答
2

我认为你是对的,Bison 只是不那样工作。

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

  • 只需为 声明一个标记=,在您的词法分析器中识别它,然后返回它的语义值,或者......
  • 为它声明一个产品并返回它$$ 或...
  • 在 yylex() 中将 '=' 分配给 yylval
于 2009-11-17T04:32:27.507 回答