Re: Package Proposal: Math_RPN

From: Date: Wed, 11 Jun 2003 05:06:36 +0000
Subject: Re: Package Proposal: Math_RPN
References: 1 2  Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-17291@lists.php.net to get a copy of this message
On Tue, Jun 10, 2003 at 09:25:07PM +0200, Maciej Szczytowski wrote: > What do you think about it? > > New version is here -> > http://www.maciek.maribex.wizja.net.pl/rpn/ Neat. I also offer up a simple RPN implementation based on my FSM package. -- Jon Parise (jon@php.net) :: The PHP Project (http://www.php.net/)

<?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);
« previous php.pear.dev (#17291) next »