static void evalPow(Parser *p){ int neg= 0; if(p->s[0]=='+') p->s++; if(p->s[0]=='-'){ neg= 1; p->s++; } if(p->s[0]=='('){ p->s++;; evalExpression(p); if(p->s[0]!=')') fprintf(stderr, "Parser: missing )\n"); p->s++; }else{ evalPrimary(p); } if(neg) push(p, -pop(p)); }
static double evalPow(Parser *p){ int sign= (*p->s == '+') - (*p->s == '-'); p->s += sign&1; return (sign|1) * evalPrimary(p); }