From 3627875fa8ec277fad0bdabb1e7d74bd66ba2c42 Mon Sep 17 00:00:00 2001 From: aarne Date: Sun, 8 Jul 2007 13:55:00 +0000 Subject: [PATCH] handle unknowns words graciously in parseAny --- src/GF/API.hs | 6 ++++-- src/GF/UseGrammar/Parsing.hs | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/GF/API.hs b/src/GF/API.hs index 3efd81472..7474d3c75 100644 --- a/src/GF/API.hs +++ b/src/GF/API.hs @@ -109,7 +109,8 @@ parse :: GFGrammar -> GFCat -> String -> [Tree] parse sgr cat = errVal [] . parseString noOptions sgr cat parseAny :: [GFGrammar] -> GFCat -> String -> [Tree] -parseAny grs cat s = concat [parse gr cat s | gr <- grs] +parseAny grs cat s = + concat [errVal [] (parseString (options [iOpt "trynextlang"]) gr cat s) | gr <- grs] translate :: GFGrammar -> GFGrammar -> GFCat -> String -> [String] translate ig og cat = map (linearize og) . parse ig cat @@ -121,7 +122,8 @@ translateFromAny :: [GFGrammar] -> GFGrammar -> GFCat -> String -> [String] translateFromAny igs og cat s = concat [translate ig og cat s | ig <- igs] translateBetweenAll :: [GFGrammar] -> GFCat -> String -> [String] -translateBetweenAll grs cat = concat . map (linearizeToAll grs) . parseAny grs cat +translateBetweenAll grs cat = + concat . map (linearizeToAll grs) . parseAny grs cat homonyms :: GFGrammar -> GFCat -> Tree -> [Tree] homonyms gr cat = nub . parse gr cat . linearize gr diff --git a/src/GF/UseGrammar/Parsing.hs b/src/GF/UseGrammar/Parsing.hs index 599268b1d..2ca057410 100644 --- a/src/GF/UseGrammar/Parsing.hs +++ b/src/GF/UseGrammar/Parsing.hs @@ -52,8 +52,9 @@ parseString os sg cat = liftM fst . parseStringMsg os sg cat parseStringMsg :: Options -> StateGrammar -> CFCat -> String -> Err ([Tree],String) parseStringMsg os sg cat s = do - (ts,(_,ss)) <- checkStart $ parseStringC os sg cat s - return (ts, unlines $ reverse ss) + case checkStart $ parseStringC os sg cat s of + Ok (ts,(_,ss)) -> return (ts, unlines $ reverse ss) + Bad s -> return ([],s) parseStringC :: Options -> StateGrammar -> CFCat -> String -> Check [Tree] parseStringC opts0 sg cat s @@ -92,7 +93,8 @@ parseStringC opts0 sg cat s uncap s = s case unknowns of - _:_ -> fail $ "Unknown words:" +++ unwords unknowns + _:_ | oElem (iOpt "trynextlang") opts -> return [] + _:_ -> fail $ "Unknown words:" +++ unwords unknowns _ -> do ts <- checkErr $ New.parse algorithm strategy (pInfo sg) (absId sg) cat toks