Hey. Tôi mới dùng ANTLR. ANTLRWorks thuật sĩ wrrited cho tôi đoạn mã sau:ANTLR "kết thúc không mong muốn của subtree"
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
;
Khi gỡ lỗi nó, nó ném các lỗi sau:
[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
Ai đó có thể giải thích cho tôi lỗi này là gì, ở đâu là nó và làm thế nào tôi có thể sửa chữa nó?
Cảm ơn.
Lưu ý rằng vì ANTLR tạo các trình phân tích cú pháp LL (*), nó không thể đối phó với ngữ pháp đệ quy trái mà bạn đã đăng. http://www.antlr.org/wiki/display/ANTLR3/Left-Recursion+Removal –
Ah, ok - với ANTLR kết thúc bằng "LR" tôi chỉ giả định. – danben
:) đúng, tên đề xuất khác. ANTLR là viết tắt của "ANother Tool cho ** L ** anguage ** R ** ecognition". –