FilterParser::parse()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 14
c 1
b 0
f 1
nc 1
nop 2
dl 0
loc 22
rs 9.7998
1
<?php declare(strict_types = 1);
2
3
namespace Apicart\FQL\Tests\Integration;
4
5
use Apicart\FQL\Generator\Common\Aggregate;
6
use Apicart\FQL\Generator\SQL\BinaryOperator;
7
use Apicart\FQL\Generator\SQL\Group;
8
use Apicart\FQL\Generator\SQL\Phrase;
9
use Apicart\FQL\Generator\SQL\Query;
10
use Apicart\FQL\Generator\SQL\Range;
11
use Apicart\FQL\Generator\SQL\Resolver\AbstractFilterResolver;
12
use Apicart\FQL\Generator\SQL\UnaryOperator;
13
use Apicart\FQL\Generator\SQL\Word;
14
use Apicart\FQL\Tokenizer\Full;
15
use Apicart\FQL\Tokenizer\Parser;
16
use Apicart\FQL\Tokenizer\Tokenizer;
17
18
final class FilterParser
19
{
20
21
    public static function parse(string $fql, AbstractFilterResolver $filterResolver): string
22
    {
23
        $tokenExtractor = new Full;
24
        $tokenizer = new Tokenizer($tokenExtractor);
25
        $tokenSequence = $tokenizer->tokenize($fql);
26
27
        $parser = new Parser;
28
        $syntaxTree = $parser->parse($tokenSequence);
29
30
        $visitor = new Aggregate(
31
            [
32
                new BinaryOperator,
33
                new UnaryOperator,
34
                new Group,
35
                new Query,
36
                new Phrase($filterResolver),
37
                new Range($filterResolver),
38
                new Word($filterResolver),
39
            ]
40
        );
41
42
        return $visitor->visit($syntaxTree->getRootNode());
43
    }
44
45
}
46