2016-11-10 5 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; 

오류 가 발생 "이 규칙 호출 재귀 호출 그래프의 일부입니다" 마지막 줄.

이 오류 외에 문법의 "올바른"부분조차도 올바른 결과를 산출하지 못합니다.

나는 오류를 검색하지만 문제, 난 아직 초보자 해요 이해할 수 없었다, 그래서 나는이 개 질문이 :

가 나는 문법을 번역하는 방법 올바른지를?

이 왼쪽 재귀 오류를 해결하는 방법은 무엇입니까?

보너스 질문 : 학습 자료 (공식 문서는 이미 읽었습니다).

어떤 도움을 환영합니다.

감사합니다.

답변

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;