Bison/Yacc中"$$ = 1"是什么意思?

use*_*306 3 yacc bison

谁能告诉我什么{$$ = 0}或{$$ = 1}或{$$ = $1 +1}野牛/ Yacc的规则操作是什么意思?我知道$$ = $1在野牛中意味着什么.

Sal*_*ina 6

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; }
        ...
;
Run Code Online (Sandbox Code Playgroud)

希望这能解决你的问题和好运,驯服野牛.