FilterParser   A
last analyzed

Complexity

Total Complexity 1

Size/Duplication

Total Lines 25
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 15
c 1
b 0
f 1
dl 0
loc 25
rs 10
wmc 1

1 Method

Rating   Name   Duplication   Size   Complexity  
A parse() 0 22 1
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