repositories
/
cc1516.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sem update'
[cc1516.git]
/
parse.icl
diff --git
a/parse.icl
b/parse.icl
index
34ec15b
..
3679124
100644
(file)
--- a/
parse.icl
+++ b/
parse.icl
@@
-20,7
+20,10
@@
import AST
parser :: LexerOutput -> ParserOutput
parser (Left e) = Left e
parser :: LexerOutput -> ParserOutput
parser (Left e) = Left e
-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
parseProgram :: Parser Token AST
parseProgram = AST <$> (many parseVarDecl) <*> (some parseFunDecl)
parseProgram :: Parser Token AST
parseProgram = AST <$> (many parseVarDecl) <*> (some parseFunDecl)
@@
-65,7
+68,6
@@
parseStmt = parseIfStmt <|> parseWhileStmt <|>
parseBlock = parseBCBraces (many parseStmt)
parseOneLine :: Parser Token [Stmt]
parseBlock = parseBCBraces (many parseStmt)
parseOneLine :: Parser Token [Stmt]
- //first pure makes singleton list from the statement
parseOneLine = pure <$> parseStmt
parseFunType :: Parser Token FunType
parseOneLine = pure <$> parseStmt
parseFunType :: Parser Token FunType
@@
-119,8
+121,8
@@
parseExpr = //Operators in order of binding strength
parseOpL :: (Parser Token Op2) (Parser Token Expr) -> Parser Token Expr
parseOpL ops prev = peekPos >>= \pos-> prev >>= \e1->many (
parseOpL :: (Parser Token Op2) (Parser Token Expr) -> Parser Token Expr
parseOpL ops prev = peekPos >>= \pos-> prev >>= \e1->many (
- ops >>= \op->prev >>= \e->pure (op, e)
-
)
>>= \moe->foldM (\e->(\(op,e2)->pure $ Op2Expr pos e op e2)) e1 moe
+ ops >>= \op->prev >>= \e->pure (op, e)
)
+ >>= \moe->foldM (\e->(\(op,e2)->pure $ Op2Expr pos e op e2)) e1 moe
parseBasicExpr :: Parser Token Expr
parseBasicExpr = peekPos >>= \pos ->
parseBasicExpr :: Parser Token Expr
parseBasicExpr = peekPos >>= \pos ->
@@
-136,7
+138,8
@@
parseExpr = //Operators in order of binding strength
(VarExpr pos <$> parseVarDef)
parseFunCall :: Parser Token FunCall
(VarExpr pos <$> parseVarDef)
parseFunCall :: Parser Token FunCall
-parseFunCall = FunCall <$> parseIdent <*> (parseBBraces $ parseSepList CommaToken parseExpr)
+parseFunCall = FunCall <$> parseIdent <*>
+ (parseBBraces $ parseSepList CommaToken parseExpr)
parseVarDef :: Parser Token VarDef
parseVarDef = liftM2 VarDef
parseVarDef :: Parser Token VarDef
parseVarDef = liftM2 VarDef