关于.y(yacc - bison)文件的语法,我已经定义了以下规则:
C:E | D | F |甲
答:B | B' [' C']' ;
(这类似于B,可选[C]) 当我使用适当的lexer文件以适当的方式编译.y文件时,我得到以下shift \ reduce冲突:
国家48
74 A:B。
75 | B。 ' [' C']'
' ['转移,并转到州91 ' [' [减少使用规则74(A)]
$ default使用规则74(A)减少
我的问题如下,如果它有前任' ['我想让它转移而不是减少。问题是我在文档上搜索了几个小时,找不到这个错误的解决方案。 我该如何解决这个问题(请特定于代码)。
答案 0 :(得分:1)
问题在于,有一些上下文A
可能后面跟[
。没有看到更多的语法,就不可能更精确。
然而,值得注意的是,野牛/ yacc将完全按照你的意愿行事:解决冲突,转而支持这种转变。所以除了警告之外,一切都应该没问题。
答案 1 :(得分:0)
如果您尝试展开A规则,则会获得两种可能的状态
州1:
A -> B
州2:
A -> B
A -> BC
A的所有可能状态如下
A -> B (State 1)
A -> B (State 2)
A -> BC
Bison无法确定您是否在B输入的状态1或2中。
您可以替换A规则(假设B和C是令牌):
A: B | B C