0
我遇到了Xtext中的递归规则问题。简化版本如下:Xtext的左递归规则
grammar my.mavenized.HeroLanguage with org.eclipse.xtext.common.Terminals
generate heroLanguage "http://www.mavenized.my/HeroLanguage"
Atomic:
Map |
FunctionCall |
value=ID;
Map:
'map' '{'
(entries+=MapEntry)+
'}';
MapEntry:
'(' key=Atomic ')' '=>' value=Atomic;
FunctionCall:
name=ID '(' arg=Atomic ')';
而且的Xtext给了我此错误消息:
[fatal] rule ruleAtomic has non-LL(*) decision due to recursive rule invocations reachable from alts 2,3. Resolve by left-factoring or using syntactic predicates or using backtrack=true option.
但我找不到左递归问题。 Xtext中是否存在关于左递归的隐式规则?
谢谢。
我试图添加一个谓词作为你的建议,但它仍然会引发递归的致命警告。我认为'FunctionCall'的第二部分作为'MapEntry'的末尾不能被视为下一个开始,因为那样下一个密钥令牌不能被消费。一个例子就像'map {(a)=> f(b)(c)=> d}'。 –