static char *sccsid = "@(#)gram.y 4.1 (Berkeley) 83/09/07";
%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 = {
static char yytext[INMAX];
register char *cp1, *cp2;
register struct block *bp;
case EOF: /* end of file */
case '#': /* start of comment */
while ((c = getc(fin)) != EOF && c != '\n')
case '\t': /* skip blanks */
if ((c = getc(fin)) == '>')
cp2 = &yytext[INMAX - 1];
fatal("input line too long\n");
if (c == EOF || any(c, " \t()=\n")) {
yylval.blk = bp = ALLOC(block);
fatal("ran out of memory\n");
if (!strcmp(yytext, "install"))
else if (!strcmp(yytext, "verify"))
else if (!strcmp(yytext, "notify"))
else if (!strcmp(yytext, "except"))
bp->b_next = bp->b_args = NULL;
bp->b_name = cp1 = (char *) malloc(c);
fatal("ran out of memory\n");
for (cp2 = yytext; *cp1++ = *cp2++; )
* Error printing routine in parser.
fprintf(stderr, "rdist: line %d: %s\n", yylineno, s);