From 54a1e0f879be657863cdcaed37fa609241369e8f Mon Sep 17 00:00:00 2001 From: peb Date: Wed, 11 May 2005 09:28:16 +0000 Subject: "Committed_by_peb" --- src/GF/Parsing/MCFG.hs | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) (limited to 'src/GF/Parsing/MCFG.hs') diff --git a/src/GF/Parsing/MCFG.hs b/src/GF/Parsing/MCFG.hs index 4cfc6e2ec..6aec811de 100644 --- a/src/GF/Parsing/MCFG.hs +++ b/src/GF/Parsing/MCFG.hs @@ -4,9 +4,9 @@ -- Stability : (stable) -- Portability : (portable) -- --- > CVS $Date: 2005/05/09 09:28:45 $ +-- > CVS $Date: 2005/05/11 10:28:16 $ -- > CVS $Author: peb $ --- > CVS $Revision: 1.4 $ +-- > CVS $Revision: 1.5 $ -- -- MCFG parsing ----------------------------------------------------------------------------- @@ -30,30 +30,35 @@ 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 :: (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 -parseMCF "n" pinfo starts toks = Ok $ Naive.parse pinfo starts toks -parseMCF "an" pinfo starts toks = Ok $ Active.parse "n" pinfo starts toks -parseMCF "ab" pinfo starts toks = Ok $ Active.parse "b" pinfo starts toks -parseMCF "at" pinfo starts toks = Ok $ Active.parse "t" pinfo starts toks -parseMCF "i" pinfo starts toks = Ok $ Incremental.parse pinfo starts toks -parseMCF "an2" pinfo starts toks = Ok $ Active2.parse "n" pinfo starts toks -parseMCF "ab2" pinfo starts toks = Ok $ Active2.parse "b" pinfo starts toks -parseMCF "at2" pinfo starts toks = Ok $ Active2.parse "t" pinfo starts toks -parseMCF "i2" pinfo starts toks = Ok $ Incremental2.parse pinfo starts toks +strategies = words "bottomup topdown n an ab at i an2 ab2 at2 i2 rn ran rab rat ri" -parseMCF "rn" pinfo starts toks = Ok $ Naive.parseR (rrP pinfo toks) starts -parseMCF "ran" pinfo starts toks = Ok $ Active.parseR "n" (rrP pinfo toks) starts -parseMCF "rab" pinfo starts toks = Ok $ Active.parseR "b" (rrP pinfo toks) starts -parseMCF "rat" pinfo starts toks = Ok $ Active.parseR "t" (rrP pinfo toks) starts -parseMCF "ri" pinfo starts toks = Ok $ Incremental.parseR (rrP pinfo toks) starts ntoks - where ntoks = snd (inputBounds toks) --- default parsers: -parseMCF "" pinfo starts toks = parseMCF "n" pinfo starts toks --- error parser: -parseMCF prs pinfo starts toks = Bad $ "Parser not defined: " ++ prs +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 -- cgit v1.2.3