diff --git a/expr.go b/expr/expr.go similarity index 96% rename from expr.go rename to expr/expr.go index 67551d4..43e9644 100644 --- a/expr.go +++ b/expr/expr.go @@ -1,4 +1,4 @@ -package ginger +package expr import ( "fmt" @@ -272,6 +272,24 @@ func sliceEnclosedToks(toks []lexer.Token, start, end lexer.Token) ([]lexer.Toke } } +func Parse(r io.Reader) ([]Expr, error) { + toks := readAllToks(r) + var ret []Expr + var expr Expr + var err error + for len(toks) > 0 { + if toks[0].TokenType == lexer.EOF { + return ret, nil + } + expr, toks, err = parse(toks) + if err != nil { + return nil, err + } + ret = append(ret, expr) + } + return ret, nil +} + func readAllToks(r io.Reader) []lexer.Token { l := lexer.New(r) var toks []lexer.Token diff --git a/expr_test.go b/expr/expr_test.go similarity index 99% rename from expr_test.go rename to expr/expr_test.go index 02cdf6d..b961698 100644 --- a/expr_test.go +++ b/expr/expr_test.go @@ -1,4 +1,4 @@ -package ginger +package expr import ( . "testing" diff --git a/main.go b/main.go new file mode 100644 index 0000000..e001330 --- /dev/null +++ b/main.go @@ -0,0 +1,18 @@ +package main + +import ( + "fmt" + "os" + + "github.com/mediocregopher/ginger/expr" +) + +func main() { + ee, err := expr.Parse(os.Stdin) + if err != nil { + panic(err) + } + for _, e := range ee { + fmt.Println(e) + } +}