summaryrefslogtreecommitdiff
path: root/src/GF/Conversion/GFC.hs
diff options
context:
space:
mode:
authorpeb <unknown>2005-09-01 08:53:18 +0000
committerpeb <unknown>2005-09-01 08:53:18 +0000
commit7ad0dda9ed46b9ea80972123eac49d8f068efa7a (patch)
treef68cb8d0c8305db5126c675c3136d7eceb4dfdc6 /src/GF/Conversion/GFC.hs
parentf323d48fbbabee7213b5a61ba160f7fd438a684c (diff)
"Committed_by_peb"
Diffstat (limited to 'src/GF/Conversion/GFC.hs')
-rw-r--r--src/GF/Conversion/GFC.hs50
1 files changed, 30 insertions, 20 deletions
diff --git a/src/GF/Conversion/GFC.hs b/src/GF/Conversion/GFC.hs
index c0d1b68b2..0975d552a 100644
--- a/src/GF/Conversion/GFC.hs
+++ b/src/GF/Conversion/GFC.hs
@@ -4,16 +4,16 @@
-- Stability : (stable)
-- Portability : (portable)
--
--- > CVS $Date: 2005/08/11 14:11:46 $
+-- > CVS $Date: 2005/09/01 09:53:18 $
-- > CVS $Author: peb $
--- > CVS $Revision: 1.13 $
+-- > CVS $Revision: 1.14 $
--
-- All conversions from GFC
-----------------------------------------------------------------------------
module GF.Conversion.GFC
(module GF.Conversion.GFC,
- SGrammar, MGrammar, CGrammar) where
+ SGrammar, EGrammar, MGrammar, CGrammar) where
import GF.Infra.Option
import GF.Canon.GFC (CanonGrammar)
@@ -40,30 +40,39 @@ import GF.System.Tracing
----------------------------------------------------------------------
-- * GFC -> MCFG & CFG, using options to decide which conversion is used
-gfc2mcfg2cfg :: Options -> (CanonGrammar, Ident) -> (MGrammar, CGrammar)
-gfc2mcfg2cfg opts = \g -> let e = g2e g in trace2 "Options" (show opts) (e2m e, e2c e)
- where e2c = mcfg2cfg
+convertGFC :: Options -> (CanonGrammar, Ident) -> (SGrammar, (EGrammar, (MGrammar, CGrammar)))
+convertGFC opts = \g -> let s = g2s g
+ e = s2e s
+ in trace2 "Options" (show opts) (s, (e, (e2m e, e2c e)))
+ where e2c = M2C.convertGrammar
e2m = case getOptVal opts firstCat of
- Just cat -> flip removeErasing [identC cat]
- Nothing -> flip removeErasing []
- g2e = case getOptVal opts gfcConversion of
- Just "strict" -> simple2mcfg_strict . gfc2simple
- Just "finite" -> simple2mcfg_nondet . simple2finite . gfc2simple
- Just "singletons" -> simple2mcfg_nondet . removeSingletons . gfc2simple
- Just "epsilon" -> removeEpsilon . simple2mcfg_nondet . gfc2simple
- Just "finite-singletons" -> simple2mcfg_nondet . removeSingletons . simple2finite . gfc2simple
- Just "finite-strict" -> simple2mcfg_strict . simple2finite . gfc2simple
- _ -> simple2mcfg_nondet . gfc2simple
+ Just cat -> flip RemEra.convertGrammar [identC cat]
+ Nothing -> flip RemEra.convertGrammar []
+ s2e = case getOptVal opts gfcConversion of
+ Just "strict" -> S2M.convertGrammarStrict
+ Just "finite-strict" -> S2M.convertGrammarStrict
+ Just "epsilon" -> RemEps.convertGrammar . S2M.convertGrammarNondet
+ _ -> S2M.convertGrammarNondet
+ g2s = case getOptVal opts gfcConversion of
+ Just "finite" -> S2Fin.convertGrammar . G2S.convertGrammar
+ Just "singletons" -> RemSing.convertGrammar . G2S.convertGrammar
+ Just "finite-singletons" -> RemSing.convertGrammar . S2Fin.convertGrammar . G2S.convertGrammar
+ Just "finite-strict" -> S2Fin.convertGrammar . G2S.convertGrammar
+ _ -> G2S.convertGrammar
+
+gfc2simple :: Options -> (CanonGrammar, Ident) -> SGrammar
+gfc2simple opts = fst . convertGFC opts
gfc2mcfg :: Options -> (CanonGrammar, Ident) -> MGrammar
-gfc2mcfg opts = fst . gfc2mcfg2cfg opts
+gfc2mcfg opts = fst . snd . snd . convertGFC opts
gfc2cfg :: Options -> (CanonGrammar, Ident) -> CGrammar
-gfc2cfg opts = snd . gfc2mcfg2cfg opts
+gfc2cfg opts = snd . snd . snd . convertGFC opts
----------------------------------------------------------------------
-- * single step conversions
+{-
gfc2simple :: (CanonGrammar, Ident) -> SGrammar
gfc2simple = G2S.convertGrammar
@@ -74,7 +83,7 @@ removeSingletons :: SGrammar -> SGrammar
removeSingletons = RemSing.convertGrammar
simple2mcfg_nondet :: SGrammar -> EGrammar
-simple2mcfg_nondet = S2M.convertGrammarNondet
+simple2mcfg_nondet =
simple2mcfg_strict :: SGrammar -> EGrammar
simple2mcfg_strict = S2M.convertGrammarStrict
@@ -87,13 +96,14 @@ removeErasing = RemEra.convertGrammar
removeEpsilon :: EGrammar -> EGrammar
removeEpsilon = RemEps.convertGrammar
+-}
----------------------------------------------------------------------
-- * converting to some obscure formats
gfc2abstract :: (CanonGrammar, Ident) -> [Abstract SCat Fun]
gfc2abstract gr = [ Abs (decl2cat decl) (map decl2cat decls) (name2fun name) |
- Rule (Abs decl decls name) _ <- gfc2simple gr ]
+ Rule (Abs decl decls name) _ <- G2S.convertGrammar gr ]
abstract2skvatt :: [Abstract SCat Fun] -> String
abstract2skvatt gr = skvatt_hdr ++ concatMap abs2pl gr