summaryrefslogtreecommitdiff
path: root/src/GF/Devel
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-11-09 00:21:57 +0000
committeraarne <aarne@cs.chalmers.se>2007-11-09 00:21:57 +0000
commit91415f7ad02d31ed9034eff2a6f3c8213409ee71 (patch)
tree660eefe264da953f593787ea153139d8edf041f4 /src/GF/Devel
parent5e0e82250e6c5e88a9d5300d972bc7100bfb5ece (diff)
grammar printing options in gf3 and gfc
Diffstat (limited to 'src/GF/Devel')
-rw-r--r--src/GF/Devel/GFC.hs24
-rw-r--r--src/GF/Devel/PrintGFCC.hs14
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