什么是北美野牛?

Amu*_*umu 3 c++ parsing bison

在第2.1.2关于rpcalc的语法规则的野牛手册中,写道:

在每个操作中,伪变量$$代表规则将要构造的分组的语义值.为$$分配值是大多数操作的主要工作

这是否意味着$$用于保存规则的结果?喜欢:

exp exp '+'   { $$ = $1 + $2;      }
Run Code Online (Sandbox Code Playgroud)

什么是$$开始分配后的典型用法?

Kon*_*lph 5

这是否意味着$$用于保存规则的结果?喜欢:

是的。

$$开始分配后的典型用法是什么?

通常,您将不再需要该值。Bison 在内部使用它来传播值。在您的示例中,$1$2是两个exp产生式的各自语义值,也就是说,它们的值是exp通过设置 $$变量在语义规则中的某处设置


Jer*_*fin 5

是的,$$用于保存规则的结果.在被分配之后,它通常变成$x一些更高级别(或更低优先级)的规则.

考虑(例如)输入之类的2 * 3 + 4.假设你遵循正常的优先规则,你会有一个类似的动作:{ $$ = $1 * $3; }.在这种情况下,这将用于该2 * 3部分,显然足够,分配6$$.然后你就可以{ $$ = $1 + $3; }处理这个添加了.对于此操作,$1将为6您提供$$在乘法规则中指定的值.