#include <stdio.h>#include <varargs.h>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);}