Browse Source

Fix Priority Problem. (The Priority Now As The Token Number)

zry 6 years ago
parent
commit
d8c050c163
1 changed files with 11 additions and 1 deletions
  1. 11 1
      tokenizer.go

+ 11 - 1
tokenizer.go

@@ -2,6 +2,7 @@ package zTokenizer
 
 import (
 	"regexp"
+	"sort"
 )
 
 type Enum_LineBreakMode uint8
@@ -15,6 +16,7 @@ const (
 )
 
 type ZTokenizer struct {
+	tokenlist		[]int
 	tokenRegList    map[int]tokenRegInst
 	sourceData      []byte
 	conf            ZTokenizerConf
@@ -79,6 +81,13 @@ func NewZTokenizer(conf ZTokenizerConf) *ZTokenizer {
 			decor: false,
 		}
 	}
+	zt.tokenlist = make([]int, len(zt.tokenRegList))
+	i := 0
+	for k := range zt.tokenRegList {
+		zt.tokenlist[i] = k
+		i++
+	}
+	sort.Ints(zt.tokenlist)
 	zt.reg_lbr_rn = regexp.MustCompile("\r\n")
 	zt.reg_lbr_r = regexp.MustCompile("\r")
 	zt.reg_lbr_n = regexp.MustCompile("\n")
@@ -149,7 +158,8 @@ func (this *ZTokenizer)GetLex() (token int, value []byte, lineno int, linepos in
 			break
 		}
 		regloop:
-		for tokentype, reginst := range this.tokenRegList {
+		for _,tokentype := range this.tokenlist {
+			reginst := this.tokenRegList[tokentype]
 			m := reginst.reg.FindIndex(this.sourceData[this.currentPosition:])
 			if len(m) == 2 {
 				if m[1] > 0 {