parser :: LexerOutput -> ParserOutput
parser (Left e) = Left $ toString $ LexError e
parser (Right r) = case runParser parseProgram r of
- (Right p, _) = Right p
+ (Right p, []) = Right p
+ (Right p, x) = Left "Unparsed tokens: "//TODO
(Left e, _) = Left $ toString e
parseProgram :: Parser Token AST
parseProgram = liftM2 AST (many parseVarDecl) (some parseFunDecl)
- <* satTok EndOfFileToken
parseFunDecl :: Parser Token FunDecl
parseFunDecl = liftM5 FunDecl
satTok :: TokenValue -> Parser Token Token
satTok t = top >>= \tok=:(pos1, pos2, tv) -> if (eq t tok)
(return tok)
- (fail <?> (printToString tv+++printToString t, pos1))
+ (fail <?> Unexpected (printToString tv) (pos1, pos2))
where
eq (IdentToken _) (_, _, IdentToken _) = True
eq (NumberToken _) (_, _, NumberToken _) = True