parseIfStmt :: Parser Token Stmt
parseIfStmt = liftM3 IfStmt
- (satTok IfToken *> parseBBraces parseExpr)
- (parseBlock <|> parseOneLine)
- (liftM (fromMaybe [])
- (optional (satTok ElseToken *> (parseBlock<|> parseOneLine))))
+ (satTok IfToken *> parseBBraces parseExpr)
+ (parseBlock <|> parseOneLine)
+ (liftM (fromMaybe [])
+ (optional (satTok ElseToken *> (parseBlock<|> parseOneLine))))
+
parseWhileStmt :: Parser Token Stmt
parseWhileStmt = satTok WhileToken *>
derive gPrint TokenValue
derive gEq TokenValue
satTok :: TokenValue -> Parser Token Token
-satTok t = top >>= \tok=:(pos, tv) -> if (eq t tok) (return tok) (fail <?> (printToString tv, pos))
+satTok t = top >>= \tok=:(pos, tv) -> if (eq t tok)
+ (return tok)
+ (fail <?> (printToString tv+++printToString t, pos))
where
eq (IdentToken _) (_, IdentToken _) = True
eq (NumberToken _) (_, NumberToken _) = True
) ++ printStatements ss i
where
printCodeBlock :: [Stmt] Int -> [String]
- printCodeBlock [] _ = ["{}"]
+ printCodeBlock [] _ = ["{}\n"]
printCodeBlock [x] i = ["\n":printStatements [x] (i+1)]
printCodeBlock x i =
["{\n":printStatements x (i+1)] ++ indent i ["}\n"]