module Language.Janus.Parser (
parseProgram,
parseStatement,
parseExpression,
parseLiteral
) where
import Control.Applicative (many, (*>), (<$), (<$>),
(<*), (<*>), (<|>))
import Text.Parsec (ParseError, eof, parse)
import Language.Janus.AST
import Language.Janus.Parser.Grammar
import Language.Janus.Parser.Lexer
parseProgram :: String
-> String
-> Either ParseError Program
parseProgram = parse (Program <$> (whiteSpace *> many statement <* eof))
parseStatement :: String
-> Either ParseError Stmt
parseStatement = parse (whiteSpace *> statement <* eof) ""
parseExpression :: String
-> Either ParseError Expr
parseExpression = parse (whiteSpace *> expression <* eof) ""
parseLiteral :: String
-> Either ParseError Val
parseLiteral = parse (whiteSpace *> literal <* eof) ""