[antlr-interest] Ambiguous grammar

Ondrej Krc-Jediny ondro.krc at gmail.com
Wed May 26 13:33:33 PDT 2010


Hello,

I am new to ANTLR and I'd appreciate help with my problem. At first
some grammar rules I am going to talk about:

DIGIT: '0'..'9';
LETTER: 'a'..'z'|'A'..'Z';

REAL
    :   (DIGIT)+ '.' (DIGIT)* EXPONENT?
    |   '.' (DIGIT)+ EXPONENT?
    |   (DIGIT)+ EXPONENT
    ;

INTEGER: DIGIT+;

IDENTIFIER: LETTER+;

range_expr:
  expr ('..' expr)?;

expr: expratom ('+' expratom)?;

expratom: INTEGER | REAL | IDENTIFIER;

This grammar allows '1.' and .1' as correct real numbers. Also, it
allows range expression '1..2', which gets parsed incorrectly as two
real numbers 1. and .2. Redefining token
INTEGER: DIGIT '..'?;
doesn't help, because then also valid range expression 'i + 1..2'. Is
there any way how to parse the '..' correctly in all cases?

Thank you very much,

Ondrej.


More information about the antlr-interest mailing list