什么" $$ = 1"在Bison / Yacc中意味着什么?

时间:2015-07-26 00:01:12

标签: bison yacc

有人可以告诉我在Bison / Yacc规则行动中{$$ = 0}{$$ = 1}{$$ = $1 +1}的含义吗?我知道在{Bison}中$$ = $1的含义。

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。