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

how tf do u parse macros

parent 0c4c72c5
No related branches found
No related tags found
No related merge requests found
...@@ -323,39 +323,45 @@ parseLamMacro _ = Nothing ...@@ -323,39 +323,45 @@ parseLamMacro _ = Nothing
macroExpr :: Parse LamMacroExpr macroExpr :: Parse LamMacroExpr
macroExpr = do string "def" macroExpr = do string "def"
space name <- token macroName
name <- macroName symbol "="
space e <- token expr
string "in"
macro <- many macroExpr
return $ LamDef [(name,e)]
expr :: Parser LamExpr 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 space
e2 <- expr e2 <- expr
return $ LamApp e1 e2 <|> return $ LamApp e1 e2 <|>
do char '\' do char '\'
x <- var x <- var
symbol "->" symbol "->"
e <- expr e <- expr
return $ LamAbs x e <|> return $ LamAbs x e <|>
do char '(' do char '('
e <- identifier e <- token expr
char ')' char ')'
return e return e
macroName :: Parser String macroName :: Parser String
macroName = do name <- some upper macroName = do name <- some upper
return $ name return name
var :: Parser Int var :: Parser Int
var = do char 'x' var = do char 'x'
x <- some digit x <- nat
return $ read x return x
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment