diff options
| author | 2026-03-09 23:05:42 +0300 | |
|---|---|---|
| committer | 2026-03-09 23:05:42 +0300 | |
| commit | 00394a80501960ad26787b5c44435ed5ed67ad84 (patch) | |
| tree | 672eb918c552c858f32e9533dc3799af6b75769f /loader.go | |
| parent | '-' sign in words accepted (diff) | |
| download | conf-00394a80501960ad26787b5c44435ed5ed67ad84.tar.gz conf-00394a80501960ad26787b5c44435ed5ed67ad84.tar.bz2 conf-00394a80501960ad26787b5c44435ed5ed67ad84.tar.xz conf-00394a80501960ad26787b5c44435ed5ed67ad84.zip | |
Полностью переписал библиотеку. Перевёл с EBNF на PEG.v0.1.0
Diffstat (limited to 'loader.go')
| -rw-r--r-- | loader.go | 40 |
1 files changed, 8 insertions, 32 deletions
@@ -4,49 +4,25 @@ import ( "fmt" "os" - "go.neonxp.ru/conf/internal/ast" - "go.neonxp.ru/conf/internal/parser" "go.neonxp.ru/conf/model" + "go.neonxp.ru/conf/parser" ) -func New() *Conf { - return &Conf{ - root: model.Body{}, - } -} - -type Conf struct { - root model.Body -} - -func (c *Conf) LoadFile(filename string) error { +func LoadFile(filename string) (model.Group, error) { content, err := os.ReadFile(filename) if err != nil { - return fmt.Errorf("failed load file: %w", err) + return nil, fmt.Errorf("failed load file: %w", err) } - return c.Load(filename, content) + return Load(filename, content) } -func (c *Conf) Load(name string, input []byte) error { - p := &parser.Parser{} - astSlice, err := p.Parse(name, input) - if err != nil { - return fmt.Errorf("failed parse conf content: %w", err) - } - - astTree := ast.Parse(p, astSlice) +func Load(name string, input []byte) (model.Group, error) { - doc, err := ast.ToDoc(astTree[0]) + res, err := parser.Parse(name, input) if err != nil { - return fmt.Errorf("failed build Doc: %w", err) + return nil, parser.CaretErrors(err, string(input)) } - c.root = doc - - return nil -} - -func (c *Conf) Process(visitor model.Visitor) error { - return c.root.Execute(visitor) + return res.(model.Group), nil } |
