More Ostap tests

This commit is contained in:
Dmitry Boulytchev 2020-01-31 01:57:28 +03:00
parent 4c031ce95f
commit 4ed4101ad9
2 changed files with 34 additions and 0 deletions

View file

@ -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")))

View file

@ -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)