Overview

Namespaces

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

Classes

  • EvaluatorInteractor
  • ResponderDecorator

Interfaces

  • EvaluatorResponder
  • Overview
  • Namespace
  • Class
  • Tree
 1: <?php
 2: 
 3: namespace BN\Compiler;
 4: 
 5: use BN\Compiler\Grammar\GrammarBuilder;
 6: 
 7: class EvaluatorInteractor
 8: {
 9:     private $scanner;
10:     private $parser;
11:     private $postfix;
12:     private $responder;
13: 
14:     public function __construct(GrammarBuilder $grammar)
15:     {
16:         $operators = $grammar->buildOperators();
17: 
18:         $this->responder = new ResponderDecorator();
19:         $this->scanner = $grammar->buildScanner();
20:         $this->parser = new Parser\ShuntingYardParser($this->responder, $operators);
21:         $this->postfix = new Postfix\PostfixEvaluator(
22:             $this->responder,
23:             $operators,
24:             $grammar->buildConstants()
25:         );
26:     }
27: 
28:     public function __invoke($input, \stdClass $variables, EvaluatorResponder $responder)
29:     {
30:         try {
31:             $this->evaluate($input, $variables, $responder);
32:         } catch (\Exception $e) {
33:             $this->responder->exception($e);
34:         }
35:     }
36: 
37:     private function evaluate($input, \stdClass $variables, EvaluatorResponder $responder)
38:     {
39:         $this->responder->setResponder($responder);
40:         $statements = $this->scanner->tokenize($input);
41:         foreach ($statements as $s) {
42:             $this->responder->nextStatement($s->statement);
43:             $queue = $this->parser->parse($s->tokens);
44:             if ($queue) {
45:                 $result = $this->postfix->evaluate($queue, $variables);
46:                 $this->responder->result($result);
47:             }
48:         }
49:     }
50: }
51: 
BN-PHP - Big Number data type for PHP API documentation generated by ApiGen 2.8.0