diff options
Diffstat (limited to 'src/interfaces/ecpg/preproc/check_rules.pl')
-rw-r--r-- | src/interfaces/ecpg/preproc/check_rules.pl | 12 |
1 files changed, 10 insertions, 2 deletions
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) { |