2017-09-18 14 views
0

を期待して、私はこの文法が間違っているのか理解していない:のXtext不一致入力「0」RULE_INT

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals 

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl" 

Model: 
    header=Header (elements+=Element)*; 

Header: 
'Test:Revision' version=Decimal ';' 
; 

Decimal: 
INT'.'INT 
; 

Element: 
TableRow 
; 

TableRow: 
'__Row' name=ID '{' 
    '__Alias' '=' Alias(','Alias)* ';' 
'}' 
; 

Alias: 
'0'|'1'|'H'|'L' 
; 

次の簡単なテスト文がメッセージ「不一致入力でのJUnitで失敗 『0』 RULE_INTに期待ヘッダー

Test:Revision2.0; 

私は削除エイリアスルールから「0」または私はテスト文を変更した場合、すべてが正常に動作します:

Test:Revision2.00; 

この文法に何が間違っているのか教えてください。

答えて

1

エイリアスでは、キーワードに「0」を設定してINTターミナルルールと照合することはできません。あなたは

IntValue: INT | '0' | '1'; 

のようなデータ型のルールを導入する可能性名「L」または名前「H」を持つ要素を作成し、小数

内の代わりにINTの1つを使用している場合も同じことが起こるでしょう