From b24a926df5675f2de3f4934c4b8a69e6ea026c97 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sun, 30 Aug 2020 15:58:54 -0400 Subject: [PATCH] mapper-put iterate --- go/src/miller/mapping/mapper_put.go | 19 +++++++++++++++---- go/todo.txt | 4 ++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/go/src/miller/mapping/mapper_put.go b/go/src/miller/mapping/mapper_put.go index a1586508a..4ef3179d0 100644 --- a/go/src/miller/mapping/mapper_put.go +++ b/go/src/miller/mapping/mapper_put.go @@ -16,19 +16,30 @@ type MapperPut struct { } func NewMapperPut(dslString string) *MapperPut { - theLexer := lexer.NewLexer([]byte(dslString)) - theParser := parser.NewParser() - interfaceAST, err := theParser.Parse(theLexer) + ast, err := NewASTFromString(dslString) if err != nil { fmt.Println(err) // xxx error propagate to caller -- for all mapper constructors os.Exit(1) } - ast := interfaceAST.(*dsl.AST) return &MapperPut{ ast, } } +// xxx note (package cycle) why not a dsl.AST constructor :( +// xxx maybe split out dsl into two package ... and/or put the ast.go into miller/parsing -- ? +// depends on TBD split-out of AST and CST ... +func NewASTFromString(dslString string) (*dsl.AST, error) { + theLexer := lexer.NewLexer([]byte(dslString)) + theParser := parser.NewParser() + interfaceAST, err := theParser.Parse(theLexer) + if err != nil { + return nil, err + } + ast := interfaceAST.(*dsl.AST) + return ast, nil +} + func (this *MapperPut) Name() string { return "put" } diff --git a/go/todo.txt b/go/todo.txt index 4dea108db..49981c6cd 100644 --- a/go/todo.txt +++ b/go/todo.txt @@ -21,3 +21,7 @@ long-term: o only requirement is that top-level be sequence of string-valued objects ... o json-to-json cat-mapping should be identical o json-like accessor syntax in the grammar: $field.foo[3].bar{"bar"} + +gocc upstreams: +* support "..." in the lexer part +* research error-handling ...