aboutsummaryrefslogtreecommitdiff
path: root/statefunc.go
blob: 734fe57c42f39f41af387b188e3196f65200f2c4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package unilex

// StateFunc represents function that scans lexems and returns new state function or nil if lexing completed.
type StateFunc func(*Lexer) StateFunc

type stateStack []StateFunc

func (ss *stateStack) Push(s StateFunc) {
	*ss = append(*ss, s)
}

func (ss *stateStack) Pop() (s StateFunc) {
	if len(*ss) == 0 {
		return nil
	}
	*ss, s = (*ss)[:len(*ss)-1], (*ss)[len(*ss)-1]
	return s
}