Completed
Push — master ( 317706...046a0a )
by Nico
01:26
created

container.php$0 ➔ tokenStreamFactory()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 4
nc 2
nop 0
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * @license     http://opensource.org/licenses/mit-license.php MIT
7
 * @link        https://github.com/nicoSWD
8
 * @author      Nicolas Oelgart <[email protected]>
9
 */
10
namespace nicoSWD\Rule;
11
12
use nicoSWD\Rule\TokenStream\AST;
13
use nicoSWD\Rule\Compiler\CompilerFactory;
14
use nicoSWD\Rule\Evaluator\Evaluator;
15
use nicoSWD\Rule\Evaluator\EvaluatorInterface;
16
use nicoSWD\Rule\Expression\ExpressionFactory;
17
use nicoSWD\Rule\Grammar\JavaScript\JavaScript;
18
use nicoSWD\Rule\Tokenizer\Tokenizer;
19
use nicoSWD\Rule\TokenStream\Token\TokenFactory;
20
use nicoSWD\Rule\TokenStream\TokenStreamFactory;
21
22
return new class {
23
    private static $tokenStreamFactory;
24
    private static $tokenFactory;
25
    private static $compiler;
26
    private static $javaScript;
27
    private static $expressionFactory;
28
    private static $tokenizer;
29
    private static $evaluator;
30
31 218
    public function parser(array $variables): Parser\Parser
32
    {
33 218
        return new Parser\Parser(
34 218
            self::ast($variables),
35 218
            self::expressionFactory(),
36 218
            self::compiler()
37
        );
38
    }
39
40 154
    public function evaluator(): EvaluatorInterface
41
    {
42 154
        if (!isset(self::$evaluator)) {
43 2
            self::$evaluator = new Evaluator();
44
        }
45
46 154
        return self::$evaluator;
47
    }
48
49 218
    private static function tokenFactory(): TokenFactory
50
    {
51 218
        if (!isset(self::$tokenFactory)) {
52 2
            self::$tokenFactory = new TokenFactory();
53
        }
54
55 218
        return self::$tokenFactory;
56
    }
57
58 218
    private static function compiler(): CompilerFactory
59
    {
60 218
        if (!isset(self::$compiler)) {
61 2
            self::$compiler = new CompilerFactory();
62
        }
63
64 218
        return self::$compiler;
65
    }
66
67 218
    private static function ast(array $variables): AST
68
    {
69 218
        $ast = new AST(self::tokenizer(), self::tokenFactory(), self::tokenStreamFactory());
70 218
        $ast->setVariables($variables);
71
72 218
        return $ast;
73
    }
74
75 218
    private static function tokenizer(): Tokenizer
76
    {
77 218
        if (!isset(self::$tokenizer)) {
78 2
            self::$tokenizer = new Tokenizer(self::javascript(), self::tokenFactory());
79
        }
80
81 218
        return self::$tokenizer;
82
    }
83
84 2
    private static function javascript(): JavaScript
85
    {
86 2
        if (!isset(self::$javaScript)) {
87 2
            self::$javaScript = new JavaScript();
88
        }
89
90 2
        return self::$javaScript;
91
    }
92
93 218
    private static function tokenStreamFactory(): TokenStreamFactory
94
    {
95 218
        if (!isset(self::$tokenStreamFactory)) {
96 2
            self::$tokenStreamFactory = new TokenStreamFactory();
97
        }
98
99 218
        return self::$tokenStreamFactory;
100
    }
101
102 218
    private static function expressionFactory(): ExpressionFactory
103
    {
104 218
        if (!isset(self::$expressionFactory)) {
105 2
            self::$expressionFactory = new ExpressionFactory();
106
        }
107
108 218
        return self::$expressionFactory;
109
    }
110
};
111