---------------------------------------------------------------------- -- | -- Maintainer : PL -- Stability : (stable) -- Portability : (portable) -- -- > CVS $Date: 2005/05/11 10:28:16 $ -- > CVS $Author: peb $ -- > CVS $Revision: 1.5 $ -- -- MCFG parsing ----------------------------------------------------------------------------- module GF.Parsing.MCFG (parseMCF, module GF.Parsing.MCFG.PInfo) where import GF.Data.Operations (Err(..)) import GF.Formalism.Utilities import GF.Formalism.GCFG import GF.Formalism.MCFG import GF.Parsing.MCFG.PInfo import qualified GF.Parsing.MCFG.Naive as Naive import qualified GF.Parsing.MCFG.Active as Active import qualified GF.Parsing.MCFG.Active2 as Active2 import qualified GF.Parsing.MCFG.Incremental as Incremental import qualified GF.Parsing.MCFG.Incremental2 as Incremental2 ---------------------------------------------------------------------- -- parsing parseMCF :: (Ord c, Ord n, Ord l, Ord t) => String -> Err (MCFParser c n l t) parseMCF prs | prs `elem` strategies = Ok $ parseMCF' prs | otherwise = Bad $ "MCFG parsing strategy not defined: " ++ prs strategies = words "bottomup topdown n an ab at i an2 ab2 at2 i2 rn ran rab rat ri" parseMCF' :: (Ord c, Ord n, Ord l, Ord t) => String -> MCFParser c n l t parseMCF' "bottomup" pinfo starts toks = Active.parse "b" pinfo starts toks parseMCF' "topdown" pinfo starts toks = Active.parse "t" pinfo starts toks parseMCF' "n" pinfo starts toks = Naive.parse pinfo starts toks parseMCF' "an" pinfo starts toks = Active.parse "n" pinfo starts toks parseMCF' "ab" pinfo starts toks = Active.parse "b" pinfo starts toks parseMCF' "at" pinfo starts toks = Active.parse "t" pinfo starts toks parseMCF' "i" pinfo starts toks = Incremental.parse pinfo starts toks parseMCF' "an2" pinfo starts toks = Active2.parse "n" pinfo starts toks parseMCF' "ab2" pinfo starts toks = Active2.parse "b" pinfo starts toks parseMCF' "at2" pinfo starts toks = Active2.parse "t" pinfo starts toks parseMCF' "i2" pinfo starts toks = Incremental2.parse pinfo starts toks parseMCF' "rn" pinfo starts toks = Naive.parseR (rrP pinfo toks) starts parseMCF' "ran" pinfo starts toks = Active.parseR "n" (rrP pinfo toks) starts parseMCF' "rab" pinfo starts toks = Active.parseR "b" (rrP pinfo toks) starts parseMCF' "rat" pinfo starts toks = Active.parseR "t" (rrP pinfo toks) starts parseMCF' "ri" pinfo starts toks = Incremental.parseR (rrP pinfo toks) starts ntoks where ntoks = snd (inputBounds toks) rrP pi = rangeRestrictPInfo pi