有人可以告诉我在Bison / Yacc规则行动中{$$ = 0}
或{$$ = 1}
或{$$ = $1 +1}
的含义吗?我知道在{Bison}中$$ = $1
的含义。
答案 0 :(得分:5)
Bison用于声明语法规则。无论规则之后的括号是什么,它都是当规则适用于某一组令牌时要采取的行动。
另一方面,$$代表在相应规则下创建的分组的语义值。
下面我根据您的问题构建一个简短的示例。第一个表达式声明应该为从NUM派生的int_var赋予分配给NUM的值。
第二个表达式声明如果:int_var后跟一个'='后跟一个'FALSE'字符串,那么int_var标记应该设置为0.然后,当int_token后跟'='并且'TRUE'然后设置为1.
第4条规则规定,如果int_var后跟一个'++'字符串,那么分配给该标记的值应该是找到的int_var的值加1。
以同样的方式,这可以应用于不同算术表达式的规则作为加法:
int_var: NUM { $$ = $1 }
| int_var '=' 'FALSE' { $$ = 0; }
| int_var '=' 'TRUE' { $$ = 1; }
| int_var '++' { $$ = $1 + 1; }
| int_var '+' int_var { $$ = $1 + $3; }
...
;
希望这能解决你的问题并祝你好运驯服Bison。