1

1 つの要素が共通の最終ルールIDの完全な候補であるルールを定義しようとしています。サンプル コードでテストするためにエディターを起動すると、IDルールが文字列 "ABC" に一致しません。

Define : ABC : Holder_1 

「 RULE_IDを期待する不一致の入力 'ABC'」が表示されます。

このエラーの原因となる ID ルールと競合する文法が何かありますか?

これは私の文法ファイルです:

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'
;
4

2 に答える 2

2

ルール PROFILE_ID は、ほぼすべてのケースで ID ルールを隠します (アンダースコアを除く)。

于 2012-01-18T19:06:30.307 に答える
0

はい、レクサーが端末ABCとしてスキャンする可能性があります。HEXたとえば、次のように後者を定義してみてください。

terminal HEX returns ecore:: EString :
 '0x' ('0'..'9'|'A'..'F')
;
于 2012-01-14T18:14:02.740 に答える