diff options
| author | kr.angelov <kr.angelov@chalmers.se> | 2008-05-22 14:39:16 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@chalmers.se> | 2008-05-22 14:39:16 +0000 |
| commit | d8cabf026390f0f69a4e9b3a503f0ea5538ff362 (patch) | |
| tree | b317a33333ae524b9de127bfca8675a35c78f078 /src-3.0/GFC.hs | |
| parent | ebbc0a3e806f2df19a74b3f7a1d3575476c3237b (diff) | |
move GFC and GFI
Diffstat (limited to 'src-3.0/GFC.hs')
| -rw-r--r-- | src-3.0/GFC.hs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src-3.0/GFC.hs b/src-3.0/GFC.hs new file mode 100644 index 000000000..9273117b7 --- /dev/null +++ b/src-3.0/GFC.hs @@ -0,0 +1,67 @@ +module 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" |
