2013-02-18 58 views
1

我試圖用Beaver來解析包含reduce/reduce衝突的語法。預計衝突。其他解析器生成器支持說類似%expect 0 1來指定預期會出現一個reduce/reduce衝突,但Beaver似乎不支持這種情況。我如何告訴海狸忽略已知的減少/減少衝突並生成解析器?如何告訴海狸忽略減少/減少衝突?

回答

2

Beaver can't do that,但您可以使用%left,%right或%nonassoc指令來定義關聯性和優先級規則。

我認爲你不在意在發生衝突時執行哪種reduce(或者因爲分析樹是相同的,或者因爲它們對於你的目的是相同的)。因此,您應該無所謂其中優先級您定義,只是您定義足夠優先。

假設衝突在操作員OP1和OP2之間,那麼以下指令將解決您的衝突。

%nonassoc OP1; 
%nonassoc OP2; 

然而,如果衝突是二扣規則之間使用相同的運營商(OP),那麼你需要或者

%left OP; 

%right OP;