List *parsetree; /* result of parsing is left here */
-static int lookahead_token; /* one-token lookahead */
-static bool have_lookahead; /* lookahead_token set? */
+static bool have_lookahead; /* is lookahead info valid? */
+static int lookahead_token; /* one-token lookahead */
+static YYSTYPE lookahead_yylval; /* yylval for lookahead token */
+static YYLTYPE lookahead_yylloc; /* yylloc for lookahead token */
/*
filtered_base_yylex(void)
{
int cur_token;
+ int next_token;
+ YYSTYPE cur_yylval;
+ YYLTYPE cur_yylloc;
/* Get next token --- we might already have it */
if (have_lookahead)
{
cur_token = lookahead_token;
+ base_yylval = lookahead_yylval;
+ base_yylloc = lookahead_yylloc;
have_lookahead = false;
}
else
* (perhaps for SQL99 recursive queries), come back and simplify
* this code.
*/
- lookahead_token = base_yylex();
- switch (lookahead_token)
+ cur_yylval = base_yylval;
+ cur_yylloc = base_yylloc;
+ next_token = base_yylex();
+ switch (next_token)
{
case CASCADED:
cur_token = WITH_CASCADED;
cur_token = WITH_CHECK;
break;
default:
+ /* save the lookahead token for next time */
+ lookahead_token = next_token;
+ lookahead_yylval = base_yylval;
+ lookahead_yylloc = base_yylloc;
have_lookahead = true;
+ /* and back up the output info to cur_token */
+ base_yylval = cur_yylval;
+ base_yylloc = cur_yylloc;
break;
}
break;