Abbie's Haskell compiler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

51 lines
1.3 KiB

-- {-# LANGUAGE BlockArguments #-}
module Main where
import qualified Data.ByteString.Lazy as Lbs
import Data.Foldable
import Frontend.Lexer.Tokens
import Frontend.Autogen.Lexer
import Frontend.Autogen.Parser
import qualified Data.Text.Encoding as T
import qualified Data.Text as T
import Control.Monad ( unless )
import System.Environment (getArgs)
import Text.Show.Pretty (pPrint)
import Debug.Trace
main :: IO ()
main = do
args <- getArgs
for_ args $ \str -> do
Main.lex pPrint parseMod =<< Lbs.readFile str
testParse :: String -> IO ()
testParse s = Main.lex print parseMod (Lbs.fromStrict (T.encodeUtf8 (T.pack s)))
testLex :: String -> IO ()
testLex s = Main.lex (const (pure ())) (scan []) (Lbs.fromStrict (T.encodeUtf8 (T.pack s)))
lex :: (a -> IO ()) -> Alex a -> Lbs.ByteString -> IO ()
lex show cont arg = do
let x = runAlex arg cont
case x of
Left e -> print e
Right x -> show x
scan :: [Token] -> Alex [Token]
scan acc = do
tok <- alexMonadScan
sc <- alexGetStartCode
state <- getUserState
traceM . unlines $
[ "----------------"
, "just lexed: " ++ show tok
, "sc: " ++ show sc
, "sc stack: " ++ show (startCodes state)
]
case tokenClass tok of
TokEof -> pure (reverse acc)
_ -> scan (tok:acc)