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)