2017-09-18 5 views
0

Je ne comprends pas ce qui ne va pas avec cette grammaire:Xtext entrée ne correspondent pas « 0 » attendre 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' 
; 

L'instruction test simple suivante échoue avec JUnit avec le message « d'entrée ne correspondent pas « 0 » attendre RULE_INT sur en-tête

Test:Revision2.0; 

Tout fonctionne bien si je retire '0' de la règle Alias ​​ou je modifier l'instruction test:

Test:Revision2.00; 

Pouvez-vous s'il vous plaît me dire ce qui ne va pas avec cette grammaire?

Répondre

1

Avec Alias ​​vous transformez '0' en un mot-clé de sorte qu'il ne peut jamais être égalé par la règle de terminal INT. La même chose se passerait-il si vous créez un élément avec le nom « L » ou le nom « H », vous pouvez introduire une règle de type de données comme

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

et l'utiliser au lieu de un INT intérieur décimal