bereitete ich eine Grammatik für eine Mini-Sprache, die ich zu schaffen bin, aber ich bin einen gegenseitigen linken Rekursionsfehlers zwischen var
und functioncall
Antlr4 gegenseitige Linksrekursion Fehler
var
: NAME
| var '[' exp ']'
| var '.' var
| functioncall '.' var
;
functioncall
: NAME '(' (exp)? (',' exp)* ')'
| var '.' functioncall
| functioncall '.' functioncall
;
speziell auf var : functioncall '.' functioncall
und functioncall : var '.' functioncall
bekommen, die grundsätzlich zu somefunction().var
entspricht und instanceofClass.function()
.
Gibt es eine Möglichkeit, dies zu erreichen?
Edit: Grammatik sollte auch so etwas wie var '=' exp
ermöglichen, wo var instance.var
oder function().var
sein kann
Diese Grammatik funktioniert in den meisten Fällen außer einem. Die Sprache soll auch einen einfachen Funktionsaufruf ermöglichen, d. H. Eine Zeile, die einfach einen Funktionsaufruf enthält. Aber es ist nicht erlaubt, eine Variable in einer einzelnen Zeile zuzulassen, d.h. eine Zeile, die nur 'instance.function() 'enthält, ist gültig, aber' variable 'ist nicht gültig. Früher habe ich dies zugelassen, indem ich keine einzelne Variable in einer Zeile zugelassen habe. Irgendein Weg, dies zu erreichen? – Crimson7
@Nick_McCoy verbessern Sie einfach die 'value: var' Regel um die notwendige Syntax hinzuzufügen, wie' value: var '.' Wert ". – Mephy
das wird nicht so etwas wie var '=' exp erlauben. Lies auch meinen bearbeiteten Kommentar – Crimson7