12345678910111213141516171819202122232425262728293031323334353637383940 |
- # LLgen: LL(1) parser generator
- # variables: LLGEN, LLFLAGS
- # tool definition for the new version of LLgen that allows for more than
- # one parser in one program. Unfortunately, for historical reasons there
- # is no proper default prefix for LLgen-generated files (LL.output versus
- # Lpars.[ch]). If LLgen would generate LLpars.[ch] instead of Lpars.[ch],
- # we could have a default value for prefix of 'LL', which would make
- # things a bit more simple.
- %instance deftypesuffix(LLgen-src, '%.g') ;
- %include ack-defs.amk;
- %if (%not defined(LLGEN), {
- LLGEN = $EMHOME/bin/LLgen;
- });
- %if (%not defined(LLFLAGS), {
- LLFLAGS = {};
- });
- %tool LLgen (
- verbose: %boolean => %false;
- flags: %string %list => $LLFLAGS;
- prefix: %string => '';
- src: %in %list [type = LLgen-src];
- parser: %out %list [type = C-src]
- => match($src) + if($prefix == '', Lpars.c, $prefix'pars.c');
- tokens: %out [type = C-incl, compare]
- => if($prefix == '', Lpars.h, $prefix'pars.h');
- diagn: %out [type = text]
- => if($prefix == '', LL.output, $prefix.output) %conform $verbose;
- cmd: %in [type = command] => $LLGEN;
- )
- {
- exec($cmd, args => if($verbose, {'-vvv'}, {}) + $flags + $src);
- echo({'LLgen ', $src, ' done'});
- };
|