|
1 | | -#!/usr/bin/perl |
| 1 | +#!/usr/bin/perl -w |
| 2 | + |
| 3 | +use strict; |
2 | 4 |
|
3 | 5 | # Check that the keyword lists in gram.y and kwlist.h are sane. Run from |
4 | 6 | # the top directory, or pass a path to a top directory as argument. |
5 | 7 | # |
6 | | -# $PostgreSQL: pgsql/src/tools/check_keywords.pl,v 1.1 2009/04/29 05:05:57 heikki Exp $ |
| 8 | +# $PostgreSQL: pgsql/src/tools/check_keywords.pl,v 1.2 2009/04/30 10:26:35 heikki Exp $ |
| 9 | + |
| 10 | +my$path; |
7 | 11 |
|
8 | 12 | if (@ARGV) { |
9 | 13 | $path =$ARGV[0]; |
10 | 14 | shift@ARGV; |
| 15 | +}else { |
| 16 | +$path ="."; |
11 | 17 | } |
12 | 18 |
|
13 | | -if ($patheq'') {$path ="."; } |
14 | | - |
15 | 19 | $[ = 1;# set array base to 1 |
16 | 20 | $, ='';# set output field separator |
17 | 21 | $\ ="\n";# set output record separator |
18 | 22 |
|
| 23 | +my%keyword_categories; |
19 | 24 | $keyword_categories{'unreserved_keyword'} ='UNRESERVED_KEYWORD'; |
20 | 25 | $keyword_categories{'col_name_keyword'} ='COL_NAME_KEYWORD'; |
21 | 26 | $keyword_categories{'type_func_name_keyword'} ='TYPE_FUNC_NAME_KEYWORD'; |
22 | 27 | $keyword_categories{'reserved_keyword'} ='RESERVED_KEYWORD'; |
23 | 28 |
|
24 | | -$gram_filename ="$path/src/backend/parser/gram.y"; |
25 | | -open(GRAM,$gram_filename) ||die("Could not open$gram_filename!"); |
| 29 | +my$gram_filename ="$path/src/backend/parser/gram.y"; |
| 30 | +open(GRAM,$gram_filename) ||die("Could not open :$gram_filename"); |
| 31 | + |
| 32 | +my ($S,$s,$k,$n,$kcat); |
| 33 | +my$comment; |
| 34 | +my@arr; |
| 35 | +my%keywords; |
| 36 | + |
26 | 37 | line:while (<GRAM>) { |
27 | 38 | chomp;# strip record separator |
28 | | -@Fld =split('',$_, -1); |
29 | 39 |
|
30 | 40 | $S =$_; |
31 | 41 | # Make sure any braces are split |
|
50 | 60 | $n = (@arr =split('',$S)); |
51 | 61 |
|
52 | 62 | # Ok, we're in a keyword list. Go through each field in turn |
53 | | -for ($fieldIndexer = 1;$fieldIndexer <=$n;$fieldIndexer++) { |
| 63 | +for (my$fieldIndexer = 1;$fieldIndexer <=$n;$fieldIndexer++) { |
54 | 64 | if ($arr[$fieldIndexer]eq'*/' &&$comment) { |
55 | 65 | $comment = 0; |
56 | 66 | next; |
|
69 | 79 |
|
70 | 80 | if ($arr[$fieldIndexer]eq';') { |
71 | 81 | # end of keyword list |
72 | | -$line =''; |
73 | 82 | $kcat =''; |
74 | 83 | next; |
75 | 84 | } |
|
85 | 94 | close GRAM; |
86 | 95 |
|
87 | 96 | # Check that all keywords are in alphabetical order |
| 97 | +my ($prevkword,$kword,$bare_kword); |
88 | 98 | foreach$kcat (keys%keyword_categories) { |
89 | 99 | $prevkword =''; |
90 | 100 |
|
|
103 | 113 | # kwhashes is a hash of hashes, keyed by keyword category id, e.g. |
104 | 114 | # UNRESERVED_KEYWORD. Each inner hash is a keyed by keyword id, e.g. ABORT_P |
105 | 115 | # with a dummy value. |
| 116 | +my%kwhashes; |
106 | 117 | while (my ($kcat,$kcat_id) =each(%keyword_categories) ) { |
107 | 118 | @arr = @{$keywords{$kcat}}; |
108 | 119 |
|
|
114 | 125 |
|
115 | 126 | # Now read in kwlist.h |
116 | 127 |
|
117 | | -$kwlist_filename ="$path/src/include/parser/kwlist.h"; |
118 | | -open(KWLIST,$kwlist_filename) ||die("Could not open$kwlist_filename!"); |
| 128 | +my$kwlist_filename ="$path/src/include/parser/kwlist.h"; |
| 129 | +open(KWLIST,$kwlist_filename) ||die("Could not open:$kwlist_filename"); |
119 | 130 |
|
120 | | -$prevkwstring =''; |
| 131 | +my$prevkwstring =''; |
| 132 | +my$bare_kwname; |
| 133 | +my%kwhash; |
121 | 134 | kwlist_line:while (<KWLIST>) { |
122 | 135 | my($line) =$_; |
123 | 136 |
|
|