Added a backend that prints out the AST as source (rather than dumping the raw AST)

This commit is contained in:
Neil Brown 2008-05-17 22:20:38 +00:00
parent e53fda754e
commit 90986ea97b
2 changed files with 7 additions and 3 deletions

View File

@ -49,13 +49,14 @@ import Pass
import PassList import PassList
import PreprocessOccam import PreprocessOccam
import PrettyShow import PrettyShow
import ShowCode
import Utils import Utils
type OptFunc = CompState -> IO CompState type OptFunc = CompState -> IO CompState
options :: [OptDescr OptFunc] options :: [OptDescr OptFunc]
options = options =
[ Option [] ["backend"] (ReqArg optBackend "BACKEND") "code-generating backend (options: c, cppcsp, dumpast)" [ Option [] ["backend"] (ReqArg optBackend "BACKEND") "code-generating backend (options: c, cppcsp, dumpast,src)"
, Option ['h'] ["help"] (NoArg optPrintHelp) "print this help" , Option ['h'] ["help"] (NoArg optPrintHelp) "print this help"
, Option ['k'] ["keep-temporaries"] (NoArg $ optKeepTemporaries) "keep temporary files" , Option ['k'] ["keep-temporaries"] (NoArg $ optKeepTemporaries) "keep temporary files"
, Option [] ["frontend"] (ReqArg optFrontend "FRONTEND") "language frontend (options: occam, rain)" , Option [] ["frontend"] (ReqArg optFrontend "FRONTEND") "language frontend (options: occam, rain)"
@ -83,6 +84,7 @@ optBackend s ps
"c" -> return BackendC "c" -> return BackendC
"cppcsp" -> return BackendCPPCSP "cppcsp" -> return BackendCPPCSP
"dumpast" -> return BackendDumpAST "dumpast" -> return BackendDumpAST
"src" -> return BackendSource
_ -> dieIO (Nothing, "Unknown backend: " ++ s) _ -> dieIO (Nothing, "Unknown backend: " ++ s)
return $ ps { csBackend = backend } return $ ps { csBackend = backend }
@ -315,11 +317,13 @@ compile mode fn outHandle
debug "{{{ Generate code" debug "{{{ Generate code"
progress $ "- Backend: " ++ (show $ csBackend optsPS) progress $ "- Backend: " ++ (show $ csBackend optsPS)
let generator let generator :: A.AST -> PassM ()
generator
= case csBackend optsPS of = case csBackend optsPS of
BackendC -> generateC outHandle BackendC -> generateC outHandle
BackendCPPCSP -> generateCPPCSP outHandle BackendCPPCSP -> generateCPPCSP outHandle
BackendDumpAST -> liftIO . hPutStr outHandle . pshow BackendDumpAST -> liftIO . hPutStr outHandle . pshow
BackendSource -> (liftIO . hPutStr outHandle) <.< showCode
generator ast2 generator ast2
debug "}}}" debug "}}}"

View File

@ -41,7 +41,7 @@ data CompMode = ModeFlowGraph | ModeParse | ModeCompile | ModePostC | ModeFull
deriving (Show, Data, Typeable, Eq) deriving (Show, Data, Typeable, Eq)
-- | Backends that Tock can use. -- | Backends that Tock can use.
data CompBackend = BackendC | BackendCPPCSP | BackendDumpAST data CompBackend = BackendC | BackendCPPCSP | BackendDumpAST | BackendSource
deriving (Show, Data, Typeable, Eq) deriving (Show, Data, Typeable, Eq)
-- | Frontends that Tock can use. -- | Frontends that Tock can use.