2011-01-18 3 views
3

나는 statemachines를 설명하는 Xtext 문법을 가지고, 나는 이전에 선언 된 이벤트에 대한 참조를 사용하여 상태 전환을 설명하기 위해 한 : 나는 편집기를 생성하는 MWE를 사용하는 경우Xtext/Xpand에서 동일한 요소 이름을 통해 참조 또는 터미널에 액세스 할 수있게 만드시겠습니까?

Event: 
'event' name=ID 
; 

State: 
'state' name=ID 
; 

Transition: 
event=[Event] '=>' state=[State] 
    ; 

, 그것은 참조의 존재를 확인한다 항목. 예를 들어, 필요

init => idle 

를 작성하는이 :

event init 
state idle 

하는 BTW 내가 각 상태 기위한 하나 개의 파일을 사용하고있는 코드 (의 다른 곳에 존재, 그래서 동일한 파일에 있어야하는 방법). 이건 정말 잘 작동

«FOREACH statemachine.transitions.event AS event-» // you get the idea 

, 나는 꽤 오랫동안 그것을 사용하고있다 : 내 된 Xpand 코드 템플릿, 나는 변화의 요소로 이벤트 및 상태에 액세스 할 수 있습니다.

그러나

이벤트의 수를 내 statemachines 모두에 공통적 인 ( init, show, hide, finish 등을 몇), 내가 이벤트를 내가 사용하는 방법을 참조 할 중 하나를 할 수 있도록하려면 이후에, 또는 모든 파일에서 이벤트를 선언 할 필요없이 위의 이벤트 이름 중 하나를 입력하십시오.
Transition: 
event=([Event] | ('init'|'show'|'hide'|'finish')) '=>' state=[State] 
    ; 

그래서 내가 말한 키워드 중 하나입니다 터미널 EventID 정의하기로 결정 :

그러나 나는이 작업을 수행 할 수 없습니다

terminal EventID: 
    'init'|'show'|'hide'|'finish' 
    ; 

을 그러나 나는 또한이 작업을 수행 할 수 없습니다 :

Transition: 
event=([Event] | EventID) '=>' state=[State] 
    ; 

그럼 결합 된 규칙을 만들려고했는데 :

CustomEvent: 
    'event' name=ID 
    ; 

BaseEvent: 
    name=EventID 
    ; 

Event: 
    CustomEvent | BaseEvent 
    ; 

Transition: 
    event=[Event] '=>' state=[State] 
    ; 

역시 작동하지 않았습니다.

Transition: 
    (event=[Event] | baseevent=EventID) '=>' state=[State] 
    ; 

이 작동하지만, 나는 이벤트와 baseevents 모두 찾기 위해 내 모든 템플릿을 변경해야합니다 :

는 지금 내가 해결 정착하기로 결정했습니다.

전혀 내가 중 하나 참조 또는 동일한 요소 이름을 사용할 수있는 방법이 있나요 : 나는 실현

, 이것은 텍스트의 꽤 많은입니다 ... 그래서 마지막으로, 여기 내 질문 와 EventID?

답변

1

원래 문제는 다음과 같습니다. 여러 파일에서 자신을 반복하고 싶지 않습니다. 우리는 당신이 당신의 일반적인 상태를 정의하는 표준 파일을하지 않고 여기에 설명 된 import 문을 그 상태를 가져옵니다 : 내가이 문제를 해결하기 위해 다른 접근 방식을 제안 http://www.eclipse.org/Xtext/documentation/1_0_1/xtext.html#syntax

+0

문제는 표준 이벤트보다는이다 주 (거의 표준이 아니다), 그러나 나는 당신이 의미하는 것을 본다. 한편, 모든 이벤트 목록에 명시 적 및 암시 적 이벤트 이름을 모두 포함하는 내 Xpand 템플릿의 확장을 만들었습니다. 이벤트 /베이스 이벤트 쌍으로 페어링하는 것처럼 보입니다. 그러나 귀하의 제안을 살펴보고 현재 솔루션을 정리하는 데 도움이되는지 확인하겠습니다. 너에게 다시 돌아갈 게! – weltraumpirat

+0

좋아요, 내가 링크 된 문서의 부분을 살펴 보았습니다. 그러나 이것이 내 문제를 어떻게 해결할 수 있는지 보지 못했습니다 :'events + = [Event]'를 사용하면, 나는 이벤트 참조를 암시합니다 이미 존재하는 이벤트. 즉, 생성 된 편집기 (더 이상 Xtext!)에서 먼저 이벤트를 지정해야합니다.이 이벤트는 나중에 이름으로 참조 할 수 있습니다. 편집기 (및 MWEReader)는 이벤트가 발견되지 않으면 오류가 있는지 여부를 확인합니다. 이제이 기능을 사용할 수 있기를 원하거나 몇 가지 공통 ID 중 하나를 입력해야합니다.이 ID도 확인해야합니다. – weltraumpirat

+0

간단히 말해서 : 내가 올바르게 이해한다면, 당신이 제안한 해결책은 원래의 Xtext 문법에서는 작동하지만 생성 된 언어와 편집기에서는 작동하지 않는다. – weltraumpirat