%{
#include <stdio.h>
typedef struct complex { double a; double b;} COMPLEX, *cnum;
#define YYSTYPE cnum
%}
%token INTEGER
%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;}
           ;

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