From d760902dce9e938b5d1dc4556d52e51492bb6f9b Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Mon, 28 Aug 2023 22:14:45 +0000 Subject: [PATCH] lexer: introduce StateFn and the basic state machine loop Signed-off-by: Alejandro Mery --- lexer/lexer.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 lexer/lexer.go diff --git a/lexer/lexer.go b/lexer/lexer.go new file mode 100644 index 0000000..26885ba --- /dev/null +++ b/lexer/lexer.go @@ -0,0 +1,17 @@ +// Package lexer provides basic helpers to implement parsers +package lexer + +// 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 { + var err error + + for fn != nil && err == nil { + fn, err = fn() + } + + return err +}