diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-11-09 00:21:57 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-11-09 00:21:57 +0000 |
| commit | 91415f7ad02d31ed9034eff2a6f3c8213409ee71 (patch) | |
| tree | 660eefe264da953f593787ea153139d8edf041f4 /src/GF/Devel | |
| parent | 5e0e82250e6c5e88a9d5300d972bc7100bfb5ece (diff) | |
grammar printing options in gf3 and gfc
Diffstat (limited to 'src/GF/Devel')
| -rw-r--r-- | src/GF/Devel/GFC.hs | 24 | ||||
| -rw-r--r-- | src/GF/Devel/PrintGFCC.hs | 14 |
2 files changed, 31 insertions, 7 deletions
diff --git a/src/GF/Devel/GFC.hs b/src/GF/Devel/GFC.hs index b8c4277f3..0c352bbb7 100644 --- a/src/GF/Devel/GFC.hs +++ b/src/GF/Devel/GFC.hs @@ -1,8 +1,8 @@ module Main where import GF.Devel.Compile +import GF.Devel.PrintGFCC import GF.Devel.GrammarToGFCC -import GF.Devel.GFCCtoJS import GF.GFCC.OptimizeGFCC import GF.GFCC.CheckGFCC import GF.GFCC.DataGFCC @@ -26,12 +26,7 @@ main = do let target = abs ++ ".gfcc" writeFile target (printGFCC gc) putStrLn $ "wrote file " ++ target - if oElem (iOpt "js") opts - then do - let js = abs ++ ".js" - writeFile js (gfcc2js gc) - putStrLn $ "wrote file " ++ js - else return () + mapM_ (alsoPrint opts abs gc) printOptions -- gfc -o target.gfcc source_1.gfcc ... source_n.gfcc _ | all ((=="gfcc") . fileSuffix) fs && oElem (iOpt "o") opts -> do @@ -51,3 +46,18 @@ check gfcc = do file2gfcc f = readFileIf f >>= err (error) (return . mkGFCC) . pGrammar . myLexer + + +---- TODO: nicer and richer print options + +alsoPrint opts abs gr (opt,suff) = + if oElem (iOpt opt) opts + then do + let outfile = abs ++ "." ++ suff + let output = prGFCC opt gr + writeFile outfile output + putStrLn $ "wrote file " ++ outfile + else return () + +printOptions = [("haskell","hs"),("haskell_gadt","hs"),("js","js")] + diff --git a/src/GF/Devel/PrintGFCC.hs b/src/GF/Devel/PrintGFCC.hs new file mode 100644 index 000000000..462c175c7 --- /dev/null +++ b/src/GF/Devel/PrintGFCC.hs @@ -0,0 +1,14 @@ +module GF.Devel.PrintGFCC where + +import GF.GFCC.DataGFCC (GFCC,printGFCC) +import GF.Devel.GFCCtoHaskell +import GF.Devel.GFCCtoJS + +-- top-level access to code generation + +prGFCC :: String -> GFCC -> String +prGFCC printer gr = case printer of + "haskell" -> grammar2haskell gr + "haskell_gadt" -> grammar2haskellGADT gr + "js" -> gfcc2js gr + _ -> printGFCC gr |
