diff options
Diffstat (limited to 'compiler/dfa')
-rw-r--r-- | compiler/dfa/dfa.go | 2 | ||||
-rw-r--r-- | compiler/dfa/symbol_position.go | 22 | ||||
-rw-r--r-- | compiler/dfa/tree.go | 22 | ||||
-rw-r--r-- | compiler/dfa/tree_test.go | 9 |
4 files changed, 16 insertions, 39 deletions
diff --git a/compiler/dfa/dfa.go b/compiler/dfa/dfa.go index c56af90..777bd24 100644 --- a/compiler/dfa/dfa.go +++ b/compiler/dfa/dfa.go @@ -47,7 +47,7 @@ type DFA struct { TransitionTable map[string][256]string } -func GenDFA(root byteTree, symTab *symbolTable) *DFA { +func GenDFA(root byteTree, symTab *symbolTable) *DFA { initialState := root.first() initialStateHash := initialState.hash() stateMap := map[string]*symbolPositionSet{ diff --git a/compiler/dfa/symbol_position.go b/compiler/dfa/symbol_position.go index 10d5a1e..f154251 100644 --- a/compiler/dfa/symbol_position.go +++ b/compiler/dfa/symbol_position.go @@ -38,10 +38,7 @@ func (p symbolPosition) String() string { } func (p symbolPosition) isEndMark() bool { - if uint16(p)&symbolPositionMaskEndMark > 1 { - return true - } - return false + return uint16(p)&symbolPositionMaskEndMark > 1 } func (p symbolPosition) describe() (uint16, bool) { @@ -102,19 +99,6 @@ func (s *symbolPositionSet) merge(t *symbolPositionSet) *symbolPositionSet { return s } -func (s *symbolPositionSet) intersect(set *symbolPositionSet) *symbolPositionSet { - in := newSymbolPositionSet() - for _, p1 := range s.s { - for _, p2 := range set.s { - if p1 != p2 { - continue - } - in.add(p1) - } - } - return in -} - func (s *symbolPositionSet) hash() string { if len(s.s) <= 0 { return "" @@ -171,9 +155,9 @@ func sortSymbolPositions(ps []symbolPosition, left, right int) { p1, p2 = p2, p1 } if p2 > p3 { - p2, p3 = p3, p2 + p2 = p3 if p1 > p2 { - p1, p2 = p2, p1 + p2 = p1 } } pivot = p2 diff --git a/compiler/dfa/tree.go b/compiler/dfa/tree.go index a3442f8..bd93a26 100644 --- a/compiler/dfa/tree.go +++ b/compiler/dfa/tree.go @@ -153,7 +153,7 @@ func newConcatNode(left, right byteTree) *concatNode { } func (n *concatNode) String() string { - return fmt.Sprintf("concat") + return "concat" } func (n *concatNode) children() (byteTree, byteTree) { @@ -207,7 +207,7 @@ func newAltNode(left, right byteTree) *altNode { } func (n *altNode) String() string { - return fmt.Sprintf("alt") + return "alt" } func (n *altNode) children() (byteTree, byteTree) { @@ -255,7 +255,7 @@ func newRepeatNode(left byteTree) *repeatNode { } func (n *repeatNode) String() string { - return fmt.Sprintf("repeat") + return "repeat" } func (n *repeatNode) children() (byteTree, byteTree) { @@ -288,14 +288,6 @@ func (n *repeatNode) clone() byteTree { return newRepeatNode(n.left.clone()) } -func newRepeatOneOrMoreNode(left byteTree) *concatNode { - return newConcatNode( - left, - &repeatNode{ - left: left.clone(), - }) -} - type optionNode struct { left byteTree firstMemo *symbolPositionSet @@ -309,7 +301,7 @@ func newOptionNode(left byteTree) *optionNode { } func (n *optionNode) String() string { - return fmt.Sprintf("option") + return "option" } func (n *optionNode) children() (byteTree, byteTree) { @@ -452,6 +444,7 @@ func oneOf(ts ...byteTree) byteTree { return alt } +//nolint:unused func printByteTree(w io.Writer, t byteTree, ruledLine string, childRuledLinePrefix string, withAttrs bool) { if t == nil { return @@ -505,7 +498,10 @@ func ConvertCPTreeToByteTree(cpTrees map[spec.LexModeKindID]parser.CPTree) (byte } bt = oneOf(bt, concat(t, newEndMarkerNode(id))) } - positionSymbols(bt, symbolPositionMin) + _, err := positionSymbols(bt, symbolPositionMin) + if err != nil { + return nil, nil, err + } return bt, genSymbolTable(bt), nil } diff --git a/compiler/dfa/tree_test.go b/compiler/dfa/tree_test.go index e37a69c..1c1fd1d 100644 --- a/compiler/dfa/tree_test.go +++ b/compiler/dfa/tree_test.go @@ -128,12 +128,6 @@ func TestByteTree(t *testing.T) { } } -func newRangeSymbolNodeWithPos(from, to byte, pos symbolPosition) *symbolNode { - n := newRangeSymbolNode(from, to) - n.pos = pos - return n -} - func newSymbolNodeWithPos(v byte, pos symbolPosition) *symbolNode { n := newSymbolNode(v) n.pos = pos @@ -172,6 +166,9 @@ func TestFollowAndSymbolTable(t *testing.T) { bt, symTab, err := ConvertCPTreeToByteTree(map[spec.LexModeKindID]parser.CPTree{ spec.LexModeKindIDMin: cpt, }) + if err != nil { + t.Fatal(err) + } { followTab := genFollowTable(bt) |