2016-11-25 158 views
0

使用ANTLR 4.6,2016年11月23日的快照。從左遞歸規則中去除相互左遞歸

我有兩個規則,每個是左遞歸。我擴展了幾個替代方法來公開左遞歸。 ANTLR4處理這個問題,因爲左遞歸是明確的。但是,這兩條規則也是相互左遞歸的。

如何解決相互左遞歸,並這樣做,使規則不是一團糟?現在我有很好的評論,展示了擴展的內容,並將其移至primary2和constant_primary2中,這些參數並不涉及相互左遞歸。

constant_primary : 
    constant_primary2 
    | primary '.' method_call_body 
    | constant_primary '\'' '(' constant_expr ')' 
    ; 

primary : 
    primary2 
    | primary '.' method_call_body 
    | constant_primary '\'' '(' expr ')' 
    ; 

回答

1

一種選擇是切換到使用ANTLR 4,它是可用的through Maven使用組ID com.tunnelvisionlabsmy fork。這個分支處理相互左遞歸,同時生成與您在語法中實際寫入的表單相匹配的分析樹。

請注意,此功能有些實驗性。如果遇到問題,請隨時在問題跟蹤器上爲我的分支發佈問題。