衝突讓我們想象一下我希望能夠解析這樣的值(每行是一個單獨的例子):縮小/減少語法
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