prlg/app/Main.hs
2022-10-24 23:43:35 +02:00

49 lines
1.2 KiB
Haskell

module Main where
import qualified Compiler as C
import Control.Monad.IO.Class
import qualified Data.Map as M
import qualified Interpreter as I
import qualified Parser as P
import System.Console.Haskeline
import qualified Text.Megaparsec as MP
import Text.Pretty.Simple
ppr :: Show a => a -> IO ()
ppr =
pPrintOpt
CheckColorTty
defaultOutputOptionsDarkBg
{ outputOptionsCompactParens = True
, outputOptionsIndentAmount = 2
, outputOptionsPageWidth = 80
}
interpret :: String -> InputT IO ()
interpret = liftIO . lex
where
lex input =
case MP.parse P.lexPrlg "-" input of
Left bundle -> putStr (MP.errorBundlePretty bundle)
Right toks -> parse toks
parse toks =
case MP.parse P.parsePrlg "-" toks of
Left bundle -> putStr (MP.errorBundlePretty bundle)
Right ast -> prologize ast
prologize ast = ppr $ map (P.ast2prlg P.defaultOps) ast
main :: IO ()
main =
runInputT defaultSettings $ do
outputStrLn "PRLG."
loop
where
loop :: InputT IO ()
loop = do
minput <- getInputLine "|= "
case minput of
Nothing -> return ()
Just input -> do
interpret input
loop