From e5a595567aab56117371562f599d937ecf87b120 Mon Sep 17 00:00:00 2001 From: bjorn Date: Mon, 20 Oct 2008 14:05:39 +0000 Subject: [PATCH] Added on-demand parser generation back in. It's pretty unproblematic, and can help with memory use in some cases. --- GF.cabal | 4 ++++ src/PGF.hs | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/GF.cabal b/GF.cabal index 023fc4655..864a9005a 100644 --- a/GF.cabal +++ b/GF.cabal @@ -588,6 +588,10 @@ library GF.Data.Assoc GF.Data.ErrM GF.Text.UTF8 +-- needed only for the on demand generation of PMCFG + GF.Data.BacktrackM + GF.Compile.GenerateFCFG + GF.Compile.GeneratePMCFG executable gf build-depends: base, diff --git a/src/PGF.hs b/src/PGF.hs index d78a55108..17f1d8af8 100644 --- a/src/PGF.hs +++ b/src/PGF.hs @@ -71,6 +71,7 @@ import PGF.Raw.Parse import PGF.Raw.Print (printTree) import PGF.Parsing.FCFG import qualified PGF.Parsing.FCFG.Incremental as Incremental +import qualified GF.Compile.GeneratePMCFG as PMCFG import GF.Text.UTF8 import GF.Data.ErrM @@ -211,7 +212,14 @@ showLanguage = prCId readPGF f = do s <- readFile f >>= return . decodeUTF8 -- pgf is in UTF8, internal in unicode g <- parseGrammar s - return $! toPGF g + return $! addParsers $ toPGF g + +-- Adds parsers for all concretes that don't have a parser. +addParsers :: PGF -> PGF +addParsers pgf = pgf { concretes = Map.map conv (concretes pgf) } + where + conv cnc | isJust (parser cnc) = cnc + | otherwise = cnc { parser = Just (PMCFG.convertConcrete (abstract pgf) cnc) } linearize pgf lang = concat . take 1 . PGF.Linearize.linearizes pgf lang