break; } if ($need_push) { array_push($this->stack, $r); } } } function calc($expression) { $this->stack = []; $this->parser->parse($expression, [$this, '_calc']); return $this->stack[0]; } function tree($expression) { $this->parser->printTree($expression); } } ///////////////////////////////////////////////////////////// if (realpath($_SERVER['SCRIPT_FILENAME']) == __FILE__) { $calc = new Calculator(); while ($exp = fgets(STDIN)) { try { $result = $calc->calc($exp); echo "{$result}\n"; } catch (Exception $e) { echo $e->getMessage(), "\n"; } } exit; }
function testCalc() { $calc = new Calculator(); $result = $calc->calc('123'); $this->assertEquals(123, $result); $result = $calc->calc('100 - (35 - 4)'); $this->assertEquals(100 - (35 - 4), $result); $result = $calc->calc('2 * (3 + 4)'); $this->assertEquals(2 * (3 + 4), $result); $result = $calc->calc('9 / 3 * 2'); $this->assertEquals(9 / 3 * 2, $result); $result = $calc->calc('(4+1) * (6 - 1)'); $this->assertEquals((4 + 1) * (6 - 1), $result); $result = $calc->calc('-(11+29)'); $this->assertEquals(-(11 + 29), $result); $result = $calc->calc('4 - -3 * 4'); $this->assertEquals(4 - -3 * 4, $result); $result = $calc->calc('-1 * -1'); $this->assertEquals(-1 * -1, $result); $result = $calc->calc('2.5 * 8'); $this->assertEquals(2.5 * 8, $result); $result = $calc->calc('cos pi/2'); $this->assertEquals(cos(M_PI) / 2, $result); $result = $calc->calc('4 pi-1'); $this->assertEquals(4 * M_PI - 1, $result); $result = $calc->calc('2cos -pi'); $this->assertEquals(2 * cos(-M_PI), $result); }
switch ($this->operator) { case "+": return $this->num1 + $this->num2; break; case "-": return $this->num1 - $this->num2; break; case "*": return $this->num1 * $this->num2; break; case "/": if ($this->num2 == 0) { echo "<script>alert('除数不能为0!');</script>"; return "除数不能为0!"; } else { return $this->num1 / $this->num2; } break; default: break; } } } if (isset($_POST["btn"])) { if (isset($_POST["op"])) { $calculator1 = new Calculator($_POST["num1"], $_POST["num2"], $_POST["op"]); echo "计算结果:" . $calculator1->calc(); } else { echo "<script>alert('请选择操作!');</script>"; } }