From 30da2c74184a86e030c5804a8906b81128266ed2 Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Tue, 29 Aug 2023 00:09:28 +0000 Subject: [PATCH] lexer: create Lexer factories for io.Reader, []byte and string Signed-off-by: Alejandro Mery --- lexer/lexer.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/lexer/lexer.go b/lexer/lexer.go index 39b0c8b..258ed05 100644 --- a/lexer/lexer.go +++ b/lexer/lexer.go @@ -1,7 +1,11 @@ // Package lexer provides basic helpers to implement parsers package lexer -import "io" +import ( + "io" + + "asciigoat.org/core/runes" +) // Lexer adds Accept and AcceptAll support to a // [io.RuneScanner] @@ -32,6 +36,25 @@ func NewLexer(src io.RuneScanner) *Lexer { return &Lexer{src} } +// NewLexerReader creates a Lexer from an [io.Reader] +func NewLexerReader(r io.Reader) *Lexer { + if r == nil { + return nil + } + + return &Lexer{runes.NewReader(r)} +} + +// NewLexerBytes creates a Lexer from raw bytes +func NewLexerBytes(b []byte) *Lexer { + return &Lexer{runes.NewReaderBytes(b)} +} + +// NewLexerString creates a Lexer from a data string +func NewLexerString(s string) *Lexer { + return &Lexer{runes.NewReaderString(s)} +} + // StateFn is a State Function of the parser type StateFn func() (StateFn, error)