Esempio n. 1
0
 public function testPoll()
 {
     // Remove the following lines when you implement this test.
     $this->assertTrue($this->object->poll()->toNative() == 9);
     $this->assertTrue($this->object->poll()->toNative() == 8);
     $this->object->clear();
     $this->assertTrue($this->object->poll() == null);
 }
Esempio n. 2
0
 /**
  * Vyhodnocení výrazu
  *
  * @param array
  * @return array
  */
 protected function evaluateExpression(array $expr)
 {
     if ($expr[0] != 'expression') {
         return $this->reduceValue($expr);
     }
     array_shift($expr);
     //převod výrazu do postfixové notace
     $postfix = array();
     $stack = new Stack();
     foreach ($expr as $symbol) {
         if ($symbol == '(') {
             $stack->push($symbol);
         } elseif ($symbol == ')') {
             while ($top = $stack->pop()) {
                 if ($top == '(') {
                     break;
                 }
                 $postfix[] = $top;
             }
             $top = $stack->top();
             if ($top[0] == 'unary' && array_key_exists($top[1], Compiler::$unaryOperators)) {
                 $postfix[] = $stack->pop();
             }
         } elseif ($symbol[0] == 'binary' && array_key_exists($symbol[1], Compiler::$binaryOperators)) {
             if ($stack->count() == 0) {
                 $stack->push($symbol);
                 continue;
             }
             $top = $stack->top();
             while ($top != '(' && $stack->count() > 0 && $top[0] == 'binary' && Compiler::$binaryOperators[$symbol[1]] <= Compiler::$binaryOperators[$top[1]]) {
                 $postfix[] = $stack->pop();
                 $top = $stack->top();
             }
             $stack->push($symbol);
         } elseif ($symbol[0] == 'unary' && array_key_exists($symbol[1], Compiler::$unaryOperators)) {
             $stack->push($symbol);
         } else {
             $postfix[] = $this->reduceValue($symbol);
             $top = $stack->top();
             if ($top[0] == 'unary' && array_key_exists($top[1], Compiler::$unaryOperators)) {
                 $postfix[] = $stack->pop();
             }
         }
     }
     while ($stack->count() > 0) {
         $postfix[] = $stack->pop();
     }
     //vyhodnocení výrazu
     $stack->clear();
     foreach ($postfix as $symbol) {
         if ($symbol[0] == 'unary' && array_key_exists($symbol[1], Compiler::$unaryOperators)) {
             if ($stack->count() < 1) {
                 throw new CompileException("Nedostatek operandů pro unární operátor '{$symbol['1']}'");
             }
             $symbol = $this->evaluateUnaryOperation($symbol[1], $stack->pop());
         } elseif ($symbol[0] == 'binary' && array_key_exists($symbol[1], Compiler::$binaryOperators)) {
             if ($stack->count() < 2) {
                 throw new CompileException("Nedostatek operandů pro binární operátor '{$symbol['1']}'");
             }
             $value2 = $stack->pop();
             $symbol = $this->evaluateBinaryOperation($symbol[1], $stack->pop(), $value2);
         }
         $stack->push($symbol);
     }
     if ($stack->count() != 1) {
         throw new CompileException("Výsledkem výrazu má být pouze 1 hodnota");
     }
     return $stack->pop();
 }