[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