ParserFactory::createFromBuffer()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
cc 1
eloc 7
c 2
b 0
f 1
nc 1
nop 2
dl 0
loc 10
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Remorhaz\UniLex\RegExp;
6
7
use Remorhaz\UniLex\Exception;
8
use Remorhaz\UniLex\IO\CharBufferInterface;
9
use Remorhaz\UniLex\Grammar\ContextFree\GrammarLoader;
10
use Remorhaz\UniLex\Grammar\ContextFree\TokenFactory;
11
use Remorhaz\UniLex\Parser\LL1\Parser;
12
use Remorhaz\UniLex\Parser\LL1\TranslationSchemeApplier;
13
use Remorhaz\UniLex\AST\Tree;
14
use Remorhaz\UniLex\RegExp\Grammar\ConfigFile;
15
use Remorhaz\UniLex\RegExp\Grammar\TokenMatcher;
16
use Remorhaz\UniLex\RegExp\Grammar\TranslationScheme;
17
use Remorhaz\UniLex\Lexer\TokenReader;
18
19
abstract class ParserFactory
20
{
21
    /**
22
     * @param Tree                $tree
23
     * @param CharBufferInterface $buffer
24
     * @return Parser
25
     * @throws Exception
26
     */
27
    public static function createFromBuffer(Tree $tree, CharBufferInterface $buffer): Parser
28
    {
29
        $grammar = GrammarLoader::loadFile(ConfigFile::getPath());
30
        $reader = new TokenReader($buffer, new TokenMatcher(), new TokenFactory($grammar));
31
        $scheme = new TranslationScheme($tree);
32
        $treeBuilder = new TranslationSchemeApplier($scheme);
33
        $parser = new Parser($grammar, $reader, $treeBuilder);
34
        $parser->loadLookupTable(ConfigFile::getLookupTablePath());
35
36
        return $parser;
37
    }
38
}
39