[antlr-interest] ANTLR v3.4 generates compiler errors (that v3.3 doesn't generate)

Terence Parr parrt at cs.usfca.edu
Mon Apr 30 11:04:19 PDT 2012


grab antlr/antlr3 from github which has the fix.
Ter
On Apr 30, 2012, at 10:05 AM, Pedro Francisco wrote:

> Sorry for the poke but... any news on this? (getting "void  =null;")...
> 
> On Mon, Oct 24, 2011 at 8:24 PM, Eric <researcher0x00 at gmail.com> wrote:
>> On Mon, Oct 24, 2011 at 10:41 AM, Dieter Habelitz <
>> dieter.habelitz at habelitz.com> wrote:
>> 
>>> Hi folks,
>>> 
>>> When feeding ANTLR 3.4 with my Java grammars it doesn't generate valid
>>> Java sources (26 compiler errors) - with v3.3 everything is okay.
>>> 
>>> Here's a snipped of the grammar that raises one of the problems:
>>> 
>>> statement
>>>   :   block
>>>   |   assertStatement
>>>   |   ifStatement
>>>   |   forStatement
>>>   |    [... and so on ...]
>>>   ;
>>> 
>>> ifStatement
>>>        : IF parenthesizedExpression ifStat=statement
>>>       (   ELSE elseStat=statement -> ^(IF parenthesizedExpression $ifStat
>>> $elseStat)
>>>       |                           -> ^(IF parenthesizedExpression $ifStat)
>>>       )
>>>        ;
>>> 
>>> Amongst other things v3.4 generates the following code for the 'ELSE'
>>> branch
>>> of the rule 'ifStatement' (have a look at the local 'variable
>>> declaration': void  =null;):
>>> 
>>>   public final void synpred137_Java_fragment() throws RecognitionException
>>> {
>>>       void  =null;
>>> 
>>>       // [... some comments not relevant here ...]
>>>       {
>>>       match(input,ELSE,FOLLOW_ELSE_in_synpred137_Java9244); if
>>> (state.failed) return ;
>>> 
>>>       pushFollow(FOLLOW_statement_in_synpred137_Java9248);
>>>       elseStat=statement();
>>> 
>>>       state._fsp--;
>>>       if (state.failed) return ;
>>> 
>>>       }
>>> 
>>>   }
>>> 
>>> However, v3.3 generates the following code from the same grammar:
>>> 
>>>   public final void synpred137_Java_fragment() throws RecognitionException
>>> {
>>>       JavaParser.statement_return elseStat = null;
>>> 
>>> 
>>>       // [... some comments not relevant here ...]
>>>       {
>>>       match(input,ELSE,FOLLOW_ELSE_in_synpred137_Java9244); if
>>> (state.failed) return ;
>>>       pushFollow(FOLLOW_statement_in_synpred137_Java9248);
>>>       elseStat=statement();
>>> 
>>>       state._fsp--;
>>>       if (state.failed) return ;
>>> 
>>>       }
>>>   }
>>> 
>>> The complete grammars can be found at ...
>>> 
>>> http://www.habelitz.com/index.php?option=com_content&task=view&id=12&Itemid=8
>>> 
>>> Any hints? Switch back to org.antlr.Tool 3.3
>> 
>> 
>> 
>> 
>>> A bug within v3.4? Yes
>>> 
>> 
>> Ter is aware of it but is holding off on fixing the bugs for org.antlr.Tool
>> 3.4.
>> 
>> 
>>> 
> 
> 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