
Haoyu Bai
By: a guest on
Apr 29th, 2009 | syntax:
Haskell | size: 1.34 KB | hits: 59 | expires: Never
module Main where
import qualified Parser
import StringBuffer
import Lexer
import FastString
import SrcLoc
import DynFlags
import StaticFlagParser
import HscTypes
import GHC
import GHC.SYB.Utils
import System
doParse infile dflags = do
buf <- hGetStringBuffer infile
let loc = mkSrcLoc (mkFastString infile) 1 0
return $ unP Parser
.parseModule
(mkPState buf loc dflags
)
parseFile infile =
defaultErrorHandler defaultDynFlags $
{-defaultCleanupHandler $-}
runGhc (Just "/usr/lib/ghc-6.10.2/") $ do
hsc_env <- getSession
let dflags0 = hsc_dflags hsc_env
let dflags = dflags0{
verbosity = 99
}
setSessionDynFlags dflags
handleSourceError (\e -> do
printExceptionAndWarnings e
liftIO $ exitWith (ExitFailure 1)) $ do
liftIO $ doParse infile dflags
main = do
args <- getArgs
let [infile, outfile] = args
hSetBuffering stdout NoBuffering
res <- parseFile infile
case res of
POk _ x -> bracket (openFile outfile WriteMode) hClose
(\h -> hPutStrLn h $ showData Parser 2 x)
PFailed loc err
-> do hPutStrLn stderr
$ "Failure when parsing " ++ show infile
++ ": " -- ++ show err
{-exitWith (ExitFailure (-1))-}