1
grammar mygrammar;
string : '"' (ESC | ~('\u0000'..'\u001f' | '\\' | '\"'))* '"';
number : HEX_NUMBER | '-'? INTEGER_NUMBER ('.' INTEGER_NUMBER)?;
HEX_NUMBER : '0x' HEX_DIGIT+;
INTEGER_NUMBER : DIGIT+;
WS: (' '|'\n'|'\r'|'\t')+ {$channel=HIDDEN;} ; // ignore whitespace
fragment
ESC : '\\' (UNI_ESC |'b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\');
fragment
UNI_ESC : 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT;
fragment
HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
fragment
DIGIT : ('0'..'9');
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
這裏是錯誤消息我在ANTLRWorks控制檯獲得爲什麼ANTLR語法文件不會生成,我該如何解決?
[14:49:09] error(208): mygrammar.g:7:1: The following token definitions can never be matched because prior tokens match the same input: T__16
如果我註釋掉string
線它生成的代碼,我怎麼有兩個string
和number
在同一時間規則?
順便說一句,「字符串」和「數量」,在那裏你有一個字符串的規則直接字面兩個語法規則。 ANTLR將爲這些字符串創建令牌,但會給他們一些名稱,如T__324。您可能需要考慮爲所有字符串創建令牌,因爲它允許錯誤消息更有意義。 – 2011-11-14 04:36:37