summaryrefslogtreecommitdiff
path: root/src/GF
diff options
context:
space:
mode:
authorpeb <peb@cs.chalmers.se>2006-06-07 16:06:49 +0000
committerpeb <peb@cs.chalmers.se>2006-06-07 16:06:49 +0000
commit4009b46358fe3cc463c1e34c047958a15015941b (patch)
tree5702c7744f0df0015721f20297a9609280dce64d /src/GF
parent4a3d280df50a059f75f9c61a5afd932add789341 (diff)
new conversion MCFG -> FCFG, new grammar printers for FCFG
Diffstat (limited to 'src/GF')
-rw-r--r--src/GF/Conversion/GFC.hs12
-rw-r--r--src/GF/UseGrammar/Custom.hs1
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)