Continue massaging Ostap

This commit is contained in:
Dmitry Boulytchev 2020-01-30 23:36:15 +03:00
parent 848fd31dc4
commit b4ba38a0f7
8 changed files with 84 additions and 31 deletions

View file

@ -1,6 +1,6 @@
Succ ("a")
Succ (Add ("a", "a"))
Succ (Sub ("a", "a"))
Succ (Add ("a", Sub ("a", "a")))
Succ (Sub (Add ("a", "a"), "a"))
Succ (Add ("a", Mul ("a", "a")))
Succ (Sub (Mul ("a", "a"), Div ("a", "a")))

File diff suppressed because one or more lines are too long

View file

@ -14,6 +14,6 @@ fun many (a) {
local a = token ("a"), b = token ("b");
local bad_alter = a | a |> fun (x) {b @ fun (y) {x ++ y}};
initOstap ();
--logOn ();
printf ("Parsing ""aaa"" with many ... %s\n", parseString (many (a) |> bypass (eof), "aaa").string);
printf ("Parsing ""ab"" with bad_alter ... %s\n", parseString (bad_alter |> bypass (eof), "ab").string)

View file

@ -1,12 +1,13 @@
import Ostap;
import Expr;
import Fun;
local a = token ("a"),
add = token ("+") @ lift (fun (l, r) {Add (l, r)}),
sub = token ("-") @ lift (fun (l, r) {Sub (l, r)}),
mul = token ("*") @ lift (fun (l, r) {Mul (l, r)}),
div = token ("/") @ lift (fun (l, r) {Div (l, r)}),
exp = expr ({{add, sub}, {mul, div}}, a);
add = [token ("+"), fun (l, r) {Add (l, r)}],
sub = [token ("-"), fun (l, r) {Sub (l, r)}],
mul = [token ("*"), fun (l, r) {Mul (l, r)}],
div = [token ("/"), fun (l, r) {Div (l, r)}],
exp = expr ({[left, {add, sub}], [left, {mul, div}]}, a) (id);
printf ("%s\n", parseString (exp |> bypass (eof), "a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a+a").string);

View file

@ -0,0 +1,20 @@
import Ostap;
import Expr;
import Fun;
fun gen (depth) {
if depth == 0
then "a"
else gen (depth-1) ++ "*" ++ gen (depth-1)
fi
}
local a = token ("a"),
add = [token ("+"), fun (l, r) {Add (l, r)}],
sub = [token ("-"), fun (l, r) {Sub (l, r)}],
mul = [token ("*"), fun (l, r) {Mul (l, r)}],
div = [token ("/"), fun (l, r) {Div (l, r)}],
exp = expr ({[left, {add, sub}], [left, {mul, div}]}, a) (id),
i;
printf ("%s\n", parseString (exp |> bypass (eof), gen (10)).string)