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 に答える