%{
#include <stdio.h>
typedef char *CHAR_PTR;
CHAR_PTR temp,temp1;
char * strcat3(char c, char * s1,char *s)
{     int j,i;
        char * p = calloc(strlen(s)+1+strlen(s1)+20, 1);
        if (p)
                 {  p[0]=c; j = 1;
                         for(i=0;i<strlen(s1);i++) p[j++]=s1[i];p[j++]=',';
                         for(i=0;i<strlen(s)+1;i++) p[j++]=s[i];
                         p[j++]='\0'; return(p);}
        fputs("no room\n", stderr), exit(1);
      }
int flag=0;
extern int i,loop_count;
#define YYSTYPE CHAR_PTR
%}
%token NUMBER
%token ID
%left '+' '-'
%left '*' '/'
%right '^'
%%
 lines:
        | lines line
        ;
line: '\n' {printf(" \n ************\n ");}
    | expr { printf("%s \n", $1);}
    ;
expr:  expr '+' expr { $$=strcat3('+',$1,$3);}

      | expr '-' expr { $$=strcat3('-',$1,$3);}


      | expr '*' expr { $$=strcat3('*',$1,$3);}
      | expr '/' expr { $$=strcat3('/',$1,$3);} 
      | expr '^' expr { $$=strcat3('^',$1,$3);}
      | '(' expr  ')' { $$=strsave($2);}
      | NUMBER  { $$ =strsave($1);}
      | ID      { $$= strsave($1);}
           ;

%%
#include "lex.yy.c"
main()
{   FILE *f;
    int i;
    extern FILE *yyin;
    i=0;
    while ( i < 2) {
    f= fopen("test.dat","r");
    yyin= f;

   yyparse(); printf("First time over *******\n"); i++;}
 }
/*yyerror(s)
char *s;
{ fprintf(stderr, "line no. %d \n", lineno);
}
*/
