#include "extern.h"
#include "preproc.h"
-
-/*
- * Change symbol names as expected by preproc.y. It'd be better to do this
- * with %option prefix="base_yy", but that affects some other names that
- * various files expect *not* to be prefixed with "base_". Cleaning it up
- * is not worth the trouble right now.
- */
-#define yylex base_yylex
-#define yylval base_yylval
}
%{
-extern YYSTYPE yylval;
+extern YYSTYPE base_yylval;
static int xcdepth = 0; /* depth of nesting in slash-star comments */
static char *dolqstart = NULL; /* current $foo$ quote start string */
%option noinput
%option noyywrap
%option warn
+%option prefix="base_yy"
%option yylineno
BEGIN(SQL);
if (literalbuf[strspn(literalbuf, "01") + 1] != '\0')
mmerror(PARSE_ERROR, ET_ERROR, "invalid bit string literal");
- yylval.str = mm_strdup(literalbuf);
+ base_yylval.str = mm_strdup(literalbuf);
return BCONST;
}
<xh>{quotefail} {
yyless(1);
BEGIN(SQL);
- yylval.str = mm_strdup(literalbuf);
+ base_yylval.str = mm_strdup(literalbuf);
return XCONST;
}
<xq,xqc>{quotefail} {
yyless(1);
BEGIN(state_before);
- yylval.str = mm_strdup(literalbuf);
+ base_yylval.str = mm_strdup(literalbuf);
return SCONST;
}
<xe>{quotestop} |
<xe>{quotefail} {
yyless(1);
BEGIN(state_before);
- yylval.str = mm_strdup(literalbuf);
+ base_yylval.str = mm_strdup(literalbuf);
return ECONST;
}
<xn>{quotestop} |
<xn>{quotefail} {
yyless(1);
BEGIN(state_before);
- yylval.str = mm_strdup(literalbuf);
+ base_yylval.str = mm_strdup(literalbuf);
return NCONST;
}
<xus>{xusstop} {
addlit(yytext, yyleng);
BEGIN(state_before);
- yylval.str = mm_strdup(literalbuf);
+ base_yylval.str = mm_strdup(literalbuf);
return UCONST;
}
<xq,xe,xn,xus>{xqdouble} { addlitchar('\''); }
addlit(yytext, yyleng);
free(dolqstart);
BEGIN(SQL);
- yylval.str = mm_strdup(literalbuf);
+ base_yylval.str = mm_strdup(literalbuf);
return DOLCONST;
}
else
if (literallen == 0)
mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier");
/* The backend will truncate the identifier here. We do not as it does not change the result. */
- yylval.str = mm_strdup(literalbuf);
+ base_yylval.str = mm_strdup(literalbuf);
return CSTRING;
}
<xdc>{xdstop} {
BEGIN(state_before);
- yylval.str = mm_strdup(literalbuf);
+ base_yylval.str = mm_strdup(literalbuf);
return CSTRING;
}
<xui>{xuistop} {
mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier");
/* The backend will truncate the identifier here. We do not as it does not change the result. */
addlit(yytext, yyleng);
- yylval.str = mm_strdup(literalbuf);
+ base_yylval.str = mm_strdup(literalbuf);
return UIDENT;
}
<xd,xui>{xddouble} { addlitchar('"'); }
return yytext[0];
}
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return Op;
}
<SQL>{param} {
- yylval.ival = atol(yytext+1);
+ base_yylval.ival = atol(yytext+1);
return PARAM;
}
<C,SQL>{integer} {
)
{
errno = 0;
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return FCONST;
}
- yylval.ival = val;
+ base_yylval.ival = val;
return ICONST;
}
<SQL>{ip} {
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return IP;
}
<C,SQL>{decimal} {
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return FCONST;
}
<C,SQL>{real} {
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return FCONST;
}
<SQL>{realfail1} {
yyless(yyleng-1);
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return FCONST;
}
<SQL>{realfail2} {
yyless(yyleng-2);
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return FCONST;
}
<SQL>:{identifier}((("->"|\.){identifier})|(\[{array}\]))* {
- yylval.str = mm_strdup(yytext+1);
+ base_yylval.str = mm_strdup(yytext+1);
return(CVARIABLE);
}
<SQL>{identifier} {
* to do so; that's just another way that ecpg could get
* out of step with the backend.
*/
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return IDENT;
}
}
char* endptr;
errno = 0;
- yylval.ival = strtoul((char *)yytext,&endptr,16);
+ base_yylval.ival = strtoul((char *)yytext,&endptr,16);
if (*endptr != '\0' || errno == ERANGE)
{
errno = 0;
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return SCONST;
}
return ICONST;
}
else
{
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return(CPP_LINE);
}
}
}
else
{
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return(CPP_LINE);
}
}
<C,SQL>{cppline} {
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return(CPP_LINE);
}
<C>{identifier} {
return keyword->value;
else
{
- yylval.str = mm_strdup(yytext);
+ base_yylval.str = mm_strdup(yytext);
return IDENT;
}
}