1
0
forked from GitHub/gf-core

Added --parser=ondemand flag.

This commit is contained in:
bjorn
2008-10-20 14:52:50 +00:00
parent aed72e7653
commit 5b5b91eb0a
5 changed files with 35 additions and 19 deletions

View File

@@ -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