嘿。我是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