Ich habe die folgende XText-Grammatik, die ANTLR3 unter der Haube verwendet. In meiner Grammatik möchte ich Cast-Ausdrücke wie TYPE(EXPRESSION)
und (TYPE)(EXPRESSION)
unterstützen. Eine Typdefinition enthält normalerweise andere Typen (ich denke, das ist das Problem, aber ich kann diese Anforderung nicht ändern). Außerdem möchte ich Klammern um Ausdrücke erlauben.Wie rekursive Regelaufruf in Antlr3 zu beheben?
Ist es möglich, die Rekursion durch Links-Factoring zu lösen? Ich bekomme immer die folgende Fehlermeldung.
[fatal] Regel ruleExpression hat nicht-LL (*) Entscheidung aufgrund rekursiver Regelaufrufe von alts 1,2 erreichbar. Auflösen durch Links-Factoring oder Verwenden von syntaktischen Prädikaten oder Verwenden der Option backtrack = true.
Model:
e=Expression;
Expression:
e=castExpression | e=parExpression | "VAR";
castExpression:
(Type | '(' Type ')') e=parExpression;
parExpression:
'(' Expression ')';
Type:
"MYTYPE" t=Type | "TYPE_ID";
@LucasTrzesniewski es ist XText, die ANTLR3 unter der Haube verwendet –