diff --git a/stdlib/regression/orig/test16.log b/stdlib/regression/orig/test16.log new file mode 100644 index 000000000..d632800a9 --- /dev/null +++ b/stdlib/regression/orig/test16.log @@ -0,0 +1,6 @@ +Succ (Eq ("a", "a")) +Succ (Eq ("b", "b")) +Succ (Eq (Mul ("a", "a"), Mul ("a", "a"))) +Succ (Eq (Mul ("b", "b"), Mul ("b", "b"))) +Succ (Eq (Add (Mul ("a", "a"), Sub (Div ("a", "a"), Mul ("a", "a"))), Sub (Mul ("a", "a"), "a"))) +Succ (Eq (Add (Mul ("b", "b"), Sub (Div ("b", "b"), Mul ("b", "b"))), Sub (Mul ("b", "b"), "b"))) diff --git a/stdlib/regression/test16.expr b/stdlib/regression/test16.expr new file mode 100644 index 000000000..425736f53 --- /dev/null +++ b/stdlib/regression/test16.expr @@ -0,0 +1,28 @@ +import Ostap; +import Expr; +import Fun; +import List; + +local a = token ("a") @ lift(fun (a) {if a then "a" else "b" fi}), + eq = [token ("="), fun (l, r) {fun (a) {Eq (l (a), r (a))}}], + add = [token ("+"), fun (l, r) {fun (a) {Add (l (a), r (a))}}], + sub = [token ("-"), fun (l, r) {fun (a) {Sub (l (a), r (a))}}], + mul = [token ("*"), fun (l, r) {fun (a) {Mul (l (a), r (a))}}], + div = [token ("/"), fun (l, r) {fun (a) {Div (l (a), r (a))}}], + exp = expr ({[Nona, singleton (eq)], [Right, {add, sub}], [Left, {mul, div}]}, a) (id); + +fun unpack (x, y) { + case x of + Fail (_) -> x + | Succ (z) -> Succ (z (y)) + esac +} + +printf ("%s\n", unpack (parseString (exp |> bypass (eof), "a=a"), true).string); +printf ("%s\n", unpack (parseString (exp |> bypass (eof), "a=a"), false).string); + +printf ("%s\n", unpack (parseString (exp |> bypass (eof), "a*a=a*a"), true).string); +printf ("%s\n", unpack (parseString (exp |> bypass (eof), "a*a=a*a"), false).string); + +printf ("%s\n", unpack (parseString (exp |> bypass (eof), "a*a+a/a-a*a=a*a-a"), true).string); +printf ("%s\n", unpack (parseString (exp |> bypass (eof), "a*a+a/a-a*a=a*a-a"), false).string)