diff options
| author | krasimir <krasimir@chalmers.se> | 2009-09-05 14:04:39 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2009-09-05 14:04:39 +0000 |
| commit | 95a577d2699128174a3cbed982b358a8730518d9 (patch) | |
| tree | a56a3a1990cc038ad5c96222f1afc2469c90ccbb /src/PGF.hs | |
| parent | 785ef9224bfe8eb07d599445126278128ec3fcb6 (diff) | |
simple profiler for PMCFG
Diffstat (limited to 'src/PGF.hs')
| -rw-r--r-- | src/PGF.hs | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/PGF.hs b/src/PGF.hs index 4d059fd00..5fd98fa25 100644 --- a/src/PGF.hs +++ b/src/PGF.hs @@ -74,6 +74,7 @@ import PGF.Parsing.FCFG import qualified PGF.Parsing.FCFG.Incremental as Incremental import qualified GF.Compile.GeneratePMCFG as PMCFG +import GF.Infra.Option import GF.Data.ErrM import GF.Data.Utilities (replace) @@ -219,16 +220,17 @@ readLanguage = readCId showLanguage = prCId -readPGF f = do - g <- decodeFile f - return $! addParsers g +readPGF f = decodeFile f >>= addParsers -- Adds parsers for all concretes that don't have a parser and that have parser=ondemand. -addParsers :: PGF -> PGF -addParsers pgf = mapConcretes (\cnc -> if wantsParser cnc then addParser cnc else cnc) pgf +addParsers :: PGF -> IO PGF +addParsers pgf = do cncs <- sequence [if wantsParser cnc then addParser lang cnc else return (lang,cnc) + | (lang,cnc) <- Map.toList (concretes pgf)] + return pgf { concretes = Map.fromList cncs } where wantsParser cnc = isNothing (parser cnc) && Map.lookup (mkCId "parser") (cflags cnc) == Just "ondemand" - addParser cnc = cnc { parser = Just (PMCFG.convertConcrete (abstract pgf) cnc) } + addParser lang cnc = do pinfo <- PMCFG.convertConcrete noOptions (abstract pgf) lang cnc + return (lang,cnc { parser = Just pinfo }) linearize pgf lang = concat . take 1 . PGF.Linearize.linearizes pgf lang |
