From 4009b46358fe3cc463c1e34c047958a15015941b Mon Sep 17 00:00:00 2001 From: peb Date: Wed, 7 Jun 2006 16:06:49 +0000 Subject: [PATCH] new conversion MCFG -> FCFG, new grammar printers for FCFG --- src/GF/Conversion/GFC.hs | 12 ++++++++++-- src/GF/UseGrammar/Custom.hs | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/GF/Conversion/GFC.hs b/src/GF/Conversion/GFC.hs index 2cf079c17..05a0e7683 100644 --- a/src/GF/Conversion/GFC.hs +++ b/src/GF/Conversion/GFC.hs @@ -32,6 +32,7 @@ import qualified GF.Conversion.RemoveErasing as RemEra import qualified GF.Conversion.RemoveEpsilon as RemEps import qualified GF.Conversion.SimpleToMCFG as S2M import qualified GF.Conversion.SimpleToFCFG as S2FM +import qualified GF.Conversion.MCFGtoFCFG as M2FM import qualified GF.Conversion.MCFGtoCFG as M2C import GF.Infra.Print @@ -41,10 +42,12 @@ import GF.System.Tracing ---------------------------------------------------------------------- -- * GFC -> MCFG & CFG, using options to decide which conversion is used -convertGFC :: Options -> (CanonGrammar, Ident) -> (SGrammar, (EGrammar, (MGrammar, FGrammar, CGrammar))) +convertGFC :: Options -> (CanonGrammar, Ident) + -> (SGrammar, (EGrammar, (MGrammar, FGrammar, CGrammar))) convertGFC opts = \g -> let s = g2s g e = s2e s - in trace2 "Options" (show opts) (s, (e, (e2m e, s2fm s, e2c e))) + m = e2m e + in trace2 "Options" (show opts) (s, (e, (m, s2fm s, e2c e))) where e2c = M2C.convertGrammar e2m = case getOptVal opts firstCat of Just cat -> flip erasing [identC cat] @@ -55,6 +58,7 @@ convertGFC opts = \g -> let s = g2s g Just "epsilon" -> epsilon . nondet _ -> nondet s2fm= S2FM.convertGrammar + m2fm= M2FM.convertGrammar g2s = case getOptVal opts gfcConversion of Just "finite" -> finite . simple Just "finite2" -> finite . finite . simple @@ -90,6 +94,10 @@ gfc2fcfg opts g = fcfg where (_, fcfg, _) = snd (snd (convertGFC opts g)) +mcfg2fcfg :: MGrammar -> FGrammar +mcfg2fcfg = M2FM.convertGrammar + + ---------------------------------------------------------------------- -- * single step conversions diff --git a/src/GF/UseGrammar/Custom.hs b/src/GF/UseGrammar/Custom.hs index 8c43a0696..4314747bf 100644 --- a/src/GF/UseGrammar/Custom.hs +++ b/src/GF/UseGrammar/Custom.hs @@ -309,6 +309,7 @@ customGrammarPrinter = -- grammar conversions: ,(strCI "mcfg", \_ -> Prt.prt . stateMCFG) ,(strCI "fcfg", \_ -> Prt.prt . stateFCFG) + ,(strCI "mcfg2fcfg",\_ -> Prt.prt . Cnv.mcfg2fcfg . stateMCFG) ,(strCI "cfg", \_ -> Prt.prt . stateCFG) ,(strCI "pinfo", \_ -> Prt.prt . statePInfo) ,(strCI "abstract", \_ -> Prt.prtAfter "\n" . Cnv.gfc2abstract . stateGrammarLang)