🚂 Equality and power
This commit is contained in:
@ -96,12 +96,26 @@ pLExp =
|
||||
pFExp
|
||||
]
|
||||
|
||||
pExp1 :: Parser Exp
|
||||
pExp1 = pLExp >>= chain
|
||||
pPExp :: Parser Exp
|
||||
pPExp = pLExp >>= chain
|
||||
where
|
||||
chain x =
|
||||
choice
|
||||
[ do
|
||||
[
|
||||
do
|
||||
lString "**"
|
||||
y <- pPExp
|
||||
chain $ Pow x y,
|
||||
pure x
|
||||
]
|
||||
|
||||
pExp1 :: Parser Exp
|
||||
pExp1 = pPExp >>= chain
|
||||
where
|
||||
chain x =
|
||||
choice
|
||||
[
|
||||
do
|
||||
lString "*"
|
||||
y <- pLExp
|
||||
chain $ Mul x y,
|
||||
@ -125,6 +139,10 @@ pExp0 = pExp1 >>= chain
|
||||
lString "-"
|
||||
y <- pExp1
|
||||
chain $ Sub x y,
|
||||
do
|
||||
lString "=="
|
||||
y <- pExp1
|
||||
chain $ Eql x y,
|
||||
pure x
|
||||
]
|
||||
|
||||
|
@ -70,5 +70,17 @@ tests =
|
||||
[ parserTest "x y" $ Apply (Var "x") (Var "y"),
|
||||
parserTest "x y z" $ Apply (Apply (Var "x") (Var "y")) (Var "z"),
|
||||
parserTest "x (y z)" $ Apply (Var "x") (Apply (Var "y") (Var "z"))
|
||||
],
|
||||
testGroup
|
||||
"Eql"
|
||||
[ parserTest "x == y" $ Eql (Var "x") (Var "y"),
|
||||
parserTest "x == y == z" $ Eql (Eql (Var "x") (Var "y")) (Var "z"),
|
||||
parserTest "x + y == z * x" $ Eql (Add (Var "x") (Var "y")) (Mul (Var "z") (Var "x"))
|
||||
],
|
||||
testGroup
|
||||
"Eql"
|
||||
[ parserTest "x ** y" $ Pow (Var "x") (Var "y"),
|
||||
parserTest "x ** y ** z" $ Pow (Var "x") (Pow (Var "y") (Var "z")),
|
||||
parserTest "x + y ** z * x" $ Add (Var "x") (Mul (Pow (Var "y") (Var "z")) (Var "x"))
|
||||
]
|
||||
]
|
||||
|
Reference in New Issue
Block a user