1 | #!/opt/bin/perl |
1 | #!/opt/bin/perl |
|
|
2 | |
|
|
3 | my %ARG = @ARGV; |
2 | |
4 | |
3 | use List::Util; |
5 | use List::Util; |
4 | |
6 | |
5 | # todo: gather dynamically |
7 | # todo: gather dynamically |
6 | my @kw = qw( |
8 | my @kw = qw( |
… | |
… | |
258 | Int |
260 | Int |
259 | Pow |
261 | Pow |
260 | More |
262 | More |
261 | ); |
263 | ); |
262 | |
264 | |
263 | open GPERF, "|-", "gperf -m50 >kw_hash.h" |
265 | open GPERF, "|-", "exec $ARG{GPERF} -m50 >kw_hash.h" |
264 | or die "gperf: $!"; |
266 | or die "$ARGV{GPERF}: $!"; |
265 | |
267 | |
266 | print GPERF <<EOF; |
268 | print GPERF <<EOF; |
267 | %language=C++ |
269 | %language=C++ |
268 | %enum |
270 | %enum |
269 | %define class-name kw_lex |
271 | %define class-name kw_lex |
… | |
… | |
293 | print GPERF "};\n"; |
295 | print GPERF "};\n"; |
294 | |
296 | |
295 | printf GPERF "\nextern const unsigned char keyword_len [] = { 5, 7, %s };\n\n", |
297 | printf GPERF "\nextern const unsigned char keyword_len [] = { 5, 7, %s };\n\n", |
296 | join ", ", map length, @kw; |
298 | join ", ", map length, @kw; |
297 | |
299 | |
|
|
300 | close GPERF |
|
|
301 | or die "$ARG{GPERF}: failed to run"; |
|
|
302 | |
298 | open KW, ">", "keyword.h"; |
303 | open KW, ">", "keyword.h"; |
299 | |
304 | |
300 | print KW <<EOF; |
305 | print KW <<EOF; |
301 | #ifndef KW_H__ |
306 | #ifndef KW_H__ |
302 | #define KW_H__ |
307 | #define KW_H__ |