[antlr-interest] ANTLR v3.0.1: Regression from ANTLR v2:?? left recusrsive grammar detected while it's not.
Francis ANDRE
francis.andre.kampbell at orange.fr
Mon Aug 11 14:29:02 PDT 2008
>>You have three section-s here - one for the rule, one for return and
one as label. ANTLR gets confused there. Rename at least the label and
the return parameter.
Yes, I know.. it was done on purpose and works fine in ANTLR v2.. And as
the grammar has a more than 300 rules and 600 tokens, I would prefer to
let them as is
Since ANTLR knows perfectly this is an assignment from a returned value
to a target language variable, IMHO, "section = " could be corrected as
a reference to the section variable and not an invocation of the
'section' rule.
Cheers
FA
Johannes Luber a écrit :
>
> Francis ANDRE schrieb:
>> Hi ANTLR's
>>
>> Upon migration from ANTLR v2 to ANTLR v3 on the following snippet
>>
>> grammar Cobol;
>> tokens { DOT='DOT'; SECTION='SECTION'; IDENT='IDENT';}
>> debut : section;
>>
>> section returns[PROCEDURE_SECTION section = null]
>> @init {String s;} : section = sectionHeader DOT ;
>
> You have three section-s here - one for the rule, one for return and
> one as label. ANTLR gets confused there. Rename at least the label and
> the return parameter.
>
> Johannes
>>
>> sectionHeader returns[PROCEDURE_SECTION section = null]
>> : IDENT SECTION { section = $IDENT.getText(); };
>>
>>
>> got this error: [17:39:46] error(211): Cobol.g:2941:6: [fatal] rule
>> section has non-LL(*) decision due to recursive rule invocations
>> reachable from alts 1,2. Resolve by left-factoring or using
>> syntactic predicates or using backtrack=true option.
>>
>> IMHO, in no way the 'section = ' is a left recursive invocation of
>> the section rule, but just the assignment if the result of
>> sectionHeader to the PROCEDURE_SECTION section.
>>
>> What's yours?
>>
>> FA
>>
>>
>>
>>
>
>
>
More information about the antlr-interest
mailing list