From 8d661c0fd85e1696ea3d4ccae2cd56d41e16e163 Mon Sep 17 00:00:00 2001 From: aarne Date: Fri, 23 Sep 2011 14:21:56 +0000 Subject: [PATCH] smart paradigms for Fre irregular verbs, not perfect yet; removed some variants from Fre conjugations --- lib/src/french/MorphoFre.gf | 67 +++++++++++++++++++++++++++++----- lib/src/french/ParadigmsFre.gf | 10 ++++- 2 files changed, 67 insertions(+), 10 deletions(-) diff --git a/lib/src/french/MorphoFre.gf b/lib/src/french/MorphoFre.gf index ab03a9ed7..26e3407ec 100644 --- a/lib/src/french/MorphoFre.gf +++ b/lib/src/french/MorphoFre.gf @@ -372,7 +372,7 @@ oper table { Inf => tenir ; Indi Presn Sg p => tien + affpres ! p ; - Indi Presn Pl P3 => tienn + affixPlOns ! P3 ; + Indi Presn Pl P3 => tienn + "ent" ; Indi Presn Pl p => ten + affixPlOns ! p ; Indi Imparf n p => ten + affixImparf ! n ! p ; Indi Passe n p => t + affpasse.ps ! n ! p ; @@ -398,7 +398,49 @@ oper \tien, ten, tienn, t, tiendr, tenu, tenir -> \affpres, affpasse -> verbAffixes tien ten tienn t tiendr tienn ten - (tien + affpres ! P1) tenu (tenu+"s") tenir affpres affpasse ; + (tien + affpres ! P1) tenu + (case tenu of {_ +"s" => tenu ; _ => tenu + "s"}) tenir affpres affpasse ; + +-- make this into a smart paradigm + + mkVerb7 : (tenir,tiens,tenons,tiennent,tint,tiendra,tenu : Str) -> Verbe = + \tenir,tiens,tenons,tiennent,tint,tiendra,tenu -> + let + affpres : Affixe = case tiens of { + _ + "e" => lesAffixes "e" "es" "e" ; + _ + "ds" => lesAffixes "s" "s" [] ; + _ + "ts" => lesAffixes "s" "s" [] ; + _ + s@("s" | "x") => lesAffixes s s "t" + } ; + affpasse : AffixPasse * Int = case tint of { + _ + "a" => ; + _ + "it" => ; + _ + "ut" => ; + _ + "nt" => ; + _ => Predef.error ("cannot form past tense from" ++ tint) + } ; + in verbHabituel + (Predef.tk 1 tiens) + (Predef.tk 3 tenons) + (Predef.tk 3 tiennent) + (Predef.tk affpasse.p2 tint) + (Predef.tk 1 tiendra) + tenu + tenir + affpres + affpasse.p1 ; + + AffixPasse : Type = {ps : Number => Affixe ; si : Number => Affixe} ; + + affixPasse : (_,_ : Str) -> AffixPasse = \i, î -> + {ps = affixPasseS i î ; si = affixSImparfSse i î} ; + + affixPasseA : AffixPasse = {ps = affixPasseAi ; si = affixSImparfSse "a" "â"} ; + + affixPasseI : AffixPasse = affixPasse "i" "î" ; + + affixPasseU : AffixPasse = affixPasse "u" "û" ; + --3 The first conjugation -- @@ -610,10 +652,13 @@ oper } in table { Indi Presn Sg p => fa + "u" + affixSgX ! p ; - Subjo SPres n p => fa + variants {"illiss" ; "ill"} + affixSPres ! n ! p ; - Indi Futur n p => variants {tfa ! Indi Futur n p ; faudr + affixFutur ! n ! p} ; - Condi n p => variants {tfa ! Condi n p ; faudr + affixImparf ! n ! p} ; + Subjo SPres n p => fa + "ill" + affixSPres ! n ! p ; + Indi Futur n p => faudr + affixFutur ! n ! p ; + Condi n p => faudr + affixImparf ! n ! p ; +---v Subjo SPres n p => fa + variants {"illiss" ; "ill"} + affixSPres ! n ! p ; +---v Indi Futur n p => variants {tfa ! Indi Futur n p ; faudr + affixFutur ! n ! p} ; +---v Condi n p => variants {tfa ! Condi n p ; faudr + affixImparf ! n ! p} ; Imper _ => nonExist ; p => tfa ! p @@ -743,7 +788,8 @@ oper tpouvoir = auxConj3usX "eu" "ouv" "euv" "" "ourr" "uiss" "uiss" "ouv" } in table { - Indi Presn Sg P1 => p + variants {"eux" ; "uis"} ; + Indi Presn Sg P1 => p + "eux" ; +---v Indi Presn Sg P1 => p + variants {"eux" ; "uis"} ; t => p + tpouvoir ! t } ; @@ -825,7 +871,8 @@ oper tassoir = auxConj3is "oi" "oy" "oi" "" "oir" "is" "is" } in table { - Inf => ass + variants {"oir" ; "eoir"} ; + Inf => ass + "eoir" ; +---v Inf => ass + variants {"oir" ; "eoir"} ; t => ass + tassoir ! t } ; @@ -876,7 +923,8 @@ oper e = Predef.tk 5 choir ; tchoir = auxConj3usS "choi" "choy" "choi" "ch" - (variants {"choir" ; "cherr"}) "choi" "choy" "ch" + "cherr" "choi" "choy" "ch" +---v (variants {"choir" ; "cherr"}) "choi" "choy" "ch" } in \\p => e + tchoir ! p ; @@ -885,7 +933,8 @@ oper table { Indi _ _ P1 => nonExist ; Indi _ _ P2 => nonExist ; - Indi Presn Pl P3 => Predef.tk 3 échoir + variants {"oient" ; "éent"} ; + Indi Presn Pl P3 => Predef.tk 3 échoir + "éent" ; +---v Indi Presn Pl P3 => Predef.tk 3 échoir + variants {"oient" ; "éent"} ; Subjo _ _ P1 => nonExist ; Subjo _ _ P2 => nonExist ; Condi _ P1 => nonExist ; diff --git a/lib/src/french/ParadigmsFre.gf b/lib/src/french/ParadigmsFre.gf index 9384c91fd..48b0a31b7 100644 --- a/lib/src/french/ParadigmsFre.gf +++ b/lib/src/french/ParadigmsFre.gf @@ -213,6 +213,10 @@ oper mkV : (finir : Str) -> V ; -- regular 1/2/3 conjugation mkV : (jeter,jette,jettera : Str) -> V ; -- 1st conjugation variations +-- Here is a worst-case paradigm. + + mkV : (tenir,tiens,tenons,tiennent,tint,tiendra,tenu : Str) -> V ; + -- The $IrregFre$ list gives some verbs as two-place. These verbs can be -- reused as one-place verbs. @@ -429,7 +433,11 @@ oper mkV = overload { mkV : Str -> V = regV ; mkV : (jeter,jette,jettera : Str) -> V = reg3V ; - mkV : V2 -> V = v2V + mkV : V2 -> V = v2V ; + mkV : (tenir,tiens,tenons,tiennent,tint,tiendra,tenu : Str) -> V + = \tenir,tiens,tenons,tiennent,tint,tiendra,tenu -> + {s = vvf (mkVerb7 tenir tiens tenons tiennent tint tiendra tenu) ; vtyp = VHabere ; lock_V = <>} ; + } ; regV : Str -> V ;