Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Membina Kalkulator dalam PHP Menggunakan Algoritma Shunting Yard?

Bagaimana untuk Membina Kalkulator dalam PHP Menggunakan Algoritma Shunting Yard?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-11 06:22:11119semak imbas

How to Build a Calculator in PHP Using the Shunting Yard Algorithm?

Bagaimana untuk mencipta kalkulator dalam PHP?

Dalam PHP, mencipta kalkulator memerlukan menghuraikan dan menilai ungkapan matematik yang dimasukkan oleh pengguna. Ini mungkin mencabar, kerana ia melibatkan pengendalian input pengguna dan menggunakan operasi matematik.

Menggunakan Algoritma Shunting Yard

Satu pendekatan yang disyorkan ialah memanfaatkan Algoritma Shunting Yard. Algoritma ini menukar ungkapan matematik kepada Notasi Bahasa Poland Songsang (RPN), yang lebih mudah untuk dinilai.

Contoh Pelaksanaan

Berikut ialah contoh mudah menggunakan Algoritma Shunting Yard:

// Terminal expression abstract class
abstract class TerminalExpression {

    public function operate() {
        return $this->value;
    }

    public function isOperator() {
        return false;
    }

    public function isParenthesis() {
        return false;
    }

    public function isNoOp() {
        return false;
    }
}

// Operator expression abstract class
abstract class Operator extends TerminalExpression {

    public function isOperator() {
        return true;
    }
}

// Stack implementation
class Stack {

    private $data = [];

    public function push($element) {
        $this->data[] = $element;
    }

    public function peek() {
        return end($this->data);
    }

    public function pop() {
        return array_pop($this->data);
    }
}

// Math class for evaluation
class Math {

    public function evaluate($expression) {
        $stack = $this->parse($expression);
        return $this->run($stack);
    }

    private function parse($expression) {
        $tokens = $this->tokenize($expression);
        $output = new Stack();
        $operators = new Stack();

        foreach ($tokens as $token) {
            $type = TerminalExpression::factory($token);

            if ($type->isOperator()) {
                $this->parseOperator($type, $output, $operators);
            } elseif ($type->isParenthesis()) {
                $this->parseParenthesis($type, $output, $operators);
            } else {
                $output->push($type);
            }
        }

        while (($op = $operators->pop())) {
            if ($op->isParenthesis()) {
                throw new RuntimeException('Mismatched Parenthesis');
            }
            $output->push($op);
        }

        return $output;
    }

    private function run(Stack $stack) {
        while (($operator = $stack->pop()) && $operator->isOperator()) {
            $value = $operator->operate($stack);
            if ($value !== null) {
                $stack->push(TerminalExpression::factory($value));
            }
        }
        return $operator ? $operator->render() : $this->render($stack);
    }

    protected function tokenize($string) {
        return preg_split('((\d+|\+|-|\(|\)|\*|/)|\s+)', $string, null, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
    }
}

$math = new Math();
$answer = $math->evaluate('(2 + 3) * 4');
var_dump($answer); // int(20)

Contoh ini menunjukkan cara menggunakan Algoritma Shunting Yard untuk menghuraikan dan menilai ungkapan matematik.

Atas ialah kandungan terperinci Bagaimana untuk Membina Kalkulator dalam PHP Menggunakan Algoritma Shunting Yard?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn