[antlr-interest] Please help to left-refactor this simple ebnf grammar

Jim Idle jimi at temporal-wave.com
Sun Sep 20 08:28:44 PDT 2009


Your pareser rules are all starting with upper case letters and they  
should start with lower case.

Jim

On Sep 20, 2009, at 3:45 AM, Artem Golubev <artemkagolubev at gmail.com>  
wrote:

> I just can't get how I can left-refactor the following grammar.  
> Please, help.
> Currently I get "(211): ebnf.g:1:8: [fatal] rule Tokens has non-LL 
> (*) decision due to recursive rule invocations reachable from alts  
> 8,9. Resolve by left-factoring or using syntactic predicates or  
> using backtrack=true option." error with it.
>
> grammar ebnf;
>
> options {
> output = AST;
> language = CSharp2;
> }
>
> tokens {
> OPENBRACKET =	 '(';
> CLOSEBRACKET	=	 ')';
> ONEORMOREKEYWORD= '+';
> ANYKEYWORD	= '*';
> OPTIONALKEYWORD = '?';
> ORKEYWORD =	 '|';	
> }
>
> /*------------------------------------------------------------------
> * PARSER RULES
> *------------------------------------------------------------------*/
> OrList : List (ORKEYWORD List)*;
>
> List	: (Mutliplication)+;
>
> Mutliplication : Atom ( ONEORMOREKEYWORD | OPTIONALKEYWORD |  
> ANYKEYWORD )?;
>
> Atom	: IDENTIFIER | Group;
>
> Group : OPENBRACKET OrList CLOSEBRACKET;
>
> /*------------------------------------------------------------------
> * LEXER RULES
> *------------------------------------------------------------------*/
>
> IDENTIFIER : (DIGIT)+ ;
>
> WHITESPACE : ( '\t' | ' ' | '\r' | '\n' )+ { $channel = HIDDEN; } ;
>
> fragment DIGIT	: '0'..'9' ;
>
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address


More information about the antlr-interest mailing list