diff options
| author | peb <unknown> | 2005-05-09 08:25:56 +0000 |
|---|---|---|
| committer | peb <unknown> | 2005-05-09 08:25:56 +0000 |
| commit | 2b059b811db03a53e8e0f8ec1a655e507851a995 (patch) | |
| tree | 467ad9a1849bf454b22d5b2a457d09f8247041e6 /src/GF/Parsing/GFC.hs | |
| parent | 01696e4f86fa156d079f2febaf103fbe229ffdb1 (diff) | |
"Committed_by_peb"
Diffstat (limited to 'src/GF/Parsing/GFC.hs')
| -rw-r--r-- | src/GF/Parsing/GFC.hs | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/GF/Parsing/GFC.hs b/src/GF/Parsing/GFC.hs index 7f54186a7..5476b8e8b 100644 --- a/src/GF/Parsing/GFC.hs +++ b/src/GF/Parsing/GFC.hs @@ -4,9 +4,9 @@ -- Stability : (stable) -- Portability : (portable) -- --- > CVS $Date: 2005/04/21 16:23:06 $ --- > CVS $Author: bringert $ --- > CVS $Revision: 1.6 $ +-- > CVS $Date: 2005/05/09 09:28:45 $ +-- > CVS $Author: peb $ +-- > CVS $Revision: 1.7 $ -- -- The main parsing module, parsing GFC grammars -- by translating to simpler formats, such as PMCFG and CFG @@ -45,13 +45,15 @@ import qualified GF.Parsing.CFG as PC data PInfo = PInfo { mcfPInfo :: MCFPInfo, cfPInfo :: CFPInfo } -type MCFPInfo = MGrammar +type MCFPInfo = PM.MCFPInfo MCat Name MLabel Token type CFPInfo = PC.CFPInfo CCat Name Token buildPInfo :: MGrammar -> CGrammar -> PInfo -buildPInfo mcfg cfg = PInfo { mcfPInfo = mcfg, +buildPInfo mcfg cfg = PInfo { mcfPInfo = PM.buildMCFPInfo mcfg, cfPInfo = PC.buildCFPInfo cfg } +instance Print PInfo where + prt (PInfo m c) = prt m ++ "\n" ++ prt c ---------------------------------------------------------------------- -- main parsing function @@ -67,8 +69,9 @@ parse (prs:strategy) pinfo abs startCat inString = do let inTokens = tracePrt "Parsing.GFC - input tokens" prt $ inputMany (map wordsCFTok inString) forests <- selectParser prs strategy pinfo startCat inTokens - traceM "Parsing.GFC - nr. forests" (prt (length forests)) - let filteredForests = tracePrt "Parsing.GFC - nr. filtered forests" (prt . length) $ + traceM "Parsing.GFC - nr. unfiltered forests" (prt (length forests)) + traceM "Parsing.GFC - nr. unfiltered trees" (prt (length (forests >>= forest2trees))) + let filteredForests = tracePrt "Parsing.GFC - nr. forests" (prt . length) $ forests >>= applyProfileToForest -- compactFs = tracePrt "#compactForests" (prt . length) $ -- tracePrt "compactForests" (prtBefore "\n") $ @@ -100,13 +103,12 @@ selectParser prs strategy pinfo startCat inTokens | prs=='c' -- parsing via MCFG selectParser prs strategy pinfo startCat inTokens | prs=='m' = do let startCats = tracePrt "Parsing.GFC - starting MCF categories" prt $ - filter isStart $ nubsort [ c | G.Rule (G.Abs c _ _) _ <- mcfpi ] + filter isStart $ PM.grammarCats mcfpi isStart cat = mcat2scat cat == cfCat2Ident startCat mcfpi = mcfPInfo pinfo - mcfParser <- PM.parseMCF strategy - let mcfChart = tracePrt "Parsing.GFC - sz. MCF chart" (prt . length) $ - mcfParser mcfpi startCats inTokens - chart = tracePrt "Parsing.GFC - sz. chart" (prt . map (length.snd) . aAssocs) $ + mcfChart <- PM.parseMCF strategy mcfpi startCats inTokens + traceM "Parsing.GFC - sz. MCF chart" (prt (length mcfChart)) + let chart = tracePrt "Parsing.GFC - sz. chart" (prt . length . concat . map snd . aAssocs) $ G.abstract2chart mcfChart finalEdges = tracePrt "Parsing.GFC - final chart edges" prt $ [ PM.makeFinalEdge cat lbl (inputBounds inTokens) | |
