2013-03-24 2 views
1

나는 xtext를 배우려고 노력하고 있으며, ANY_OTHER을 (를) 완전히 혼동하고 거의 질문하지 않고있다.ANY_OTHER을 보완 할 수 없다.

내 .xtext 파일에는 하나의 제작물 만 있습니다.

<> 
< > 
<.> 
<....> 
<.. ..> 

하지만 다음 나타납니다 실패 : 나는 '응용 프로그램을 일식'으로이 프로그램을 실행할 때

document: text = '<' ANY_OTHER* '>'; 

, 다음 입력이 제대로 작동

<a> 

오류 외부 입력 'A'기대와 함께 '>'.

1) 왜 ANY_OTHER가 리터럴과 일치하는지 '.' 캐릭터?

나는

나는이 공통 터미널 here의 원래 정의로 믿는
terminal ANY_OTHER: .; 

으로 최우선 ANY_OTHER을 시도했다.

이제 동작이 변경됩니다. 입력 에 대한 오류가 사라졌습니다. 내가

<aa> 

을하려고하면하지만, 오류를 외부 입력 'AA'기대 '>'을 제공합니다.

Q2) 왜 ANY_OTHER를 재정 의하여 동작을 변경합니까?

왜? '.' 'a'와 다르게 취급됩니까? < ..>이 (가) 허용되지만 허용되지는 않습니다.

답변

2

하나의 대답으로 세 가지 질문에 답변 해 드리겠습니다. 왜냐하면 여기에 의미가 있기 때문입니다. 하지 않는 한 수동으로 변경

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals 

처럼

은 기본적으로 문법의 첫 번째 줄이 보인다. 네가 아직도 이렇게 생겼어. 즉, 자신의 문법은 기본적으로 org.eclipse.xtext.common.Terminals를 사용할 것이므로 여러분이 옳다는 것을 의미합니다. ANY_OTHER는 "공통"문법에 지정됩니다.

지정된 규칙에 따르면 : 단일. 한 문자와 일치합니다. 이 규칙에 추가하면 모든 텍스트 문자 및 일부 문자와 일치하는 "공통"문법의 ID 규칙을 찾을 수 있습니다. ID 규칙 자체에 수량이 포함되는 반면 ANY_OTHER 규칙은 하나의 문자 만 일치하는 것이 중요합니다. ANY_OTHER 규칙, 구문 분석 순서 변경을 무시하면 기본적으로 규칙은 이러한 예

A --> 1 instance of ID 
*.* --> 3 instances of ANY_OTHER 
AAA --> 1 instance of ID 
A.A --> 2 instances of ID, 1 instance of ANY_OTHER 

일치합니다 그래서. 이 정보는 설명서에서 찾을 수 있습니다.그 결과 다른 행동이 발생합니다.

A --> 1 instance of ANY_OTHER 
*.* --> 3 instances of ANY_OTHER 
AAA --> 1 instance of ID 
A.A --> 3 instances of ANY_OTHER 

이 정보가 도움이되기를 바랍니다.

관련 문제