From 5d73aea0169c691b4c96d85353b1dccc5c1199e2 Mon Sep 17 00:00:00 2001 From: Silvan Jegen Date: Sun, 25 Dec 2016 19:29:55 +0100 Subject: Start writing the parser --- conf/parser.go | 49 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) (limited to 'conf/parser.go') diff --git a/conf/parser.go b/conf/parser.go index 85d9b11..75f610c 100644 --- a/conf/parser.go +++ b/conf/parser.go @@ -1,3 +1,14 @@ +// grammar of the config file +// +// config = module module module +// module = name object +// name = 'input' | 'filter' | 'etc.' +// object = '{' keyvalue | keyvalue | ... '}' +// keyvalue = statement '=>' value +// statement = name | if +// value = literal | '[' literal ']' +// literal = '"' name '"' + package conf import ( @@ -12,17 +23,41 @@ type Config struct { } type parser struct { - scanner + s scanner + last token + cur token +} + +func newParser(s *scanner) *parser { + p := &parser{ + s: *s, + } + + return p } func NewConfig(r io.Reader) *Config { - s := newScanner(r) - tok, err := s.Scan() + p := newParser(newScanner(r)) + p.startparsing() + + return &Config{} +} + +func (p *parser) startparsing() { + var err error + + p.last = p.cur + p.cur, err = p.s.Scan() for err == nil { - fmt.Fprintf(os.Stderr, "tokentype: %d, token: %q offset: %d, line: %d\n", tok.Type, tok.Lit, tok.Offset, tok.LineNr) - tok, err = s.Scan() + fmt.Fprintf(os.Stderr, "tokentype: %d, token: %q offset: %d, line: %d\n", p.cur.Type, p.cur.Lit, p.cur.Offset, p.cur.LineNr) + p.last = p.cur + p.cur, err = p.s.Scan() } - fmt.Fprintf(os.Stderr, "Error: tokentype: %d, token: %q, err: %v\n", tok.Type, tok.Lit, err) + fmt.Fprintf(os.Stderr, "Error: tokentype: %d, token: %q, err: %v\n", p.cur.Type, p.cur.Lit, err) +} - return &Config{} +func (p *parser) module(name string) { +} + +func (p *parser) object() { } -- cgit v1.2.1-18-gbd029