règle Terminal ID ne correspond pas à des valeurs valides pour ID
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'
;
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