diff options
| author | aarne <aarne@cs.chalmers.se> | 2008-06-25 16:43:48 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2008-06-25 16:43:48 +0000 |
| commit | b96b36f43de3e2f8b58d5f539daa6f6d47f25870 (patch) | |
| tree | 0992334be13cec6538a1dea22fbbf26ad6bdf224 /src/GF/Parsing/MCFG/PInfo.hs | |
| parent | fe367412e0aeb4ad5c02de68e6eca382e0f96984 (diff) | |
removed src for 2.9
Diffstat (limited to 'src/GF/Parsing/MCFG/PInfo.hs')
| -rw-r--r-- | src/GF/Parsing/MCFG/PInfo.hs | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/src/GF/Parsing/MCFG/PInfo.hs b/src/GF/Parsing/MCFG/PInfo.hs deleted file mode 100644 index 56119dcec..000000000 --- a/src/GF/Parsing/MCFG/PInfo.hs +++ /dev/null @@ -1,162 +0,0 @@ ---------------------------------------------------------------------- --- | --- Maintainer : PL --- Stability : (stable) --- Portability : (portable) --- --- > CVS $Date: 2005/05/13 12:40:19 $ --- > CVS $Author: peb $ --- > CVS $Revision: 1.5 $ --- --- MCFG parsing, parser information ------------------------------------------------------------------------------ - -module GF.Parsing.MCFG.PInfo where - -import GF.System.Tracing -import GF.Infra.Print - -import GF.Formalism.Utilities -import GF.Formalism.GCFG -import GF.Formalism.MCFG -import GF.Data.SortedList -import GF.Data.Assoc -import GF.Parsing.MCFG.Range - ----------------------------------------------------------------------- --- type declarations - --- | the list of categories = possible starting categories -type MCFParser c n l t = MCFPInfo c n l t - -> [c] - -> Input t - -> SyntaxChart n (c, RangeRec l) - -makeFinalEdge :: c -> l -> (Int, Int) -> (c, RangeRec l) -makeFinalEdge cat lbl bnds = (cat, [(lbl, makeRange bnds)]) - - ------------------------------------------------------------- --- parser information - -data MCFPInfo c n l t - = MCFPInfo { grammarTokens :: SList t - , nameRules :: Assoc n (SList (MCFRule c n l t)) - , topdownRules :: Assoc c (SList (MCFRule c n l t)) - -- ^ used in 'GF.Parsing.MCFG.Active' (Earley): - , epsilonRules :: [MCFRule c n l t] - -- ^ used in 'GF.Parsing.MCFG.Active' (Kilbury): - , leftcornerCats :: Assoc c (SList (MCFRule c n l t)) - , leftcornerTokens :: Assoc t (SList (MCFRule c n l t)) - -- ^ used in 'GF.Parsing.MCFG.Active' (Kilbury): - , grammarCats :: SList c - -- ^ used when calculating starting categories - , rulesByToken :: Assoc t (SList (MCFRule c n l t, SList t)) - , rulesWithoutTokens :: SList (MCFRule c n l t) - -- ^ used by 'rulesMatchingInput' - , allRules :: MCFGrammar c n l t - -- ^ used by any unoptimized algorithm - - --bottomupRules :: Assoc (Symbol c t) (SList (CFRule c n t)), - --emptyLeftcornerRules :: Assoc c (SList (CFRule c n t)), - --emptyCategories :: Set c, - } - - -rangeRestrictPInfo :: (Ord c, Ord n, Ord l, Ord t) => - MCFPInfo c n l t -> Input t -> MCFPInfo c n l Range -rangeRestrictPInfo (pinfo{-::MCFPInfo c n l t-}) inp = - tracePrt "MCFG.PInfo - Restricting the parser information" (prt . grammarTokens) - MCFPInfo { grammarTokens = nubsort (map edgeRange (inputEdges inp)) - , nameRules = rrAssoc (nameRules pinfo) - , topdownRules = rrAssoc (topdownRules pinfo) - , epsilonRules = rrRules (epsilonRules pinfo) - , leftcornerCats = rrAssoc (leftcornerCats pinfo) - , leftcornerTokens = lctokens - , grammarCats = grammarCats pinfo - , rulesByToken = emptyAssoc -- error "MCFG.PInfo.rulesByToken - no range restriction" - , rulesWithoutTokens = [] -- error "MCFG.PInfo.rulesByToken - no range restriction" - , allRules = allrules -- rrRules (allRules pinfo) - } - - where lctokens = accumAssoc id - [ (rng, rule) | (tok, rules) <- aAssocs (leftcornerTokens pinfo), - inputToken inp ?= tok, - rule@(Rule _ (Cnc _ _ (Lin _ (Tok rng:_) : _))) - <- concatMap (rangeRestrictRule inp) rules ] - - allrules = rrRules $ rulesMatchingInput pinfo inp - - rrAssoc assoc = filterNull $ fmap rrRules assoc - filterNull assoc = assocFilter (not . null) assoc - rrRules rules = concatMap (rangeRestrictRule inp) rules - - -buildMCFPInfo :: (Ord c, Ord n, Ord l, Ord t) => MCFGrammar c n l t -> MCFPInfo c n l t -buildMCFPInfo grammar = - traceCalcFirst grammar $ - tracePrt "MCFG.PInfo - parser info" (prt) $ - MCFPInfo { grammarTokens = grammartokens - , nameRules = namerules - , topdownRules = topdownrules - , epsilonRules = epsilonrules - , leftcornerCats = leftcorncats - , leftcornerTokens = leftcorntoks - , grammarCats = grammarcats - , rulesByToken = rulesbytoken - , rulesWithoutTokens = ruleswithouttokens - , allRules = allrules - } - - where allrules = concatMap expandVariants grammar - grammartokens = union (map fst ruletokens) - namerules = accumAssoc id - [ (name, rule) | rule@(Rule (Abs _ _ name) _) <- allrules ] - topdownrules = accumAssoc id - [ (cat, rule) | rule@(Rule (Abs cat _ _) _) <- allrules ] - epsilonrules = [ rule | rule@(Rule _ (Cnc _ _ (Lin _ [] : _))) <- allrules ] - leftcorncats = accumAssoc id - [ (cat, rule) | - rule@(Rule _ (Cnc _ _ (Lin _ (Cat(cat,_,_):_) : _))) <- allrules ] - leftcorntoks = accumAssoc id - [ (tok, rule) | - rule@(Rule _ (Cnc _ _ (Lin _ (Tok tok:_) : _))) <- allrules ] - grammarcats = aElems topdownrules - ruletokens = [ (toksoflins lins, rule) | - rule@(Rule _ (Cnc _ _ lins)) <- allrules ] - toksoflins lins = nubsort [ tok | Lin _ syms <- lins, Tok tok <- syms ] - rulesbytoken = accumAssoc id - [ (tok, (rule, toks)) | (tok:toks, rule) <- ruletokens ] - ruleswithouttokens = nubsort [ rule | ([], rule) <- ruletokens ] - - --- | return only the rules for which all tokens are in the input string -rulesMatchingInput :: Ord t => MCFPInfo c n l t -> Input t -> [MCFRule c n l t] -rulesMatchingInput pinfo inp = - [ rule | tok <- toks, - (rule, ruletoks) <- rulesByToken pinfo ? tok, - ruletoks `subset` toks ] - ++ rulesWithoutTokens pinfo - where toks = aElems (inputToken inp) - - ----------------------------------------------------------------------- --- pretty-printing of statistics - -instance (Ord c, Ord n, Ord l, Ord t) => Print (MCFPInfo c n l t) where - prt pI = "[ tokens=" ++ sl grammarTokens ++ - "; categories=" ++ sl grammarCats ++ - "; nameRules=" ++ sla nameRules ++ - "; tdRules=" ++ sla topdownRules ++ - "; epsilonRules=" ++ sl epsilonRules ++ - "; lcCats=" ++ sla leftcornerCats ++ - "; lcTokens=" ++ sla leftcornerTokens ++ - "; byToken=" ++ sla rulesByToken ++ - "; noTokens=" ++ sl rulesWithoutTokens ++ - "; allRules=" ++ sl allRules ++ - " ]" - - where sl f = show $ length $ f pI - sla f = let (as, bs) = unzip $ aAssocs $ f pI - in show (length as) ++ "/" ++ show (length (concat bs)) - |
