野牛,在规则开始时的行动

时间:2013-05-14 21:23:17

标签: bison

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

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

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

能够省略动作会很棒,因为它会导致一些不会出现的转移/减少冲突。

1 个答案:

答案 0 :(得分:1)

此代码复制值堆栈的顶部值(为此规则创建重复的$1),因此有可能它是不必要的 - 如果使用任何重复值的所有代码都可以更改为使用未重复的值,如果没有代码尝试修改堆栈上的值(可能,但很少见,并认为非常差的样式)。

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