FSM
[ class tree: FSM ] [ index: FSM ] [ all elements ]

Source for file rpn.php

Documentation is available at rpn.php

  1. <?php
  2.  
  3. require_once 'FSM.php';
  4.  
  5. function BeginBuildNumber($symbol&$payload)
  6. {
  7.     array_push($payload$symbol);
  8. }
  9.  
  10. function BuildNumber($symbol&$payload)
  11. {
  12.     $n array_pop($payload);
  13.     $n $n $symbol;
  14.     array_push($payload$n);
  15. }
  16.  
  17. function EndBuildNumber($symbol&$payload)
  18. {
  19.     $n array_pop($payload);
  20.     array_push($payload(int)$n);
  21. }
  22.  
  23. function DoOperator($symbol&$payload)
  24. {
  25.     $ar array_pop($payload);
  26.     $al array_pop($payload);
  27.  
  28.     if ($symbol == '+'{
  29.         array_push($payload$al $ar);
  30.     elseif ($symbol == '-'{
  31.         array_push($payload$al $ar);
  32.     elseif ($symbol == '*'{
  33.         array_push($payload$al $ar);
  34.     elseif ($symbol == '/'{
  35.         array_push($payload$al $ar);
  36.     }
  37. }
  38.  
  39. function DoEqual($symbol$payload)
  40. {
  41.     echo array_pop($payload"\n";
  42. }
  43.  
  44. function Error($symbol$payload)
  45. {
  46.     echo "This does not compute: $symbol\n";
  47. }
  48.  
  49. $stack = array();
  50.  
  51. $fsm = new FSM('INIT'$stack);
  52. $fsm->setDefaultTransition('INIT''Error');
  53.  
  54. $fsm->addTransitionAny('INIT''INIT');
  55. $fsm->addTransition('=''INIT''INIT''DoEqual');
  56. $fsm->addTransitions(range(0,9)'INIT''BUILDING_NUMBER''BeginBuildNumber');
  57. $fsm->addTransitions(range(0,9)'BUILDING_NUMBER''BUILDING_NUMBER''BuildNumber');
  58. $fsm->addTransition(' ''BUILDING_NUMBER''INIT''EndBuildNumber');
  59. $fsm->addTransitions(array('+','-','*','/')'INIT''INIT''DoOperator');
  60.  
  61. echo "Expression:\n";
  62. $stdin fopen('php://stdin''r');
  63. $expression rtrim(fgets($stdin));
  64. $symbols preg_split('//'$expression-1PREG_SPLIT_NO_EMPTY);
  65.  
  66. $fsm->processList($symbols);

Documentation generated on Mon, 11 Mar 2019 16:02:22 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.