summaryrefslogtreecommitdiff
path: root/src/PGF.hs
diff options
context:
space:
mode:
authorbjorn <bjorn@bringert.net>2008-10-20 14:52:50 +0000
committerbjorn <bjorn@bringert.net>2008-10-20 14:52:50 +0000
commitd327d9da6c25349757fb87f4cc8bcb3ba69ca8f4 (patch)
tree1f29c5b13fd793696b2d4f2e1cf952bf3f8fd059 /src/PGF.hs
parent6b8c9dd4c9a1e28ef22a1c1797143ffd8febef5d (diff)
Added --parser=ondemand flag.
Diffstat (limited to 'src/PGF.hs')
-rw-r--r--src/PGF.hs10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/PGF.hs b/src/PGF.hs
index 17f1d8af8..754bcf34f 100644
--- a/src/PGF.hs
+++ b/src/PGF.hs
@@ -214,12 +214,12 @@ readPGF f = do
g <- parseGrammar s
return $! addParsers $ toPGF g
--- Adds parsers for all concretes that don't have a parser.
+-- Adds parsers for all concretes that don't have a parser and that have parser=ondemand.
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) }
+addParsers pgf = mapConcretes (\cnc -> if wantsParser cnc then addParser cnc else cnc) pgf
+ where
+ wantsParser cnc = isNothing (parser cnc) && Map.lookup (mkCId "parser") (cflags cnc) == Just "ondemand"
+ addParser cnc = cnc { parser = Just (PMCFG.convertConcrete (abstract pgf) cnc) }
linearize pgf lang = concat . take 1 . PGF.Linearize.linearizes pgf lang