2012-07-16 6 views
0

XX.XX 형식의 '참조 번호'를 필터링해야합니다. 여기서 X는 대소 문자 또는 숫자 (0-9)입니다. 이것은 내가 생각해 낸 것입니다 :Xtext 문법에서 가상 float 번호를 어떻게 파싱합니까?

SCR_REF: 
    'Scr_Ref' ':' value=PROFILE 
; 

terminal PROFILE : 
    ((CHAR|INT)(CHAR|INT)'.'(CHAR|INT)(CHAR|INT)) 
; 

terminal CHAR returns ecore::EString : ('a'..'z'|'A'..'Z'); 

하지만 생성 된 편집기에서는 작동하지 않습니다. 다음 시험 항목 :

Scr_Ref: 11.22 

가 없다는 오류가 발생합니다 : '.'문자에

"아니오 대안을 "

내가 뭘 잘못하고있어?

답변

3

여기에 기본 INT를 사용하고있는 것이 문제라고 생각합니다. 11과 22는 모두 정수입니다. 여기서 정수가 아닌 숫자가 필요합니다. 여기 아래로 나는 너에게 모범을 보였다.


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

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl" 
import"http://www.eclipse.org/emf/2002/Ecore" as ecore 

Model: 
    greetings+=Greeting*; 

Greeting: 
    'Hello' name=ID '!' "val=" val= PROFILE; 
terminal PROFILE : 
    ((CHAR|DIGIT)(CHAR|DIGIT)'.'(CHAR|DIGIT)(CHAR|DIGIT)) 
; 
terminal DIGIT: 
    ('0'..'9') 
; 
terminal CHAR returns ecore::EString : 
    ('a'..'z'|'A'..'Z') 
; 

희망이 있습니다.

+0

그랬지만 터미널 규칙 INT를 비활성화/무시해야했습니다. 감사! –

관련 문제