From 504b8e879f81d1564ffe3111c7e4c02a9bf25926 Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 10 Nov 2009 20:33:30 +0000 Subject: [PATCH] prefix verbs in Dutch --- lib/src/dutch/CatDut.gf | 2 +- lib/src/dutch/LexiconDut.gf | 2 +- lib/src/dutch/NounDut.gf | 10 +- lib/src/dutch/ParadigmsDut.gf | 28 ++++-- lib/src/dutch/ResDut.gf | 171 +++++++++------------------------ lib/src/dutch/StructuralDut.gf | 10 +- lib/src/dutch/VerbDut.gf | 4 +- 7 files changed, 77 insertions(+), 150 deletions(-) diff --git a/lib/src/dutch/CatDut.gf b/lib/src/dutch/CatDut.gf index b90c22315..ba06a9784 100644 --- a/lib/src/dutch/CatDut.gf +++ b/lib/src/dutch/CatDut.gf @@ -75,7 +75,7 @@ concrete CatDut of Cat = -- ---- Open lexical classes, e.g. Lexicon -- - V, VS, VQ, VA = ResDut.Verb ** {aux : VAux} ; -- = {s : VForm => Str} ; + V, VS, VQ, VA = ResDut.VVerb ; VV = VVerb ** {isAux : Bool} ; V2, V2A, V2S, V2Q = VVerb ** {c2 : Preposition} ; -- V2V = Verb ** {c2 : Preposition ; isAux : Bool} ; diff --git a/lib/src/dutch/LexiconDut.gf b/lib/src/dutch/LexiconDut.gf index 72893e7fd..84b4d10bd 100644 --- a/lib/src/dutch/LexiconDut.gf +++ b/lib/src/dutch/LexiconDut.gf @@ -41,7 +41,7 @@ lin -- brother_N2 = mkN2 (mkN "Bruder" "Brüder" masculine) von_Prep ; brown_A = mkA "bruin" ; -- butter_N = mkN "Butter" "Butter" feminine ; ---- infl --- buy_V2 = mkV2 (mkV "kopen") ; + buy_V2 = mkV2 (mkV "kopen" "kocht" "gekocht") ; -- camera_N = mkN "Kamera" "Kameras" feminine ; -- cap_N = mkN "Mütze" ; -- car_N = mkN "Wagen" ; diff --git a/lib/src/dutch/NounDut.gf b/lib/src/dutch/NounDut.gf index 71f159fad..1206fcf0b 100644 --- a/lib/src/dutch/NounDut.gf +++ b/lib/src/dutch/NounDut.gf @@ -106,11 +106,11 @@ concrete NounDut of Noun = CatDut ** open ResDut, Prelude in { a = Strong } ; --- MassNP cn = { --- s = \\c => cn.s ! adjfCase Strong c ! Sg ! c ; --- a = agrP3 Sg ; --- isPron = False --- } ; + MassNP cn = { + s = \\c => cn.s ! Strong ! NF Sg Nom ; + a = agrP3 Sg ; + isPron = False + } ; UseN, UseN2 = \n -> { s = \\_ => n.s ; diff --git a/lib/src/dutch/ParadigmsDut.gf b/lib/src/dutch/ParadigmsDut.gf index 8c8910da9..172faab5f 100644 --- a/lib/src/dutch/ParadigmsDut.gf +++ b/lib/src/dutch/ParadigmsDut.gf @@ -37,11 +37,14 @@ oper neuter : Gender ; utrum : Gender ; + de,het : Gender ; + masculine = Utr ; feminine = Utr ; - neuter = Neutr ; - utrum = Utr ; + het,neuter = Neutr ; + de,utrum = Utr ; + --2 Nouns mkN : overload { @@ -137,24 +140,29 @@ oper mkV : overload { mkV : (aaien : Str) -> V ; + mkV : (breken,brak,gebroken : Str) -> V ; + mkV : (breken,brak,braken,gebroken : Str) -> V ; mkV : (aai,aait,aaien,aaide,aaide,aaiden,geaaid : Str) -> V ; ----- To add a movable suffix e.g. "auf(fassen)". --- --- mkV : Str -> V -> V +-- To add a movable suffix e.g. "auf(fassen)". + + mkV : Str -> V -> V } ; mkV = overload { mkV : (aaien : Str) -> V = - \s -> lin V (regVerb s ** {aux = VHebben}) ; + \s -> lin V (v2vv (regVerb s)) ; mkV : (breken,brak,gebroken : Str) -> V = - \a,b,c -> lin V (irregVerb a b c ** {aux = VHebben}) ; + \a,b,c -> lin V (v2vv (irregVerb a b c)) ; + mkV : (breken,brak,braken,gebroken : Str) -> V = + \a,b,c,d -> lin V (v2vv (irregVerb2 a b c d)) ; mkV : (aai,aait,aaien,aaide,aaiden,geaaid : Str) -> V = - \a,b,c,d,f,g -> lin V (mkVerb a b c d d f g ** {aux = VHebben}) ; + \a,b,c,d,f,g -> lin V (v2vv (mkVerb a b c d d f g)) ; + mkV : Str -> V -> V = \v,s ->lin V (prefixV v s) ; } ; zijnV : V -> V ; - zijnV v = lin V {s = v.s ; aux = VZijn} ; + zijnV v = lin V (v2vvAux v VZijn) ; ---- Reflexive verbs can take reflexive pronouns of different cases. -- @@ -170,7 +178,7 @@ oper } ; mkV2 = overload { - mkV2 : Str -> V2 = \s -> lin V2 (regVerb s ** {aux = VHebben ; c2 = []}) ; + mkV2 : Str -> V2 = \s -> lin V2 (v2vv (regVerb s) ** {c2 = []}) ; mkV2 : V -> V2 = \s -> lin V2 (s ** {c2 = []}) ; mkV2 : V -> Prep -> V2 = \s,p -> lin V2 (s ** {c2 = p.s}) ; } ; diff --git a/lib/src/dutch/ResDut.gf b/lib/src/dutch/ResDut.gf index 9aaadac99..34cada339 100644 --- a/lib/src/dutch/ResDut.gf +++ b/lib/src/dutch/ResDut.gf @@ -124,6 +124,28 @@ resource ResDut = ParamX ** open Prelude in { in mkVerb (brek ! VPresSg1) (brek ! VPresSg3) (brek ! VInf) brak brak (brak + "en") gebroken ; + irregVerb2 : (breken,brak,braken,gebroken : Str) -> Verb = \breken,brak,braken,gebroken -> + let brek = (regVerb breken).s + in + mkVerb (brek ! VPresSg1) (brek ! VPresSg3) (brek ! VInf) brak brak (braken) gebroken ; + +-- To add a prefix (like "ein") to an already existing verb. + + prefixV : Str -> VVerb -> VVerb = \ein,verb -> + let + vs = verb.s ; + einb : Bool -> Str -> Str = \b,geb -> + if_then_Str b (ein + geb) geb ; + in + {s = table { + f@(VInf | VPerf) => ein + vs ! f ; ---- TODO: eingegeven + f => vs ! f + } ; + prefix = ein ; + aux = verb.aux ; + vtype = verb.vtype + } ; + -- Pattern matching verbs smartVerb : (_,_:Str) -> Verb = \verb,stem -> let raw = Predef.tk 2 verb; @@ -235,9 +257,7 @@ resource ResDut = ParamX ** open Prelude in { let hoef = mkStem hoeven in mkVerb hoef (hoef +"t") hoeven (hoef+"de") (hoef+"de") (hoef+"den") - ("ge"+hoef+"d"); - - + ("ge"+hoef+"d"); zijn_V : VVerb = { s = table { @@ -252,7 +272,9 @@ resource ResDut = ParamX ** open Prelude in { VImpPl => "wezen" ; VPerf => "geweest" } ; - aux = VZijn + aux = VZijn ; + prefix = [] ; + vtype = VAct ; } ; hebben_V : VVerb = { @@ -268,7 +290,9 @@ resource ResDut = ParamX ** open Prelude in { VImpPl => "hebben" ; VPerf => "gehad" } ; - aux = VHebben + aux = VHebben ; + prefix = [] ; + vtype = VAct ; } ; zullen_V : VVerb = { @@ -284,7 +308,9 @@ resource ResDut = ParamX ** open Prelude in { VImpPl => "zouden" ; ---- VPerf => "gezoudt" } ; - aux = VHebben + aux = VHebben ; + prefix = [] ; + vtype = VAct ; } ; Pronoun : Type = { @@ -304,63 +330,24 @@ resource ResDut = ParamX ** open Prelude in { het_Pron : Pronoun = mkPronoun "'t" "'t" "ze" "hij" "hem" "zijn" "zijne" Neutr Sg P3 ; - - -- Complex $CN$s, like adjectives, have strong and weak forms. param Adjf = Strong | Weak ; ----- Gender distinctions are only made in the singular. --- --- GenNum = GSg Gender | GPl ; --- ----- Agreement of $NP$ is a record. --- - oper Agr = {g : Gender ; n : Number ; p : Person} ; --- ----- Pronouns are the worst-case noun phrases, which have both case ----- and possessive forms. --- --- param NPForm = NPCase Case | NPPoss GenNum Case ; --- ----- Predeterminers sometimes require a case ("ausser mir"), sometimes not ("nur ich"). --- --- param PredetCase = NoCase | PredCase Case ; --- -----2 For $Adjective$ --- ----- The predicative form of adjectives is not inflected further. --- --- param AForm = APred | AMod GenNum Case ; --- --- -----2 For $Verb$ --- --- param VForm = --- VInf Bool -- True = with the particle "zu" --- | VFin Bool VFormFin -- True = prefix glued to verb --- | VImper Number -- prefix never glued --- | VPresPart AForm -- prefix always glued --- | VPastPart AForm ; --- --- param VFormFin = --- VPresInd Number Person --- | VPresSubj Number Person --- | VImpfInd Number Person --# notpresent --- | VImpfSubj Number Person --# notpresent --- ; --- --- param VPForm = --- VPFinite Mood Tense Anteriority --- | VPImperat Bool --- | VPInfinit Anteriority ; - oper VVerb = Verb ** {aux : VAux} ; + oper VVerb = Verb ** {prefix : Str ; aux : VAux ; vtype : VType} ; param VAux = VHebben | VZijn ; --- param VType = VAct | VRefl Case ; --- + param VType = VAct | VRefl ; + + oper + v2vvAux : Verb -> VAux -> VVerb = \v,a -> + {s = v.s ; aux = a ; prefix = [] ; vtype = VAct} ; + v2vv : Verb -> VVerb = \v -> v2vvAux v VHebben ; + + + ---- The order of sentence is depends on whether it is used as a main ---- clause, inverted, or subordinate. @@ -401,27 +388,15 @@ param -- DForm = DUnit | DTeen | DTen ; -- ----2 Transformations between parameter types --- + + oper Agr : Type = {g : Gender ; n : Number ; p : Person} ; + oper agrP3 : Number -> Agr = agrgP3 Neutr ; agrgP3 : Gender -> Number -> Agr = \g,n -> {g = g ; n = n ; p = P3} ; --- gennum : Gender -> Number -> GenNum = \g,n -> --- case n of { --- Sg => GSg g ; --- Pl => GPl --- } ; --- ----- Needed in $RelativeDut$. --- --- numGenNum : GenNum -> Number = \gn -> --- case gn of { --- GSg _ => Sg ; --- GPl => Pl --- } ; - -- Used in $NounDut$. agrAdj : Gender -> Adjf -> NForm -> AForm = \g,a,n -> @@ -430,59 +405,7 @@ param _ => AAttr } ; ----- To add a prefix (like "ein") to an already existing verb. --- --- prefixV : Str -> Verb -> Verb = \ein,verb -> --- let --- vs = verb.s ; --- geben = vs ! VInf False ; --- einb : Bool -> Str -> Str = \b,geb -> --- if_then_Str b (ein + geb) geb ; --- in --- {s = table { --- VInf False => ein + geben ; --- VInf True => --- if_then_Str (isNil ein) ("zu" ++ geben) (ein + "zu" + geben) ; --- VFin b vf => einb b (vs ! VFin b vf) ; --- VImper n => vs ! VImper n ; --- VPresPart a => ein + (regA (geben + "d")).s ! Posit ! a ; --- VPastPart a => ein + vs ! VPastPart a --- } ; --- prefix = ein ; --- aux = verb.aux ; --- vtype = verb.vtype --- } ; --- --- --- ----- Pronouns and articles ----- Here we define personal and relative pronouns. ----- All personal pronouns, except "ihr", conform to the simple ----- pattern $mkPronPers$. --- --- mkPronPers : (x1,_,_,_,x5 : Str) -> Gender -> Number -> Person -> --- {s : NPForm => Str ; a : Agr} = --- \ich,mich,mir,meiner,mein,g,n,p -> { --- s = table { --- NPCase c => caselist ich mich mir meiner ! c ; --- NPPoss gn c => mein + pronEnding ! gn ! c --- } ; --- a = {g = g ; n = n ; p = p} --- } ; --- --- pronEnding : GenNum => Case => Str = table { --- GSg Masc => caselist "" "en" "em" "es" ; --- GSg Fem => caselist "e" "e" "er" "er" ; --- GSg Neut => caselist "" "" "em" "es" ; --- GPl => caselist "e" "e" "en" "er" --- } ; --- --- artDef : GenNum => Case => Str = table { --- GSg Masc => caselist "der" "den" "dem" "des" ; --- GSg Fem => caselist "die" "die" "der" "der" ; --- GSg Neut => caselist "das" "das" "dem" "des" ; --- GPl => caselist "die" "die" "den" "der" --- } ; + -- ---- This is used when forming determiners that are like adjectives. -- @@ -629,7 +552,7 @@ param fin = verb.p1 ; neg = vp.a1 ! b ; obj = vp.n2 ! agr ; - compl = obj ++ neg ++ vp.a2 ; + compl = obj ++ neg ++ vp.a2 ++ vp.s.prefix ; inf = vp.inf ++ verb.p2 ; extra = vp.ext ; inffin = diff --git a/lib/src/dutch/StructuralDut.gf b/lib/src/dutch/StructuralDut.gf index c250cd31f..6d74f45c4 100644 --- a/lib/src/dutch/StructuralDut.gf +++ b/lib/src/dutch/StructuralDut.gf @@ -56,13 +56,9 @@ concrete StructuralDut of Structural = CatDut, Prelude ** -- more_CAdv = X.mkCAdv "mehr" "als" ; -- most_Predet = {s = appAdj (regA "meist") ; c = NoCase} ; -- much_Det = detLikeAdj Sg "viel" ; --- must_VV = auxVV --- (mkV --- "müssen" "muß" "mußt" "muß" "müßt" "müß" --- "mußte" "mußtest" "mußten" "mußtet" --- "müßte" "gemußt" [] --- VHaben) ; ------ one_Quant = DEPREC + + must_VV = auxVV (mkV "moeten" "moest" "gemoete") ; + -- only_Predet = {s = \\_,_,_ => "nur" ; c = NoCase} ; -- no_Utt = ss "nein" ; -----b no_Phr = ss "nein" ; diff --git a/lib/src/dutch/VerbDut.gf b/lib/src/dutch/VerbDut.gf index b3a8a2601..07a3636dc 100644 --- a/lib/src/dutch/VerbDut.gf +++ b/lib/src/dutch/VerbDut.gf @@ -12,7 +12,7 @@ concrete VerbDut of Verb = CatDut ** open Prelude, ResDut in { insertExtrapos vpi.p3 ( insertInf vpi.p2 ( insertObj vpi.p1 ( - predVGen v.isAux {s = v.s ; aux = v.aux}))) ; ---- subtyp + predVGen v.isAux {s = v.s ; aux = v.aux ; prefix = v.prefix ; vtype = v.vtype}))) ; ---- subtyp -- ComplVS v s = -- insertExtrapos (conjThat ++ s.s ! Sub) (predV v) ; @@ -20,7 +20,7 @@ concrete VerbDut of Verb = CatDut ** open Prelude, ResDut in { -- insertExtrapos (q.s ! QIndir) (predV v) ; -- ComplVA v ap = insertObj (\\ _ => ap.s ! APred) (predV v) ; -- - SlashV2a v = predV {s = v.s ; aux = v.aux} ** {c2 = v.c2} ; + SlashV2a v = predV {s = v.s ; aux = v.aux ; prefix = v.prefix ; vtype = v.vtype} ** {c2 = v.c2} ; -- -- Slash2V3 v np = -- insertObj (\\_ => appPrep v.c2 np.s) (predV v) ** {c2 = v.c3} ;