簡體   English   中英

ANTLR4 C#語法和左遞歸

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM