我可以編寫一個用於在ANTLR中傳遞順序過程(CSP)的解析器嗎?我覺得它使用左遞歸就像在聲明中可以使用ANTLR生成CSP(通信順序進程)解析器嗎?
VMS = (coin → (choc → VMS))
完整的語言規範,可以在CSPM : A Reference Manua 找到,所以它不是一個LL語法。我對嗎?
我可以編寫一個用於在ANTLR中傳遞順序過程(CSP)的解析器嗎?我覺得它使用左遞歸就像在聲明中可以使用ANTLR生成CSP(通信順序進程)解析器嗎?
VMS = (coin → (choc → VMS))
完整的語言規範,可以在CSPM : A Reference Manua 找到,所以它不是一個LL語法。我對嗎?
一般來說,即使您有一個帶有左遞歸的語法,您也可以重構語法以將其刪除。所以ANTLR相當有可能能夠處理你的語法。沒有先驗理由,您不能爲ANTLR編寫CSP語法。
你有沒有合適的是另一個問題。
如果您引用的短語是語法規則,則它沒有左遞歸。 (如果是這樣,我不明白你的語法規則的語法,特別是爲什麼括號[終端?]會不平衡;這是非單向的。) 因此,ANTLR應該能夠處理它,模轉換爲ANTRL語法規則語法。
你沒有顯示其餘的語法,所以你不能對它的其餘部分有意見。
在上面的情況下沒有左遞歸。它看起來像。注意這是一個簡化的版本,CSP要複雜得多。我只是表明它是可能的。
assignment : PROCNAME EQ process
;
process : LPAREN EVENT ARROW process RPAREN
| PROCNAME
;
此外,你可以用ANTLRWorks'去除左遞歸'函數來分解左遞歸。
雖然_'Remove Left Recursion'_功能只適用於最瑣碎的情況:我從來沒有見過它正常工作。最好只是自己動手。 – 2011-03-19 08:11:15
謝謝你的回答。我已經編輯了問題到廣告鏈接到語言參考,我解析的語言。 – 2011-03-19 02:50:12
如果您瞭解左遞歸,您應該很容易自己檢查語法。 – 2011-03-19 02:54:43
...如果您閱讀了語言參考手冊,作者甚至會說您可以在C++中獲得一個免費的,實現的解析器來構建AST。我會從那裏開始;如果沒有別的,它會有一個完整的,經過測試的語法。 – 2011-03-19 11:10:02