diff --git a/lib/src/french/BeschFre.gf b/lib/src/french/BeschFre.gf index 3ace02ece..05acc10aa 100644 --- a/lib/src/french/BeschFre.gf +++ b/lib/src/french/BeschFre.gf @@ -229,7 +229,8 @@ oper v_besch101 : Str -> VerbeN = \s -> mkNV (conj s) ; --- to do _ + "cer" => conj1placer parler ; _ + "ger" => conj1manger parler ; _ + "yer" => conj1payer parler ; - _ => conj1aimer parler + _ + "er" => conj1aimer parler ; + _ => Predef.error ("verb infinitive must end er/ir/re, not satisfied by" ++ parler) } ; -- The following can be more reliable. diff --git a/lib/src/italian/ParadigmsIta.gf b/lib/src/italian/ParadigmsIta.gf index a4e2cc34c..cf0a8c7fd 100644 --- a/lib/src/italian/ParadigmsIta.gf +++ b/lib/src/italian/ParadigmsIta.gf @@ -386,7 +386,7 @@ oper verb = case are of { "ire" => finire_100 x ; "ere" => temere_20 x ; - _ => case i of { + "are" => case i of { "c" => cercare_7 x ; "g" => legare_8 x ; _ => case ci of { @@ -394,7 +394,8 @@ oper "gi" => mangiare_10 x ; _ => amare_6 x } - } + } ; + _ => Predef.error ("regular verb infinitive must end are/ire/ere, not satisfied by" ++ x) } in verbBesch verb ** {vtyp = VHabere ; p = [] ; lock_V = <>} ; diff --git a/lib/src/spanish/ParadigmsSpa.gf b/lib/src/spanish/ParadigmsSpa.gf index 23417087b..960c623b1 100644 --- a/lib/src/spanish/ParadigmsSpa.gf +++ b/lib/src/spanish/ParadigmsSpa.gf @@ -375,15 +375,16 @@ oper verb = case ar of { "ir" => vivir_7 x ; "er" => deber_6 x ; - _ => case z of { + "ar" => case z of { "u" => actuar_9 x ; "z" => cazar_21 x ; "i" => guiar_43 x ; "g" => pagar_53 x ; "c" => sacar_72 x ; _ => cortar_5 x - } - } + } ; + _ => Predef.error ("regular verb infinitive must end ar/ir/er, not satisfied by" ++ x) + } in verbBesch verb ** {vtyp = VHabere ; p = [] ; lock_V = <>} ; reflV v = v ** {vtyp = VRefl} ; diff --git a/lib/src/translator/CheckInflection.hs b/lib/src/translator/CheckInflection.hs new file mode 100644 index 000000000..8cd9c78e7 --- /dev/null +++ b/lib/src/translator/CheckInflection.hs @@ -0,0 +1,27 @@ +-- elementary soundness check of a dictionary, e.g. if all verbs have verb-like endings +-- usage: checkSoundness +-- comment out bad lines in tmp/file with --UNSOUND + +checkSoundness file lang = do + dict <- readFile file >>= return . lines + let wrongs = [(if has then ("--UNSOUND " ++ d) else d,has) | d <- dict, let has = hasError lang (words d)] + putStrLn $ unlines $ [p | (p,h) <- wrongs, h] + writeFile ("tmp/" ++ file) $ unlines $ map fst wrongs + +hasError lang ws = case ws of + u:v:ww | isError lang u v -> True + _:v:ww -> hasError lang (v:ww) + _ -> False + +isError lang u v = case lang of + "Spa" -> case bareOp u of + "mkV" | head v == '"' -> notElem (dp 2 (stringOf v)) ["ar","er","ir","se"] + "mkV2" | head v == '"' -> notElem (dp 2 (stringOf v)) ["ar","er","ir","se"] + _ -> False + +dp :: Int -> String -> String +dp i s = drop (length s - i) s + +stringOf s = takeWhile (/='"') (tail s) + +bareOp = filter (notElem "()")