2012-07-16 25 views
0

我需要过滤XX.XX格式的'参考号码',其中X是任何大写或小写字母或数字(0-9)。这是我想出的:如何解析Xtext语法中的伪浮点数?

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。谢谢! – 2012-07-26 19:27:53