[antlr-interest] Code generation problem?

Jim Idle jimi at temporal-wave.com
Wed Jan 25 14:33:43 PST 2012


You need to refer to variables as $menu etc.

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Ronald Albury
> Sent: Wednesday, January 25, 2012 2:31 PM
> To: antlr-interest at antlr.org
> Subject: [antlr-interest] Code generation problem?
>
> Please help!
>
> I believe the following section of grammar is valid:
>
> stateSection returns [State result] :
>     STATE ztate = stateAttrs
>     {
>         $result = ztate;
>     }
>     ( screen = screenSection
>     {
>         $result.setScreen(screen);
>     })?
>     ( menu = menuSection
>     {
>         $result.setMenu(menu);
>     })?
>    ( periodic = periodicSection
>    {
>        $result.setPeriodic(periodic);
>    })?
>    ENDSTATE
>    ;
>
> However, there is an issue with the generated code (I have removed some
> of the blank lines).  It creates variables for result, ztate, and
> screen, but does not correctly generate code for menu and periodic:
>
>   public final State stateSection() throws RecognitionException {
>         State result = null;
>         State ztate =null;
>         Screen screen =null;
>         try {
>             // C:\\csc\\P\\Pet\\Pet.g:121:37: ( STATE ztate= stateAttrs
> (screen= screenSection )? (menu= menuSection )? (periodic=
> periodicSection )? ENDSTATE )
>             // C:\\csc\\P\\Pet\\Pet.g:122:2: STATE ztate= stateAttrs
> (screen= screenSection )? (menu= menuSection )? (periodic=
> periodicSection )? ENDSTATE
>             {
>             match(input,STATE,FOLLOW_STATE_in_stateSection935);
>             pushFollow(FOLLOW_stateAttrs_in_stateSection941);
>             ztate=stateAttrs();
>             state._fsp--;
>                  result = ztate;
>
>             // C:\\csc\\P\\Pet\\Pet.g:126:2: (screen= screenSection )?
>             int alt2=2;
>             int LA2_0 = input.LA(1);
>             if ( (LA2_0==SCREEN) ) {
>                 alt2=1;
>             }
>             switch (alt2) {
>                 case 1 :
>                     // C:\\csc\\P\\Pet\\Pet.g:126:4: screen=
> screenSection
>                     {
>
> pushFollow(FOLLOW_screenSection_in_stateSection953);
>                     screen=screenSection();
>                     state._fsp--;
>                       result.setScreen(screen);
>                     }
>                     break;
>             }
>
>             // C:\\csc\\P\\Pet\\Pet.g:130:2: (menu= menuSection )?
>             int alt3=2;
>             int LA3_0 = input.LA(1);
>             if ( (LA3_0==MENU) ) {
>                 alt3=1;
>             }
>             switch (alt3) {
>                 case 1 :
>                     // C:\\csc\\P\\Pet\\Pet.g:130:4: menu= menuSection
>                     {
>                     pushFollow(FOLLOW_menuSection_in_stateSection968);
>                     menuSection();
>                     state._fsp--;
>                       result.setMenu(menu);
>
>                     }
>                     break;
>             }
>             // C:\\csc\\P\\Pet\\Pet.g:134:2: (periodic= periodicSection
> )?
>             int alt4=2;
>             int LA4_0 = input.LA(1);
>             if ( (LA4_0==PERIODIC) ) {
>                 alt4=1;
>             }
>             switch (alt4) {
>                 case 1 :
>                     // C:\\csc\\P\\Pet\\Pet.g:134:4: periodic=
> periodicSection
>                     {
>
> pushFollow(FOLLOW_periodicSection_in_stateSection983);
>                     periodicSection();
>                     state._fsp--;
>                       result.setPeriodic(periodic);
>
>                     }
>                     break;
>             }
>             match(input,ENDSTATE,FOLLOW_ENDSTATE_in_stateSection992);
>             }
>         }
>         catch (RecognitionException re) {
>             reportError(re);
>             recover(input,re);
>         }
>         finally {
>          // do for sure before leaving
>         }
>         return result;
>     }
>     // $ANTLR end "stateSection"
>
> 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