parser: WIP

Signed-off-by: Alejandro Mery <amery@jpi.io>
This commit is contained in:
2023-08-28 23:46:05 +00:00
parent c26cfde2ab
commit 8267f2c327
2 changed files with 50 additions and 0 deletions
+43
View File
@@ -10,6 +10,49 @@ import (
// Parser parses a dosini-style document
type Parser struct {
src *lexer.Reader
OnSection func(pos lexer.Position, name, subname string, hasSubname bool) error
OnField func(pos lexer.Position, key, value string) error
OnComment func(pos lexer.Position, comment string) error
OnError func(pos lexer.Position, content string, err error) error
}
func defaultOnSection(_ lexer.Position, _, _ string, _ bool) error { return nil }
func defaultOnField(_ lexer.Position, _, _ string) error { return nil }
func defaultOnComment(_ lexer.Position, _ string) error { return nil }
func defaultOnError(pos lexer.Position, content string, err error) error {
return &lexer.Error{
Line: pos.Line,
Column: pos.Column,
Content: content,
Err: err,
}
}
func (p *Parser) setDefaults() {
if p.OnSection == nil {
p.OnSection = defaultOnSection
}
if p.OnField == nil {
p.OnField = defaultOnField
}
if p.OnComment == nil {
p.OnComment = defaultOnComment
}
if p.OnError == nil {
p.OnError = defaultOnError
}
}
// Run parses the source
func (p *Parser) Run() error {
p.setDefaults()
return lexer.Run(p.initialState)
}
// NewParser creates a dosini-style parser using
+7
View File
@@ -0,0 +1,7 @@
package parser
import "asciigoat.org/core/lexer"
func (*Parser) initialState() (lexer.StateFn, error) {
return nil, nil
}