module Latte.Lang (
	module Latte.Lang.Abs,
	module Latte.Lang.ErrM,
	module Latte.Lang.Lex,
	module Latte.Lang.Par,
	module Latte.Lang.Print,
	module Latte.Lang.Skel,

	parseProgram
) where

import Control.Monad.Except

import Latte.Lang.Abs
import Latte.Lang.ErrM
import Latte.Lang.Lex
import Latte.Lang.Par
import Latte.Lang.Print
import Latte.Lang.Skel

import Latte.Commons
import Latte.Errors

parseProgram :: String -> Runner () Program
parseProgram text = let ts = myLexer text in
	case pProgram ts of
		Bad s -> do
			liftIO $ print s
			throwError $ ParseError
		Ok tree -> do
			liftIO $ print "Parse correct"
			return tree
