(Left e, _) = Left $ toString e
parseProgram :: Parser Token AST
(Left e, _) = Left $ toString e
parseProgram :: Parser Token AST
parseFunDecl :: Parser Token FunDecl
parseFunDecl = liftM5 FunDecl
(parseIdent <* satTok BraceOpenToken)
(parseSepList CommaToken parseIdent <* satTok BraceCloseToken)
parseFunDecl :: Parser Token FunDecl
parseFunDecl = liftM5 FunDecl
(parseIdent <* satTok BraceOpenToken)
(parseSepList CommaToken parseIdent <* satTok BraceCloseToken)
parseVoidOrType :: Parser Token (Maybe Type)
parseVoidOrType = (satTok VoidToken *> pure Nothing) <|>
parseVoidOrType :: Parser Token (Maybe Type)
parseVoidOrType = (satTok VoidToken *> pure Nothing) <|>
where
eq (IdentToken _) (_, IdentToken _) = True
eq (NumberToken _) (_, NumberToken _) = True
where
eq (IdentToken _) (_, IdentToken _) = True
eq (NumberToken _) (_, NumberToken _) = True
instance print FunDecl where
print (FunDecl i as t vs ss) =
["\n", i, " (":printersperse "," as] ++
instance print FunDecl where
print (FunDecl i as t vs ss) =
["\n", i, " (":printersperse "," as] ++
- [") :: ":print t] ++
- ["{":printersperse "\n\t" vs] ++
- ["\n":printStatements ss 1] ++ ["}"]
+ [")"] ++ maybe [] (\tt->[" :: ":print tt]) t ++
+ ["{\n\t":printersperse "\n\t" vs] ++
+ ["\n":printStatements ss 1] ++ ["}\n"]
printCodeBlock [x] i = ["\n":printStatements [x] (i+1)]
printCodeBlock x i =
["{\n":printStatements x (i+1)] ++ indent i ["}\n"]
printCodeBlock [x] i = ["\n":printStatements [x] (i+1)]
printCodeBlock x i =
["{\n":printStatements x (i+1)] ++ indent i ["}\n"]