From 14d63f3c2f435a6f4afa25f206e62a51f2c20e83 Mon Sep 17 00:00:00 2001 From: ik1g19 <ik1g19@soton.ac.uk> Date: Sat, 2 Jan 2021 21:43:21 +0000 Subject: [PATCH] how tf do u parse macros --- cw/src/Challenges.hs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/cw/src/Challenges.hs b/cw/src/Challenges.hs index 1264c19..cca5fb0 100644 --- a/cw/src/Challenges.hs +++ b/cw/src/Challenges.hs @@ -323,39 +323,45 @@ parseLamMacro _ = Nothing macroExpr :: Parse LamMacroExpr macroExpr = do string "def" - space - name <- macroName - space - + name <- token macroName + symbol "=" + e <- token expr + string "in" + macro <- many macroExpr + return $ LamDef [(name,e)] expr :: Parser LamExpr expr = do {x <- var; return $ LamVar x} <|> + do {name <- macroName;return $ LamMacro name} <|> + do e1 <- expr space e2 <- expr return $ LamApp e1 e2 <|> + do char '\' x <- var symbol "->" e <- expr return $ LamAbs x e <|> + do char '(' - e <- identifier + e <- token expr char ')' return e macroName :: Parser String macroName = do name <- some upper - return $ name + return name var :: Parser Int var = do char 'x' - x <- some digit - return $ read x + x <- nat + return x -- GitLab