Question

Je suis en train de définir une règle selon laquelle un élément est le candidat idéal pour la règle terminale commune ID . Lorsque je lance l'éditeur de test avec un exemple de code, ID règle ne correspond pas à la chaîne "ABC":

Define : ABC : Holder_1 

je reçois "entrée ne correspondent pas 'ABC' attend RULE_ID" .

Y at-il quelque chose dans ma grammaire en conflit avec la règle d'identité pour provoquer cette erreur?

Ceci est mon fichier de grammaire:

grammar com.testco.Test with org.eclipse.xtext.common.Terminals 
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
generate defwiz "http://www.testco.com/Test"

Define_Holder:
  'Definition' ':' holder_name=ID ':' holder_number=HOLDER_NUMBER (':' attribute=define_attr)? (':' pad=holder_pad)?
;

holder_pad:
  HEX
;

Type:
  TYPE_TERM ':' type_value=TYPE_VAL
;


//***************** TERMINALS *****************
terminal TYPE_TERM:
 'Type_' INT+
;  

terminal PROFILE:
  (PROFILE_ID)(PROFILE_ID)'.'(PROFILE_ID)(PROFILE_ID)
;

terminal HOLDER_NUMBER returns ecore:: EString:
  'Holder_' INT+; 

terminal HEX returns ecore:: EString :
  ('0'..'9'|'A'..'F')
;

terminal PROFILE_ID  : '^'?('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9')*;


//***************** ENUMS *****************
enum define_attr:
  BINARY='Binary' |
  SCRAMBLE='Scramble' |
  FORCESIZE='ForceSize' |
  FIXEDSIZE='FixedSize'
;
Était-ce utile?

La solution

Vos règles ombres PROFILE_ID la règle d'identification pour presque tous les cas (sauf pour le trait de soulignement).

Autres conseils

Oui, il est probable que le ABC de cette lexer comme terminal HEX. Essayez de définir ce dernier, par exemple, comme suit:

terminal HEX returns ecore:: EString :
 '0x' ('0'..'9'|'A'..'F')
;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top