我需要过滤XX.XX形式的'参考号',其中X是任何大写或小写字母或数字(0-9)。这就是我想出的:
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
抛出错误说:
“在角色上没有可行的选择。” “
我做错了什么?
答案 0 :(得分: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')
;
希望这有帮助。