2011-04-22 90 views
1

我有此規則在ANTLR:ANTLR的:相互左遞歸規則

anREs : anRE 
     | ('(' anREs ')') => '(' anREs ')' 
     | (anREs '|' anREs) => anREs '|' anREs ; 

其中ANRE是正則表達式,當我要編譯的規則文件我有此錯誤消息由於在第三替代最後一個規則:

錯誤(210):的 規則下列集是相互左遞歸 [anREs]

我怎麼可以重新寫這個規則?

感謝

+0

@巴特煮布鍋感謝您的幫助,你是對的,我可以通過刪除這一替代解決這個問題,但我需要它,我不能使用PCRE,因爲我需要在我的規則中實現特殊功能。 – Radi 2011-04-22 18:58:43

回答

2

這裏是你的左遞歸:

... | (anREs '|' anREs) => anREs '|' anREs ; 

更糟的是,它的曖昧。如果你有一個REs_1 | anREs_2 | anREs3作爲輸入, 目前尚不清楚子項的哪些子項|運營商是。

我預計這個解決問題,化解歧義,太:

... | (anRE '|' anREs) => anRE '|' anREs ; 
+0

好的,但是這個規則不能匹配這個輸入:(anRE)| anRES – Radi 2011-04-23 09:26:29

+0

爲什麼不能?你有'('anREs')'和一個RE派生到一個RE。你真的嘗試過嗎? – 2011-04-23 09:44:16