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



我遇到了一个稍微不同的语法问题,它是一个只有一个规则(一个巨大的规则)的语法,并且有几个调用本身。我不知道如何用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;

错误"此规则调用是递归调用图的一部分"出现在最后一行。

除了这个错误之外,即使是"正确"的语法部分也不能产生正确的结果。

我搜索了错误,但我无法理解这个问题,我仍然是初学者,所以我有2个问题:

我翻译语法正确吗?

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

附加问题:学习材料(我已经阅读了官方文档)。

欢迎任何帮助。

默认的文本左保理方式应该有帮助

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;

相关内容

  • 没有找到相关文章

最新更新