[antlr-interest] How to solve = and . mutually left-recursive?

Tomasz Bąk hellolinus at gmail.com
Mon Jun 18 04:57:42 PDT 2007


Hello!
I have small problem with quite common task (I think)
with "sets of rules that are mutually left-recursive".

$ java org.antlr.Tool SBQL.g
ANTLR Parser Generator  Version 3.0 (May 17, 2007)  1989-2007
error(210):  The following sets of rules are mutually left-recursive
[non_algebraic_expr, expr]
$

This is my grammar:


grammar SBQL;

options {
 output = AST;
 ASTLabelType = CommonTree;
 backtrack=true;
}

// parser
program     : (expr { System.out.println($expr.tree.toStringTree()); } )+ ;

expr         : primary_expr
        | name_expr
        | algebraic_expr
        | equality_expr
        | non_algebraic_expr
        ;

primary_expr    : STRING_LITERAL
        | INTEGER_LITERAL
        | BOOLEAN_LITERAL
        | '(' expr ')'
        ;

name_expr    : STRING_LITERAL
        ;

algebraic_expr
            :  primary_expr ('+'^ primary_expr)*
            |  primary_expr ('-'^ primary_expr)*
            |  primary_expr ('*'^ primary_expr)*
            ;

//algebraic_expr_old
//        : expr '+' expr
//        | expr '-' expr
//        | expr '*' expr
//        ;


equality_expr    :  expr '=' expr
        ;

non_algebraic_expr    : expr '.' expr
            | expr 'where' expr
            ;

// lexer
BOOLEAN_LITERAL        :  ('true'|'false')*;
INTEGER_LITERAL        :  ('0'..'9')*;
STRING_LITERAL        :  ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;

WS  :   ( ' ' | '\t' | '\r' | '\n' )+ { $channel = HIDDEN; } ;



Any ideas how to solve this?

Thanks in advance,
Tomasz Bak
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20070618/313c9b96/attachment.html 


More information about the antlr-interest mailing list