如何在Xtext语法中解析伪浮点数?

时间:2012-07-16 20:40:38

标签: eclipse dsl xtext

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

抛出错误说:

  

“在角色上没有可行的选择。” “

我做错了什么?

1 个答案:

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

希望这有帮助。