1 | #!/opt/bin/perl |
1 | #!/opt/bin/perl |
|
|
2 | |
|
|
3 | use List::Util; |
2 | |
4 | |
3 | # todo: gather dynamically |
5 | # todo: gather dynamically |
4 | my @kw = qw( |
6 | my @kw = qw( |
5 | ac |
7 | ac |
6 | activate_on_push |
8 | activate_on_push |
… | |
… | |
251 | struct keyword_idx { const char *name; enum keyword index; }; |
253 | struct keyword_idx { const char *name; enum keyword index; }; |
252 | %% |
254 | %% |
253 | EOF |
255 | EOF |
254 | |
256 | |
255 | for (@kw) { |
257 | for (@kw) { |
256 | printf GPERF "%s,%s\n", $_, "KW_" . uc; |
258 | printf GPERF "%s,%s\n", $_, "KW_$_"; |
257 | } |
259 | } |
258 | |
260 | |
259 | print GPERF <<EOF; |
261 | print GPERF <<EOF; |
260 | %% |
262 | %% |
261 | const char *const keyword_str [] = { |
263 | extern const char *const keyword_str [] = { |
262 | "<EOF>", |
264 | "<EOF>", |
263 | "<ERROR>", |
265 | "<ERROR>", |
264 | EOF |
266 | EOF |
265 | |
267 | |
266 | for (@kw) { |
268 | for (@kw) { |
267 | printf GPERF " \"%s\",\n", $_; |
269 | printf GPERF " \"%s\",\n", $_; |
268 | } |
270 | } |
269 | |
271 | |
270 | print GPERF "};\n\n"; |
272 | print GPERF "};\n"; |
|
|
273 | |
|
|
274 | printf GPERF "\nextern const unsigned char keyword_len [] = { 5, 7, %s };\n\n", |
|
|
275 | join ", ", map length, @kw; |
271 | |
276 | |
272 | open KW, ">", "keyword.h"; |
277 | open KW, ">", "keyword.h"; |
273 | |
278 | |
274 | print KW <<EOF; |
279 | print KW <<EOF; |
275 | #ifndef KW_H__ |
280 | #ifndef KW_H__ |
276 | #define KW_H__ |
281 | #define KW_H__ |
277 | |
282 | |
278 | enum keyword { |
283 | enum keyword { |
279 | KW_eof, KW_error, |
284 | KW_EOF, KW_ERROR, |
280 | EOF |
285 | EOF |
281 | |
286 | |
282 | for (@kw) { |
287 | for (@kw) { |
283 | printf KW " %s,\n", "KW_" . uc; |
288 | printf KW " %s,\n", "KW_$_", |
284 | } |
289 | } |
285 | |
290 | |
286 | print KW <<EOF; |
291 | print KW <<EOF; |
287 | NUM_KEYWORD, |
292 | NUM_KEYWORD, |
288 | }; |
293 | }; |
289 | |
294 | |
290 | extern const char *const keyword_str []; |
295 | extern const char *const keyword_str []; |
|
|
296 | extern const unsigned char keyword_len []; |
|
|
297 | |
|
|
298 | EOF |
|
|
299 | |
|
|
300 | printf KW "#define MAX_KEYWORD_LEN %d\n", List::Util::max map length, @kw; |
|
|
301 | |
|
|
302 | print KW <<EOF; |
291 | |
303 | |
292 | #endif |
304 | #endif |
293 | |
305 | |
294 | EOF |
306 | EOF |
295 | |
307 | |