嘿。我是ANTLR的新手。 ANTLRWorks嚮導wrrited我下面的代碼:ANTLR「子樹意外結束」
grammar test;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
;
INT : '0'..'9'+
;
FLOAT
: ('0'..'9')+ '.' ('0'..'9')* EXPONENT?
| '.' ('0'..'9')+ EXPONENT?
| ('0'..'9')+ EXPONENT
;
COMMENT
: '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
| '/*' (options {greedy=false;} : .)* '*/' {$channel=HIDDEN;}
;
WS : (' '
| '\t'
| '\r'
| '\n'
) {$channel=HIDDEN;}
;
STRING
: '"' (ESC_SEQ | ~('\\'|'"'))* '"'
;
CHAR: '\'' (ESC_SEQ | ~('\''|'\\')) '\''
;
fragment
EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;
fragment
HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
fragment
ESC_SEQ
: '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
| UNICODE_ESC
| OCTAL_ESC
;
fragment
OCTAL_ESC
: '\\' ('0'..'3') ('0'..'7') ('0'..'7')
| '\\' ('0'..'7') ('0'..'7')
| '\\' ('0'..'7')
;
fragment
UNICODE_ESC
: '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
;
調試時,它引發以下錯誤:
[22:45:49] error(100): C:\Documents and Settings\user\Desktop\test.g:0:0: syntax error: codegen: <AST>:0:0: unexpected end of subtree
有人可以解釋我什麼是錯誤,它在哪裏,我怎麼能解決它?
謝謝。
請注意,由於ANTLR生成LL(*)解析器,因此無法應付您發佈的左遞歸語法。 http://www.antlr.org/wiki/display/ANTLR3/Left-Recursion+Removal – 2009-12-17 09:23:11
啊,好吧 - 以我剛剛假設的「LR」結尾的ANTLR。 – danben 2009-12-17 15:19:40
:)的確如此,這個名字暗示了另一種說法。 ANTLR代表「用於** L **語言** R **生態識別的另一種工具」。 – 2009-12-17 16:47:02