[antlr-interest] Simple grammar with error

Gavin Lambert antlr at mirality.co.nz
Sun Sep 16 00:55:47 PDT 2007


At 21:11 15/09/2007, Alfonso wrote:
 >expression
 >    : term ( (PLUS|MINUS) expression)?
 >    EOF
 >    ;
 >
 >term    :
 >      atom ( (DIVIDE | ASTERISK) term)?
 >    ;
 >
 >atom    :
 >      NUMBER
 >    | OPEN_PAREN expression CLOSE_PAREN
 >    ;
 >
 >NUMBER    : '0'..'9' ('0'..'9')*;
[...]
 >Generates a "NoViableAltException" after the "5" when facing the 

 >expression 2*(3+5)+1 in the interpreter?

Well, you've specified that 'expression' must end with an EOF and 
yet a CLOSE_PAREN must follow it.  I'd be surprised if it did 
anything else :)

Remove the EOF from 'expression' and put it into another rule that 
uses it (and then use that as your starting rule instead), like 
so:

file : expression EOF;

Incidentally, you can define NUMBER like this instead:

NUMBER : ('0'..'9')+;



More information about the antlr-interest mailing list