2016-11-10 67 views
0

我遇到了稍微不同的語法問題,它是帶有單個規則的語法(一個巨大的語法),並且有幾次調用自身。我不知道如何用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個問題:

對不對我該怎麼翻譯語法?

如何解決這個左遞歸錯誤?

獎金問題:學習材料(我已閱讀官方文檔)。

任何幫助,歡迎。

謝謝大家。

回答

0

左保理的 「默認」 方式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;