forked from GitHub/gf-core
handle unknowns words graciously in parseAny
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user