|
|
- -- {-# 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)
|