summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/PGF.hs10
-rw-r--r--src/PGF/Raw/Convert.hs7
2 files changed, 10 insertions, 7 deletions
diff --git a/src/PGF.hs b/src/PGF.hs
index dc777f4d5..96fd73c86 100644
--- a/src/PGF.hs
+++ b/src/PGF.hs
@@ -69,6 +69,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
@@ -204,7 +205,14 @@ complete :: PGF -> Language -> Category -> String
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 (mkCId lang)
diff --git a/src/PGF/Raw/Convert.hs b/src/PGF/Raw/Convert.hs
index 5a5654ed7..d202ff8dd 100644
--- a/src/PGF/Raw/Convert.hs
+++ b/src/PGF/Raw/Convert.hs
@@ -3,7 +3,6 @@ module PGF.Raw.Convert (toPGF,fromPGF) where
import PGF.CId
import PGF.Data
import PGF.Raw.Abstract
-import qualified GF.Compile.GeneratePMCFG as PMCFG
import Data.Array.IArray
import qualified Data.Map as Map
@@ -53,11 +52,7 @@ toConcr pgf rexp =
lindefs = Map.empty,
printnames = Map.empty,
paramlincats = Map.empty,
- parser = Just (PMCFG.convertConcrete (abstract pgf) cnc)
- -- This thunk will be overwritten if there is a parser
- -- compiled in the PGF file. We use lazy evaluation here
- -- to make sure that buildParserOnDemand is called only
- -- if it is needed.
+ parser = Nothing
}) rexp
in cnc
where