冲突让我们想象一下我希望能够解析这样的值(每行是一个单独的例子):缩小/减少语法
x
(x)
((((x))))
x = x
(((x))) = x
(x) = ((x))
我写这个YACC语法:
%%
Line: Binding | Expr
Binding: Pattern '=' Expr
Expr: Id | '(' Expr ')'
Pattern: Id | '(' Pattern ')'
Id: 'x'
但我得到一个减少/减少冲突:
$ bison example.y
example.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
任何提示,如何解决呢?我正在使用GNU野牛3.0.2
谢谢,现在很清楚。在真正的语法模式和表达式中相似但不相同(它们在AST中产生不同的节点)。在野牛中启用GLR解析器的确解决了这个问题(我想性能不会很好,但我不在乎这是否简化了语法)。 – tokland 2014-09-08 10:16:33