aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/parser/gram.y2
-rw-r--r--src/interfaces/ecpg/preproc/check_rules.pl12
-rw-r--r--src/interfaces/ecpg/preproc/parse.pl8
3 files changed, 20 insertions, 2 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index a8ce22f3117..53773a9e99a 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -1443,6 +1443,7 @@ generic_set:
n->name = $1;
$$ = n;
}
+ ;
set_rest_more: /* Generic SET syntaxes: */
generic_set {$$ = $1;}
@@ -6192,6 +6193,7 @@ attrs: '.' attr_name
type_name_list:
Typename { $$ = list_make1($1); }
| type_name_list ',' Typename { $$ = lappend($1, $3); }
+ ;
/*****************************************************************************
*
diff --git a/src/interfaces/ecpg/preproc/check_rules.pl b/src/interfaces/ecpg/preproc/check_rules.pl
index e681943856b..b1501d0804e 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-2017, 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 (<$parser_fh>)
$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 (<$parser_fh>)
}
}
+die "unterminated rule at end of grammar\n"
+ if $in_rule;
+
close $parser_fh;
if ($verbose)
{
diff --git a/src/interfaces/ecpg/preproc/parse.pl b/src/interfaces/ecpg/preproc/parse.pl
index 768df3a6b1c..7ed43e6a87f 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;
@@ -288,6 +289,7 @@ sub main
@fields = ();
$infield = 0;
$line = '';
+ $in_rule = 0;
next;
}
@@ -365,6 +367,9 @@ sub main
$line = '';
@fields = ();
$infield = 1;
+ die "unterminated rule at grammar line $.\n"
+ if $in_rule;
+ $in_rule = 1;
next;
}
elsif ($copymode)
@@ -415,6 +420,9 @@ sub main
}
}
}
+ die "unterminated rule at end of grammar\n"
+ if $in_rule;
+ return;
}