diff --git a/helpers.go b/helpers.go index 24bed45..054ca7a 100644 --- a/helpers.go +++ b/helpers.go @@ -6,6 +6,8 @@ package expr import ( "fmt" + "io" + "os" "strings" ) @@ -59,3 +61,24 @@ func EvalStringV(source string, args []Arg) (result any, err error) { } return } + +func EvalStream(ctx ExprContext, r io.Reader) (result any, err error) { + var tree *ast + scanner := NewScanner(r, DefaultTranslations()) + parser := NewParser(ctx) + + if tree, err = parser.Parse(scanner); err == nil { + result, err = tree.Eval(ctx) + } + return +} + +func EvalFile(ctx ExprContext, filePath string) (result any, err error) { + var fh *os.File + if fh, err = os.Open(filePath); err != nil { + return nil, err + } + defer fh.Close() + result, err = EvalStream(ctx, fh) + return +}