2017-04-14 40 views
0

我正在將Antlr語法文件升級到最新的Antlr4。將語法文件升級到Antlr4

我已經轉換了大部分的文件,但堅持語法差異,我無法弄清楚。 3這樣的區別是:

equationset: equation* EOF!; 
equation: variable ASSIGN expression -> ^(EQUATION variable expression) 
; 
orExpression 
: andExpression (OR^ andExpression)* 
; 

在第一個錯誤是由於!我不確定是否EOF和EOF!是否相同。刪除!解決了錯誤,但我想確保這是正確的修復。

在第二條規則中, - >和^給出錯誤。我不確定什麼是Antlr4等價物。

在第3條規則中,^給出錯誤。刪除它可以修復錯誤,但是我找不到任何遷移指南來解釋什麼應該與此等效。

可以請你給我這3條規則的Antrl4等價物,並給出一些簡單的解釋是什麼區別?如果您可以參考任何其他資源,我可以找到答案也可以。

在此先感謝。

回答

1

許多ANTLR3語法包含ANTLR4不再支持的語法樹操作(現在我們得到一個分析樹而不是語法樹)。你在這裏看到的就是這個。

  • EOF!表示EOF應該匹配,但不會出現在AST中。既然沒有AST了,你不能改變它,所以刪除感嘆號。
  • 構造-> ^(EQUATION variable expression)重寫由equation規則創建的AST。既然沒有AST,你不能改變它,所以刪除那部分。
  • OR^最終確定OR運算符應該成爲生成的AST的根。因爲沒有AST了...,你現在得到了這一點:-)
+0

在v4中,如果你需要一個AST,你必須自己生成它(這並不壞,我會爭辯它給你更多的自由),我寫了一個如何做到這個[這裏](http://stackoverflow.com/a/29996191/3764814)的例子。 –