diff options
| author | krasimir <krasimir@chalmers.se> | 2010-01-17 21:35:36 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2010-01-17 21:35:36 +0000 |
| commit | 9b362ff231efbd43ffb4f1c6285c41a34caf3777 (patch) | |
| tree | 73b226f21f4910081ca2f02b481bc6c39c7c5c7a /src/runtime/haskell/PGF.hs | |
| parent | af13bae2dfb9adaa7c4aa273961fc09cc7ba1b7a (diff) | |
PGF is now real synchronous PMCFG
Diffstat (limited to 'src/runtime/haskell/PGF.hs')
| -rw-r--r-- | src/runtime/haskell/PGF.hs | 27 |
1 files changed, 4 insertions, 23 deletions
diff --git a/src/runtime/haskell/PGF.hs b/src/runtime/haskell/PGF.hs index 14e157bb6..85b661c3d 100644 --- a/src/runtime/haskell/PGF.hs +++ b/src/runtime/haskell/PGF.hs @@ -54,7 +54,7 @@ module PGF( showPrintName, -- ** Parsing - parse, parseWithRecovery, canParse, parseAllLang, parseAll, + parse, parseWithRecovery, parseAllLang, parseAll, -- ** Evaluation PGF.compute, paraphrase, @@ -106,9 +106,7 @@ import PGF.Morphology import PGF.Data hiding (functions) import PGF.Binary import qualified PGF.Parse as Parse -import qualified GF.Compile.GeneratePMCFG as PMCFG -import GF.Infra.Option import GF.Data.Utilities (replace) import Data.Char @@ -144,9 +142,6 @@ parse :: PGF -> Language -> Type -> String -> [Tree] parseWithRecovery :: PGF -> Language -> Type -> [Type] -> String -> [Tree] --- | Checks whether the given language can be used for parsing. -canParse :: PGF -> Language -> Bool - -- | The same as 'linearizeAllLang' but does not return -- the language. linearizeAll :: PGF -> Tree -> [String] @@ -228,31 +223,17 @@ complete :: PGF -> Language -> Type -> String -- Implementation --------------------------------------------------- -readPGF f = decodeFile f >>= addParsers - --- Adds parsers for all concretes that don't have a parser and that have parser=ondemand. -addParsers :: PGF -> IO PGF -addParsers pgf = do cncs <- sequence [if wantsParser cnc then addParser lang cnc else return (lang,cnc) - | (lang,cnc) <- Map.toList (concretes pgf)] - return pgf { concretes = Map.fromList cncs } - where - wantsParser cnc = isNothing (parser cnc) && Map.lookup (mkCId "parser") (cflags cnc) == Just "ondemand" - addParser lang cnc = do pinfo <- PMCFG.convertConcrete noOptions (abstract pgf) lang cnc - return (lang,cnc { parser = Just pinfo }) +readPGF f = decodeFile f linearize pgf lang = concat . take 1 . PGF.Linearize.linearizes pgf lang parse pgf lang typ s = case Map.lookup lang (concretes pgf) of - Just cnc -> case parser cnc of - Just pinfo -> Parse.parse pgf lang typ (words s) - Nothing -> error ("No parser built for language: " ++ showCId lang) + Just cnc -> Parse.parse pgf lang typ (words s) Nothing -> error ("Unknown language: " ++ showCId lang) parseWithRecovery pgf lang typ open_typs s = Parse.parseWithRecovery pgf lang typ open_typs (words s) -canParse pgf cnc = isJust (lookParser pgf cnc) - linearizeAll mgr = map snd . linearizeAllLang mgr linearizeAllLang mgr t = [(lang,PGF.linearize mgr lang t) | lang <- languages mgr] @@ -260,7 +241,7 @@ linearizeAllLang mgr t = parseAll mgr typ = map snd . parseAllLang mgr typ parseAllLang mgr typ s = - [(lang,ts) | lang <- languages mgr, canParse mgr lang, let ts = parse mgr lang typ s, not (null ts)] + [(lang,ts) | lang <- languages mgr, let ts = parse mgr lang typ s, not (null ts)] generateRandom pgf cat = do gen <- newStdGen |
