Passed
Push — master ( b913d7...852e13 )
by Edward
04:18
created

Nfa::joinStartStates()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 7
nc 3
nop 0
dl 0
loc 11
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Remorhaz\UniLex\RegExp\FSM;
4
5
use Remorhaz\UniLex\Exception;
6
7
class Nfa
8
{
9
10
    private $stateMap;
11
12
    private $epsilonTransitionMap;
13
14
    private $symbolTransitionMap;
15
16
    private $symbolTable;
17
18
    public function getStateMap(): StateMap
19
    {
20
        if (!isset($this->stateMap)) {
21
            $this->stateMap = new StateMap();
22
        }
23
24
        return $this->stateMap;
25
    }
26
27
    public function getEpsilonTransitionMap(): TransitionMap
28
    {
29
        if (!isset($this->epsilonTransitionMap)) {
30
            $this->epsilonTransitionMap = new TransitionMap($this->getStateMap());
31
        }
32
33
        return $this->epsilonTransitionMap;
34
    }
35
36
    public function getSymbolTransitionMap(): TransitionMap
37
    {
38
        if (!isset($this->symbolTransitionMap)) {
39
            $this->symbolTransitionMap = new TransitionMap($this->getStateMap());
40
        }
41
42
        return $this->symbolTransitionMap;
43
    }
44
45
    public function getSymbolTable(): SymbolTable
46
    {
47
        if (!isset($this->symbolTable)) {
48
            $this->symbolTable = new SymbolTable();
49
        }
50
51
        return $this->symbolTable;
52
    }
53
54
    public function setSymbolTable(SymbolTable $symbolTable): void
55
    {
56
        if (isset($this->symbolTable)) {
57
            throw new Exception("Symbol table already exists in DFA");
58
        }
59
        $this->symbolTable = $symbolTable;
60
    }
61
}
62