|
@@ -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 {
|