0

在 .y (yacc -- bison) 文件的语法上,我定义了以下规则:

C : E | D | F | 一个

甲:乙| B'['C']';

(这类似于带有可选 [C] 的 B)当我使用适当的词法分析器文件以适当的方式编译 .y 文件时,我得到以下 shift\reduce 冲突:

状态 48
74 A:B。
75 | 乙。'[' C ']'
'[' shift, and go to state 91
'[' [reduce using rule 74 (A)]
$default reduce using rule 74 (A)

如果它有前任'[',我的问题如下,我希望它转移而不是减少。问题是我在文档中搜索数小时时找不到此错误的解决方案。我该如何解决这个问题(请特定于代码)。

4

2 回答 2

1

问题是在某些情况下,anA后面可能跟着 a [。没有看到更多的语法,就不可能更精确。

但是,值得注意的是,bison/yacc 将完全按照您的意愿行事:解决冲突以支持转变。因此,除了警告之外,一切都应该没问题。

于 2016-03-25T22:24:47.903 回答
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
于 2016-03-27T23:30:33.827 回答