From 8d832b5b9a22acf065efdfa365a5c9876ca9ec14 Mon Sep 17 00:00:00 2001 From: bjorn Date: Thu, 16 Oct 2008 10:13:25 +0000 Subject: [PATCH] Moved parser building in the PGF interpreter to PGF.hs from PGF/Raw/Convert.hs, in preparation for doing something more clever about it (e.g. looking at the parser flag). --- src/PGF.hs | 10 +++++++++- src/PGF/Raw/Convert.hs | 7 +------ 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