summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/parser/gram.y1
-rw-r--r--src/interfaces/ecpg/preproc/check_rules.pl12
-rw-r--r--src/interfaces/ecpg/preproc/parse.pl8
3 files changed, 19 insertions, 2 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 030285c1fda..b1846e31e37 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -1377,6 +1377,7 @@ generic_set:
n->name = $1;
$$ = n;
}
+ ;
set_rest_more: /* Generic SET syntaxes: */
generic_set {$$ = $1;}
diff --git a/src/interfaces/ecpg/preproc/check_rules.pl b/src/interfaces/ecpg/preproc/check_rules.pl
index e34d7a18607..9fc8d8a4e41 100644
--- a/src/interfaces/ecpg/preproc/check_rules.pl
+++ b/src/interfaces/ecpg/preproc/check_rules.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# src/interfaces/ecpg/preproc/check_rules.pl
-# test parser generater for ecpg
-# call with backend parser as stdin
+# test parser generator for ecpg
+# call with backend grammar as stdin
#
# Copyright (c) 2009-2014, PostgreSQL Global Development Group
#
@@ -47,6 +47,7 @@ my %replace_line = (
my $block = '';
my $yaccmode = 0;
+my $in_rule = 0;
my $brace_indent = 0;
my (@arr, %found);
my $comment = 0;
@@ -131,10 +132,14 @@ while (<GRAM>)
$found{$block} = 1;
$cc++;
$block = '';
+ $in_rule = 0 if $arr[$fieldIndexer] eq ';';
}
elsif (($arr[$fieldIndexer] =~ '[A-Za-z0-9]+:')
|| $arr[ $fieldIndexer + 1 ] eq ':')
{
+ die "unterminated rule at grammar line $.\n"
+ if $in_rule;
+ $in_rule = 1;
$non_term_id = $arr[$fieldIndexer];
$non_term_id =~ tr/://d;
}
@@ -145,6 +150,9 @@ while (<GRAM>)
}
}
+die "unterminated rule at end of grammar\n"
+ if $in_rule;
+
close GRAM;
if ($verbose)
{
diff --git a/src/interfaces/ecpg/preproc/parse.pl b/src/interfaces/ecpg/preproc/parse.pl
index d33ab180d63..d892abeb865 100644
--- a/src/interfaces/ecpg/preproc/parse.pl
+++ b/src/interfaces/ecpg/preproc/parse.pl
@@ -22,6 +22,7 @@ $path = "." unless $path;
my $copymode = 0;
my $brace_indent = 0;
my $yaccmode = 0;
+my $in_rule = 0;
my $header_included = 0;
my $feature_not_supported = 0;
my $tokenmode = 0;
@@ -285,6 +286,7 @@ sub main
@fields = ();
$infield = 0;
$line = '';
+ $in_rule = 0;
next;
}
@@ -362,6 +364,9 @@ sub main
$line = '';
@fields = ();
$infield = 1;
+ die "unterminated rule at grammar line $.\n"
+ if $in_rule;
+ $in_rule = 1;
next;
}
elsif ($copymode)
@@ -412,6 +417,9 @@ sub main
}
}
}
+ die "unterminated rule at end of grammar\n"
+ if $in_rule;
+ return;
}