summaryrefslogtreecommitdiff
path: root/src/GF/Parsing/FCFG/PInfo.hs
diff options
context:
space:
mode:
authorpeb <peb@cs.chalmers.se>2006-06-07 16:16:17 +0000
committerpeb <peb@cs.chalmers.se>2006-06-07 16:16:17 +0000
commit55cb508a0f54a2461bf70a94ee04081c2ad1711c (patch)
tree0e7e638c9cc3c065c14d7cedbd0ea5b49a5cb513 /src/GF/Parsing/FCFG/PInfo.hs
parent4009b46358fe3cc463c1e34c047958a15015941b (diff)
corrected bottomup FCFG parsing
Diffstat (limited to 'src/GF/Parsing/FCFG/PInfo.hs')
-rw-r--r--src/GF/Parsing/FCFG/PInfo.hs14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/GF/Parsing/FCFG/PInfo.hs b/src/GF/Parsing/FCFG/PInfo.hs
index 5c3f910a0..e1126301a 100644
--- a/src/GF/Parsing/FCFG/PInfo.hs
+++ b/src/GF/Parsing/FCFG/PInfo.hs
@@ -47,7 +47,9 @@ data FCFPInfo c n t
= FCFPInfo { allRules :: Array RuleId (FCFRule c n t)
, topdownRules :: Assoc c (SList RuleId)
-- ^ used in 'GF.Parsing.MCFG.Active' (Earley):
- , emptyRules :: [RuleId]
+ -- , emptyRules :: [RuleId]
+ , epsilonRules :: [RuleId]
+ -- ^ used in 'GF.Parsing.MCFG.Active' (Kilbury):
, leftcornerCats :: Assoc c (SList RuleId)
, leftcornerTokens :: Assoc t (SList RuleId)
-- ^ used in 'GF.Parsing.MCFG.Active' (Kilbury):
@@ -77,7 +79,8 @@ buildFCFPInfo grammar =
tracePrt "MCFG.PInfo - parser info" (prt) $
FCFPInfo { allRules = allrules
, topdownRules = topdownrules
- , emptyRules = emptyrules
+ -- , emptyRules = emptyrules
+ , epsilonRules = epsilonrules
, leftcornerCats = leftcorncats
, leftcornerTokens = leftcorntoks
, grammarCats = grammarcats
@@ -85,7 +88,9 @@ buildFCFPInfo grammar =
where allrules = listArray (0,length grammar-1) grammar
topdownrules = accumAssoc id [(cat, ruleid) | (ruleid, FRule (Abs cat _ _) _) <- assocs allrules]
- emptyrules = [ruleid | (ruleid, FRule (Abs _ [] _) _) <- assocs allrules]
+ -- emptyrules = [ruleid | (ruleid, FRule (Abs _ [] _) _) <- assocs allrules]
+ epsilonrules = [ ruleid | (ruleid, FRule _ lins) <- assocs allrules,
+ not (inRange (bounds (lins ! 0)) 0) ]
leftcorncats = accumAssoc id
[ (fromJust (getLeftCornerCat lins), ruleid) |
(ruleid, FRule _ lins) <- assocs allrules, isJust (getLeftCornerCat lins) ]
@@ -100,7 +105,8 @@ buildFCFPInfo grammar =
instance (Ord c, Ord n, Ord t) => Print (FCFPInfo c n t) where
prt pI = "[ allRules=" ++ sl (elems . allRules) ++
"; tdRules=" ++ sla topdownRules ++
- "; emptyRules=" ++ sl emptyRules ++
+ -- "; emptyRules=" ++ sl emptyRules ++
+ "; epsilonRules=" ++ sl epsilonRules ++
"; lcCats=" ++ sla leftcornerCats ++
"; lcTokens=" ++ sla leftcornerTokens ++
"; categories=" ++ sl grammarCats ++