%{
#include <stdio.h>
typedef struct complex { double a; double b;} COMPLEX;
%}
%union   { struct complex *cnum;
           int b;
          } 
        

%token <cnum>  INTEGER
%type <cnum> expr
%left '+' '-'
%left '*'
%%
 lines:
        | lines line
        ;
line: '\n'
       | expr { printf("( %g , %g ) \n ", $1->a, $1->b);}
    ;
expr:  expr '+' expr { $$ = (struct complex *) malloc(sizeof(struct complex));
                       $$->a = $1->a+ $3->a;
                       $$->b = $1->b +$3->b; }
      | expr '-' expr { $$ = (struct complex *) malloc(sizeof(struct complex));
                        $$->a = $1->a - $3->a;
                        $$->b = $1->b -$3->b; }
      | expr '*' expr { $$ = (struct complex *) malloc(sizeof(struct complex));
                        $$->a = $1->a * $3->a - $1->b *$3->b; 
                        $$->b = $1->a *$3->b +$1->b*$3->a; }
       | '(' INTEGER ',' INTEGER ')' { 
                     $$ = (struct complex *) malloc(sizeof(struct complex));
                    $$->a = $2->a; $$->b= $4->a;}
       ;

%%
#include "lex.yy.c"
main()
{
   yyparse();
 }
/*yyerror(s)
char *s;
{ fprintf(stderr, "line no. %d \n", lineno);
}
*/
