README.adoc: example programs updated

This commit is contained in:
Celestino Amoroso 2024-04-09 06:29:44 +02:00
parent 024ff42be0
commit a9b143d012

View File

@ -63,35 +63,37 @@ package main
import ( import (
"fmt" "fmt"
"strings" "strings"
"git.portale-stac.it/go-pkg/expr" "git.portale-stac.it/go-pkg/expr"
) )
func main() { func main() {
ctx := expr.NewSimpleVarStore() ctx := expr.NewSimpleVarStore()
ctx.SetValue("var", int64(4)) ctx.SetVar("var", int64(4))
source := `(3-1)*(10/5) == var` source := `(3-1)*(10/5) == var`
r := strings.NewReader(source) r := strings.NewReader(source)
scanner := expr.NewScanner(r, DefaultTranslations()) scanner := expr.NewScanner(r, expr.DefaultTranslations())
parser := expr.NewParser(ctx) parser := expr.NewParser(ctx)
if ast, err := parser.Parse(scanner); err == nil { if ast, err := parser.Parse(scanner); err == nil {
if result, err := ast.Eval(ctx); err == nil { if result, err := ast.Eval(ctx); err == nil {
fmt.Printf("%q -> %v [%T]\n", source, result, result) fmt.Printf("%q -> %v [%T]\n", source, result, result)
} else { } else {
fmt.Println("Error calculating the expression:", err) fmt.Println("Error calculating the expression:", err)
} }
} else { } else {
fmt.Println("Error parsing the expression:", err) fmt.Println("Error parsing the expression:", err)
} }
} }
---- ----
The above program is equivalent to the following one. The above program is equivalent to the following one.
[source,go] [source,go]
---- ----
package main
import ( import (
"fmt" "fmt"
"git.portale-stac.it/go-pkg/expr" "git.portale-stac.it/go-pkg/expr"
@ -99,15 +101,38 @@ import (
func main() { func main() {
ctx := expr.NewSimpleVarStore() ctx := expr.NewSimpleVarStore()
ctx.SetValue("var", int64(4)) ctx.SetVar("var", int64(4))
source := `(3-1)*(10/5) == var` source := `(3-1)*(10/5) == var`
if result, err := expr.EvalString(ctx, source); err == nil { if result, err := expr.EvalString(ctx, source); err == nil {
fmt.Printf("%q -> %v [%T]\n", source, result, result) fmt.Printf("%q -> %v [%T]\n", source, result, result)
} else { } else {
fmt.Println("Error calculating the expression:", err) fmt.Println("Error calculating the expression:", err)
} }
}
----
Here is another equivalent version.
[source,go]
----
package main
import (
"fmt"
"git.portale-stac.it/go-pkg/expr"
)
func main() {
source := `(3-1)*(10/5) == var`
if result, err := expr.EvalStringA(source, expr.Arg{"var", int64(4)}); err == nil {
fmt.Printf("%q -> %v [%T]\n", source, result, result)
} else {
fmt.Println("Error calculating the expression:", err)
}
} }
---- ----