2012-01-13 2 views
1

하나의 요소가 공통 터미널 규칙 ID에 대한 완벽한 후보인 규칙을 정의하려고합니다. 나는 샘플 코드를 테스트 할 수있는 편집기를 시작하면 ID 규칙은 문자열 "ABC"를 일치하지 않습니다 :터미널 규칙 ID가 유효한 값과 일치하지 않습니다.

Define : ABC : Holder_1 

내가 "기대 일치하지 않는 입력 'ABC'RULE_ID"를 얻을.

ID 규칙과 문법적으로 충돌하여이 오류가 발생합니까?

grammar com.testco.Test with org.eclipse.xtext.common.Terminals 
import "http://www.eclipse.org/emf/2002/Ecore" as ecore 
generate defwiz "http://www.testco.com/Test" 

Define_Holder: 
    'Definition' ':' holder_name=ID ':' holder_number=HOLDER_NUMBER (':' attribute=define_attr)? (':' pad=holder_pad)? 
; 

holder_pad: 
    HEX 
; 

Type: 
    TYPE_TERM ':' type_value=TYPE_VAL 
; 


//***************** TERMINALS ***************** 
terminal TYPE_TERM: 
'Type_' INT+ 
; 

terminal PROFILE: 
    (PROFILE_ID)(PROFILE_ID)'.'(PROFILE_ID)(PROFILE_ID) 
; 

terminal HOLDER_NUMBER returns ecore:: EString: 
    'Holder_' INT+; 

terminal HEX returns ecore:: EString : 
    ('0'..'9'|'A'..'F') 
; 

terminal PROFILE_ID : '^'?('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9')*; 


//***************** ENUMS ***************** 
enum define_attr: 
    BINARY='Binary' | 
    SCRAMBLE='Scramble' | 
    FORCESIZE='ForceSize' | 
    FIXEDSIZE='FixedSize' 
; 

답변

2

귀하의 규칙 PROFILE_ID은 (밑줄 제외) 거의 모든 경우에 대해 ID 규칙을 그림자.

0

네, 렉서는 ABCHEX으로 단말기를 검색 가능성이 높습니다 :

이 내 문법 파일입니다. 다음과 같은 예를 들어, 후자를 정의하려고 :

terminal HEX returns ecore:: EString : 
'0x' ('0'..'9'|'A'..'F') 
; 
+0

내가 작성하려고하는 언어가 _0x_ 접두사를 인식하지 못하기 때문에 주어진 값이 변수가 입력되지 않은 변수의 유형과 일치 할 것으로 기대합니다. 확실히 아주 펑키 한 언어입니다. –