2012-07-22 3 views
0

, 나는 비슷한 있습니다sigil이 참조 용으로 필요하지만 정의 용으로 필요하지 않은 경우 어떻게 상호 참조를 만들 수 있습니까? 내 DSL에서

x = 14 
y = $x + 1 

그래서 요소가 바로 그 이름으로을 정의 입니다,하지만 을 언급 할 때, 몇 가지시길 추가해야합니다. sigil과 이름 사이의 공백은 요소를 참조 할 때 금지됩니다.

Xtext에서이 요소 간의 상호 참조를 허용하면서 어떻게 할 수 있습니까?

이 날 것으로 보인다 때문 I 중 하나를이 두 개의 서로 다른 단말기를 사용할 필요가 - x에 맞게 하나와 다른 하나는 $x에 맞게 -하지만 어떻게 상호 참조 메커니즘이 둘을 연결 것인가? 또는 대안 적으로, 경우에 나는 정의

ElementRef: '$' [Element|ELEMENT_NAME]; 

다음 Xtext가시길 내 DSL의 불법 이름 사이에 공백을 수 있습니다. 나는 "이 시점에서 공백을 허용하지 않음"과 같은 옵션을 사용하는 것이 좋겠지 만, Xtext 문서에서 이와 비슷한 것을 찾을 수 없습니다.

답변

1

상호 참조 토큰에 대한 데이터 형식 규칙을 사용하고 $ 기호를 제거하는 값 변환기를 등록해야합니다.

ElementRef: [Element|ReferenceID]; 
ReferenceID hidden(): '$' ID; 

값 변환기는 토큰에 대한 추상 구문 (ID)과 구체적인 구문 ($ ID) 사이의 변환을 담당합니다. 자세한 내용은 docs을 참조하십시오.

+0

ReferenceID는 터미널 또는 데이터 유형 규칙입니까? 그것은 규칙처럼 보이지만 그 후에는 여백 뒤에 공백을 허용하지 않습니까? – Oak

+0

숨겨진() 절이 사용됩니다. 데이터 유형 규칙 ReferenceID에서 WS 또는 주석 토큰을 ​​금지합니다. –