Ehi. Sono nuovo di ANTLR. ANTLRWorks wizard wrrited per me il seguente codice:ANTLR "Inaspettata fine della sottostruttura"
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
;
Quando il debug di esso, si getta il seguente errore:
[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
Qualcuno mi può spiegare che cosa è l'errore, dove è e come posso risolvere vero?
Grazie.
Si noti che poiché ANTLR produce parser LL (*), non può far fronte alla grammatica ricorsiva sinistra che hai postato. http://www.antlr.org/wiki/display/ANTLR3/Left-Recursion+Removal –
Ah, ok - con ANTLR che termina con "LR", ho appena assunto. – danben
:) vero, il nome suggerisce il contrario. ANTLR sta per "AN un altro strumento per ** L ** anguage ** R ** ecognition". –