Skip to content
Snippets Groups Projects
Commit fd638c3c authored by ik1g19's avatar ik1g19
Browse files

progress on challenge 4

parent 14d63f3c
No related branches found
No related tags found
No related merge requests found
......@@ -278,8 +278,8 @@ prettyPrint (LamDef ms e) = exprBrackets e
--applies brackets to expr if needed
exprBrackets :: LamExpr -> String
exprBrackets e | expr str == e = str --omit brackets
| otherwise = "(" + str ++ ")" --include brackets
exprBrackets e | fst (head (parse expr str)) == e = str --omit brackets
| otherwise = "(" ++ str ++ ")" --include brackets
where
str = exprToStr e
......@@ -318,36 +318,63 @@ ex3'4 = LamDef [ ("F", LamAbs 1 (LamVar 1) ) ] (LamAbs 2 (LamApp (LamAbs 1 (LamV
parseLamMacro :: String -> Maybe LamMacroExpr
parseLamMacro _ = Nothing
parseLamMacro str | parsed == [] = Nothing
| otherwise = Just parsed
where
parsed = fst (head (parse (macroExpr []) str)) --HEAD WILL NOT WORK
macroExpr :: [ (String,LamExpr) ] -> Parser LamMacroExpr
macroExpr ms = do string "def"
name <- token macroName
symbol "="
e <- token expr
token $ string "in"
macros <- macroExpr $ ms ++ [(name,e)]
return $ macros
<|> do e <- token expr
return $ LamDef ms e
macroExpr :: Parse LamMacroExpr
macroExpr = do string "def"
name <- token macroName
symbol "="
e <- token expr
string "in"
macro <- many macroExpr
return $ LamDef [(name,e)]
-- macroExpr :: Parse LamMacroExpr
-- macroExpr = do string "def"
-- name <- token macroName
-- symbol "="
-- e <- token expr
-- token $ string "in"
-- macros <- macroLoop
-- return $ LamDef macros
-- where
-- macroLoop :: Parse [(String,LamExpr)]
-- macroLoop = do string "def"
-- name <- token macroName
-- symbol "="
-- e <- token expr
-- token $ string "in"
-- ms <- many macroExpr
-- return ((name,e):ms) <|>
-- do {e <- token expr;return []}
expr :: Parser LamExpr
expr = do {x <- var; return $ LamVar x} <|>
expr = do {x <- var; return $ LamVar x}
do {name <- macroName;return $ LamMacro name} <|>
<|> do {name <- macroName;return $ LamMacro name}
do e1 <- expr
<|> do e1 <- expr
space
e2 <- expr
return $ LamApp e1 e2 <|>
return $ LamApp e1 e2
do char '\'
<|> do char '\\'
x <- var
symbol "->"
e <- expr
return $ LamAbs x e <|>
return $ LamAbs x e
do char '('
<|> do char '('
e <- token expr
char ')'
return e
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment