@@ -39,17 +39,19 @@ fprintf_to_ereport(const char *fmt, const char *msg)
3939 ereport (ERROR, (errmsg_internal (" %s" , msg)));
4040}
4141
42-
43- static int yyline = 1 ; /* line number for error reporting */
44-
4542%}
4643
44+ %option reentrant
45+ %option bison-bridge
4746%option 8bit
4847%option never-interactive
4948%option nodefault
5049%option noinput
5150%option nounput
5251%option noyywrap
52+ %option noyyalloc
53+ %option noyyrealloc
54+ %option noyyfree
5355%option warn
5456%option prefix="boot_yy"
5557
@@ -58,31 +60,31 @@ id [-A-Za-z0-9_]+
5860sid \' ([^ ' ]| \'\' )* \'
5961
6062/*
61- * Keyword tokens return the keyword text (as a constant string) in boot_yylval. kw,
63+ * Keyword tokens return the keyword text (as a constant string) in yylval-> kw,
6264 * just in case that's needed because we want to treat the keyword as an
6365 * unreserved identifier. Note that _null_ is not treated as a keyword
6466 * for this purpose; it's the one "reserved word" in the bootstrap syntax.
6567 *
6668 * Notice that all the keywords are case-sensitive, and for historical
6769 * reasons some must be upper case.
6870 *
69- * String tokens return a palloc'd string in boot_yylval. str.
71+ * String tokens return a palloc'd string in yylval-> str.
7072 */
7173
7274%%
7375
74- open { boot_yylval. kw = " open" ; return OPEN; }
76+ open { yylval-> kw = " open" ; return OPEN; }
7577
76- close { boot_yylval. kw = " close" ; return XCLOSE; }
78+ close { yylval-> kw = " close" ; return XCLOSE; }
7779
78- create { boot_yylval. kw = " create" ; return XCREATE; }
80+ create { yylval-> kw = " create" ; return XCREATE; }
7981
80- OID { boot_yylval. kw = " OID" ; return OBJ_ID; }
81- bootstrap { boot_yylval. kw = " bootstrap" ; return XBOOTSTRAP; }
82- shared_relation { boot_yylval. kw = " shared_relation" ; return XSHARED_RELATION; }
83- rowtype_oid { boot_yylval. kw = " rowtype_oid" ; return XROWTYPE_OID; }
82+ OID { yylval-> kw = " OID" ; return OBJ_ID; }
83+ bootstrap { yylval-> kw = " bootstrap" ; return XBOOTSTRAP; }
84+ shared_relation { yylval-> kw = " shared_relation" ; return XSHARED_RELATION; }
85+ rowtype_oid { yylval-> kw = " rowtype_oid" ; return XROWTYPE_OID; }
8486
85- insert { boot_yylval. kw = " insert" ; return INSERT_TUPLE; }
87+ insert { yylval-> kw = " insert" ; return INSERT_TUPLE; }
8688
8789_null_ { return NULLVAL; }
8890
@@ -91,43 +93,72 @@ _null_ { return NULLVAL; }
9193" (" { return LPAREN; }
9294" )" { return RPAREN; }
9395
94- [\n ] { yyline ++; }
96+ [\n ] { yylineno ++; }
9597[\r\t ] ;
9698
9799^ \# [^ \n ]* ; /* drop everything after "#" for comments */
98100
99- declare { boot_yylval. kw = " declare" ; return XDECLARE; }
100- build { boot_yylval. kw = " build" ; return XBUILD; }
101- indices { boot_yylval. kw = " indices" ; return INDICES; }
102- unique { boot_yylval. kw = " unique" ; return UNIQUE; }
103- index { boot_yylval. kw = " index" ; return INDEX; }
104- on { boot_yylval. kw = " on" ; return ON; }
105- using { boot_yylval. kw = " using" ; return USING; }
106- toast { boot_yylval. kw = " toast" ; return XTOAST; }
107- FORCE { boot_yylval. kw = " FORCE" ; return XFORCE; }
108- NOT { boot_yylval. kw = " NOT" ; return XNOT; }
109- NULL { boot_yylval. kw = " NULL" ; return XNULL; }
101+ declare { yylval-> kw = " declare" ; return XDECLARE; }
102+ build { yylval-> kw = " build" ; return XBUILD; }
103+ indices { yylval-> kw = " indices" ; return INDICES; }
104+ unique { yylval-> kw = " unique" ; return UNIQUE; }
105+ index { yylval-> kw = " index" ; return INDEX; }
106+ on { yylval-> kw = " on" ; return ON; }
107+ using { yylval-> kw = " using" ; return USING; }
108+ toast { yylval-> kw = " toast" ; return XTOAST; }
109+ FORCE { yylval-> kw = " FORCE" ; return XFORCE; }
110+ NOT { yylval-> kw = " NOT" ; return XNOT; }
111+ NULL { yylval-> kw = " NULL" ; return XNULL; }
110112
111113{id } {
112- boot_yylval. str = pstrdup (yytext);
114+ yylval-> str = pstrdup (yytext);
113115 return ID;
114116 }
115117{sid } {
116118 /* strip quotes and escapes */
117- boot_yylval. str = DeescapeQuotedString (yytext);
119+ yylval-> str = DeescapeQuotedString (yytext);
118120 return ID;
119121 }
120122
121123. {
122- elog (ERROR, " syntax error at line %d: unexpected character \" %s\" " , yyline , yytext);
124+ elog (ERROR, " syntax error at line %d: unexpected character \" %s\" " , yylineno , yytext);
123125 }
124126
125127%%
126128
127129/* LCOV_EXCL_STOP */
128130
129131void
130- boot_yyerror (const char *message)
132+ boot_yyerror (yyscan_t yyscanner, const char *message)
133+ {
134+ struct yyguts_t * yyg = (struct yyguts_t *) yyscanner; /* needed for yylineno macro */
135+
136+ elog (ERROR, " %s at line %d" , message, yylineno);
137+ }
138+
139+ /*
140+ * Interface functions to make flex use palloc() instead of malloc().
141+ * It'd be better to make these static, but flex insists otherwise.
142+ */
143+
144+ void *
145+ yyalloc (yy_size_t size, yyscan_t yyscanner)
146+ {
147+ return palloc (size);
148+ }
149+
150+ void *
151+ yyrealloc (void *ptr, yy_size_t size, yyscan_t yyscanner)
152+ {
153+ if (ptr)
154+ return repalloc (ptr, size);
155+ else
156+ return palloc (size);
157+ }
158+
159+ void
160+ yyfree (void *ptr, yyscan_t yyscanner)
131161{
132- elog (ERROR, " %s at line %d" , message, yyline);
162+ if (ptr)
163+ pfree (ptr);
133164}
0 commit comments