From: Mart Lubbers Date: Mon, 29 Feb 2016 14:01:58 +0000 (+0100) Subject: Merge branch 'master' of github.com:dopefishh/cc1516 X-Git-Url: https://git.martlubbers.net/?a=commitdiff_plain;h=96be5e0151b236a425025cf96e8dade73ee74fcf;hp=-c;p=cc1516.git Merge branch 'master' of github.com:dopefishh/cc1516 --- 96be5e0151b236a425025cf96e8dade73ee74fcf diff --combined src/parse.icl index 349c0e1,d64efcb..af50de6 --- a/src/parse.icl +++ b/src/parse.icl @@@ -53,10 -53,11 +53,11 @@@ parseStmt = parseIfStmt <|> parseWhileS 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 *> @@@ -150,7 -151,8 +151,7 @@@ parseVarDef = liftM2 VarDe (parseIdent >>= \i.if (i == "snd") (pure FieldSnd) empty)))) parseOp1 :: Parser Token Op1 -parseOp1 = trans1 DashToken UnMinus <|> - trans1 ExclamationToken UnNegation +parseOp1 = trans1 DashToken UnMinus <|> trans1 ExclamationToken UnNegation parseBBraces :: (Parser Token a) -> Parser Token a parseBBraces p = satTok BraceOpenToken *> p <* satTok BraceCloseToken @@@ -167,7 -169,7 +168,7 @@@ parseTuple p = satTok BraceOpenToken * <* satTok BraceCloseToken trans2 :: TokenValue (TokenValue -> a) -> Parser Token a -trans2 t f = satTok t >>= \(_, r).pure (f r) +trans2 t f = liftM (f o snd) $ satTok t trans1 :: TokenValue a -> Parser Token a trans1 t r = trans2 t $ const r @@@ -175,7 -177,9 +176,9 @@@ 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