1
- %{
1
+ %top {
2
2
/*
3
3
* A scanner for EMP-style numeric ranges
4
4
* contrib/cube/cubescan.l
5
5
*/
6
6
7
+ #include "postgres.h"
8
+
9
+ /*
10
+ * NB: include cubeparse.h only AFTER defining YYSTYPE (to match cubeparse.y)
11
+ * and cubedata.h for NDBOX.
12
+ */
13
+ #include "cubedata.h"
14
+ #define YYSTYPE char *
15
+ #include "cubeparse.h"
16
+ }
17
+
18
+ %{
7
19
/* LCOV_EXCL_START */
8
20
9
21
/* No reason to constrain amount of data slurped */
@@ -21,9 +33,7 @@ fprintf_to_ereport(const char *fmt, const char *msg)
21
33
22
34
/* Handles to the buffer that the lexer uses internally */
23
35
static YY_BUFFER_STATE scanbufhandle;
24
- /* this is now declared in cubeparse.y: */
25
- /* static char *scanbuf; */
26
- /* static int scanbuflen; */
36
+ static char *scanbuf;
27
37
%}
28
38
29
39
%option 8bit
@@ -45,24 +55,24 @@ NaN [nN][aA][nN]
45
55
46
56
%%
47
57
48
- {float } yylval = yytext; return CUBEFLOAT;
49
- {infinity } yylval = yytext; return CUBEFLOAT;
50
- {NaN } yylval = yytext; return CUBEFLOAT;
51
- \[ yylval = " (" ; return O_BRACKET;
52
- \] yylval = " )" ; return C_BRACKET;
53
- \( yylval = " (" ; return O_PAREN;
54
- \) yylval = " )" ; return C_PAREN;
55
- \, yylval = " ," ; return COMMA;
58
+ {float } cube_yylval = yytext; return CUBEFLOAT;
59
+ {infinity } cube_yylval = yytext; return CUBEFLOAT;
60
+ {NaN } cube_yylval = yytext; return CUBEFLOAT;
61
+ \[ cube_yylval = " (" ; return O_BRACKET;
62
+ \] cube_yylval = " )" ; return C_BRACKET;
63
+ \( cube_yylval = " (" ; return O_PAREN;
64
+ \) cube_yylval = " )" ; return C_PAREN;
65
+ \, cube_yylval = " ," ; return COMMA;
56
66
[ \t\n\r\f ]+ /* discard spaces */
57
67
. return yytext[0 ]; /* alert parser of the garbage */
58
68
59
69
%%
60
70
61
71
/* LCOV_EXCL_STOP */
62
72
63
- /* result is not used, but Bison expects this signature */
73
+ /* result and scanbuflen are not used, but Bison expects this signature */
64
74
void
65
- yyerror (NDBOX **result, const char *message)
75
+ cube_yyerror (NDBOX **result, Size scanbuflen , const char *message)
66
76
{
67
77
if (*yytext == YY_END_OF_BUFFER_CHAR)
68
78
{
@@ -87,9 +97,9 @@ yyerror(NDBOX **result, const char *message)
87
97
* Called before any actual parsing is done
88
98
*/
89
99
void
90
- cube_scanner_init (const char *str)
100
+ cube_scanner_init (const char *str, Size *scanbuflen )
91
101
{
92
- Size slen = strlen (str);
102
+ Size slen = strlen (str);
93
103
94
104
/*
95
105
* Might be left over after ereport()
@@ -100,7 +110,7 @@ cube_scanner_init(const char *str)
100
110
/*
101
111
* Make a scan buffer with special termination needed by flex.
102
112
*/
103
- scanbuflen = slen;
113
+ * scanbuflen = slen;
104
114
scanbuf = palloc (slen + 2 );
105
115
memcpy (scanbuf, str, slen);
106
116
scanbuf[slen] = scanbuf[slen + 1 ] = YY_END_OF_BUFFER_CHAR;
0 commit comments