# 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'});
};