1

我正在尝试为 C 语言的子集构建语法。在我的一些规则中,我有以下内容(pNode作为在 中定义的指针union):

rule : { $<pNode>$ = $<pNode>0; } the rest

但是,在阅读 Bison 文档后,似乎可以省略该操作,因为$<pNode>0已经引用了堆栈中的前一个符号。我对吗?

能够省略该操作会很棒,因为它会导致一些原本不会出现的移位/减少冲突。

4

1 回答 1

1

此代码复制了值堆栈上的顶部值($1为此规则制作副本),因此它可能是不必要的 - 如果可以将使用任何一个重复值的所有代码更改为使用未重复值,并且如果没有代码尝试修改堆栈上的值(可能,但很少见并且被认为是非常糟糕的风格)。

问题可能出现在行动中the rest——如果他们提到$0$-1那么你可能会遇到问题。如果他们只引用$0(并且不修改它),您可能可以删除该操作。

于 2013-05-14T22:21:15.590 回答