左递归调用错误和文法翻译
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;
我在使用稍微不同的语法时遇到了问题,它是一种具有单一规则(巨大规则)并多次调用自身的语法。我不知道如何使用 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;