summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-07-08 13:55:00 +0000
committeraarne <aarne@cs.chalmers.se>2007-07-08 13:55:00 +0000
commit3627875fa8ec277fad0bdabb1e7d74bd66ba2c42 (patch)
treef6b85d058866a1cd5807af1b847d8534e2a00727
parentba7061166978e74bc0b0930c5d1db695aa125bda (diff)
handle unknowns words graciously in parseAny
-rw-r--r--src/GF/API.hs6
-rw-r--r--src/GF/UseGrammar/Parsing.hs8
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