Generic Go lexer
A very simple state-based lexer.
import "src.userspace.com.au/lexer"
// Define the tokens for the lexer.
const (
_ lexer.TokenType = iota
tBREStart
tBREEnd
tRangeStart
tRangeDash
tRangeEnd
tCharacter
tClass
tNot
)
// Define states returning a StateFunc.
func startState(l *lexer.Lexer) lexer.StateFunc {
l.SkipWhitespace()
r := l.Next()
if r != '[' {
return l.Error("expecting [")
}
l.Emit(tBREStart)
return beFirstState
}
For a complete (but simple) example see the code in a bracket expression generator.
