我有下面的引擎蓋下使用ANTLR3的XText語法。在我的語法中,我想支持像TYPE(EXPRESSION)
和(TYPE)(EXPRESSION)
這樣的表演表達式。類型定義通常包含其他類型(我認爲這是問題,但我不能改變這個要求)。除此之外,我還希望允許表達式的括號。如何解決Antlr3中的遞歸規則調用?
是否有可能通過左分解來解決遞歸?我總是收到以下錯誤消息。
[致命的]規則ruleExpression由於從alts 1,2到達的遞歸規則調用而具有非LL(*)決策。通過左分解或使用語法謂詞或使用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它是XText,它使用底層的ANTLR3 –