[antlr-interest] Rule optimization - inline

Jim Idle jimi at temporal-wave.com
Tue Feb 22 09:33:55 PST 2011


I just re-read my answer and there was a typo it should have said "your
design is NOT the best one..." - hope that was not confusing.

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Alex Lujan
> Sent: Tuesday, February 22, 2011 8:29 AM
> Cc: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Rule optimization - inline
>
> Thanks Jim, I'll check that.
>
> On Tue, Feb 22, 2011 at 11:19 AM, Jim Idle <jimi at temporal-wave.com>
> wrote:
>
> > Use the mailing list search at antlr.markmail.org for examples of
> > local variable out of scope in predicates. Generally you cannot use
> > local parameters as elements of your predicate because the code
> > generator generates the predicate as a separate method and so the
> > local parameter to your rule is out of scope. You need to use a scope
> variable to do that.
> >
> > That said, your design is the best one in that you are trying to
> > enforce semantics/context within your parser grammar rules. This will
> > result in a parser that is error prone and is also unable to give out
> > good error messages to your users. The better way to do this is to
> > accept any BYTE_VALUE and merge type_sell and type_itsp into one left
> factored rule.
> > Then you can tell this rule what to check for as a rule parameter and
> > compare what it finds. If what it finds is not what is expected you
> > can now issue a semantic error such as "Must have a type selector
> > here" or something. Ideally you would create a tree and then walk the
> > tree to check semantics and so on.
> >
> > Hope that helps,
> >
> > Jim
> >
> >
> > > -----Original Message-----
> > > From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> > > bounces at antlr.org] On Behalf Of Alex Lujan
> > > Sent: Tuesday, February 22, 2011 7:22 AM
> > > To: antlr-interest at antlr.org
> > > Subject: [antlr-interest] Rule optimization - inline
> > >
> > > Hi All,
> > >
> > > I'm having a problem with what I believe is an optimization within
> > > the ANTLR code generation.
> > >
> > > Consider the following sample grammar:
> > >
> > > grammar CharSelectionTest;
> > >
> > > @header {
> > > import org.apache.commons.lang.StringUtils;
> > > }
> > >
> > > type             :    (type_sell | type_itsp) data ;
> > >
> > > type_sell         :    character['s'];
> > >
> > > type_itsp         :    character['i'];
> > >
> > > data            :    BYTE_VALUE*;
> > >
> > > character[char character_to_match]
> > >                 :    {input.LT(1).getText().charAt(0) ==
> > > character_to_match}? BYTE_VALUE;
> > >
> > > BYTE_VALUE        :    '\u0000'..'\uFFFE';
> > >
> > >
> > > When ANTLR generates the Parser java code, the type() method seems
> > > to be replacing the call to the character rule with an inline
> equivalent:
> > >
> > > public final void type() throws RecognitionException {
> > >         try {
> > >             {
> > >             int alt1=2;
> > >             int LA1_0 = input.LA(1);
> > >
> > >             if ( (LA1_0==BYTE_VALUE) ) {
> > >                 int LA1_1 = input.LA(2);
> > >
> > >                 // Compile error: character_to_match is not
> defined!
> > >                 if ( ((input.LT(1).getText().charAt(0) ==
> > > character_to_match)) ) {
> > >                     alt1=1;
> > >                 }
> > >                 else if ( ((input.LT(1).getText().charAt(0) ==
> > > character_to_match)) ) {
> > >                     alt1=2;
> > >                 }
> > >                 else {
> > >                     NoViableAltException nvae =
> > >                         new NoViableAltException("", 1, 1, input);
> > >
> > >                     throw nvae;
> > >                 }
> > >             }
> > >             ...
> > >     }
> > >
> > > Note that the variable character_to_match is not defined, since
> it's
> > > supposed to be a parameter of the character rule.
> > >
> > > Is there anything wrong with the rule definition in this simple
> > > grammar?
> > >
> > > Is this a known issue?
> > >
> > > Any workarounds / solutions to this problem?
> > >
> > > Thanks very much for your help.
> > >
> > > --
> > > Alejandro Lujan
> > >
> > > 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
> >
>
>
>
> --
> Alejandro Lujan
> Apption Software
> (613) 725 62 68 x625
>
> 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