diff --git a/src/backend/parser/Makefile b/src/backend/parser/Makefile index 00e8e88e9c2..c8fba3bbb0c 100644 --- a/src/backend/parser/Makefile +++ b/src/backend/parser/Makefile @@ -12,7 +12,7 @@ include $(top_builddir)/src/Makefile.global override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) -OBJS= analyze.o gram.o keywords.o kwlookup.o parser.o \ +OBJS= analyze.o gram.o scan.o keywords.o kwlookup.o parser.o \ parse_agg.o parse_clause.o parse_coerce.o parse_collate.o parse_cte.o \ parse_expr.o parse_func.o parse_node.o parse_oper.o parse_param.o \ parse_relation.o parse_target.o parse_type.o parse_utilcmd.o scansup.o @@ -22,12 +22,9 @@ FLEXFLAGS = -CF -b -p -p include $(top_srcdir)/src/backend/common.mk -# scan is compiled as part of gram -gram.o: scan.c - # Latest flex causes warnings in this file. ifeq ($(GCC),yes) -gram.o: CFLAGS += -Wno-error +scan.o: CFLAGS += -Wno-error endif @@ -58,7 +55,7 @@ endif # Force these dependencies to be known even without dependency info built: -gram.o keywords.o parser.o: gram.h +gram.o scan.o keywords.o parser.o: gram.h # gram.c, gram.h, and scan.c are in the distribution tarball, so they diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 1d4d942f024..1a08ea47fdd 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -13374,13 +13374,3 @@ parser_init(base_yy_extra_type *yyext) { yyext->parsetree = NIL; /* in case grammar forgets to set it */ } - -/* - * Must undefine this stuff before including scan.c, since it has different - * definitions for these macros. - */ -#undef yyerror -#undef yylval -#undef yylloc - -#include "scan.c" diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index cde8fae620f..2a2895bac0d 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -1,4 +1,4 @@ -%{ +%top{ /*------------------------------------------------------------------------- * * scan.l @@ -6,7 +6,7 @@ * * NOTE NOTE NOTE: * - * The rules in this file must be kept in sync with psql's lexer!!! + * The rules in this file must be kept in sync with psql's psqlscan.l! * * The rules are designed so that the scanner never has to backtrack, * in the sense that there is always a rule that can match the input @@ -34,12 +34,13 @@ #include #include +#include "parser/gramparse.h" #include "parser/parser.h" /* only needed for GUC variables */ -#include "parser/scanner.h" #include "parser/scansup.h" #include "mb/pg_wchar.h" +} - +%{ /* Avoid exit() on fatal scanner errors (a bit ugly -- see yy_fatal_error) */ #undef fprintf #define fprintf(file, fmt, msg) ereport(ERROR, (errmsg_internal("%s", msg))) diff --git a/src/interfaces/ecpg/preproc/Makefile b/src/interfaces/ecpg/preproc/Makefile index dd1e070625d..df83e29fc46 100644 --- a/src/interfaces/ecpg/preproc/Makefile +++ b/src/interfaces/ecpg/preproc/Makefile @@ -26,7 +26,7 @@ override CPPFLAGS := -I../include -I$(top_srcdir)/src/interfaces/ecpg/include \ override CFLAGS += $(PTHREAD_CFLAGS) -DECPG_COMPILE -OBJS= preproc.o type.o ecpg.o output.o parser.o \ +OBJS= preproc.o pgc.o type.o ecpg.o output.o parser.o \ keywords.o c_keywords.o ecpg_keywords.o kwlookup.o ../ecpglib/typename.o descriptor.o variable.o \ $(WIN32RES) @@ -38,9 +38,6 @@ ecpg: $(OBJS) | submake-libpgport ../ecpglib/typename.o: ../ecpglib/typename.c $(MAKE) -C $(dir $@) $(notdir $@) -# pgc is compiled as part of preproc -preproc.o: pgc.c - preproc.h: preproc.c ; preproc.c: preproc.y @@ -61,7 +58,7 @@ preproc.y: ../../../backend/parser/gram.y parse.pl ecpg.addons ecpg.header ecpg. $(PERL) $(srcdir)/parse.pl $(srcdir) < $< > $@ $(PERL) $(srcdir)/check_rules.pl $(srcdir) $< -ecpg_keywords.o c_keywords.o keywords.o preproc.o parser.o: preproc.h +ecpg_keywords.o c_keywords.o keywords.o preproc.o pgc.o parser.o: preproc.h kwlookup.c: % : $(top_srcdir)/src/backend/parser/% rm -f $@ && $(LN_S) $< . diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index 422013c934d..8ed2eb48612 100644 --- a/src/interfaces/ecpg/preproc/ecpg.trailer +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -1912,11 +1912,3 @@ void parser_init(void) { /* This function is empty. It only exists for compatibility with the backend parser right now. */ } - -/* - * Must undefine base_yylex before including pgc.c, since we want it - * to create the function base_yylex not filtered_base_yylex. - */ -#undef base_yylex - -#include "pgc.c" diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index ef0fed7ab68..c8455b88d8b 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -1,4 +1,4 @@ -%{ +%top{ /*------------------------------------------------------------------------- * * pgc.l @@ -23,7 +23,19 @@ #include #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; static int xcdepth = 0; /* depth of nesting in slash-star comments */