From 0b1590536ae6fa1e03aee6fe0f9d46b42f71f00d Mon Sep 17 00:00:00 2001 From: krasimir Date: Wed, 23 Sep 2009 06:32:24 +0000 Subject: [PATCH] bugfix in the filterProds function --- src/PGF/PMCFG.hs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/PGF/PMCFG.hs b/src/PGF/PMCFG.hs index f7c2eea29..c657e3d17 100644 --- a/src/PGF/PMCFG.hs +++ b/src/PGF/PMCFG.hs @@ -100,9 +100,20 @@ ppFunId funid = char 'F' <> int funid ppSeqId seqid = char 'S' <> int seqid -filterProductions prods = - fmap (Set.filter filterRule) prods +filterProductions = closure where - filterRule (FApply funid args) = all (\fcat -> isLiteralFCat fcat || IntMap.member fcat prods) args - filterRule (FCoerce _) = True - filterRule _ = True + closure prods0 + | IntMap.size prods == IntMap.size prods0 = prods + | otherwise = closure prods + where + prods = IntMap.mapMaybe (filterProdSet prods0) prods0 + + filterProdSet prods set0 + | Set.null set = Nothing + | otherwise = Just set + where + set = Set.filter (filterRule prods) set0 + + filterRule prods (FApply funid args) = all (\fcat -> isLiteralFCat fcat || IntMap.member fcat prods) args + filterRule prods (FCoerce fcat) = isLiteralFCat fcat || IntMap.member fcat prods + filterRule prods _ = True