Frage

Ich versuche eine Regel zu definieren, bei der ein Element der perfekte Kandidat für die gemeinsame Terminalregel ist ICH WÜRDE. Wenn ich den Editor starte, um mit Beispielcode zu testen, die ICH WÜRDE Die Regel ist nicht für die Zeichenfolge "ABC" übereinstimmt:

Define : ABC : Holder_1 

Ich bekomme "Nicht übereinstimmende Input 'ABC' erwarten Rule_id".

Gibt es etwas in meiner Grammatik, das mit der ID -Regel widerspricht, um diesen Fehler zu verursachen?

Dies ist meine Grammatikdatei:

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'
;
War es hilfreich?

Lösung

Ihr Regel profile_id beschattet die ID -Regel für fast jeden Fall (mit Ausnahme des Unterstrichs).

Andere Tipps

Ja, es ist wahrscheinlich, dass Lexer Scans scannt ABC wie HEX Terminal. Versuchen Sie beispielsweise wie folgt, letztere zu definieren:

terminal HEX returns ecore:: EString :
 '0x' ('0'..'9'|'A'..'F')
;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top