🚂 Equality and power

This commit is contained in:
2024-09-26 16:12:59 +02:00
parent 007b33f87d
commit dd66ba3d7b
2 changed files with 33 additions and 3 deletions

View File

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

View File

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