以下是我的规则,当我用'='替换$ 2时,我的代码有效。我知道默认情况下所有文字标记都使用它们的ascii值(因此多字符标记需要定义的原因)
以下不起作用。该函数调用0而不是'=',就像我期望的那样。我可以设置一个选项吗? (通过手册页不会出现这种情况)
AssignExpr: var '=' rval { $$ = func($1, $2, $3); }
在另一段代码中我有MathOp: '=' | '+' | '%' ...
因此我感兴趣的原因。
答案 0 :(得分:3)
此上下文中$ 2的值将是yylex函数在返回标记'='之前放入全局变量yylval的任何值。如果词法分析器没有将任何东西放入yylval中,那么它可能仍然是0,正如你所看到的那样。
答案 1 :(得分:2)
我认为你是对的,Bison不会这样做。
当然,您可以轻松修复它:
=
声明一个标记,在你的词法分析器中识别它,然后返回它的语义值,或者...... $$
返回
或...