diff options
| author | peb <peb@cs.chalmers.se> | 2006-06-07 16:16:17 +0000 |
|---|---|---|
| committer | peb <peb@cs.chalmers.se> | 2006-06-07 16:16:17 +0000 |
| commit | 55cb508a0f54a2461bf70a94ee04081c2ad1711c (patch) | |
| tree | 0e7e638c9cc3c065c14d7cedbd0ea5b49a5cb513 /src/GF/Parsing/FCFG/PInfo.hs | |
| parent | 4009b46358fe3cc463c1e34c047958a15015941b (diff) | |
corrected bottomup FCFG parsing
Diffstat (limited to 'src/GF/Parsing/FCFG/PInfo.hs')
| -rw-r--r-- | src/GF/Parsing/FCFG/PInfo.hs | 14 |
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 ++ |
