mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-05 01:02:51 -06:00
move GFC and GFI
This commit is contained in:
@@ -1,67 +0,0 @@
|
||||
module GF.Devel.GFC (mainGFC) where
|
||||
-- module Main where
|
||||
|
||||
import GF.Compile
|
||||
import GF.Devel.PrintGFCC
|
||||
import GF.GFCC.CId
|
||||
import GF.GFCC.DataGFCC
|
||||
import GF.GFCC.Raw.ParGFCCRaw
|
||||
import GF.GFCC.Raw.ConvertGFCC
|
||||
import GF.Devel.UseIO
|
||||
import GF.Infra.Option
|
||||
import GF.GFCC.API
|
||||
import GF.Data.ErrM
|
||||
|
||||
import System.FilePath
|
||||
|
||||
mainGFC :: [String] -> IO ()
|
||||
mainGFC xx = do
|
||||
let (opts,fs) = getOptions "-" xx
|
||||
case opts of
|
||||
_ | oElem (iOpt "help") opts -> putStrLn usageMsg
|
||||
_ | oElem (iOpt "-make") opts -> do
|
||||
gfcc <- appIOE (compileToGFCC opts fs) >>= err fail return
|
||||
let gfccFile = targetNameGFCC opts (absname gfcc)
|
||||
outputFile gfccFile (printGFCC gfcc)
|
||||
mapM_ (alsoPrint opts gfcc) printOptions
|
||||
|
||||
-- gfc -o target.gfcc source_1.gfcc ... source_n.gfcc
|
||||
_ | all ((==".gfcc") . takeExtensions) fs -> do
|
||||
gfccs <- mapM file2gfcc fs
|
||||
let gfcc = foldl1 unionGFCC gfccs
|
||||
let gfccFile = targetNameGFCC opts (absname gfcc)
|
||||
outputFile gfccFile (printGFCC gfcc)
|
||||
mapM_ (alsoPrint opts gfcc) printOptions
|
||||
|
||||
_ -> do
|
||||
appIOE (mapM_ (batchCompile opts) (map return fs)) >>= err fail return
|
||||
putStrLn "Done."
|
||||
|
||||
targetName :: Options -> CId -> String
|
||||
targetName opts abs = case getOptVal opts (aOpt "target") of
|
||||
Just n -> n
|
||||
_ -> prCId abs
|
||||
|
||||
targetNameGFCC :: Options -> CId -> FilePath
|
||||
targetNameGFCC opts abs = targetName opts abs ++ ".gfcc"
|
||||
|
||||
---- TODO: nicer and richer print options
|
||||
|
||||
alsoPrint opts gr (opt,name) = do
|
||||
if oElem (iOpt opt) opts
|
||||
then outputFile name (prGFCC opt gr)
|
||||
else return ()
|
||||
|
||||
outputFile :: FilePath -> String -> IO ()
|
||||
outputFile outfile output =
|
||||
do writeFile outfile output
|
||||
putStrLn $ "wrote file " ++ outfile
|
||||
|
||||
printOptions = [
|
||||
("haskell","GSyntax.hs"),
|
||||
("haskell_gadt","GSyntax.hs"),
|
||||
("js","grammar.js")
|
||||
]
|
||||
|
||||
usageMsg =
|
||||
"usage: gfc (-h | --make (-noopt) (-noparse) (-target=PREFIX) (-js | -haskell | -haskell_gadt)) (-src) FILES"
|
||||
@@ -1,82 +0,0 @@
|
||||
module GF.Devel.GFI (mainGFI) where
|
||||
|
||||
import GF.Command.Interpreter
|
||||
import GF.Command.Importing
|
||||
import GF.Command.Commands
|
||||
import GF.GFCC.API
|
||||
|
||||
import GF.Devel.UseIO
|
||||
import GF.System.Readline (fetchCommand)
|
||||
import GF.Infra.Option ---- Haskell's option lib
|
||||
|
||||
import System.CPUTime
|
||||
|
||||
|
||||
mainGFI :: [String] -> IO ()
|
||||
mainGFI xx = do
|
||||
putStrLn welcome
|
||||
env <- importInEnv emptyMultiGrammar xx
|
||||
loop (GFEnv env [] 0)
|
||||
return ()
|
||||
|
||||
loop :: GFEnv -> IO GFEnv
|
||||
loop gfenv0 = do
|
||||
let env = commandenv gfenv0
|
||||
s <- fetchCommand (prompt env)
|
||||
let gfenv = gfenv0 {history = s : history gfenv0}
|
||||
case words s of
|
||||
|
||||
-- special commands, working on GFEnv
|
||||
"i":args -> do
|
||||
env1 <- importInEnv (multigrammar env) args
|
||||
loopNewCPU $ gfenv {commandenv = env1}
|
||||
"e":_ -> loopNewCPU $ gfenv {commandenv=env{multigrammar=emptyMultiGrammar}}
|
||||
"ph":_ -> mapM_ putStrLn (reverse (history gfenv0)) >> loopNewCPU gfenv
|
||||
"q":_ -> putStrLn "See you." >> return gfenv
|
||||
|
||||
-- ordinary commands, working on CommandEnv
|
||||
_ -> do
|
||||
interpretCommandLine env s
|
||||
loopNewCPU gfenv
|
||||
|
||||
loopNewCPU gfenv = do
|
||||
cpu' <- getCPUTime
|
||||
putStrLn (show ((cpu' - cputime gfenv) `div` 1000000000) ++ " msec")
|
||||
loop $ gfenv {cputime = cpu'}
|
||||
|
||||
importInEnv mgr0 xx = do
|
||||
let (opts,files) = getOptions "-" xx
|
||||
mgr1 <- case files of
|
||||
[] -> return mgr0
|
||||
_ -> importGrammar mgr0 opts files
|
||||
let env = CommandEnv mgr1 (allCommands mgr1)
|
||||
putStrLn $ unwords $ "\nLanguages:" : languages mgr1
|
||||
return env
|
||||
|
||||
welcome = unlines [
|
||||
" ",
|
||||
" * * * ",
|
||||
" * * ",
|
||||
" * * ",
|
||||
" * ",
|
||||
" * ",
|
||||
" * * * * * * * ",
|
||||
" * * * ",
|
||||
" * * * * * * ",
|
||||
" * * * ",
|
||||
" * * * ",
|
||||
" ",
|
||||
"This is GF version 3.0 alpha. ",
|
||||
"Some things may work. "
|
||||
]
|
||||
|
||||
prompt env = absname ++ "> " where
|
||||
absname = case abstractName (multigrammar env) of
|
||||
"_" -> "" --- created by new Ident handling 22/5/2008
|
||||
n -> n
|
||||
|
||||
data GFEnv = GFEnv {
|
||||
commandenv :: CommandEnv,
|
||||
history :: [String],
|
||||
cputime :: Integer
|
||||
}
|
||||
Reference in New Issue
Block a user