簡體   English   中英

Antlr4相互左遞歸錯誤

[英]Antlr4 mutual left recursion error

我為正在創建的迷你語言准備了一個語法,但是在varfunctioncall之間出現了相互左遞歸錯誤

var
: NAME
| var '[' exp ']'
| var '.' var
| functioncall '.' var
;
functioncall
: NAME '(' (exp)? (',' exp)* ')'
| var '.' functioncall
| functioncall '.' functioncall
;

特別是在var : functioncall '.' functioncall var : functioncall '.' functioncallfunctioncall : var '.' functioncall functioncall : var '.' functioncall其基本上對應於somefunction().varinstanceofClass.function()

有什么辦法可以實現?

編輯:語法還應該允許類似var '=' exp ,其中var可以是instance.varfunction().var

Antlr 4(而不是之前的版本)可以按照同一規則處理雙向遞歸。 所以像

expr: expr '+' expr | NUMBER

已驗證。

因此,我們可以添加另一個新規則來抽象一個var或一個函數調用。

value
: var
| functioncall
| value '.' value
;

var
: NAME
| var '[' exp ']'
;

functioncall
: NAME '(' exp? (',' exp)* ')'
;

不僅語法(對人類讀者而言)更易於解析,而且現在您無需相互遞歸。

注意:未經測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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