[antlr-interest] Ambiguous parse tree generated

Jim Idle jimi at temporal-wave.com
Tue Oct 30 19:46:52 PDT 2012


However AST rewrites in v3 were very slow, whereas rule decomposition
results in small 'methods'/collections of logic, which are inlined by
compilers and JITs. I think it is more of a matter of adjusting to v4 than
worrying about v3 comparisons to be honest :)

Jim

-----Original Message-----
From: Gerald Rosenberg [mailto:gerald at certiv.net]
Sent: Wednesday, October 31, 2012 4:04 AM
To: jimi at temporal-wave.com
Cc: ANTLR-Interest Interest
Subject: Re: [antlr-interest] Ambiguous parse tree generated

Yes, and that is the work around I am using now.  Sorry if I was not
clear.

Resorting to rule decomposition unfortunately greatly increases the number
of enter/exits and the depth of what was, in v3, AST rewrites.
Was hoping I was missing some way to mark or label the rule elements to
remove the ambiguity.

On 10/30/2012 1:06 AM, Jim Idle wrote:
> At a guess:
>
> style : di* hi*;
>
> di: Dot Identifier ;
> hi: Hash Identifier;
>
> in other words did you try creating rules for the semantically
> distinct pieces?
>
> Jim
>
> -----Original Message-----
> From: antlr-interest-bounces at antlr.org
> [mailto:antlr-interest-bounces at antlr.org] On Behalf Of Gerald
> Rosenberg
> Sent: Tuesday, October 30, 2012 3:59 PM
> To: antlr-interest
> Subject: [antlr-interest] Ambiguous parse tree generated
>
> I have a rule
>
> style  :  ( Dot Identifier )* ( Hash Identifier )* ;
>
> AntlrV4 generates a context with a list of Dot, a list of Hash, and a
> list of Identifier.  While both Identifier's are syntactically
> identical, they are semantically distinct.  In this particular case,
> the list of Dot can be used to partition the list of Identifier.
>
> However, if I change the rule to the preferred form
>
> style  :   ( Dot Identifier ( Hash Identifier )? )*  ;
>
> I still get the same single lists of Dot, Hash, and Identifier. Only
> way to determine the Dot vs Hash associated Identifier's is by
> inspection of the token stream?  Adding labels did not change the
generated code.
>
> What am I missing?
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
> 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