// Package lexer provides basic helpers to implement parsers package lexer import ( "errors" "io" ) // StateFn is a State Function of the parser type StateFn func() (StateFn, error) // Run runs a state machine until the state function either // returns nil or an error func Run(fn StateFn) error { for fn != nil { var err error fn, err = fn() switch { case errors.Is(err, io.EOF): // EOF return nil case err != nil: // failed return err } } // ended return nil }