[antlr-interest] ANTLR 3.1.2 bug in tree grammars? - RewriteEmptyStreamException

Terence Parr parrt at cs.usfca.edu
Tue Feb 24 10:07:25 PST 2009


Yeah, i fixed bugs. Naturally, you need:

> propertynode
>        :
>        properties        -> ^( TYPE PROPERTYNODE ) properties?

since properties can be empty

Ter

On Feb 24, 2009, at 2:57 AM, Paul Bouché (NSN) wrote:

> Hi,
>
> I just upgraded to ANTLR v3.1.2 from 3.0. What worked before does not
> work anymore.... :-( I looked through the changes list, but could not
> find anything related.
>
> We first create an AST and then parse it with a tree grammar. The  
> syntax
> is a list key = value pairs, where a structure can be built using  
> curly
> brackets. A structure is again a list of key-value pairs, i.e.
> struct = { a = 3, b = 4 }
>
> also
> struct = { }
>
> was allowed which created an empty sub structure.
>
> This is broken now. I get the exception:
> Exception in thread "main"
> org.antlr.runtime.tree.RewriteEmptyStreamException: rule properties
>    at
> org 
> .antlr 
> .runtime 
> .tree.RewriteRuleElementStream._next(RewriteRuleElementStream.java: 
> 158)
>    at
> org 
> .antlr 
> .runtime 
> .tree 
> .RewriteRuleElementStream.nextTree(RewriteRuleElementStream.java:145)
>    ...
>
> I have no clue whatsoever what this means. Well obviously somehow the
> parser tries to rewrite an empty stream. Well before 3.1.2, in 3.0  
> this
> worked fine without errors. Now it does not work. Something must have
> changed or is it a bug?
>
> The grammar for parsing the above syntax is basically as follows:
> start
>        :
>        propertynode EOF
>        ;
> propertynode
>        :
>        properties        -> ^( TYPE PROPERTYNODE ) properties
>        ;
> properties
>        :
>        ( property ( ',' property )* )? ','?        -> property*
>        ;
> property
>        :
>        name        '='        value        -> ^( PROPERTY name cast?
> attributes? value )
>        ;
> value
>        :
>        ( plain        | '{' propertynode '}'        )        -> plain?
> list? propertynode?
>        ;
>
> As you can see rule value calls propertynode which allows  
> substructures.
> If the rule properties does match an empty obviously a stream is not
> instanciated as it was before in 3.0 hence the exception. Can you tell
> me how I need to modify the grammar to make it work in 3.1.2?
>
> Thanks a bunch!
> Paul
>
> -- 
> Paul Bouché
> Voice: +49 30 590080-1284
>
> Nokia Siemens Networks GmbH & Co. KG, An den Treptowers 1, 12435  
> Berlin, Germany
> Sitz der Gesellschaft: München / Registered office: Munich
> Registergericht: München / Commercial registry: Munich, HRA 88537
> WEEE-Reg.-Nr.: DE 52984304
>
> Persönlich haftende Gesellschafterin / General Partner: Nokia  
> Siemens Networks Management GmbH
> Geschäftsleitung / Board of Directors: Lydia Sommer, Olaf Horsthemke
> Vorsitzender des Aufsichtsrats / Chairman of supervisory board:  
> Lauri Kivinen
> Sitz der Gesellschaft: München / Registered office: Munich
> Registergericht: München / Commercial registry: Munich, HRB 163416
>
>
> 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