summaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-12-11 17:44:16 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2016-12-11 17:44:16 -0500
commit4262c5b1eecc63f12f86daa293428009eee54b5c (patch)
tree8f354c700797a2616f637f23defdaa0e66c4d187 /src/backend/parser
parentc6caa520008761b2ce9c88f46e537d3044cf7c96 (diff)
Build backend/parser/scan.l and interfaces/ecpg/preproc/pgc.l standalone.
Back-patch commit 72b1e3a21 into the pre-9.6 branches. As noted in the original commit, this has some extra benefits: we can narrow the scope of the -Wno-error flag that's forced on scan.c. Also, since these grammar and lexer files are so large, splitting them into separate build targets should have some advantages in build speed, particularly in parallel or ccache'd builds. However, the real reason for doing this now is that it avoids symbol- redefinition warnings (or worse) with the latest version of flex. It's not unreasonable that people would want to compile our old branches with recent tools. Per report from Дилян Палаузов. Discussion: https://postgr.es/m/d845c1af-e18d-6651-178f-9f08cdf37e10@aegee.org
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/Makefile9
-rw-r--r--src/backend/parser/gram.y10
-rw-r--r--src/backend/parser/scan.l9
3 files changed, 8 insertions, 20 deletions
diff --git a/src/backend/parser/Makefile b/src/backend/parser/Makefile
index 0395bd5934a..9cc8946fa1b 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
@@ -20,12 +20,9 @@ OBJS= analyze.o gram.o keywords.o kwlookup.o parser.o \
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
@@ -47,7 +44,7 @@ scan.c: FLEX_NO_BACKUP=yes
# 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 c554e634fbb..642915f9aa2 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -14861,13 +14861,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 82b20c6e5f6..ce2c84fd098 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 <ctype.h>
#include <unistd.h>
+#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) fprintf_to_ereport(fmt, msg)