#include #include int echo_flag; int lineno; main() { extern int lineno, echo_flag; lineno = 1; echo_flag = 0; if (yyparse() == 0) { /* parse was successful */ /* add code here */ fprintf(stderr,"%s\n", "All done."); } } yyerror(s) char *s; { extern char yytext[]; extern int lineno; fprintf(stderr,"%5d%s%s%s%s\n", lineno, " Syntax error ", (strcmp(s, "syntax error") != 0) ? s : "", " at or before ", yytext); } yywrap() { extern int lineno; fprintf(stderr,"\n%s%6d\n","Number of input lines read = ", lineno-1); return(1); } nfree(argno,va_alist) int argno; va_dcl { va_list ap; char *args[30]; int k; va_start(ap); for (k=0; k < argno; k++) args[k] = va_arg(ap, char *); va_end(ap); for (k=0; k < argno; k++) if (args[k] != NULL) free(args[k]); } char *concat(argno,va_alist) int argno; va_dcl { va_list ap; char *args[30], *b, *malloc(); int k; int newlen = 0; va_start(ap); for (k=0; k < argno; k++) args[k] = va_arg(ap, char *); va_end(ap); for (k=0; k < argno; k++) if (args[k] != NULL) newlen += strlen(args[k]); newlen++; if ((b = malloc(newlen)) == NULL) { fprintf(stderr,"malloc returns NULL for %5d byte(s)\n", newlen); exit(1); } strcpy(b,""); for (k=0; k < argno; k++) if (args[k] != NULL) strcat(b,args[k]); return(b); }