左递归调用错误和文法翻译

Left recursive call error and translation of grammars

我在使用稍微不同的语法时遇到了问题,它是一种具有单一规则(巨大规则)并多次调用自身的语法。我不知道如何使用 Xtext 来表示这种语法,它是一种学术工作,一种指定要求的语言。从文章中得到的原始语法是:

我失败的尝试如下所示:

Relax:
root+=General+;

//nao tinha o tipo boleano  
terminal BOOLEAN returns ecore::EBoolean: 
    'true'|'false'
;

General:
    root+=BOOLEAN|STRING|ShallOperator|MayOperator|EventuallyOperator|UntilOperator|BeforeOperator|AfterOperator|InOperator;


ShallOperator:
    'shall' elements=General;


MayOperator:
    "may" action1=General 'or' action2=General;

EventuallyOperator:
    'eventually' element=General;

UntilOperator:
//  {General.left=current}'&' right=General;
//  ({General.left=current}) 'until' element2=General;
left=General 'until' right=General;

最后一行出现错误"this rule call is part of a recursive call graph"

除了这个错误,甚至语法的 "correct" 部分也不会产生正确的结果。

我搜索了错误,但我无法理解问题所在,我还是初学者,所以我有两个问题:

我翻译的语法正确吗?

如何解决这个左递归错误?

加分题:学习资料(我已经在看官方文档了)

欢迎任何帮助。

谢谢大家

左因子分解的 "default" xtext 方法应该有所帮助

Relax:
root+=General+;

terminal BOOLEAN returns ecore::EBoolean:
'true'|'false'
;

General:

root=Rest =>({UntilOperator.left=current}'until' right=General)*;

Rest:
Primitive|ShallOperator|MayOperator|EventuallyOperator
;

Primitive:
BooleanValue | StringValue
;

BooleanValue:
value=BOOLEAN
;

StringValue:
value=STRING
;


ShallOperator:
'shall' elements=General;

MayOperator:
"may" action1=General 'or' action2=General;

EventuallyOperator:
'eventually' element=General;