| 14 |
|
#include "calcomp.h" |
| 15 |
|
|
| 16 |
|
|
| 17 |
< |
/* is child binary operation lower precedence than parent? */ |
| 17 |
> |
/* is child operation lower precedence than parent? */ |
| 18 |
|
static int |
| 19 |
< |
lower_precedent_binop(int typ, EPNODE *ek) |
| 19 |
> |
lower_precedent_op(int typ, EPNODE *ek) |
| 20 |
|
{ |
| 21 |
|
if (ek == NULL) |
| 22 |
|
return(0); |
| 106 |
|
break; |
| 107 |
|
|
| 108 |
|
case '+': |
| 109 |
– |
case '-': |
| 109 |
|
case '*': |
| 110 |
+ |
case '-': |
| 111 |
|
case '/': |
| 112 |
|
case '^': |
| 113 |
< |
if (lower_precedent_binop(ep->type, ep->v.kid)) { |
| 113 |
> |
if (lower_precedent_op(ep->type, ep->v.kid)) { |
| 114 |
|
fputc('(', fp); |
| 115 |
|
eprint(ep->v.kid, fp); |
| 116 |
|
fputc(')', fp); |
| 117 |
|
} else |
| 118 |
|
eprint(ep->v.kid, fp); |
| 119 |
< |
if (ep->type != '^') { |
| 120 |
< |
fputc(' ', fp); |
| 121 |
< |
fputc(ep->type, fp); |
| 122 |
< |
fputc(' ', fp); |
| 123 |
< |
} else |
| 124 |
< |
fputc(ep->type, fp); |
| 125 |
< |
if (lower_precedent_binop(ep->type, ep->v.kid->sibling)) { |
| 126 |
< |
fputc('(', fp); |
| 127 |
< |
eprint(ep->v.kid->sibling, fp); |
| 128 |
< |
fputc(')', fp); |
| 129 |
< |
} else |
| 130 |
< |
eprint(ep->v.kid->sibling, fp); |
| 119 |
> |
for (ep1 = ep->v.kid->sibling; ep1 != NULL; ep1 = ep1->sibling) { |
| 120 |
> |
if (ep->type != '^') { |
| 121 |
> |
fputc(' ', fp); |
| 122 |
> |
fputc(ep->type, fp); |
| 123 |
> |
fputc(' ', fp); |
| 124 |
> |
} else |
| 125 |
> |
fputc(ep->type, fp); |
| 126 |
> |
if (lower_precedent_op(ep->type, ep1)) { |
| 127 |
> |
fputc('(', fp); |
| 128 |
> |
eprint(ep1, fp); |
| 129 |
> |
fputc(')', fp); |
| 130 |
> |
} else |
| 131 |
> |
eprint(ep1, fp); |
| 132 |
> |
} |
| 133 |
|
break; |
| 134 |
|
|
| 135 |
|
default: |