Overview

Namespaces

  • BN
    • Collections
    • Compiler
      • Grammar
      • Parser
        • Operator
        • Token
      • Postfix
        • Operands
        • Operator
        • Token
      • Scanner
        • Converter
      • Token
  • Demo
  • None

Classes

  • ParseClosingBracket
  • ParseOpeningBracket
  • ParseOperator
  • ParseUnknownToken
  • ParseValue
  • Overview
  • Namespace
  • Class
  • Tree
 1: <?php
 2: 
 3: namespace BN\Compiler\Parser\Token;
 4: 
 5: use BN\Compiler\Parser\TokenParser;
 6: use BN\Compiler\Token\Token;
 7: use BN\Compiler\Grammar\Operators;
 8: 
 9: class ParseOperator extends TokenParser
10: {
11:     private $operators = array();
12: 
13:     public function __construct($accumulator, Operators $operators)
14:     {
15:         $this->accumulator = $accumulator;
16:         $this->operators = $operators;
17:     }
18: 
19:     public function parse(Token $token)
20:     {
21:         $operatorSymbol = $token->value;
22:         if ($this->operators->exists($operatorSymbol)) {
23:             $operator = $this->operators->getOrder($operatorSymbol);
24:             while ($this->isOperatorAtTopOfStack()) {
25:                 $stackOperator = $this->operators->getOrder($this->accumulator->valueAtStackPeek());
26:                 if ($operator->isNotPreceding($stackOperator)) {
27:                     $this->accumulator->pushTokenFromStackToQueue();
28:                 } else {
29:                     break;
30:                 }
31:             }
32:             $this->accumulator->pushTokenToStack($token);
33:         } else {
34:             $this->accumulator->stopParsing('unknownOperator', $operatorSymbol);
35:         }
36:     }
37: 
38:     private function isOperatorAtTopOfStack()
39:     {
40:         return !$this->accumulator->isStackEmpty() && $this->accumulator->isOperatorAtTopOfStack();
41:     }
42: }
43: 
BN-PHP - Big Number data type for PHP API documentation generated by ApiGen 2.8.0