[antlr-interest] Code generated for gated semantic predicates

Mike Lischke mike at lischke-online.de
Fri Nov 9 02:18:09 PST 2012


… answering myself

> string_literal:
> 	NCHAR_TEXT
> 	| UNDERSCORE_CHARSET? (single_quoted_string | {!SQL_MODE_ACTIVE(SQL_MODE_ANSI_QUOTES)}? => double_quoted_string)
> ;
> 
> single_quoted_string:
> 	( options { greedy = true; }: SINGLE_QUOTED_TEXT)+
> ;
> 
> double_quoted_string:
> 	( options { greedy = true; }: DOUBLE_QUOTED_TEXT)+
> ;

by changing this rule to:

double_quoted_string:
	( options { greedy = true; }: DOUBLE_QUOTED_TEXT)+
	{ /**/ }
;

the generated code becomes:

            // MySQL.g:2538:2: ( options {greedy=true; } : DOUBLE_QUOTED_TEXT )+
            {
                int cnt823=0;

                for (;;)
                {
                    int alt823=2;
            	switch ( LA(1) )
            	{
            	case DOUBLE_QUOTED_TEXT:
            		{
            			alt823=1;
            		}
            	    break;

            	}

just like it should. Go figure…

> 
> the code generated for double_quoted_string contains a check which makes no sense to me:
> 
>             // MySQL.g:2537:2: ( DOUBLE_QUOTED_TEXT )+
>             {
>                 int cnt823=0;
> 
>                 for (;;)
>                 {
>                     int alt823=2;
>             	switch ( LA(1) )
>             	{
>             	case DOUBLE_QUOTED_TEXT:
>             		{
>             			{
>             			   /* dfaLoopbackState(k,edges,eotPredictsAlt,description,stateNumber,semPredState)
>             			    */
>             			    int LA823_67 = LA(2);
>             			    if ( (!( ((((SQL_MODE_ACTIVE(SQL_MODE_ANSI_QUOTES)))||((!SQL_MODE_ACTIVE(SQL_MODE_ANSI_QUOTES))))) )))
>             			    {
>             			        alt823=1;
>             			    }
> 
>             			}
>             		}
>             	    break;
> 
>             	}

Mike
-- 
www.soft-gems.net



More information about the antlr-interest mailing list