Passed
Push — master ( 9787f7...8354ea )
by Tomáš
02:37
created

FilterParser::parse()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

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