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
|
parse sgr cat = errVal [] . parseString noOptions sgr cat
|
||||||
|
|
||||||
parseAny :: [GFGrammar] -> GFCat -> String -> [Tree]
|
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 :: GFGrammar -> GFGrammar -> GFCat -> String -> [String]
|
||||||
translate ig og cat = map (linearize og) . parse ig cat
|
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]
|
translateFromAny igs og cat s = concat [translate ig og cat s | ig <- igs]
|
||||||
|
|
||||||
translateBetweenAll :: [GFGrammar] -> GFCat -> String -> [String]
|
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 :: GFGrammar -> GFCat -> Tree -> [Tree]
|
||||||
homonyms gr cat = nub . parse gr cat . linearize gr
|
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 :: Options -> StateGrammar -> CFCat -> String -> Err ([Tree],String)
|
||||||
parseStringMsg os sg cat s = do
|
parseStringMsg os sg cat s = do
|
||||||
(ts,(_,ss)) <- checkStart $ parseStringC os sg cat s
|
case checkStart $ parseStringC os sg cat s of
|
||||||
return (ts, unlines $ reverse ss)
|
Ok (ts,(_,ss)) -> return (ts, unlines $ reverse ss)
|
||||||
|
Bad s -> return ([],s)
|
||||||
|
|
||||||
parseStringC :: Options -> StateGrammar -> CFCat -> String -> Check [Tree]
|
parseStringC :: Options -> StateGrammar -> CFCat -> String -> Check [Tree]
|
||||||
parseStringC opts0 sg cat s
|
parseStringC opts0 sg cat s
|
||||||
@@ -92,7 +93,8 @@ parseStringC opts0 sg cat s
|
|||||||
uncap s = s
|
uncap s = s
|
||||||
|
|
||||||
case unknowns of
|
case unknowns of
|
||||||
_:_ -> fail $ "Unknown words:" +++ unwords unknowns
|
_:_ | oElem (iOpt "trynextlang") opts -> return []
|
||||||
|
_:_ -> fail $ "Unknown words:" +++ unwords unknowns
|
||||||
_ -> do
|
_ -> do
|
||||||
|
|
||||||
ts <- checkErr $ New.parse algorithm strategy (pInfo sg) (absId sg) cat toks
|
ts <- checkErr $ New.parse algorithm strategy (pInfo sg) (absId sg) cat toks
|
||||||
|
|||||||
Reference in New Issue
Block a user