[英]ANTLR4 C# grammar and left recursion
我正在嘗試使用ANTLR4(來自Java)解析C#代碼。 到目前為止,我找不到合適的語法,所以我決定寫自己的語法。 我在這里使用了此附錄,但遇到了問題。 問題是我有很多左遞歸規則。 我試圖通過使用ANTLRWorks(antlrworks-1.5)來修復它們,但是我一直在獲取異常。 我能夠手動修復其中一些,但不能修復此類問題:
multiplicative_expression:
| unary_expression
| multiplicative_expression '*' unary_expression
| multiplicative_expression '/' unary_expression
| multiplicative_expression '%' unary_expression;
因此,有沒有人可以指導我采用適合ANTLR4的語法,或幫助我解決左遞歸問題。 謝謝。
ANTLR 4在內部處理直接的左遞歸。 您上面發布的規則將在ANTLR 4中正常運行。
左遞歸規則的形式為A-> Aa | b解決此問題的形式方法是引入一個新的非末端A'並將規則重寫為
A-> bA'
A'-> Epsilon | aA'(其中Epsilon是“空字符串”)
由於ANTLR是LL解析器生成器,因此它無法承受左遞歸。 但是,嚴格遞歸規則在ANTLR中是可以的,因此我們可以將規則編寫為:
multiplicative_expression:
| unary_expression
| unary_expression '*' multiplicative_expression
| unary_expression '/' multiplicative_expression
| unary_expression '%' multiplicative_expression ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.