aboutsummaryrefslogtreecommitdiff
path: root/compiler/dfa
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/dfa')
-rw-r--r--compiler/dfa/dfa.go2
-rw-r--r--compiler/dfa/symbol_position.go22
-rw-r--r--compiler/dfa/tree.go22
-rw-r--r--compiler/dfa/tree_test.go9
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)