static char *sccsid = "@(#)gram.y 4.2 (Berkeley) 83/09/27";
%type <blk> NAME, INSTALL, VERIFY, NOTIFY, EXCEPT, namelist, names, cmdlist, cmd
command: NAME EQUAL namelist = {
(void) lookup($1->b_name, $1, 1);
| namelist ARROW namelist cmdlist = {
| namelist DCOLON namelist cmdlist = {
register struct block *b;
if (b == NULL || b->b_next != NULL)
fatal("exactly one name allowed\n");
$1->b_args = expand($2, 1);
$1->b_args = expand($2, 0);
static char yytext[INMAX];
register char *cp1, *cp2;
register struct block *bp;
static char quotechars[] = "[]{}*?";
case EOF: /* end of file */
case '#': /* start of comment */
while ((c = getc(fin)) != EOF && c != '\n')
case '\t': /* skip blanks */
if ((c = getc(fin)) == '>')
if ((c = getc(fin)) == ':')
cp2 = &yytext[INMAX - 1];
fatal("input line too long\n");
if ((c = getc(fin)) != EOF) {
if (c == EOF || any(c, " \t()=\n")) {
if (!strcmp(yytext, "install"))
else if (!strcmp(yytext, "verify"))
else if (!strcmp(yytext, "notify"))
else if (!strcmp(yytext, "except"))
yylval.blk = bp = makeblock(c, yytext);
* Error printing routine in parser.
fprintf(stderr, "rdist: line %d: %s\n", yylineno, s);