-parser (Right r) = fst $ runParser parseProgram r
+parser (Right r) = case runParser parseProgram r of
+ (Right ast, [(p, t):xs]) = Left $ PositionalError p.line p.col (
+ "Unable to parse from: " +++ printToString t)
+ x = fst x
- (satTok BraceOpenToken *> parseSepList CommaToken parseIdent <* satTok BraceCloseToken)
- (optional parseFunType <* satTok CBraceOpenToken)
- (many parseVarDecl)
+ (parseBBraces $ parseSepList CommaToken parseIdent)
+ (optional parseFunType)
+ (satTok CBraceOpenToken *> many parseVarDecl)
(many parseStmt <* satTok CBraceCloseToken)
parseStmt :: Parser Token Stmt
parseStmt = parseIfStmt <|> parseWhileStmt <|>
parseSColon parseAssStmt <|> parseSColon parseReturnStmt <|>
(many parseStmt <* satTok CBraceCloseToken)
parseStmt :: Parser Token Stmt
parseStmt = parseIfStmt <|> parseWhileStmt <|>
parseSColon parseAssStmt <|> parseSColon parseReturnStmt <|>
- parseWhileStmt = satTok WhileToken *>
- (WhileStmt <$> (parseBBraces parseExpr) <*> parseBlock)
+ parseWhileStmt = satTok WhileToken *> (WhileStmt <$>
+ (parseBBraces parseExpr) <*> (parseBlock <|> parseOneLine))