Expr.expr --- associativity

This commit is contained in:
Dmitry Boulytchev 2020-01-31 01:30:03 +03:00
parent b4ba38a0f7
commit 4c031ce95f
11 changed files with 98 additions and 17 deletions

View file

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

View file

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

View file

@ -0,0 +1,4 @@
Succ (Eq ("a", "a"))
Succ (Eq (Mul ("a", "a"), Mul ("a", "a")))
Succ (Eq (Add (Mul ("a", "a"), Sub (Div ("a", "a"), Mul ("a", "a"))), Sub (Mul ("a", "a"), "a")))
Fail ({""*" expected at"}, 1, 2)

View file

@ -0,0 +1,12 @@
import Ostap;
import Matcher;
local a = token ("a"), acc;
initOstap ();
printf ("Parsing a*| against ""aa""... %s\n", parseString (rep0 (a) |> fun (x) {eof @ lift (x)}, "aa").string);
printf ("Parsing a+| against ""aa""... %s\n", parseString (rep (a) |> fun (x) {eof @ lift (x)}, "aa").string);
printf ("Parsing list(a)| against ""a""... %s\n", parseString (list (a) |> bypass (eof), "a").string);
printf ("Parsing list(a)| against ""a,a""... %s\n", parseString (list (a) |> bypass (eof), "a,a").string);
printf ("Parsing list0(a)| against """"... %s\n", parseString (list0 (a) |> bypass (eof), "").string)

View file

@ -7,7 +7,7 @@ local a = token ("a"),
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);
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

@ -14,7 +14,7 @@ local a = token ("a"),
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),
exp = expr ({[Left, {add, sub}], [Left, {mul, div}]}, a) (id),
i;
printf ("%s\n", parseString (exp |> bypass (eof), gen (10)).string)

View file

@ -0,0 +1,14 @@
import Ostap;
import Expr;
import Fun;
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 ({[Right, {add, sub}], [Left, {mul, div}]}, a) (id);
printf ("%s\n", parseString (exp |> bypass (eof), "a+a-a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a*a/a*a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a*a+a/a-a*a").string)

View file

@ -0,0 +1,16 @@
import Ostap;
import Expr;
import Fun;
import List;
local a = token ("a"),
eq = [token ("="), fun (l, r) {Eq (l, r)}],
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 ({[Nona, singleton (eq)], [Right, {add, sub}], [Left, {mul, div}]}, a) (id);
printf ("%s\n", parseString (exp |> bypass (eof), "a+a-a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a*a/a*a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a*a+a/a-a*a").string)

View file

@ -0,0 +1,17 @@
import Ostap;
import Expr;
import Fun;
import List;
local a = token ("a"),
eq = [token ("="), fun (l, r) {Eq (l, r)}],
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 ({[Nona, singleton (eq)], [Right, {add, sub}], [Left, {mul, div}]}, a) (id);
printf ("%s\n", parseString (exp |> bypass (eof), "a=a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a*a=a*a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a*a+a/a-a*a=a*a-a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a=a=a+a").string)