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 intscanbuflen;*/
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
- /* resultis not used, but Bison expects this signature */
73
+ /* resultand 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
- Sizeslen =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;