forked from GitHub/gf-core
"Committed_by_peb"
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user