终端规则ID与ID的有效值不匹配

时间:2012-01-13 17:23:26

标签: eclipse xtext

我正在尝试定义一个规则,其中一个元素是公共终端规则 ID 的完美候选者。当我启动编辑器以使用示例代码进行测试时, ID 规则与字符串“ABC”不匹配:

Define : ABC : Holder_1 

我得到“不匹配的输入'ABC'期待RULE_ID”

我的语法中是否存在与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'
;

2 个答案:

答案 0 :(得分:2)

您的规则PROFILE_ID几乎可以隐藏每个案例的ID规则(下划线除外)。

答案 1 :(得分:0)

是的,词法分析器可能会将ABC扫描为HEX终端。尝试定义后者,例如,如下:

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