1
0
forked from GitHub/gf-core

"Committed_by_peb"

This commit is contained in:
peb
2005-04-18 13:55:32 +00:00
parent a70b009183
commit 559ee22bce
19 changed files with 284 additions and 192 deletions

View File

@@ -4,21 +4,21 @@
-- Stability : (stable)
-- Portability : (portable)
--
-- > CVS $Date: 2005/04/16 05:40:49 $
-- > CVS $Date: 2005/04/18 14:55:32 $
-- > CVS $Author: peb $
-- > CVS $Revision: 1.5 $
-- > CVS $Revision: 1.6 $
--
-- All conversions from GFC
-----------------------------------------------------------------------------
module GF.Conversion.GFC
module GF.Conversion.GFC
(module GF.Conversion.GFC,
SGrammar, MGrammar, CGrammar) where
import Option
import GFC (CanonGrammar)
import Ident (Ident)
import GF.Conversion.Types (CGrammar, MGrammar, NGrammar, SGrammar)
import GF.Conversion.Types (CGrammar, MGrammar, EGrammar, SGrammar)
import qualified GF.Conversion.GFCtoSimple as G2S
import qualified GF.Conversion.SimpleToFinite as S2Fin
@@ -31,9 +31,10 @@ import qualified GF.Conversion.MCFGtoCFG as M2C
-- * GFC -> MCFG & CFG, using options to decide which conversion is used
gfc2mcfg2cfg :: Options -> (CanonGrammar, Ident) -> (MGrammar, CGrammar)
gfc2mcfg2cfg opts = \g -> let m = g2m g in (m, m2c m)
where m2c = mcfg2cfg
g2m = case getOptVal opts gfcConversion of
gfc2mcfg2cfg opts = \g -> let e = g2e g in (e2m e, e2c e)
where e2c = mcfg2cfg
e2m = removeErasing
g2e = case getOptVal opts gfcConversion of
Just "strict" -> simple2mcfg_strict . gfc2simple
Just "finite" -> simple2mcfg_nondet . gfc2finite
Just "finite-strict" -> simple2mcfg_strict . gfc2finite
@@ -60,24 +61,18 @@ removeSingletons = RemSing.convertGrammar
gfc2finite :: (CanonGrammar, Ident) -> SGrammar
gfc2finite = removeSingletons . simple2finite . gfc2simple
simple2mcfg_nondet :: SGrammar -> MGrammar
simple2mcfg_nondet :: SGrammar -> EGrammar
simple2mcfg_nondet = S2M.convertGrammarNondet
simple2mcfg_strict :: SGrammar -> MGrammar
simple2mcfg_strict :: SGrammar -> EGrammar
simple2mcfg_strict = S2M.convertGrammarStrict
mcfg2cfg :: MGrammar -> CGrammar
mcfg2cfg :: EGrammar -> CGrammar
mcfg2cfg = M2C.convertGrammar
removeErasing :: MGrammar -> NGrammar
removeErasing :: EGrammar -> MGrammar
removeErasing = RemEra.convertGrammar
-- | this function is unnecessary, because of the following equivalence:
--
-- > mcfg2cfg == ne_mcfg2cfg . removeErasing
--
ne_mcfg2cfg :: NGrammar -> CGrammar
ne_mcfg2cfg = M2C.convertNEGrammar