Ostap expr combinator (no associativity, no attributes yet)

This commit is contained in:
Dmitry Boulytchev 2020-01-27 00:36:07 +03:00
parent 33ec55e76e
commit d93995c444
3 changed files with 95 additions and 0 deletions

View file

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

View file

@ -0,0 +1,16 @@
import Ostap;
import Expr;
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);
printf ("%s\n", parseString (exp |> bypass (eof), "a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a+a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a-a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a+a-a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a+a*a").string);
printf ("%s\n", parseString (exp |> bypass (eof), "a*a-a/a").string)