0

我需要过滤 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

抛出一个错误说:

“在角色'没有可行的选择。' "

我做错了什么?

4

1 回答 1

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')
;

希望这可以帮助。

于 2012-07-23T06:15:46.313 回答