⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rpn.php

📁 Professional PHP5 code for this book
💻 PHP
字号:
<?php          require_once 'FSM.php';          function BeginBuildNumber($symbol, $payload)     {         array_push($payload, $symbol);     }         function BuildNumber($symbol, $payload)    {        $n = array_pop($payload);        $n = $n . $symbol;        array_push($payload, $n);    }        function EndBuildNumber($symbol, $payload)    {        $n = array_pop($payload);        array_push($payload, (int)$n);    }        function DoOperator($symbol, $payload)    {        $ar = array_pop($payload);       $al = array_pop($payload);            if ($symbol == '+') {            array_push($payload, $al + $ar);        } elseif ($symbol == '-') {            array_push($payload, $al - $ar);        } elseif ($symbol == '*') {            array_push($payload, $al * $ar);        } elseif ($symbol == '/') {            array_push($payload, $al / $ar);        }   }        function DoEqual($symbol, $payload)    {        echo array_pop($payload) . "\n";    }        function Error($symbol, $payload)    {        echo "This does not compute: $symbol\n";    }        $stack = array();        $fsm = new FSM('INIT', $stack);   $fsm->setDefaultTransition('INIT', 'Error');        $fsm->addTransitionAny('INIT', 'INIT');    $fsm->addTransition('=', 'INIT', 'INIT', 'DoEqual');    $fsm->addTransitions(range(0,9), 'INIT', 'BUILDING_NUMBER', 'BeginBuildNumber');    $fsm->addTransitions(range(0,9), 'BUILDING_NUMBER', 'BUILDING_NUMBER', 'BuildNumber');    $fsm->addTransition(' ', 'BUILDING_NUMBER', 'INIT', 'EndBuildNumber');    $fsm->addTransitions(array('+','-','*','/'), 'INIT', 'INIT', 'DoOperator');        echo "Expression:\n";    $stdin = fopen('php://stdin', 'r');    $expression = rtrim(fgets($stdin));    $symbols = preg_split('//', $expression, -1, PREG_SPLIT_NO_EMPTY);        $fsm->processList($symbols);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -