summaryrefslogtreecommitdiff
path: root/src/GF/Compile/GrammarToGFCC.hs
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2009-09-05 14:04:39 +0000
committerkrasimir <krasimir@chalmers.se>2009-09-05 14:04:39 +0000
commit95a577d2699128174a3cbed982b358a8730518d9 (patch)
treea56a3a1990cc038ad5c96222f1afc2469c90ccbb /src/GF/Compile/GrammarToGFCC.hs
parent785ef9224bfe8eb07d599445126278128ec3fcb6 (diff)
simple profiler for PMCFG
Diffstat (limited to 'src/GF/Compile/GrammarToGFCC.hs')
-rw-r--r--src/GF/Compile/GrammarToGFCC.hs13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/GF/Compile/GrammarToGFCC.hs b/src/GF/Compile/GrammarToGFCC.hs
index 14187f04a..c8bb1c606 100644
--- a/src/GF/Compile/GrammarToGFCC.hs
+++ b/src/GF/Compile/GrammarToGFCC.hs
@@ -44,14 +44,15 @@ mkCanon2gfcc opts cnc gr =
pars = mkParamLincat gr
-- Adds parsers for all concretes
-addParsers :: Options -> D.PGF -> D.PGF
-addParsers opts pgf = CM.mapConcretes conv pgf
+addParsers :: Options -> D.PGF -> IO D.PGF
+addParsers opts pgf = do cncs <- sequence [conv lang cnc | (lang,cnc) <- Map.toList (D.concretes pgf)]
+ return pgf { D.concretes = Map.fromList cncs }
where
- conv cnc = cnc { D.parser = Just pinfo }
+ conv lang cnc = do pinfo <- if flag optErasing (erasingFromCnc `addOptions` opts)
+ then PMCFG.convertConcrete opts (D.abstract pgf) lang cnc
+ else return $ FCFG.convertConcrete (D.abstract pgf) cnc
+ return (lang,cnc { D.parser = Just pinfo })
where
- pinfo
- | flag optErasing (erasingFromCnc `addOptions` opts) = PMCFG.convertConcrete (D.abstract pgf) cnc
- | otherwise = FCFG.convertConcrete (D.abstract pgf) cnc
erasingFromCnc = modifyFlags (\o -> o { optErasing = Map.lookup (mkCId "erasing") (D.cflags cnc) == Just "on"})
-- Generate PGF from GFCM.