From 1d62857e14d89b4846d9dd8f15c9fae0e99467f0 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 v2: make the error break more explicit Signed-off-by: Alejandro Mery --- lexer/lexer.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lexer/lexer.go b/lexer/lexer.go index 33b17b6..e23ecad 100644 --- a/lexer/lexer.go +++ b/lexer/lexer.go @@ -1,2 +1,22 @@ // 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 { + for fn != nil { + var err error + + fn, err = fn() + if err != nil { + // failed + return err + } + } + + // ended + return nil +}