- 580 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 16:34:05 ]
- >>494
最小限の実装.変な式を入れたときにどうなるかは知らない. <変更点> ・以下のグローバル変数を追加 int ops[100], vals[100], optop, valtop; ・term()は使わないので消していい ・expression() の内容を以下に変更 int expression() { valtop = optop = -1; vals[++valtop] = number(); while (1) { int opcode; if (*p == '+') opcode = 1; else if (*p == '-') opcode = 2; else if (*p == '*') opcode = 3; else if (*p == '/') opcode = 4; else opcode = 0; while (optop >= 0 && ops[optop] >= opcode) { if (ops[optop] == 1) vals[valtop-1] += vals[valtop]; if (ops[optop] == 2) vals[valtop-1] -= vals[valtop]; if (ops[optop] == 3) vals[valtop-1] *= vals[valtop]; if (ops[optop] == 4) vals[valtop-1] /= vals[valtop]; valtop--; optop--;} if (opcode == 0) break; ops[++optop] = opcode; *p++; vals[++valtop] = number();} if (valtop != 0) printf("some error\n"); return vals[0];}
|

|