diff --git a/lib/src/afrikaans/AdjectiveAfr.gf b/lib/src/afrikaans/AdjectiveAfr.gf new file mode 100644 index 000000000..78ae7d23c --- /dev/null +++ b/lib/src/afrikaans/AdjectiveAfr.gf @@ -0,0 +1,57 @@ +concrete AdjectiveAfr of Adjective = CatAfr ** open ResAfr, Prelude in +{ + + + flags optimize=all_subs ; + + lin + + PositA a = { + s = a.s ! Posit ; + isPre = True + } ; + ComparA a np = { + s = \\af => a.s ! Compar ! af ++ "dan" ++ np.s ! NPNom ; + isPre = True + } ; + CAdvAP ad ap np = { + s = \\af => ad.s ++ ap.s ! af ++ ad.p ++ np.s ! NPNom ; + isPre = False + } ; + UseComparA a = { + s = \\af => a.s ! Compar ! af ; + isPre = True + } ; + AdjOrd a = { + s = a.s ; + isPre = True + } ; + +-- $SuperlA$ belongs to determiner syntax in $Noun$. + + ComplA2 a np = { + s = \\af => a.s ! Posit ! af ++ appPrep a.c2 np.s ; + isPre = True + } ; + + ReflA2 a = { + s = \\af => a.s ! Posit ! APred ++ appPrep a.c2 (\\_ => reflPron ! agrP3 Sg) ; --- agr + isPre = True + } ; + + SentAP ap sc = { + s = \\a => ap.s ! a ++ sc.s ; + isPre = False + } ; + + AdAP ada ap = { + s = \\a => ada.s ++ ap.s ! a ; + isPre = ap.isPre + } ; + + UseA2 a = { + s = a.s ! Posit ; + isPre = True + } ; + +} diff --git a/lib/src/afrikaans/AdverbAfr.gf b/lib/src/afrikaans/AdverbAfr.gf new file mode 100644 index 000000000..275cc9480 --- /dev/null +++ b/lib/src/afrikaans/AdverbAfr.gf @@ -0,0 +1,24 @@ +concrete AdverbAfr of Adverb = CatAfr ** open ResAfr, Prelude in { + + + lin + PositAdvAdj a = {s = a.s ! Posit ! APred} ; + + ComparAdvAdj cadv a np = { + s = cadv.s ++ a.s ! Posit ! APred ++ cadv.p ++ np.s ! NPNom + } ; + ComparAdvAdjS cadv a s = { + s = cadv.s ++ a.s ! Posit ! APred ++ cadv.p ++ s.s ! Sub + } ; + + PrepNP prep np = {s = appPrep prep.s np.s} ; + + AdAdv = cc2 ; + + PositAdAAdj a = {s = a.s ! Posit ! APred} ; + + SubjS subj s = {s = subj.s ++ s.s ! Sub} ; + + AdnCAdv cadv = {s = cadv.s ++ conjThan} ; + +} diff --git a/lib/src/afrikaans/AllAfr.gf b/lib/src/afrikaans/AllAfr.gf new file mode 100644 index 000000000..5a081bfbf --- /dev/null +++ b/lib/src/afrikaans/AllAfr.gf @@ -0,0 +1,11 @@ +--# -path=.:../abstract:../common:prelude + +concrete AllAfr of AllAfrAbs = + LangAfr, + IrregAfr, + ExtraAfr + ** +{ +--{} ; + +} diff --git a/lib/src/afrikaans/CatAfr.gf b/lib/src/afrikaans/CatAfr.gf new file mode 100644 index 000000000..d0d06f3ee --- /dev/null +++ b/lib/src/afrikaans/CatAfr.gf @@ -0,0 +1,88 @@ +concrete CatAfr of Cat = + CommonX ** + open ResAfr, Prelude in { + flags optimize=all_subs ; + + lincat + +-- Tensed/Untensed + + S = {s : Order => Str} ; + QS = {s : QForm => Str} ; + RS = {s : Gender => Number => Str} ; + SSlash = {s : Order => Str} ** {c2 : Preposition} ; + +-- Sentence + + Cl = Clause ; -- {s : Tense => Anteriority => Polarity => Order => Str} ; + ClSlash = Clause ** {c2 : Preposition} ; + Imp = {s : Polarity => ImpForm => Str} ; + +-- Question + + QCl = {s : ResAfr.Tense => Anteriority => Polarity => QForm => Str} ; + IP = {s : NPCase => Str ; n : Number} ; + IComp = {s : Agr => Str} ; + IDet = {s : Gender => Str ; n : Number} ; + IQuant = {s : Number => Gender => Str} ; + +-- Relative + + RCl = {s : ResAfr.Tense => Anteriority => Polarity => Gender => Number => Str} ; + RP = {s : Gender => Number => Str ; a : RAgr} ; + +-- Verb + + VP = ResAfr.VP ; + VPSlash = ResAfr.VP ** {c2 : Preposition} ; + Comp = {s : Agr => Str} ; + +-- Adjective + + AP = {s : AForm => Str ; isPre : Bool} ; + +-- Noun + + CN = {s : Adjf => NForm => Str ; g : Gender} ; + NP = {s : NPCase => Str ; a : Agr ; isPron : Bool} ; + Pron = Pronoun ; + + Det = {s,sp : Gender => Str ; n : Number ; a : Adjf} ; + Quant = { + s : Bool => Number => Gender => Str ; + sp : Number => Gender => Str ; + a : Adjf + } ; + Predet = {s : Number => Gender => Str} ; + Num = {s : Str ; n : Number ; isNum : Bool} ; + Card = {s : Gender => Case => Str ; n : Number} ; + Ord = {s : AForm => Str} ; + +-- Numeral + + Numeral = {s : CardOrd => Str ; n : Number } ; + Digits = {s : CardOrd => Str ; n : Number } ; + +-- Structural + + Conj = {s1,s2 : Str ; n : Number} ; + Subj = {s : Str} ; + Prep = {s : Str} ; + +-- Open lexical classes, e.g. Lexicon + + V, VS, VQ, VA = ResAfr.VVerb ; + VV = VVerb ** {isAux : Bool} ; + V2, V2A, V2S, V2Q = VVerb ** {c2 : Preposition} ; + V2V = VVerb ** {c2 : Preposition ; isAux : Bool} ; + V3 = VVerb ** {c2, c3 : Preposition} ; + + A = Adjective ; + A2 = Adjective ** {c2 : Preposition} ; + + N = Noun ; + N2 = {s : NForm => Str ; g : Gender} ** {c2 : Preposition} ; + N3 = {s : NForm => Str ; g : Gender} ** {c2,c3 : Preposition} ; + PN = {s : NPCase => Str} ; + +} diff --git a/lib/src/afrikaans/ConjunctionAfr.gf b/lib/src/afrikaans/ConjunctionAfr.gf new file mode 100644 index 000000000..cb9423258 --- /dev/null +++ b/lib/src/afrikaans/ConjunctionAfr.gf @@ -0,0 +1,42 @@ +concrete ConjunctionAfr of Conjunction = + CatAfr ** open ResAfr, Coordination, Prelude in { + + flags optimize=all_subs ; + + lin + + ConjS conj ss = conjunctDistrTable Order conj ss ; + + ConjAdv conj ss = conjunctDistrSS conj ss ; + + ConjNP conj ss = heavyNP (conjunctDistrTable NPCase conj ss ** { + a = {g = Utr ; n = conjNumber conj.n ss.a.n ; p = ss.a.p} + }) ; + + ConjAP conj ss = conjunctDistrTable AForm conj ss ** { + isPre = ss.isPre + } ; + + ConjRS conj ss = conjunctDistrTable2 Gender Number conj ss ; + +-- These fun's are generated from the list cat's. + + BaseS = twoTable Order ; + ConsS = consrTable Order comma ; + BaseAdv = twoSS ; + ConsAdv = consrSS comma ; + BaseNP x y = twoTable NPCase x y ** {a = conjAgr x.a y.a} ; + ConsNP xs x = consrTable NPCase comma xs x ** {a = conjAgr xs.a x.a} ; + BaseAP x y = twoTable AForm x y ** {isPre = andB x.isPre y.isPre} ; + ConsAP xs x = consrTable AForm comma xs x ** {isPre = andB xs.isPre x.isPre} ; + BaseRS x y = twoTable2 Gender Number x y ** {c = y.c} ; + ConsRS xs x = consrTable2 Gender Number comma xs x ; + + lincat + [S] = {s1,s2 : Order => Str} ; + [Adv] = {s1,s2 : Str} ; + [NP] = {s1,s2 : NPCase => Str ; a : Agr} ; + [AP] = {s1,s2 : AForm => Str ; isPre : Bool} ; + [RS] = {s1,s2 : Gender => Number => Str} ; + +} diff --git a/lib/src/afrikaans/ExtraAfr.gf b/lib/src/afrikaans/ExtraAfr.gf new file mode 100644 index 000000000..8da5924e8 --- /dev/null +++ b/lib/src/afrikaans/ExtraAfr.gf @@ -0,0 +1,30 @@ +concrete ExtraAfr of ExtraAfrAbs = CatAfr ** + open ResAfr, Coordination, Prelude, IrregAfr in +{ +--{ +-- +-- lincat +-- VPI = {s : Bool => Str} ; +-- [VPI] = {s1,s2 : Bool => Str} ; +-- lin +-- BaseVPI = twoTable Bool ; +-- ConsVPI = consrTable Bool comma ; +-- +-- MkVPI vp = {s = \\b => useInfVP b vp} ; +-- ConjVPI = conjunctDistrTable Bool ; +-- +-- ComplVPIVV v vpi = +-- insertInf (vpi.s ! v.isAux) ( +-- predVGen v.isAux v) ; ---- +--{- +-- insertExtrapos vpi.p3 ( +-- insertInf vpi.p2 ( +-- insertObj vpi.p1 ( +-- predVGen v.isAux v))) ; +---} +-- +-- PPzuAdv cn = {s = case cn.g of { +-- Masc | Neutr => "zum" ; +-- Fem => "zur" +-- } ++ cn.s ! adjfCase Weak Dat ! Sg ! Dat +-- } ; diff --git a/lib/src/afrikaans/GrammarAfr.gf b/lib/src/afrikaans/GrammarAfr.gf new file mode 100644 index 000000000..af0d853e2 --- /dev/null +++ b/lib/src/afrikaans/GrammarAfr.gf @@ -0,0 +1,17 @@ +--# -path=.:../abstract:../common:prelude + +concrete GrammarAfr of Grammar = + NounAfr, + VerbAfr, + AdjectiveAfr, + AdverbAfr, + NumeralAfr, + SentenceAfr, + QuestionAfr, + RelativeAfr, + ConjunctionAfr, + PhraseAfr, + TextX, + IdiomAfr, + StructuralAfr, + TenseX ; diff --git a/lib/src/afrikaans/IdiomAfr.gf b/lib/src/afrikaans/IdiomAfr.gf new file mode 100644 index 000000000..453acfb0c --- /dev/null +++ b/lib/src/afrikaans/IdiomAfr.gf @@ -0,0 +1,50 @@ +concrete IdiomAfr of Idiom = CatAfr ** + open MorphoAfr, (P = ParadigmsAfr), IrregAfr, Prelude in { + + flags optimize=all_subs ; + + lin + ImpersCl vp = mkClause "'t" (agrP3 Sg) vp ; + GenericCl vp = mkClause "men" (agrP3 Sg) vp ; + + CleftNP np rs = mkClause "'t" (agrP3 Sg) + (insertExtrapos (rs.s ! np.a.g ! np.a.n) ---- + (insertObj (\\_ => np.s ! NPNom) (predV zijn_V))) ; + + CleftAdv ad s = mkClause "'t" (agrP3 Sg) + (insertExtrapos (conjThat ++ s.s ! Sub) + (insertObj (\\_ => ad.s) (predV zijn_V))) ; + + ExistNP np = + mkClause "er" (agrP3 np.a.n) + (insertObj (\\_ => np.s ! NPNom) + (predV zijn_V)) ; + + ExistIP ip = { + s = \\t,a,p => + let + cls = + (mkClause "er" (agrP3 ip.n) (predV zijn_V)).s ! t ! a ! p ; + who = ip.s ! NPNom + in table { + QDir => who ++ cls ! Inv ; + QIndir => who ++ cls ! Sub + } + } ; + + ProgrVP vp = insertAdv ("aan" ++ "het" ++ useInfVP True vp) (predV zijn_V) ; + + ImpPl1 vp = + let + v = v2vv (regVerb "laat") ; + vpi = infVP True vp ; + vvp = insertExtrapos vpi.p3 ( + insertInf vpi.p2 ( + insertObj vpi.p1 ( + predVGen True v))) ; + in + {s = (mkClause "we" {g = Utr ; n = Pl ; p = P1} vvp).s ! + Pres ! Simul ! Pos ! Inv + } ; + +} diff --git a/lib/src/afrikaans/IrregAfr.gf b/lib/src/afrikaans/IrregAfr.gf new file mode 100644 index 000000000..4736db747 --- /dev/null +++ b/lib/src/afrikaans/IrregAfr.gf @@ -0,0 +1,199 @@ +--# -path=.:../common:../abstract + +concrete IrregAfr of IrregAfrAbs = CatAfr ** open ParadigmsAfr in { +{- +lin bakken_V = mkV "bakken" "bakte" "bakten" "gebakken" ; +lin bannen_V = mkV "bannen" "bande" "banden" "gebannen" ; +lin barsten_V = mkV "barsten" "barstte" "barstten" "gebarsten" ; +lin bederven_V = mkZijnHebbenV "bederven" "bedierf" "bedierven" "bedorven" ; +lin bedriegen_V = mkV "bedriegen" "bedroog" "bedrogen" "bedrogen" ; +lin beginnen_V = mkZijnV "beginnen" "begon" "begonnen" "begonnen" ; +lin behangen_V = mkV "behangen" "behangde" "behangden" "behangen" ; +lin bergen_V = mkV "bergen" "borg" "borgen" "geborgen" ; +lin bevelen_V = mkV "bevelen" "beval" "bevalen" "bevolen" ; +lin bezwijken_V = mkZijnV "bezwijken" "bezweek" "bezweken" "bezweken" ; +lin bidden_V = mkV "bidden" "bad" "baden" "gebeden" ; +lin bieden_V = mkV "bieden" "bood" "boden" "geboden" ; +lin bijten_V = mkV "bijten" "beet" "beten" "gebeten" ; +lin binden_V = mkV "binden" "bond" "bonden" "gebonden" ; +lin blazen_V = mkV "blazen" "blies" "bliezen" "geblazen" ; +lin blijken_V = mkZijnV "blijken" "bleek" "bleken" "gebleken" ; +lin blijven_V = mkZijnV "blijven" "bleef" "bleven" "gebleven" ; +lin blinken_V = mkV "blinken" "blonk" "blonken" "geblonken" ; +lin braden_V = mkV "braden" "braadde" "braadden" "gebraden" ; +lin breken_V = mkZijnHebbenV "breken" "brak" "braken" "gebroken" ; +lin brengen_V = mkV "brengen" "bracht" "brachten" "gebracht" ; +lin brouwen_V = mkV "brouwen" "brouwde" "brouwden" "gebrouwen" ; +lin buigen_V = mkV "buigen" "boog" "bogen" "gebogen" ; +lin denken_V = mkV "denken" "dacht" "dachten" "gedacht" ; +lin dingen_V = mkV "dingen" "naar" "dong" "naar" ; +lin doen_V = mkV "doen" "deed" "deden" "gedaan" ; +lin dragen_V = mkV "dragen" "droeg" "droegen" "gedragen" ; +lin drijven_V = mkV "drijven" "dreef" "dreven" "gedreven" ; +lin dringen_V = mkV "dringen" "drong" "drongen" "gedrongen" ; +lin drinken_V = mkV "drinken" "dronk" "dronken" "gedronken" ; +lin druipen_V = mkZijnHebbenV "druipen" "droop" "dropen" "gedropen" ; +lin duiken_V = mkZijnHebbenV "duiken" "dook" "doken" "gedoken" ; +lin dwingen_V = mkV "dwingen" "dwong" "dwongen" "gedwongen" ; +lin eten_V = mkV "eten" "at" "aten" "gegeten" ; +lin fluiten_V = mkV "fluiten" "floot" "floten" "gefloten" ; +lin gelden_V = mkV "gelden" "gold" "golden" "gegolden" ; +lin gaan_V = mkZijnV "gaan" "ging" "gingen" "gegaan" ; +lin genezen_V = mkZijnHebbenV "genezen" "genas" "genazen" "genezen" ; +lin genieten_V = mkV "genieten" "genoot" "genoten" "genoten" ; +lin geven_V = mkV "geven" "gaf" "gaven" "gegeven" ; +lin gieten_V = mkV "gieten" "goot" "goten" "gegoten" ; +lin glijden_V = mkZijnHebbenV "glijden" "gleed" "gleden" "gegleden" ; +lin glimmen_V = mkV "glimmen" "glom" "glommen" "geglommen" ; +lin graven_V = mkV "graven" "groef" "groeven" "gegraven" ; +lin grijpen_V = mkV "grijpen" "greep" "grepen" "gegrepen" ; +lin hangen_V = mkV "hangen" "hing" "hingen" "gehangen" ; +lin heffen_V = mkV "heffen" "hief" "hieven" "geheven" ; +lin helpen_V = mkV "helpen" "hielp" "hielpen" "geholpen" ; +lin heten_V = mkV "heten" "heette" "heetten" "geheten" ; +lin hijsen_V = mkV "hijsen" "hees" "hesen" "gehesen" ; +lin hoeven_V = mkV "hoeven" "hoefde" "hoefden" "gehoeven" ; +lin houden_V = mkV "houden" "hield" "hielden" "gehouden" ; +lin houwen_V = mkV "houwen" "houwde" "houwden" "gehouwen" ; +lin jagen_V = mkV "jagen" "joeg" "joegen" "gejaagd" ; +lin kiezen_V = mkV "kiezen" "koos" "kozen" "gekozen" ; +lin kijken_V = mkV "kijken" "naar" "keek" "naar" ; +lin klimmen_V = mkZijnHebbenV "klimmen" "klom" "klommen" "geklommen" ; +lin klinken_V = mkV "klinken" "klonk" "klonken" "geklonken" ; +lin kluiven_V = mkV "kluiven" "kloof" "kloven" "gekloven" ; +lin knijpen_V = mkV "knijpen" "kneep" "knepen" "geknepen" ; +lin kopen_V = mkV "kopen" "kocht" "kochten" "gekocht" ; +lin krijgen_V = mkV "krijgen" "kreeg" "kregen" "gekregen" ; +lin krimpen_V = mkZijnV "krimpen" "kromp" "krompen" "gekrompen" ; +lin kruipen_V = mkZijnHebbenV "kruipen" "kroop" "kropen" "gekropen" ; +lin zich_V = mkV "zich" "kwijten" "van" "kweet" ; +lin lachen_V = mkV "lachen" "lachte" "lachten" "gelachen" ; +lin laden_V = mkV "laden" "laadde" "laadden" "geladen" ; +lin laten_V = mkV "laten" "liet" "lieten" "gelaten" ; +lin lezen_V = mkV "lezen" "las" "lazen" "gelezen" ; +lin liegen_V = mkV "liegen" "loog" "logen" "gelogen" ; +lin liggen_V = mkV "liggen" "lag" "lagen" "gelegen" ; +lin lijden_V = mkV "lijden" "leed" "leden" "geleden" ; +lin lijken_V = mkV "lijken" "op" "leek" "op" ; +lin lopen_V = mkZijnHebbenV "lopen" "liep" "liepen" "gelopen" ; +lin malen_V = mkV "malen" "maalde" "maalden" "gemalen" ; +lin melken_V = mkV "melken" "molk" "molken" "gemolken" ; +lin meten_V = mkV "meten" "mat" "maten" "gemeten" ; +lin mijden_V = mkV "mijden" "meed" "meden" "gemeden" ; +lin moeten_V = mkV "moeten" "moest" "moesten" "gemoeten" ; +lin nemen_V = mkV "nemen" "nam" "namen" "genomen" ; +lin nijgen_V = mkV "nijgen" "neeg" "negen" "genegen" ; +lin ontginnen_V = mkV "ontginnen" "ontgon" "ontgonnen" "ontgonnen" ; +lin ontluiken_V = mkZijnV "ontluiken" "ontlook" "ontloken" "ontloken" ; +lin pluizen_V = mkV "pluizen" "ploos" "plozen" "geplozen" ; +lin prijzen_V = mkV "prijzen" "prees" "prezen" "geprezen" ; +lin raden_V = mkV "raden" "raadde" "raadden" "geraden" ; +lin rijden_V = mkZijnHebbenV "rijden" "reed" "reden" "gereden" ; +lin rijgen_V = mkV "rijgen" "reeg" "regen" "geregen" ; +lin rijten_V = mkV "rijten" "reet" "reten" "gereten" ; +lin rijzen_V = mkZijnV "rijzen" "rees" "rezen" "gerezen" ; +lin roepen_V = mkV "roepen" "riep" "riepen" "geroepen" ; +lin ruiken_V = mkV "ruiken" "rook" "roken" "geroken" ; +lin scheiden_V = mkZijnHebbenV "scheiden" "scheidde" "scheidden" "gescheiden" ; +lin schelden_V = mkV "schelden" "schold" "scholden" "gescholden" ; +lin schenden_V = mkV "schenden" "schond" "schonden" "geschonden" ; +lin schenken_V = mkV "schenken" "schonk" "schonken" "geschonken" ; +lin scheppen_V = mkV "scheppen" "shiep" "schiepen" "geschapen" ; +lin scheren_V = mkV "scheren" "scheerde" "scheerden" "geschoren" ; +lin schieten_V = mkV "schieten" "schoot" "schoten" "geschoten" ; +lin schijnen_V = mkV "schijnen" "scheen" "schenen" "1." ; +lin verschijnen_V = mkZijnV "verschijnen" "verscheen" "verschenen" "verschenen" ; +lin schijten_V = mkV "schijten" "scheet" "scheten" "gescheten" ; +lin schrijven_V = mkV "schrijven" "schreef" "schreven" "geschreven" ; +lin schrikken_V = mkZijnV "schrikken" "schrok" "schrokken" "geschrokken" ; +lin schuilen_V = mkV "schuilen" "school" "scholen" "gescholen" ; +lin schuiven_V = mkZijnHebbenV "schuiven" "schoof" "schoven" "geschoven" ; +lin slaan_V = mkV "slaan" "sloeg" "sloegen" "geslagen" ; +lin slapen_V = mkV "slapen" "sliep" "sliepen" "geslapen" ; +lin slijpen_V = mkV "slijpen" "sleep" "slepen" "geslepen" ; +lin slijten_V = mkZijnHebbenV "slijten" "sleet" "sleten" "gesleten" ; +lin slinken_V = mkZijnV "slinken" "slonk" "slonken" "geslonken" ; +lin sluipen_V = mkZijnHebbenV "sluipen" "sloop" "slopen" "geslopen" ; +lin sluiten_V = mkZijnHebbenV "sluiten" "sloot" "sloten" "gesloten" ; +lin smelten_V = mkZijnHebbenV "smelten" "smolt" "smolten" "gesmolten" ; +lin smijten_V = mkV "smijten" "smeet" "smeten" "gesmeten" ; +lin snijden_V = mkV "snijden" "sneed" "sneden" "gesneden" ; +lin snuiten_V = mkV "snuiten" "snoot" "snoten" "gesnoten" ; +lin snuiven_V = mkV "snuiven" "snoof" "snoven" "gesnoven" ; +lin spannen_V = mkV "spannen" "spande" "spanden" "gespannen" ; +lin spijten_V = mkV "spijten" "speet" "speten" "gespeten" ; +lin spinnen_V = mkV "spinnen" "spon" "sponnen" "gesponnen" ; +lin splijten_V = mkZijnHebbenV "splijten" "spleet" "spleten" "gespleten" ; +lin spreken_V = mkV "spreken" "sprak" "spraken" "gesproken" ; +lin springen_V = mkZijnHebbenV "springen" "sprong" "sprongen" "gesprongen" ; +lin spruiten_V = mkZijnV "spruiten" "sproot" "sproten" "gesproten" ; +lin spuiten_V = mkV "spuiten" "spoot" "spoten" "gespoten" ; +lin staan_V = mkV "staan" "stond" "stonden" "gestaan" ; +lin steken_V = mkV "steken" "stak" "staken" "gestoken" ; +lin stelen_V = mkV "stelen" "stal" "stalen" "gestolen" ; +lin sterven_V = mkZijnV "sterven" "stierf" "stierven" "gestorven" ; +lin stijgen_V = mkZijnV "stijgen" "steeg" "stegen" "gestegen" ; +lin stijven_V = mkV "stijven" "steef" "steven" "gesteven" ; +lin stinken_V = mkV "stinken" "stonk" "stonken" "gestonken" ; +lin stoten_V = mkV "stoten" "stootte" "stootten" "gestoten" ; +lin strijden_V = mkV "strijden" "streed" "streden" "gestreden" ; +lin strijken_V = mkV "strijken" "streek" "streken" "gestreken" ; +lin neerstrijken_V = mkV "neerstrijken" "streek" "neer" "streken" ; +lin stuiven_V = mkV "stuiven" "stoof" "stoven" "gestoven" ; +lin treden_V = mkZijnHebbenV "treden" "trad" "traden" "getreden" ; +lin treffen_V = mkV "treffen" "trof" "troffen" "getroffen" ; +lin trekken_V = mkZijnHebbenV "trekken" "trok" "trokken" "getrokken" ; +lin vallen_V = mkZijnV "vallen" "viel" "vielen" "gevallen" ; +lin vangen_V = mkV "vangen" "ving" "vingen" "gevangen" ; +lin varen_V = mkZijnHebbenV "varen" "voer" "voeren" "gevaren" ; +lin vechten_V = mkV "vechten" "vocht" "vochten" "gevochten" ; +lin verdrieten_V = mkV "verdrieten" "verdroot" "verdroten" "verdroten" ; +lin verdwijnen_V = mkZijnV "verdwijnen" "verdween" "verdwenen" "verdwenen" ; +lin vergeten_V = mkV "vergeten" "+" "vergat" "vergaten" ; +lin verliezen_V = mkV "verliezen" "verloor" "verloren" "verloren" ; +lin vinden_V = mkV "vinden" "vond" "vonden" "gevonden" ; +lin vlechten_V = mkV "vlechten" "vlocht" "vlochten" "gevlochten" ; +lin vliegen_V = mkZijnHebbenV "vliegen" "vloog" "vlogen" "gevlogen" ; +lin vouwen_V = mkV "vouwen" "vouwde" "vouwden" "gevouwen" ; +lin vragen_V = mkV "vragen" "vroeg" "vroegen" "gevraagd" ; +lin vreten_V = mkV "vreten" "vrat" "vraten" "gevreten" ; +lin vriezen_V = mkV "vriezen" "vroor" "vroren" "gevroren" ; +lin vrijen_V = mkV "vrijen" "vree" "/" "vrijde" ; +lin wassen_V = mkV "wassen" "waste" "wasten" "gewassen" ; +lin wegen_V = mkV "wegen" "woog" "wogen" "gewogen" ; +lin werpen_V = mkV "werpen" "wierp" "wierpen" "geworpen" ; +lin werven_V = mkV "werven" "wierf" "wierven" "geworven" ; +lin weten_V = mkV "weten" "wist" "wisten" "geweten" ; +lin weven_V = mkV "weven" "weefde" "weefden" "geweven" ; +lin wijken_V = mkZijnV "wijken" "week" "weken" "geweken" ; +lin wijten_V = mkV "wijten" "weet" "weten" "geweten" ; +lin wijzen_V = mkV "wijzen" "wees" "wezen" "gewezen" ; +lin winden_V = mkV "winden" "wond" "wonden" "gewonden" ; +lin winnen_V = mkV "winnen" "won" "wonnen" "gewonnen" ; +lin worden_V = mkV "worden" "werd" "werden" "geworden" ; +lin wrijven_V = mkV "wrijven" "wreef" "wreven" "gewreven" ; +lin wringen_V = mkV "wringen" "wrong" "wrongen" "gewrongen" ; +lin zeggen_V = mkV "zeggen" "zei" "zeiden" "gezegd" ; +lin zenden_V = mkV "zenden" "zond" "zonden" "gezonden" ; +lin zien_V = mkV "zien" "zag" "zagen" "gezien" ; +lin zijgen_V = mkZijnV "zijgen" "zeeg" "zegen" "gezegen" ; +lin zingen_V = mkV "zingen" "zong" "zongen" "gezongen" ; +lin zinken_V = mkZijnV "zinken" "zonk" "zonken" "gezonken" ; +lin zinnen_V = mkV "zinnen" "zon" "zonnen" "gezonnen" ; +lin zitten_V = mkV "zitten" "zat" "zaten" "gezeten" ; +lin zoeken_V = mkV "zoeken" "zocht" "zochten" "gezocht" ; +lin zuigen_V = mkV "zuigen" "zoog" "zogen" "gezogen" ; +lin zuipen_V = mkV "zuipen" "zoop" "zopen" "gezopen" ; +lin zwelgen_V = mkV "zwelgen" "zwolg" "zwolgen" "gezwolgen" ; +lin zwellen_V = mkZijnV "zwellen" "zwol" "zwollen" "gezwollen" ; +lin zwemmen_V = mkZijnHebbenV "zwemmen" "zwom" "zwommen" "gezwommen" ; +lin zweren_V = mkV "zweren" "zwoer" "zwoeren" "gezworen" ; +lin zwerven_V = mkV "zwerven" "zwierf" "zwierven" "gezworven" ; +lin zwijgen_V = mkV "zwijgen" "zweeg" "zwegen" "gezwegen" ; + +oper + mkZijnV, mkZijnHebbenV : (_,_,_,_ : Str) -> V ; + mkZijnV a b c d = zijnV (mkV a b c d) ; + mkZijnHebbenV a b c d = zijnV (mkV a b c d) ; ---- both could be +-} +} diff --git a/lib/src/afrikaans/IrregAfrAbs.gf b/lib/src/afrikaans/IrregAfrAbs.gf new file mode 100644 index 000000000..5a26455dd --- /dev/null +++ b/lib/src/afrikaans/IrregAfrAbs.gf @@ -0,0 +1,192 @@ +abstract IrregAfrAbs = Cat ** { +{- +fun bakken_V : V ; -- to fry +fun bannen_V : V ; -- to ban +fun barsten_V : V ; -- to burst +fun bederven_V : V ; -- to rot, to decay +fun bedriegen_V : V ; -- to deceive, to cheat, to trick +fun beginnen_V : V ; -- to begin +fun behangen_V : V ; -- to wall-paper +fun bergen_V : V ; -- to store, to recover +fun bevelen_V : V ; -- to order, to command +fun bezwijken_V : V ; -- to succumb, to collapse +fun bidden_V : V ; -- to pray +fun bieden_V : V ; -- to offer +fun bijten_V : V ; -- to bite +fun binden_V : V ; -- to bind, to tie +fun blazen_V : V ; -- to blow, to spit (cat) +fun blijken_V : V ; -- to appear, to be evident +fun blijven_V : V ; -- to stay, to remain, to keep +fun blinken_V : V ; -- to shine, to gleam +fun braden_V : V ; -- to roast, to grill +fun breken_V : V ; -- to break +fun brengen_V : V ; -- to bring +fun brouwen_V : V ; -- to brew +fun buigen_V : V ; -- to bend +fun denken_V : V ; -- to think +fun dingen_V : V ; -- dongen naar gedongen naar to bid for, to compete for +fun doen_V : V ; -- to do +fun dragen_V : V ; -- to carry, to bear +fun drijven_V : V ; -- to drive, to float , to manage +fun dringen_V : V ; -- to push (a crowd) +fun drinken_V : V ; -- to drink +fun druipen_V : V ; -- to drip +fun duiken_V : V ; -- to dive +fun dwingen_V : V ; -- to force +fun eten_V : V ; -- to eat +fun fluiten_V : V ; -- to whistle, to play the flute +fun gelden_V : V ; -- to be valid, to be in effect +fun gaan_V : V ; -- to go +fun genezen_V : V ; -- to heal, to cure +fun genieten_V : V ; -- to enjoy +fun geven_V : V ; -- to give +fun gieten_V : V ; -- to pour +fun glijden_V : V ; -- to glide +fun glimmen_V : V ; -- to glimmer, to shine, to gleam +fun graven_V : V ; -- to dig +fun grijpen_V : V ; -- to grab, to snatch +fun hangen_V : V ; -- to hang +fun heffen_V : V ; -- to raise, to lift, to levy +fun helpen_V : V ; -- to help +fun heten_V : V ; -- to be called, to be named +fun hijsen_V : V ; -- to hoist (sails, flag), to pull up +fun hoeven_V : V ; -- to be necessary +fun houden_V : V ; -- to hold +fun houwen_V : V ; -- to hew, hack +fun jagen_V : V ; -- to hunt +fun kiezen_V : V ; -- to choose, to elect +fun kijken_V : V ; -- keken naar gekeken naar to look at +fun klimmen_V : V ; -- to climb +fun klinken_V : V ; -- to sound, to ring, to clink +fun kluiven_V : V ; -- to pick (a bone), to nibble +fun knijpen_V : V ; -- to pinch, to squeeze +fun kopen_V : V ; -- to buy +fun krijgen_V : V ; -- to get +fun krimpen_V : V ; -- to shrink +fun kruipen_V : V ; -- to crawl, to creep +fun zich_V : V ; -- zich van kweten zich van zich gekweten van to acquit oneself of +fun lachen_V : V ; -- to laugh, to smile +fun laden_V : V ; -- to load, to charge +fun laten_V : V ; -- to let, to allow +fun lezen_V : V ; -- to read +fun liegen_V : V ; -- to (tell a) lie +fun liggen_V : V ; -- to lie (on a bed) +fun lijden_V : V ; -- to suffer +fun lijken_V : V ; -- leken op geleken op to resemble, to seem +fun lopen_V : V ; -- to walk +fun malen_V : V ; -- to grind +fun melken_V : V ; -- to milk (a cow) +fun meten_V : V ; -- to measure +fun mijden_V : V ; -- to avoid +fun moeten_V : V ; -- to must, have to +fun nemen_V : V ; -- to take +fun nijgen_V : V ; -- to (make a bow +fun ontginnen_V : V ; -- to reclaim (land), to clear (forest), to exploit (mine) +fun ontluiken_V : V ; -- to open (flower, beauty) +fun pluizen_V : V ; -- to fluff, to give off fluff +fun prijzen_V : V ; -- to praise +fun raden_V : V ; -- go guess +fun rijden_V : V ; -- to drive, to ride +fun rijgen_V : V ; -- to tack, to lace, to thread +fun rijten_V : V ; -- to tear, to rip +fun rijzen_V : V ; -- to rise +fun roepen_V : V ; -- to call, to shout +fun ruiken_V : V ; -- to smell, to scent +fun scheiden_V : V ; -- to divorce, to separate +fun schelden_V : V ; -- to curse, to swear +fun schenden_V : V ; -- to violate, to damage +fun schenken_V : V ; -- 1. to donate 2. to pour +fun scheppen_V : V ; -- to create +fun scheren_V : V ; -- to shave +fun schieten_V : V ; -- to shoot +fun schijnen_V : V ; -- geschenen +fun verschijnen_V : V ; -- to appear, to turn up +fun schijten_V : V ; -- to shit (flat) +fun schrijven_V : V ; -- to write +fun schrikken_V : V ; -- to be startled +fun schuilen_V : V ; -- to shelter +fun schuiven_V : V ; -- to shove +fun slaan_V : V ; -- to hit +fun slapen_V : V ; -- to sleep +fun slijpen_V : V ; -- to sharpen, to polish +fun slijten_V : V ; -- to wear out, to sell +fun slinken_V : V ; -- to shrink, to decrease in number +fun sluipen_V : V ; -- to sneak, to slink +fun sluiten_V : V ; -- to close, to shut +fun smelten_V : V ; -- to melt +fun smijten_V : V ; -- to throw, to fling +fun snijden_V : V ; -- to cut +fun snuiten_V : V ; -- to snout, to blow (nose) +fun snuiven_V : V ; -- to sniff, to snort +fun spannen_V : V ; -- to strain, to bend (a bow) +fun spijten_V : V ; -- to regret +fun spinnen_V : V ; -- to twist +fun splijten_V : V ; -- to split, to cleave +fun spreken_V : V ; -- to speak +fun springen_V : V ; -- to jump, to spring +fun spruiten_V : V ; -- to sprout, to grow out +fun spuiten_V : V ; -- to spout, to squirt +fun staan_V : V ; -- to stand +fun steken_V : V ; -- to stab, to prick, to sting +fun stelen_V : V ; -- to steal +fun sterven_V : V ; -- to die +fun stijgen_V : V ; -- to rise +fun stijven_V : V ; -- to starch +fun stinken_V : V ; -- to stink +fun stoten_V : V ; -- to push, to bump +fun strijden_V : V ; -- to battle, to fight +fun strijken_V : V ; -- to iron (clothes), strike (flag), smooth (hair) +fun neerstrijken_V : V ; -- neer neergestreken * to settle in a place +fun stuiven_V : V ; -- to cause dust to whirl, to dash forward +fun treden_V : V ; -- to tread +fun treffen_V : V ; -- to hit (goal) to strike +fun trekken_V : V ; -- to pull, to draw, to travel +fun vallen_V : V ; -- to fall +fun vangen_V : V ; -- to catch +fun varen_V : V ; -- to fare, to sail +fun vechten_V : V ; -- to fight +fun verdrieten_V : V ; -- to grieve +fun verdwijnen_V : V ; -- to disappear +fun vergeten_V : V ; -- vergeten to forget +fun verliezen_V : V ; -- to lose +fun vinden_V : V ; -- to find +fun vlechten_V : V ; -- to plait, to braid +fun vliegen_V : V ; -- to fly +fun vouwen_V : V ; -- to fold +fun vragen_V : V ; -- to ask +fun vreten_V : V ; -- to eat, to devour +fun vriezen_V : V ; -- to freeze ("it's freezing") +fun vrijen_V : V ; -- vreeën / vrijden gevreeën / gevrijd to make love +fun wassen_V : V ; -- to wash +fun wegen_V : V ; -- to weigh +fun werpen_V : V ; -- to throw +fun werven_V : V ; -- to recruit +fun weten_V : V ; -- to know +fun weven_V : V ; -- to weave +fun wijken_V : V ; -- to give way, to disappear +fun wijten_V : V ; -- to blame (something) on +fun wijzen_V : V ; -- to point +fun winden_V : V ; -- to wind +fun winnen_V : V ; -- to win +fun worden_V : V ; -- to become +fun wrijven_V : V ; -- to rub +fun wringen_V : V ; -- to wring +fun zeggen_V : V ; -- to say +fun zenden_V : V ; -- to send +fun zien_V : V ; -- to see +fun zijgen_V : V ; -- to sink down (neerzijgen) +fun zingen_V : V ; -- to sing +fun zinken_V : V ; -- to sink +fun zinnen_V : V ; -- to ponder (zinnen op) +fun zitten_V : V ; -- to sit +fun zoeken_V : V ; -- to seek, to search +fun zuigen_V : V ; -- to suck +fun zuipen_V : V ; -- to booze +fun zwelgen_V : V ; -- to revel, to dwell (in self-pity) +fun zwellen_V : V ; -- to swell +fun zwemmen_V : V ; -- to swim +fun zweren_V : V ; -- to swear (oath) +fun zwerven_V : V ; -- to wander, to ramble +fun zwijgen_V : V ; -- to be silent +-} +} diff --git a/lib/src/afrikaans/LangAfr.gf b/lib/src/afrikaans/LangAfr.gf new file mode 100644 index 000000000..8198ea05c --- /dev/null +++ b/lib/src/afrikaans/LangAfr.gf @@ -0,0 +1,5 @@ +--# -path=.:../abstract:../common:../prelude + +concrete LangAfr of Lang = + GrammarAfr, + LexiconAfr ; diff --git a/lib/src/afrikaans/LexiconAfr.gf b/lib/src/afrikaans/LexiconAfr.gf new file mode 100644 index 000000000..5677aace7 --- /dev/null +++ b/lib/src/afrikaans/LexiconAfr.gf @@ -0,0 +1,362 @@ +--# -path=.:../common:../abstract:../../prelude + +-- work by Aarne Ranta + +concrete LexiconAfr of Lexicon = CatAfr ** + open Prelude, ParadigmsAfr, IrregAfr in { + +flags + optimize=all_subs ; + +lin + add_V3 = mkV3 (mkV "toe" (mkV "voeg")) (mkPrep "aan") ; + already_Adv = mkAdv "al" ; + answer_V2S = mkV2S (mkV "antwoord") noPrep ; + ask_V2Q = mkV2Q (mkV "vra") noPrep ; + bad_A = mkA "boos" ; + beautiful_A = mkA "mooi" ; + become_VA = mkVA (mkV "word") ; + beer_N = mkN "bier" "bieren" neuter ; + beg_V2V = mkV2V (mkV "smek") noPrep ; ---- om te + big_A = mkA "groot" ; + bike_N = mkN "fiets" ; + black_A = mkA "swart" ; + blue_A = mkA "blauw"; + book_N = mkN "boek" ; + brother_N2 = mkN2 (mkN "broer" "broers" masculine) van_Prep ; + brown_A = mkA "bruin" ; + buy_V2 = mkV2 (mkV "kop" "kocht" "gekocht") ; + child_N = mkN "kind" "kinderen" neuter ; + come_V = zijnV (mkV "kom") ; + die_V = zijnV (mkV "sterv" "stierf" "gestorv") ; + distance_N3 = mkN3 (mkN "afstand") van_Prep (mkPrep "naar") ; + drink_V2 = mkV2 (mkV "drink") ; + easy_A2V = mkA2 (mkA "gemakkelik") noPrep ; + eat_V2 = mkV2 (mkV "eet") ; + father_N2 = mkN2 (mkN "vader") van_Prep ; + fear_VS = mkVS (mkV "vres") ; + fish_N = mkN "vis" ; + go_V = mkV "gaan" ; + hope_VS = mkVS (mkV "hop") ; + house_N = mkN "huis" neuter ; + know_VQ = mkVQ (mkV "weet") ; + know_VS = mkVS (mkV "weet") ; + married_A2 = mkA2 (mkA "getrouwd") (mkPrep "met") ; + mother_N2 = mkN2 (mkN "moeder") ; + now_Adv = mkAdv "nu" ; + paint_V2A = mkV2A (mkV "schilder") noPrep ; + paris_PN = mkPN "Parys" ; + red_A = mkA "rood" ; + say_VS = mkVS (mkV "sê") ; + see_V2 = mkV2 (mkV "sien") ; + sell_V3 = mkV3 (mkV "verkop" "verkocht" "verkocht") ; + send_V3 = mkV3 (mkV "stur") (mkPrep "naar") ; + sleep_V = mkV "slaap" ; + small_A = mkA "klein" ; + talk_V3 = mkV3 (mkV "prat") (mkPrep "met") (mkPrep "over") ; + warm_A = mkA "warm" ; + wine_N = mkN "wyn" ; + john_PN = mkPN "Jan" ; + left_Ord = mkOrd (invarA "linker") ; ---- + right_Ord = mkOrd (invarA "rechter") ; ---- + today_Adv = mkAdv "vandaag" ; + far_Adv = mkAdv "ver" ; + give_V3 = mkV3 (mkV "gee") ; + wonder_VQ = mkVQ (reflV (mkV "af" (mkV "vra"))) ; +airplane_N = mkN "vliegtuig" neuter ; +animal_N = mkN "dier" neuter ; +apartment_N = mkN "appartement" neuter ; +apple_N = mkN "appel" utrum ; +art_N = mkN "kunst" utrum ; +ashes_N = mkN "as" utrum ; +baby_N = mkN "baby" utrum ; +back_N = mkN "achterkant" utrum ; +bank_N = mkN "bank" utrum ; +bark_N = mkN "schors" utrum ; +belly_N = mkN "buik" utrum ; +bird_N = mkN "vogel" utrum ; +bite_V2 = mkV2 (mkV "byt") ; +black_A = mkA "swart" ; +blood_N = mkN "bloed" neuter ; +blow_V = mkV "blaas" ; +boat_N = mkN "boot" utrum ; +bone_N = mkN "bot" neuter ; +boot_N = mkN "boot" utrum ; +boss_N = mkN "baas" utrum ; +boy_N = mkN "jongen" utrum ; +bread_N = mkN "brood" neuter ; +break_V2 = mkV2 (mkV "breek") ; +breast_N = mkN "borst" utrum ; +breathe_V = mkV "adem" ; +broad_A = mkA "breed" ; +burn_V = mkV "brand" ; +butter_N = mkN "boter" utrum ; +camera_N = mkN "camera" utrum ; +cap_N = mkN "kap" utrum ; +car_N = mkN "auto" utrum ; +carpet_N = mkN "tapyt" neuter ; +cat_N = mkN "kat" utrum ; +ceiling_N = mkN "plafond" neuter ; +chair_N = mkN "stoel" utrum ; +cheese_N = mkN "kaas" utrum ; +church_N = mkN "kerk" utrum ; +city_N = mkN "stad" utrum ; +clean_A = mkA "schoon" ; +clever_A = mkA "slim" ; +close_V2 = mkV2 (mkV "sluit") ; +cloud_N = mkN "wolk" utrum ; +coat_N = mkN "vacht" utrum ; +cold_A = mkA "koud" ; +computer_N = mkN "computer" utrum ; +correct_A = mkA "correct" ; +count_V2 = mkV2 "reken" ; +country_N = mkN "land" neuter ; +cousin_N = mkN "neef" utrum ; +cow_N = mkN "koe" utrum ; +cut_V2 = mkV2 (mkV "sny") ; +day_N = mkN "dag" utrum ; +dig_V = mkV "grawe" ; +dirty_A = mkA "vuil" ; +do_V2 = mkV2 (mkV "doen") ; +doctor_N = mkN "arts" utrum ; +dog_N = mkN "hond" utrum ; +door_N = mkN "deur" utrum ; +dry_A = mkA "droog" ; +dull_A = mkA "saai" ; +dust_N = mkN "stof" neuter ; +ear_N = mkN "oor" neuter ; +earth_N = mkN "aarde" utrum ; +egg_N = mkN "ei" neuter ; +empty_A = mkA "leeg" ; +enemy_N = mkN "vyand" utrum ; +eye_N = mkN "oog" neuter ; +factory_N = mkN "fabriek" utrum ; +fall_V = mkV "val" ; +fat_N = mkN "vet" neuter ; +fear_V2 = mkV2 "vrez" ; +feather_N = mkN "veer" utrum ; +fight_V2 = mkV2 (mkV "veg") ; +find_V2 = mkV2 (mkV "vind") ; +fingernail_N = mkN "vingernagel" utrum ; +fire_N = mkN "brand" utrum ; +float_V = mkV "dryf" ; +floor_N = mkN "vloer" utrum ; +flow_V = mkV "strom" ; +flower_N = mkN "bloem" utrum ; +fly_V = mkV "vlieg" ; +fog_N = mkN "mist" utrum ; +foot_N = mkN "voet" utrum ; +forest_N = mkN "bos" neuter ; +forget_V2 = mkV2 (mkV "vergeet") ; +freeze_V = mkV "vries" ; +fridge_N = mkN "koelkast" utrum ; +friend_N = mkN "vriend" utrum ; +fruit_N = mkN "vrucht" utrum ; +full_A = mkA "vol" ; +fun_AV = mkA "leuk" ; +garden_N = mkN "tuin" utrum ; +girl_N = mkN "meisje" neuter ; +glove_N = mkN "handschoen" utrum ; +gold_N = mkN "goud" neuter ; +good_A = mkA "goed" "goede" "goeds" "beter" "best" ; +grammar_N = mkN "grammatica" utrum ; +grass_N = mkN "gras" neuter ; +green_A = mkA "groen" ; +guts_N = mkN "darm" utrum ; +hair_N = mkN "haar" neuter ; +hand_N = mkN "hand" utrum ; +harbour_N = mkN "haven" utrum ; +hat_N = mkN "hoed" utrum ; +hate_V2 = mkV2 "hat" ; +head_N = mkN "hoofd" neuter ; +hear_V2 = mkV2 "hor" ; +heart_N = mkN "hart" neuter ; +heavy_A = mkA "swaar" ; +hill_N = mkN "heuvel" utrum ; +hit_V2 = mkV2 "rak" ; +hold_V2 = mkV2 (mkV "hou") ; +horn_N = mkN "hoorn" utrum ; +horse_N = mkN "paard" neuter ; +hot_A = mkA "heet" ; +hunt_V2 = mkV2 "jag" ; +husband_N = mkN "man" utrum ; +ice_N = mkN "ys" neuter ; +important_A = mkA "belangryk" ; +industry_N = mkN "industrie" "industrieën" utrum ; +iron_N = mkN "yser" neuter ; +jump_V = mkV "spring" ; +kill_V2 = mkV2 "dood" ; +king_N = mkN "koning" utrum ; +knee_N = mkN "knie" utrum ; +know_V2 = mkV2 "kenn" ; +lake_N = mkN "meer" neuter ; +lamp_N = mkN "lamp" utrum ; +language_N = mkN "taal" utrum ; +laugh_V = mkV "lag" ; +leaf_N = mkN "blad" neuter ; +learn_V2 = mkV2 "ler" ; +leather_N = mkN "leer" neuter ; +leave_V2 = mkV2 (mkV "laat") ; +leg_N = mkN "been" neuter ; +lie_V = mkV "lê" ; +like_V2 = mkV2 (mkV "hou") van_Prep ; +listen_V2 = mkV2 "luister" ; +live_V = mkV "leef" ; +liver_N = mkN "lewer" utrum ; +long_A = mkA "lang" ; +lose_V2 = mkV2 (mkV "verloor") ; +louse_N = mkN "luis" utrum ; +love_N = mkN "liefde" utrum ; +love_V2 = mkV2 (mkV "lief" hebben_V) ; +man_N = mkN "man" utrum ; +meat_N = mkN "vlees" neuter ; +milk_N = mkN "melk" utrum ; +moon_N = mkN "maan" utrum ; +mountain_N = mkN "berg" utrum ; +mouth_N = mkN "mond" utrum ; +music_N = mkN "musiek" utrum ; +name_N = mkN "naam" utrum ; +narrow_A = mkA "smal" ; +near_A = mkA "naby" ; +neck_N = mkN "nek" utrum ; +new_A = mkA "nieuw" ; +newspaper_N = mkN "krant" utrum ; +night_N = mkN "nacht" utrum ; +nose_N = mkN "neus" utrum ; +number_N = mkN "nummer" neuter ; +oil_N = mkN "olie-schakelaars" utrum ; +old_A = mkA "oud" ; +open_V2 = mkV2 "open" ; +paper_N = mkN "papier" neuter ; +peace_N = mkN "vrede" utrum ; +pen_N = mkN "pen" utrum ; +person_N = mkN "persoon" utrum ; +planet_N = mkN "planeet" utrum ; +plastic_N = mkN "plastic" utrum ; +play_V = mkV "spel" ; +play_V2 = mkV2 "spel" ; +policeman_N = mkN "politieagent" utrum ; +priest_N = mkN "priester" utrum ; +probable_AS = mkA "waarschynlik" ; +pull_V2 = mkV2 "trekk" ; +push_V2 = mkV2 "duw" ; +put_V2 = mkV2 "sett" ; +queen_N = mkN "koningin" utrum ; +question_N = mkN "vraag" utrum ; +radio_N = mkN "radio" utrum ; +rain_N = mkN "regen" utrum ; +rain_V0 = mkV "regen" ; +read_V2 = mkV2 (mkV "lees") ; +ready_A = mkA "klaar" ; +reason_N = mkN "reden" utrum ; +-- red_A = mkA "rood" ; +religion_N = mkN "religie" utrum ; +restaurant_N = mkN "restaurant" neuter ; +river_N = mkN "rivier" utrum ; +road_N = mkN "weg" utrum ; +rock_N = mkN "rots" utrum ; +roof_N = mkN "dak" neuter ; +root_N = mkN "wortel" utrum ; +rope_N = mkN "touw" neuter ; +rotten_A = mkA "verrot" ; +round_A = mkA "rond" ; +rub_V2 = mkV2 (mkV "vryf") ; +rubber_N = mkN "rubberen" utrum ; +rule_N = mkN "regel" utrum ; +run_V = zijnV (mkV "renn") ; +salt_N = mkN "sout" neuter ; +sand_N = mkN "sand" neuter ; +school_N = mkN "school" utrum ; +science_N = mkN "wetenschap" utrum ; +scratch_V2 = mkV2 "krass" ; +sea_N = mkN "see" utrum ; +seed_N = mkN "saad" neuter ; +seek_V2 = mkV2 (mkV "soek") ; +sew_V = mkV "naai" ; +sharp_A = mkA "scherp" ; +sheep_N = mkN "schaap" neuter ; +ship_N = mkN "schip" neuter ; +shirt_N = mkN "shirt" neuter ; +shoe_N = mkN "schoen" utrum ; +shop_N = mkN "winkel" utrum ; +short_A = mkA "kort" ; +silver_N = mkN "silver" neuter ; +sing_V = mkV "sing" ; +sister_N = mkN "suster" utrum ; +sit_V = mkV "sit" ; +skin_N = mkN "huid" utrum ; +sky_N = mkN "lucht" utrum ; +smell_V = mkV "ruik" ; +smoke_N = mkN "rook" utrum ; +smooth_A = mkA "glad" ; +snake_N = mkN "slang" utrum ; +snow_N = mkN "sneeuw" utrum ; +sock_N = mkN "sok" utrum ; +song_N = mkN "liedje" neuter ; +speak_V2 = mkV2 (mkV "spreek") ; +spit_V = mkV "spug" ; +split_V2 = mkV2 (mkV "splyt") ; +squeeze_V2 = mkV2 (mkV "knyp") ; +stab_V2 = mkV2 (mkV "steek") ; +stand_V = mkV "staan" ; +star_N = mkN "ster" utrum ; +steel_N = mkN "staal" neuter ; +stick_N = mkN "stok" utrum ; +stone_N = mkN "steen" utrum ; +stop_V = mkV "stoppen" ; +stove_N = mkN "kachel" utrum ; +straight_A = mkA "recht" ; +student_N = mkN "student" utrum ; +stupid_A = mkA "dom" ; +suck_V2 = mkV2 (mkV "suig") ; +sun_N = mkN "son" utrum ; +swell_V = mkV "swel" ; +swim_V = mkV "swem" ; +switch8off_V2 = mkV2 "schakel" ; +switch8on_V2 = mkV2 (mkV "op" (mkV "schakel")) ; +table_N = mkN "tabel" utrum ; +tail_N = mkN "staart" utrum ; +teach_V2 = mkV2 "ler" ; +teacher_N = mkN "leraar" utrum ; +television_N = mkN "televisie" utrum ; +thick_A = mkA "dik" ; +thin_A = mkA "dun" ; +think_V = mkV "dink" ; +throw_V2 = mkV2 "gooi" ; +tie_V2 = mkV2 "band" ; +tongue_N = mkN "tong" utrum ; +tooth_N = mkN "tand" utrum ; +train_N = mkN "trein" utrum ; +travel_V = mkV "reis" ; +tree_N = mkN "boom" utrum ; +turn_V = mkV "draai" ; +ugly_A = mkA "lelik" ; +uncertain_A = mkA "onseker" ; +understand_V2 = mkV2 (mkV "begryp") ; +university_N = mkN "universiteit" utrum ; +village_N = mkN "dorp" neuter ; +vomit_V = mkV "brak" ; +wait_V2 = mkV2 "wach" ; +walk_V = mkV "lop" ; +war_N = mkN "oorlog" utrum ; +wash_V2 = mkV2 (mkV "was") ; +watch_V2 = mkV2 (mkV "kyk") (mkPrep "naar") ; +water_N = mkN "water" neuter ; +wet_A = mkA "nat" ; +white_A = mkA "wit" ; +wide_A = mkA "breed" ; +wife_N = mkN "vrouw" utrum ; +win_V2 = mkV2 (mkV "wen") ; +wind_N = mkN "wind" utrum ; +window_N = mkN "raam" neuter ; +wing_N = mkN "vleugel" utrum ; +wipe_V2 = mkV2 "veg" ; +woman_N = mkN "vrouw" utrum ; +wood_N = mkN "hout" neuter ; +worm_N = mkN "worm" utrum ; +write_V2 = mkV2 (mkV "skryf") ; +year_N = mkN "jaar" neuter ; +yellow_A = mkA "geel" ; +young_A = mkA "jong" ; + +} diff --git a/lib/src/afrikaans/MorphoAfr.gf b/lib/src/afrikaans/MorphoAfr.gf new file mode 100644 index 000000000..2d4825c3d --- /dev/null +++ b/lib/src/afrikaans/MorphoAfr.gf @@ -0,0 +1,100 @@ +--# -path=.:../common:../../prelude +-- +----1 A Simple Afrman Resource Morphology +---- +---- Aarne Ranta & Harald Hammarström 2002 -- 2006 +---- +---- This resource morphology contains definitions needed in the resource +---- syntax. To build a lexicon, it is better to use $ParadigmsAfr$, which +---- gives a higher-level access to this module. +-- +resource MorphoAfr = ResAfr ** open Prelude, (Predef=Predef) in +{ +--{ +-- +-- flags optimize=all ; +-- +--oper +-- +---- For $StructuralAfr$. +-- +-- mkPrep : Str -> Case -> Preposition = \s,c -> +-- {s = s ; c = c} ; +-- +-- nameNounPhrase : {s : Case => Str} -> {s : Case => Str ; a : Agr} = \name -> +-- name ** {a = agrP3 Sg} ; +-- +-- detLikeAdj : Number -> Str -> +-- {s,sp : Gender => Case => Str ; n : Number ; a : Adjf} = \n,dies -> +-- {s,sp = appAdj (regA dies) ! n ; n = n ; a = Weak} ; +-- +-- mkOrd : {s : Degree => AForm => Str} -> {s : AForm => Str} = \a -> +-- {s = a.s ! Posit} ; +-- +---- For $ParadigmsAfr$. +-- +-- genitS : Str -> Str = \hund -> case hund of { +-- _ + ("el" | "en" | "er") => hund + "s" ; +-- _ + ("s" | "ß" | "sch" | "st" | "x" | "z") => hund + "es" ; +-- _ => hund + variants {"s" ; "es"} +-- } ; +-- pluralN : Str -> Str = \hund -> case hund of { +-- _ + ("el" | "er" | "e") => hund + "n" ; +-- _ + "en" => hund ; +-- _ => hund + "en" +-- } ; +-- dativE : Str -> Str = \hund -> case hund of { +-- _ + ("el" | "en" | "er" | "e") => hund ; +-- _ => variants {hund ; hund + "e"} +-- } ; +-- +---- Duden, p. 119 +-- +-- verbT : Str -> Str = \v -> case v of { +-- _ + ("t" | "d") => v + "et" ; -- gründen, reden, betten +-- _ + ("ch" | "k" | "p" | "t" | "g" | "b" | "d" | "f" | "s") + +-- ("m" | "n") => v + "et" ; -- atmen, widmen, öffnen, rechnen +-- _ => v + "t" -- lernen, lärmen, qualmen etc +-- } ; +-- +-- verbST : Str -> Str = \v -> case v of { +-- _ + ("s" | "ss" | "ß" | "sch" | "x" | "z") => v + "t" ; +-- _ => v + "st" +-- } ; +-- +-- stemVerb : Str -> Str = \v -> case v of { +-- _ + ("rn" | "ln") => init v ; +-- _ => Predef.tk 2 v +-- } ; +-- +---- For $Numeral$. +-- +-- LinDigit = {s : DForm => CardOrd => Str} ; +-- +-- cardOrd : Str -> Str -> CardOrd => Str = \drei,dritte -> +-- table { +-- NCard _ _ => drei ; +-- NOrd a => (regA (init dritte)).s ! Posit ! a +-- } ; +-- +-- cardReg : Str -> CardOrd => Str = \zehn -> +-- cardOrd zehn (zehn + "te") ; +-- +-- mkDigit : (x1,_,_,x4 : Str) -> LinDigit = +-- \drei,dreizehn,dreissig,dritte -> +-- {s = table { +-- DUnit => cardOrd drei dritte ; +-- DTeen => cardReg dreizehn ; +-- DTen => cardOrd dreissig (dreissig + "ste") +-- } +-- } ; +-- +-- regDigit : Str -> LinDigit = \vier -> +-- mkDigit vier (vier + "zehn") (vier + "zig") (vier + "te") ; +-- +-- invNum : CardOrd = NCard Masc Nom ; +-- +--} ; +-- + +} diff --git a/lib/src/afrikaans/NounAfr.gf b/lib/src/afrikaans/NounAfr.gf new file mode 100644 index 000000000..738612cd5 --- /dev/null +++ b/lib/src/afrikaans/NounAfr.gf @@ -0,0 +1,180 @@ +concrete NounAfr of Noun = CatAfr ** open ResAfr, Prelude in { + + flags optimize=all_subs ; + + lin + DetCN det cn = { + s = \\c => det.s ! cn.g ++ cn.s ! det.a ! NF det.n Nom ; + a = agrP3 det.n ; + isPron = False + } ; + + DetNP det = { + s = \\_ => det.sp ! Neutr ; + a = agrP3 det.n ; + isPron = False + } ; + + UsePN pn = {s = pn.s ; a = agrP3 Sg ; isPron = False} ; + + UsePron pron = { + s = table {NPNom => pron.unstressed.nom ; NPAcc => pron.unstressed.acc} ; + a = pron.a ; + isPron = True + } ; + + PredetNP pred np = heavyNP { + s = \\c => + pred.s ! np.a.n ! np.a.g ++ np.s ! c ; ---- g + a = np.a + } ; + + PPartNP np v2 = heavyNP { + s = \\c => np.s ! c ++ v2.s ! VPerf ; -- invar part + a = np.a + } ; + + AdvNP np adv = heavyNP { + s = \\c => np.s ! c ++ adv.s ; + a = np.a + } ; + + DetQuantOrd quant num ord = + let + n = num.n ; + a = quant.a + in { + s = \\g => quant.s ! num.isNum ! n ! g ++ + num.s ++ ord.s ! agrAdj g quant.a (NF n Nom) ; + sp = \\g => quant.sp ! n ! g ++ + num.s ++ ord.s ! agrAdj g quant.a (NF n Nom) ; + n = n ; + a = a + } ; + + DetQuant quant num = + let + n = num.n ; + a = quant.a + in { + s = \\g => quant.s ! num.isNum ! n ! g ++ num.s ; + sp = \\g => quant.sp ! n ! g ++ num.s ; + n = n ; + a = a + } ; + + PossPron p = { + s = \\_,n,g => p.unstressed.poss ; + sp = \\n,g => p.substposs ; + a = Strong + } ; + + NumCard n = {s = n.s ! Utr ! Nom ; n = n.n ; isNum = True} ; + + NumPl = {s = []; n = Pl ; isNum = False} ; + NumSg = {s = []; n = Sg ; isNum = False} ; + + NumDigits numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ; + OrdDigits numeral = {s = \\af => numeral.s ! NOrd af} ; + + NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ; + OrdNumeral numeral = {s = \\af => numeral.s ! NOrd af} ; + + AdNum adn num = {s = \\g,c => adn.s ++ num.s!g!c; n = num.n } ; + + OrdSuperl a = {s = a.s ! Superl} ; + + DefArt = { + s = \\_,n,g => case of { => "het" ; _ => "de"} ; + sp = \\n,g => "die" ; + a = Weak + } ; + + IndefArt = { + s = table { + True => \\_,_ => [] ; + False => table { + Sg => \\g => "een" ; + Pl => \\_ => [] + } + } ; + sp = table { + Sg => \\g => "een" ; + Pl => \\_ => "een" ---- + } ; + a = Strong + } ; + + MassNP cn = { + s = \\c => cn.s ! Strong ! NF Sg Nom ; + a = agrP3 Sg ; + isPron = False + } ; + + UseN, UseN2 = \n -> { + s = \\_ => n.s ; + g = n.g + } ; + + ComplN2 f x = { + s = \\_,nc => f.s ! nc ++ appPrep f.c2 x.s ; + g = f.g + } ; + + ComplN3 f x = { + s = \\nc => f.s ! nc ++ appPrep f.c2 x.s ; + g = f.g ; + c2 = f.c3 + } ; + + Use2N3 f = { + s = f.s ; + g = f.g ; + c2 = f.c2 + } ; + + Use3N3 f = { + s = f.s ; + g = f.g ; + c2 = f.c3 + } ; + + AdjCN ap cn = + let + g = cn.g + in { + s = \\a,n => + preOrPost ap.isPre + (ap.s ! agrAdj g a n) + (cn.s ! a ! n) ; + g = g + } ; + + RelCN cn rs = { + s = \\a,nc => cn.s ! a ! nc ++ rs.s ! cn.g ! (case nc of {NF n c => n}) ; + g = cn.g + } ; + + RelNP np rs = { + s = \\c => np.s ! c ++ "," ++ rs.s ! np.a.g ! np.a.n ; + a = np.a ; + isPron = False + } ; + + SentCN cn s = { + s = \\a,nc => cn.s ! a ! nc ++ s.s ; + g = cn.g + } ; + + AdvCN cn s = { + s = \\a,nc => cn.s ! a ! nc ++ s.s ; + g = cn.g + } ; + + ApposCN cn np = let g = cn.g in { + s = \\a,nc => cn.s ! a ! nc ++ np.s ! NPNom ; + g = g ; + isMod = cn.isMod + } ; + +} diff --git a/lib/src/afrikaans/NumeralAfr.gf b/lib/src/afrikaans/NumeralAfr.gf new file mode 100644 index 000000000..05b932cf6 --- /dev/null +++ b/lib/src/afrikaans/NumeralAfr.gf @@ -0,0 +1,111 @@ +concrete NumeralAfr of Numeral = CatAfr ** open ResAfr, Prelude in { + +flags optimize = all_subs ; + +lincat + Digit = {s : DForm => CardOrd => Str ; en : Str} ; + Sub10 = {s : DForm => CardOrd => Str ; n : Number ; en : Str ; attr : Str} ; + Sub100, Sub1000, Sub1000000 = + {s : CardOrd => Str ; n : Number ; attr : Str} ; + +lin + num x = x ; + + n2 = mkDigit "twee" "twaalf" "twintig" "tweede" ; + n3 = mkDigit "drie" "dertien" "dertig" "derde" ; + n4 = mkDigit "vier" "veertien" "veertig" "vierde" ; + n5 = mkDigit "vijf" "vijftien" "vijftig" "vijfde" ; + n6 = mkDigit "zes" "zestien" "zestig" "zesde" ; + n7 = mkDigit "zeven" "zeventien" "zeventig" "zevende" ; + n8 = mkDigit "acht" "achttien" "tachtig" "achtste" ; + n9 = mkDigit "negen" "negentien" "negentig" "negende" ; + + pot01 = { + s = \\f => table { + NCard g _ => "een" ; ---- "één" ; + NOrd af => (regAdjective "eerst").s ! Posit ! af + } ; + n = Sg ; + attr = [] ; + en = "en" + } ; + pot0 d = {s = \\f,g => d.s ! f ! g ; n = Pl ; en = d.en ; attr = d.s ! DUnit ! invNum ++ BIND} ; + pot110 = {s = cardOrd "tien" "tiende" ; n = Pl ; attr = "tien" ++ BIND} ; + pot111 = {s = cardOrd "elf" "elfde" ; n = Pl ; attr = "elf" ++ BIND} ; + pot1to19 d = addAttr {s = d.s ! DTeen ; n = Pl} ; + pot0as1 n = {s = n.s ! DUnit; n = n.n ; attr = n.attr} ; + pot1 d = addAttr {s = d.s ! DTen ; n = Pl} ; + pot1plus d e = addAttr {s = \\g => + e.s ! DUnit ! invNum ++ BIND ++ e.en ++ BIND ++ d.s ! DTen ! g ; n = Pl} ; + pot1as2 n = n ; + pot2 d = + addAttr {s = \\g => d.attr ++ cardOrd "honderd" "honderdste" ! g ; n = Pl} ; + pot2plus d e = + addAttr {s = \\g => d.attr ++ "honderd" ++ BIND ++ e.s ! g ; n = Pl} ; + pot2as3 n = n ; + pot3 n = + addAttr {s = \\g => n.attr ++ cardOrd "duizend" "duizendste" ! g ; n = Pl} ; + pot3plus n m = + addAttr {s = \\g => n.attr ++ "duizend" ++ m.s ! g ; n = Pl} ; + + + lincat + Dig = TDigit ; + + lin + IDig d = d ; + + IIDig d i = { + s = \\o => d.s ! invNum ++ i.s ! o ; + n = Pl + } ; + + D_0 = mkDig "0" ; + D_1 = mk3Dig "1" "1e" Sg ; + D_2 = mk2Dig "2" "2e" ; + D_3 = mkDig "3" ; + D_4 = mkDig "4" ; + D_5 = mkDig "5" ; + D_6 = mkDig "6" ; + D_7 = mkDig "7" ; + D_8 = mkDig "8" ; + D_9 = mkDig "9" ; + + oper + mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; + mkDig : Str -> TDigit = \c -> mk2Dig c (c + "e") ; + + mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { + s = table {NCard _ _ => c ; NOrd _ => o} ; + n = n + } ; + + TDigit = { + n : Number ; + s : CardOrd => Str + } ; + + LinDigit = {s : DForm => CardOrd => Str ; en : Str} ; + + cardOrd : Str -> Str -> CardOrd => Str = \drei,dritte -> + let dritt = init dritte in + table { + NCard _ _ => drei ; + NOrd a => (regAdjective dritt).s ! Posit ! a + } ; + + mkDigit : (x1,_,_,x4 : Str) -> LinDigit = + \drei,dreizehn,dreissig,dritte -> + {s = table { + DUnit => cardOrd drei dritte ; + DTeen => cardOrd dreizehn (dreizehn + "de") ; + DTen => cardOrd dreissig (dreissig + "ste") + } ; + en = case drei of {_ + "e" => "ën" ; _ => "en"} + } ; + invNum : CardOrd = NCard Utr Nom ; + + addAttr : {s : CardOrd => Str ; n : Number} -> + {s : CardOrd => Str ; n : Number ; attr : Str} = \n -> n ** {attr = n.s ! invNum ++ BIND} ; + +} diff --git a/lib/src/afrikaans/ParadigmsAfr.gf b/lib/src/afrikaans/ParadigmsAfr.gf new file mode 100644 index 000000000..c6f891931 --- /dev/null +++ b/lib/src/afrikaans/ParadigmsAfr.gf @@ -0,0 +1,494 @@ +--# -path=.:../common:../abstract:../../prelude + +--1 Afrch Lexical Paradigms +-- +-- Aarne Ranta 2009 +-- +-- This is an API for the user of the resource grammar +-- for adding lexical items. It gives functions for forming +-- expressions of open categories: nouns, adjectives, verbs. +-- +-- Closed categories (determiners, pronouns, conjunctions) are +-- accessed through the resource syntax API, $Structural.gf$. +-- +-- The structure of functions for each word class $C$ is the following: +-- first we give a handful of patterns that aim to cover all +-- cases, from the most regular (with just one argument) to the worst. +-- The name of this function is $mkC$. +-- +-- There is also a module [``IrregAfr`` IrregAfr.gf] +-- which covers irregular verbs. + + +resource ParadigmsAfr = open + (Predef=Predef), + Prelude, + ResAfr, + CatAfr + in +{ +--2 Parameters + +-- To abstract over gender names, we define the following identifiers. + +oper + masculine : Gender ; --% + feminine : Gender ; --% + neuter : Gender ; --% + utrum : Gender ; --% + + de : Gender ; -- non-neutrum + het : Gender ; -- neutrum + + + +--2 Nouns + + mkN : overload { + mkN : (muis : Str) -> N ; -- de muis-muisen, with some predictable exceptions + mkN : (bit : Str) -> Gender -> N ; -- if gender is not predictable + mkN : (gat,gaten : Str) -> Gender -> N ; -- worst-case for nouns + } ; + +-- Relational nouns need a preposition. The most common is "van". + + mkN2 : overload { + mkN2 : N -> N2 ; -- relational noun with preposition van + mkN2 : N -> Prep -> N2 -- other preposition than van + } ; + + +---- Use the function $mkPrep$ or see the section on prepositions below to +---- form other prepositions. +---- Some prepositions are moreover constructed in [StructuralAfr StructuralAfr.html]. +---- +---- Three-place relational nouns ("die Verbindung von x nach y") need two prepositions. +-- + mkN3 : N -> Prep -> Prep -> N3 ; -- e.g. afstand + van + naar + +--3 Proper names and noun phrases + + mkPN : overload { + mkPN : Str -> PN ; -- proper name + } ; + + +--2 Adjectives + + mkA : overload { + mkA : (vers : Str) -> A ; -- regular adjective + mkA : (goed,goede,goeds,beter,best : Str) -> A ; -- irregular adjective + } ; + + +-- Invariable adjective are a special case. + + invarA : Str -> A ; -- adjective with just one form + + +---- Two-place adjectives are formed by adding a preposition to an adjective. + + mkA2 : A -> Prep -> A2 ; -- e.g. getrouwd + met + +--2 Adverbs + +-- Adverbs are formed from strings. + + mkAdv : Str -> Adv ; + + + +--2 Prepositions + +-- A preposition is formed from a string. + + mkPrep : Str -> Prep ; + + +---- A couple of common prepositions (always with the dative). +-- + van_Prep : Prep ; + te_Prep : Prep ; + + +-- +--2 Verbs + + mkV : overload { + mkV : (aaien : Str) -> V ; -- regular verb + mkV : (breken,brak,gebroken : Str) -> V ; -- theme of irregular verb + mkV : (breken,brak,braken,gebroken : Str) -> V ; -- also past plural irregular + mkV : (aai,aait,aaien,aaide,aaide,aaiden,geaaid : Str) -> V ; -- worst-case verb + +-- To add a movable suffix e.g. "auf(fassen)". + + mkV : Str -> V -> V -- add movable suffix, e.g. af + stappen + } ; + + zijnV : V -> V ; -- force zijn as auxiliary (default hebben) + + reflV : V -> V ; -- reflexive verb e.g. zich afvragen + + +-- +-- +--3 Three-place verbs + +-- Three-place (ditransitive) verbs need two prepositions, of which +-- the first one or both can be absent. + + mkV3 : overload { + mkV3 : V -> V3 ; -- geven,(accusative),(dative) + mkV3 : V -> Prep -> V3 ; -- sturen,(accusative),naar + mkV3 : V -> Prep -> Prep -> V3 ; -- praten, met, over + } ; + + +----3 Other complement patterns +---- +---- Verbs and adjectives can take complements such as sentences, +---- questions, verb phrases, and adjectives. + + mkV0 : V -> V0 ; --% + mkVS : V -> VS ; + mkV2S : V -> Prep -> V2S ; + mkVV : V -> VV ; + mkV2V : V -> Prep -> V2V ; + mkVA : V -> VA ; + mkV2A : V -> Prep -> V2A ; + mkVQ : V -> VQ ; + mkV2Q : V -> Prep -> V2Q ; +-- +-- mkAS : A -> AS ; +-- mkA2S : A -> Prep -> A2S ; +-- mkAV : A -> AV ; +-- mkA2V : A -> Prep -> A2V ; +-- +---- Notice: categories $AS, A2S, AV, A2V$ are just $A$, +---- and the second argument is given as an adverb. Likewise +---- $V0$ is just $V$. +-- +-- V0 : Type ; +-- AS, A2S, AV, A2V : Type ; +-- +-- + + +--. + + mkOrd : A -> Ord = \a -> lin Ord {s = a.s ! Posit} ; + + mkN = overload { + mkN : (muis : Str) -> N + = \a -> lin N (regNoun a) ; + mkN : (bit : Str) -> Gender -> N + = \a,b -> lin N (regNounG a b) ; + mkN : (gat,gaten : Str) -> Gender -> N + = \a,b,c -> lin N (mkNoun a b c) ; + } ; + + mkN2 = overload { + mkN2 : N -> N2 + = \n -> lin N2 (n ** {c2 = "van"}) ; + mkN2 : N -> Prep -> N2 + = \n,p -> lin N2 (n ** {c2 = p.s}) ; + } ; + mkN3 n p q = lin N3 (n ** {c2 = p.s ; c3 = q.s}) ; + + mkPN = overload { + mkPN : Str -> PN = \s -> lin PN {s = \\_ => s} ; + } ; + + masculine = Utr ; + feminine = Utr ; + het,neuter = Neutr ; + de,utrum = Utr ; + + mkA = overload { + mkA : (vers : Str) -> A = \a -> lin A (regAdjective a) ; + mkA : (goed,goede,goeds,beter,best : Str) -> A = \a,b,c,d,e -> lin A (mkAdjective a b c d e) ; + } ; + + mkPrep s = lin Prep (ss s) ; + van_Prep = mkPrep "van" ; + te_Prep = mkPrep "te" ; + + mkV = overload { + mkV : (aaien : Str) -> V = + \s -> lin V (v2vv (regVerb s)) ; + mkV : (breek,gebreek : Str) -> V = + \a,b -> lin V (v2vv (irregVerb a b)) ; + mkV : (wil,wou,gewil : Str) -> V = + \a,b,c -> lin V (v2vv (mkVerb a a b c)) ; + mkV : Str -> V -> V = \v,s ->lin V (prefixV v s) ; + } ; + zijnV v = v ; -- lin V (v2vvAux v VZijn) ; + reflV v = lin V {s = v.s ; aux = v.aux ; prefix = v.prefix ; vtype = VRefl} ; + + zijn_V : V = lin V ResAfr.zijn_V ; + hebben_V : V = lin V ResAfr.hebben_V ; + + mkV2 = overload { + 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}) ; + } ; + + +--3 Two-place verbs + + mkV2 : overload { + mkV2 : Str -> V2 ; + mkV2 : V -> V2 ; + mkV2 : V -> Prep -> V2 ; + } ; + mkV3 = overload { + mkV3 : V -> Prep -> Prep -> V3 = mkmaxV3 ; + mkV3 : V -> Prep -> V3 = \v,p -> mkmaxV3 v (mkPrep []) p ; + mkV3 : V -> V3 = \v -> mkmaxV3 v (mkPrep []) (mkPrep []) ; + } ; + mkmaxV3 : V -> Prep -> Prep -> V3 = \v,c,d -> lin V3 (v ** {c2 = c.s ; c3 = d.s}) ; + + + + + +----2 Definitions of paradigms +---- +---- The definitions should not bother the user of the API. So they are +---- hidden from the document. +-- +-- +-- +-- Gender = MorphoAfr.Gender ; +-- Case = MorphoAfr.Case ; +-- Number = MorphoAfr.Number ; +-- masculine = Masc ; +-- feminine = Fem ; +-- neuter = Neutr ; +-- nominative = Nom ; +-- accusative = Acc ; +-- dative = Dat ; +-- genitive = Gen ; +-- singular = Sg ; +-- plural = Pl ; +-- +-- mk6N a b c d e f g = MorphoAfr.mkN a b c d e f g ** {lock_N = <>} ; +-- +-- regN : Str -> N = \hund -> case hund of { +-- _ + "e" => mk6N hund hund hund hund (hund + "n") (hund + "n") Fem ; +-- _ + ("ion" | "ung") => mk6N hund hund hund hund (hund + "en") (hund + "en") Fem ; +-- _ + ("er" | "en" | "el") => mk6N hund hund hund (genitS hund) hund (pluralN hund) Masc ; +-- _ => mk6N hund hund hund (genitS hund) (hund + "e") (pluralN hund) Masc +-- } ; +-- +-- reg2N : (x1,x2 : Str) -> Gender -> N = \hund,hunde,g -> +-- let +-- hunds = genitS hund ; +-- hundE = dativE hund ; +-- hunden = pluralN hunde +-- in +-- case of { -- Duden p. 223 +-- <_,_ + ("e" | "er"), Masc | Neutr> => -- I,IV +-- mk6N hund hund hundE hunds hunde hunden g ; +-- <_ + ("el"|"er"|"en"),_ + ("el"|"er"|"en"), Masc | Neutr> => -- II +-- mk6N hund hund hund hunds hunde hunden g ; +-- <_,_ + "s", Masc | Neutr> => -- V +-- mk6N hund hund hund (hund + "s") hunde hunde g ; +-- <_,_ + "en", Masc> => -- VI +-- mk6N hund hunde hunde hunde hunde hunde g ; +-- <_,_ + ("e" | "er"), Fem> => -- VII,VIII +-- mk6N hund hund hund hund hunde hunden g ; +-- <_,_ + ("n" | "s"), Fem> => -- IX,X +-- mk6N hund hund hund hund hunde hunde g ; +-- _ => {s = (regN hund).s ; g = g ; lock_N = <>} +-- } ; +-- +-- mkN2 = overload { +-- mkN2 : Str -> N2 = \s -> vonN2 (regN s) ; +-- mkN2 : N -> N2 = vonN2 ; +-- mkN2 : N -> Prep -> N2 = mmkN2 +-- } ; +-- +-- +-- mmkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p ; lock_N2 = <>} ; +-- vonN2 : N -> N2 = \n -> n ** {c2 = {s = "von" ; c = dative} ; lock_N2 = <>} ; +-- +-- mkN3 = \n,p,q -> n ** {c2 = p ; c3 = q ; lock_N3 = <>} ; +-- +-- mk2PN = \karolus, karoli -> +-- {s = table {Gen => karoli ; _ => karolus} ; lock_PN = <>} ; +-- regPN = \horst -> +-- mk2PN horst (ifTok Tok (Predef.dp 1 horst) "s" horst (horst + "s")) ; +-- +-- mkPN = overload { +-- mkPN : Str -> PN = regPN ; +-- mkPN : (nom,gen : Str) -> PN = mk2PN ; +-- mkPN : (nom,acc,dat,gen : Str) -> PN = \nom,acc,dat,gen -> +-- {s = table {Nom => nom ; Acc => acc ; Dat => dat ; Gen => gen} ; lock_PN = <>} +-- } ; +-- +-- mk2PN : (karolus, karoli : Str) -> PN ; -- karolus, karoli +-- regPN : (Johann : Str) -> PN ; +-- -- Johann, Johanns ; Johannes, Johannes +-- +-- +-- mk3A : (gut,besser,beste : Str) -> A = \a,b,c -> +-- let aa : Str = case a of { +-- teu + "er" => teu + "r" ; +-- mud + "e" => mud ; +-- _ => a +-- } in +-- MorphoAfr.mkA a aa b (init c) ** {lock_A = <>} ; +-- mk4A : (gut,gute,besser,beste : Str) -> A = \a,aa,b,c -> +-- MorphoAfr.mkA a aa b (init c) ** {lock_A = <>} ; +-- +-- regA : Str -> A = \a -> case a of { +-- teu + "er" => mk3A a (teu + "rer") (teu + "reste") ; +-- _ + "e" => mk3A a (a + "r") (a + "ste") ; +-- _ => mk3A a (a + "er") (a + "este") +-- } ; + + invarA = \s -> lin A {s = \\_,_ => s} ; ---- comparison + + mkA2 = \a,p -> lin A2 (a ** {c2 = p.s}) ; + + mkAdv s = {s = s ; lock_Adv = <>} ; +-- +-- mkPrep s c = {s = s ; c = c ; lock_Prep = <>} ; + noPrep = mkPrep [] ; +-- datPrep = mkPrep [] dative ; +-- genPrep = mkPrep [] genitive ; +-- von_Prep = mkPrep "von" dative ; +-- zu_Prep = mkPrep "zu" dative ; +-- +-- mk6V geben gibt gib gab gaebe gegeben = +-- let +-- geb = stemVerb geben ; +-- gebe = geb + "e" ; +-- gibst = verbST (init gibt) ; +-- gebt = verbT geb ; +-- gabst = verbST gab ; +-- gaben = pluralN gab ; +-- gabt = verbT gab +-- in +-- MorphoAfr.mkV +-- geben gebe gibst gibt gebt gib gab gabst gaben gabt gaebe gegeben +-- [] VHaben ** {lock_V = <>} ; +-- +-- regV fragen = +-- let +-- frag = stemVerb fragen ; +-- fragt = verbT frag ; +-- fragte = fragt + "e" ; +-- gefragt = "ge" + fragt ; +-- in +-- mk6V fragen fragt (frag + "e") fragte fragte gefragt ; +-- +-- irregV singen singt sang saenge gesungen = +-- let +-- sing = stemVerb singen ; +-- in +-- mk6V singen singt sing sang saenge gesungen ; +-- +-- prefixV p v = MorphoAfr.prefixV p v ** {lock_V = v.lock_V} ; +-- +-- habenV v = +-- {s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VHaben ; vtype = v.vtype} ; +-- seinV v = +-- {s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VSein ; vtype = v.vtype} ; +-- reflV v c = +-- {s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VHaben ; vtype = VRefl c} ; +-- +-- no_geV v = let vs = v.s in { +-- s = table { +-- p@(VPastPart _) => Predef.drop 2 (vs ! p) ; +-- p => vs ! p +-- } ; +-- prefix = v.prefix ; lock_V = v.lock_V ; aux = v.aux ; vtype = v.vtype +-- } ; +-- +-- haben_V = MorphoAfr.haben_V ** {lock_V = <>} ; +-- sein_V = MorphoAfr.sein_V ** {lock_V = <>} ; +-- werden_V = MorphoAfr.werden_V ** {lock_V = <>} ; +-- + prepV2 : V -> Prep -> V2 ; + prepV2 v c = lin V2 (v ** {c2 = c.s}) ; +-- dirV2 v = prepV2 v (mkPrep [] accusative) ; +-- datV2 v = prepV2 v (mkPrep [] dative) ; +-- +-- + mkVS v = lin VS v ; + mkVQ v = lin VQ v ; + mkVV v = lin VV (v ** {isAux = False}) ; + + V0 : Type = V ; +-- AS, A2S, AV : Type = A ; +-- A2V : Type = A2 ; + + mkV0 v = v ; + mkV2S v p = lin V2S (prepV2 v p) ; + mkV2V v p = lin V2V (prepV2 v p ** {isAux = False}) ; + mkVA v = lin VA v ; + mkV2A v p = lin V2A (prepV2 v p) ; + mkV2Q v p = lin V2Q (prepV2 v p) ; +-- +-- mkAS v = v ** {lock_A = <>} ; +-- mkA2S v p = mkA2 v p ** {lock_A = <>} ; +-- mkAV v = v ** {lock_A = <>} ; +-- mkA2V v p = mkA2 v p ** {lock_A2 = <>} ; +-- +---- pre-overload API and overload definitions +-- +-- regN : Str -> N ; +-- reg2N : (x1,x2 : Str) -> Gender -> N ; +-- mk6N : (x1,_,_,_,_,x6 : Str) -> Gender -> N ; +-- +-- mkN = overload { +-- mkN : Str -> N = regN ; +-- mkN : (x1,x2 : Str) -> Gender -> N = reg2N ; +-- mkN : (x1,_,_,_,_,x6 : Str) -> Gender -> N = mk6N +-- }; +-- +-- +-- +-- regA : Str -> A ; +-- mk3A : (gut,besser,beste : Str) -> A ; +-- +-- mkA = overload { +-- mkA : Str -> A = regA ; +-- mkA : (gut,besser,beste : Str) -> A = mk3A ; +-- mkA : (gut,gute,besser,beste : Str) -> A = mk4A +-- }; +-- +-- +-- +-- regV : Str -> V ; +-- irregV : (x1,_,_,_,x5 : Str) -> V ; +-- mk6V : (x1,_,_,_,_,x6 : Str) -> V ; +-- +-- prefixV : Str -> V -> V ; +-- +-- mkV = overload { +-- mkV : Str -> V = regV ; +-- mkV : (x1,_,_,_,x5 : Str) -> V = irregV ; +-- mkV : (x1,_,_,_,_,x6 : Str) -> V = mk6V ; +-- mkV : Str -> V -> V = prefixV +-- }; +-- + + +-- dirV2 : V -> V2 ; +-- +-- datV2 : V -> V2 ; +-- +-- mkV2 = overload { +-- mkV2 : Str -> V2 = \s -> dirV2 (regV s) ; +-- mkV2 : V -> V2 = dirV2 ; +-- mkV2 : V -> Prep -> V2 = prepV2; +-- mkV2 : V -> Case -> V2 = \v,c -> prepV2 v (mkPrep [] c) +-- } ; +-- +--} + +} diff --git a/lib/src/afrikaans/PhraseAfr.gf b/lib/src/afrikaans/PhraseAfr.gf new file mode 100644 index 000000000..9cb2fb6ee --- /dev/null +++ b/lib/src/afrikaans/PhraseAfr.gf @@ -0,0 +1,31 @@ +concrete PhraseAfr of Phrase = CatAfr ** open Prelude, ResAfr in +{ + + + flags optimize=all_subs ; + + lin + PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; + + UttS s = {s = s.s ! Main} ; + UttQS qs = {s = qs.s ! QDir} ; + UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg False} ; + UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Pl False} ; + UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg True} ; + + UttIP ip = {s = ip.s ! NPNom} ; --- Acc also + UttIAdv iadv = iadv ; + UttNP np = {s = np.s ! NPNom} ; + UttVP vp = {s = useInfVP True vp} ; -- without zu + UttAdv adv = adv ; + UttCN n = {s = n.s ! Strong ! NF Sg Nom} ; + UttCard n = {s = n.s ! Utr ! Nom} ; + UttAP ap = {s = ap.s ! APred} ; + + NoPConj = {s = []} ; + PConjConj conj = ss (conj.s2) ; + + NoVoc = {s = []} ; + VocNP np = {s = "," ++ np.s ! NPNom} ; + +} diff --git a/lib/src/afrikaans/QuestionAfr.gf b/lib/src/afrikaans/QuestionAfr.gf new file mode 100644 index 000000000..ca1b9db40 --- /dev/null +++ b/lib/src/afrikaans/QuestionAfr.gf @@ -0,0 +1,103 @@ +concrete QuestionAfr of Question = CatAfr ** open ResAfr in { + + + flags optimize=all_subs ; + + lin + + QuestCl cl = { + s = \\t,a,p => + let cls = cl.s ! t ! a ! p + in table { + QDir => cls ! Inv ; + QIndir => "of" ++ cls ! Sub + } + } ; + + QuestVP qp vp = { + s = \\t,a,b,q => + let + cl = (mkClause (qp.s ! NPNom) (agrP3 qp.n) vp).s ! t ! a ! b + in + case q of { + QIndir => cl ! Sub ; + _ => cl ! Main + } + } ; + + QuestSlash ip slash = { + s = \\t,a,p => + let + cls = slash.s ! t ! a ! p ; + who = appPrep slash.c2 ip.s + in table { + QDir => who ++ cls ! Inv ; + QIndir => who ++ cls ! Sub + } + } ; + + QuestIAdv iadv cl = { + s = \\t,a,p => + let + cls = cl.s ! t ! a ! p ; + why = iadv.s + in table { + QDir => why ++ cls ! Inv ; + QIndir => why ++ cls ! Sub + } + } ; + + QuestIComp icomp np = { + s = \\t,a,p => + let + vp = predV zijn_V ; + cls = (mkClause (np.s ! NPNom) np.a vp).s ! t ! a ! p ; + why = icomp.s ! np.a + in table { + QDir => why ++ cls ! Inv ; + QIndir => why ++ cls ! Sub + } + } ; + + PrepIP p ip = { + s = appPrep p.s ip.s + } ; + + AdvIP ip adv = { + s = \\c => ip.s ! c ++ adv.s ; + n = ip.n + } ; + + IdetCN idet cn = + let + g = cn.g ; + n = idet.n + in { + s = \\c => idet.s ! g ++ cn.s ! Weak ! NF n Nom ; + n = n + } ; + + IdetIP idet = + let + g = Neutr ; ---- + n = idet.n + in { + s = \\_ => idet.s ! g ; + n = n + } ; + + IdetQuant idet num = + let + n = num.n + in { + s = \\g => idet.s ! n ! g ++ num.s ; + n = n + } ; + + AdvIAdv i a = {s = i.s ++ a.s} ; + + CompIAdv a = {s = \\_ => a.s} ; + + CompIP ip = {s = \\_ => ip.s ! NPNom} ; + +} diff --git a/lib/src/afrikaans/RelativeAfr.gf b/lib/src/afrikaans/RelativeAfr.gf new file mode 100644 index 000000000..0721eac39 --- /dev/null +++ b/lib/src/afrikaans/RelativeAfr.gf @@ -0,0 +1,44 @@ +concrete RelativeAfr of Relative = CatAfr ** open ResAfr in { + + + flags optimize=all_subs ; + + lin + + RelCl cl = { + s = \\t,a,b,_,_ => "zodat" ++ cl.s ! t ! a ! b ! Sub + } ; + + RelVP rp vp = { + s = \\t,ant,b,g,n => + let + agr = case rp.a of { + RNoAg => agrgP3 g n ; + RAg rn p => {g = Utr ; n = rn ; p = p} ---- g + } ; + cl = mkClause (rp.s ! g ! n) agr vp + in + cl.s ! t ! ant ! b ! Sub + } ; + + RelSlash rp slash = { + s = \\t,a,p,g,n => + appPrep slash.c2 (\\_ => rp.s ! g ! n) ++ slash.s ! t ! a ! p ! Sub ; + c = slash.c2.c + } ; + + FunRP p np rp = { + s = \\g,n => np.s ! NPNom ++ appPrep p.s (\\_ => rp.s ! g ! n) ; + a = RAg np.a.n np.a.p + } ; + + IdRP = {s = relPron ; a = RNoAg} ; + + oper + relPron : Gender => Number => Str = \\g,n => + case of { + => "dat" ; + _ => "die" + } ; + +} diff --git a/lib/src/afrikaans/ResAfr.gf b/lib/src/afrikaans/ResAfr.gf new file mode 100644 index 000000000..a3730f3fc --- /dev/null +++ b/lib/src/afrikaans/ResAfr.gf @@ -0,0 +1,495 @@ +--# -path=.:../abstract:../common + +--1 Afrch auxiliary operations. +-- +-- (c) 2009 Femke Johansson and Aarne Ranta + +resource ResAfr = ParamX ** open Prelude in { + + flags optimize=all ; + +--2 For $Noun$ + + param + Case = Nom | Gen ; + Gender = Utr | Neutr ; --! +-- Gender = Utr | Neutr ; --! + + NForm = NF Number Case ; + + NPCase = NPNom | NPAcc ; + + oper + Noun = {s : NForm => Str ; g : Gender} ; + + mkNoun : (_,_ : Str) -> Gender -> Noun = \sg,pl,g -> { + s = table { + NF Sg Nom => sg ; + NF Sg Gen => add_s sg ; + NF Pl Nom => pl ; + NF Pl Gen => add_s pl + } ; + g = g + } ; + + regNoun : Str -> Noun = \s -> case s of { + _ + ("a" | "o" | "y" | "u" | "oe" | "é") => mkNoun s (s + "'s") Utr ; + _ + ("oir" | "ion" | "je") => mkNoun s (s + "s") Neutr ; + ? + ? + ? + _ + + ("el" | "em" | "en" | "er" | "erd" | "aar" | "aard" | "ie") => -- unstressed + mkNoun s (s + "s") Utr ; + _ + ("i"|"u") => mkNoun s (endCons s + "en") Utr ; + b + v@("aa"|"ee"|"oo"|"uu") + c@? => mkNoun s (b + shortVoc v c + "en") Utr ; + b + ("ei"|"eu"|"oe"|"ou"|"ie"|"ij"|"ui") + ? => mkNoun s (endCons s + "en") Utr ; + _ + "ie" => mkNoun s (s + "ën") Utr ; + b + v@("a"|"e"|"i"|"o"|"u" ) + c@? => mkNoun s (b + v + c + c + "en") Utr ; + _ => mkNoun s (endCons s + "en") Utr + } ; + + regNounG : Str -> Gender -> Noun = \s,g -> { + s = (regNoun s).s ; + g = g + } ; + + shortVoc : Str -> Str -> Str = \v,s -> init v + endCons s ; + + endCons : Str -> Str = \s -> case s of { + _ + ("ts" |"rs" | "ls" | "ds" | "ns" | "ms") => s ; + b + "s" => b + "z" ; + b + "f" => b + "v" ; + _ => s + } ; + + dupCons : pattern Str = #("b"|"d"|"f"|"g"|"k"|"l"|"m"|"n"|"p"|"r"|"s"|"t") ; + + add_s : Str -> Str = \s -> case s of { + _ + "s" => s ; + _ => s + "s" + } ; + + param + AForm = APred | AAttr | AGen ; + + oper + Adjective = {s : Degree => AForm => Str} ; + + mkAdjective : (_,_,_,_,_ : Str) -> Adjective = \ap,aa,ag,ac,as -> { + s = table { + Posit => table {APred => ap ; AAttr => aa ; AGen => ag} ; + Compar => table {APred => ac ; AAttr => ac + "e" ; AGen => ac + "es"} ; ---- + Superl => table {APred => as ; AAttr => as + "e" ; AGen => as + "es"} ---- + } + } ; + regAdjective : Str -> Adjective = \s -> ---- + let + se : Str = case s of { + _ + "er" => s + "e" ; ---- + _ + ("i"|"u") => endCons s + "e" ; + b + v@("aa"|"ee"|"oo"|"uu") + c@? => b + shortVoc v c + "e" ; + b + ("ei"|"eu"|"oe"|"ou"|"ie"|"ij"|"ui") + ? => endCons s + "e" ; + b + v@("a"|"e"|"i"|"o"|"u" ) + c@? => b + v + c + c + "e" ; + _ => endCons s + "e" + } ; + ser : Str = case s of { + _ + "r" => s + "der" ; + _ => se + "r" + } ; + sst : Str = case s of { + _ + "s" => s + "t" ; + _ => s + "st" + } ; + in + mkAdjective s se (s + "s") ser sst ; + + param + VForm = --! + VInf -- wees + | VPres -- is + | VPast -- was --# notpresent + | VPerf -- gewees + ; + + VPart = VPart_aan | VPart_af | VPart_be ; + + oper + Verb : Type = {s: VForm => Str}; + + mkVerb : (_,_,_,_ : Str) -> + Verb = \aai, aaien, aaide, geaaid -> { + s = table { + VInf => aaien; -- hij/zij/het/wij aaien + VPres => aai; -- ik aai + VPast => aaide; -- ik aaide --# notpresent + VPerf => geaaid -- ik heb geaaid + } + }; + + regVerb : Str -> Verb = \s -> irregVerb s ("ge" + s) ; + + irregVerb : (breek, gebreek : Str) -> Verb = \breek,gebreek -> + mkVerb breek breek breek gebreek ; + + +-- 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 + } ; + zijn_V : VVerb = { + s = table { + VInf => "wees" ; + VPres => "is" ; + VPast => "was" ; --# notpresent + VPerf => "gewees" + } ; + aux = VZijn ; + prefix = [] ; + vtype = VAct ; + } ; + + hebben_V : VVerb = { + s = table { + VInf => "hê" ; + VPres => "het" ; + VPast => "hat" ; --# notpresent + VPerf => "gehad" + } ; + aux = VHebben ; + prefix = [] ; + vtype = VAct ; + } ; + + Pronoun : Type = { + unstressed,stressed : {nom, acc, poss : Str} ; + substposs : Str ; + a : Agr + } ; + + sal_V : VVerb = { + s = table { + VInf => "sal" ; + VPres => "sal" ; + VPast => "sou" ; --# notpresent + VPerf => "gesou" + } ; + aux = VHebben ; + prefix = [] ; + vtype = VAct ; + } ; + + word_V : VVerb = { + s = table { + VInf => "word" ; + VPres => "word" ; + VPast => "word" ; --# notpresent + VPerf => "geword" + } ; + aux = VHebben ; + prefix = [] ; + vtype = VAct ; + } ; + + mkPronoun : (x1,_,_,_,_,x6,x7 : Str) -> Gender -> Number -> Person -> Pronoun = + \ik,me,mn,Ik,mij,mijn,mijne,g,n,p -> { + unstressed = {nom = ik ; acc = me ; poss = mn} ; + stressed = {nom = Ik ; acc = mij ; poss = mijn} ; + substposs = mijne ; + a = {g = g ; n = n ; p = p} + } ; + + 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 ; + + + oper VVerb = Verb ** {prefix : Str ; aux : VAux ; vtype : VType} ; + param VAux = VHebben | VZijn ; + + 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. + + oper + Preposition = Str ; + appPrep : Preposition -> (NPCase => Str) -> Str = \p,np -> p ++ np ! NPAcc ; ---- + + param + Order = Main | Inv | Sub ; + + oper + vForm : Tense -> VForm = \t -> case t of { + Pres => VPres ; + Fut => VPres --# notpresent + ; Past | Cond => VPast -- Fut and Cond affect zullen --# notpresent + } ; + +--2 For $Relative$ + + param + RAgr = RNoAg | RAg Number Person ; + +--2 For $Numeral$ + + param + CardOrd = NCard Gender Case | NOrd AForm ; + 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} ; + +-- Used in $NounAfr$. + + agrAdj : Gender -> Adjf -> NForm -> AForm = \g,a,n -> + case of { + => APred ; + _ => AAttr + } ; + + oper VP : Type = { + s : VVerb ; + a1 : Polarity => Str ; -- niet + n0 : Agr => Str ; -- je + n2 : Agr => Str ; -- je vrouw + a2 : Str ; -- vandaag + isAux : Bool ; -- is a double infinitive + inf : Str * Bool ; -- sagen (True = non-empty) + ext : Str -- dass sie kommt + } ; + + predV : VVerb -> VP = predVGen False ; + + + predVGen : Bool -> VVerb -> VP = \isAux, verb -> { + s = verb ; + a1 : Polarity => Str = negation ; + n0 : Agr => Str = \\a => case verb.vtype of { + VAct => [] ; + VRefl => reflPron ! a + } ; + n2 : Agr => Str = \\a => [] ; + a2 : Str = [] ; + isAux = isAux ; ---- + inf : Str * Bool = <[],False> ; + ext : Str = [] + } ; + + negation : Polarity => Str = table { + Pos => [] ; + Neg => "niet" + } ; + +-- Extending a verb phrase with new constituents. + + insertObj : (Agr => Str) -> VP -> VP = insertObjNP False ; + + insertObjNP : Bool -> (Agr => Str) -> VP -> VP = \isPron, obj,vp -> { + s = vp.s ; + a1 = vp.a1 ; + n0 = \\a => case isPron of {True => obj ! a ; _ => []} ++ vp.n0 ! a ; + n2 = \\a => case isPron of {False => obj ! a ; _ => []} ++ vp.n2 ! a ; + a2 = vp.a2 ; + isAux = vp.isAux ; + inf = vp.inf ; + ext = vp.ext + } ; + + insertAdV : Str -> VP -> VP = \adv,vp -> { + s = vp.s ; + a1 = \\a => adv ++ vp.a1 ! a ; -- immer nicht + n0 = vp.n0 ; + n2 = vp.n2 ; + a2 = vp.a2 ; + isAux = vp.isAux ; + inf = vp.inf ; + ext = vp.ext + } ; + + insertAdv : Str -> VP -> VP = \adv,vp -> { + s = vp.s ; + a1 = vp.a1 ; + n0 = vp.n0 ; + n2 = vp.n2 ; + a2 = vp.a2 ++ adv ; + isAux = vp.isAux ; + inf = vp.inf ; + ext = vp.ext + } ; + + insertExtrapos : Str -> VP -> VP = \ext,vp -> { + s = vp.s ; + a1 = vp.a1 ; + n0 = vp.n0 ; + n2 = vp.n2 ; + a2 = vp.a2 ; + isAux = vp.isAux ; + inf = vp.inf ; + ext = vp.ext ++ ext + } ; + + insertInf : Str -> VP -> VP = \inf,vp -> { + s = vp.s ; + a1 = vp.a1 ; + n0 = vp.n0 ; + n2 = vp.n2 ; + a2 = vp.a2 ; + isAux = vp.isAux ; ---- + inf = ; + ext = vp.ext + } ; + +-- For $Sentence$. + + Clause : Type = { + s : Tense => Anteriority => Polarity => Order => Str + } ; + + mkClause : Str -> Agr -> VP -> Clause = \subj,agr,vp -> { + s = \\t,a,b,o => + let + ord = case o of { + Sub => True ; -- glue prefix to verb + _ => False + } ; + vform = vForm t ; + auxv = (auxVerb vp.s.aux).s ; + vperf = vp.s.s ! VPerf ; + verb : Str * Str = case of { + => ; --# notpresent + => ; --# notpresent + <_, Anter> => ; --# notpresent + <_, Simul> => + } ; + fin = verb.p1 ; + neg = vp.a1 ! b ; + obj0 = vp.n0 ! agr ; + obj = vp.n2 ! agr ; + compl = obj0 ++ neg ++ obj ++ vp.a2 ++ vp.s.prefix ; + inf = + case of { --# notpresent + => vp.s.s ! VInf ++ vp.inf.p1 ; --# notpresent + _ => --# notpresent + vp.inf.p1 ++ verb.p2 + } --# notpresent + ; + extra = vp.ext ; + inffin = + case of { --# notpresent + => fin ++ inf ; -- double inf --# notpresent + _ => --# notpresent + inf ++ fin --- or just auxiliary vp + } --# notpresent + in + case o of { + Main => subj ++ fin ++ compl ++ inf ++ extra ; + Inv => fin ++ subj ++ compl ++ inf ++ extra ; + Sub => subj ++ compl ++ inffin ++ extra + } + } ; + + auxVerb : VAux -> VVerb = \a -> case a of { + VHebben => hebben_V ; + VZijn => zijn_V + } ; + + infVP : Bool -> VP -> ((Agr => Str) * Str * Str) = \isAux, vp -> + < + \\agr => vp.n2 ! agr ++ vp.a2, + vp.a1 ! Pos ++ + if_then_Str isAux [] "te" ++ vp.s.s ! VInf, + vp.inf.p1 ++ vp.ext + > ; + + useInfVP : Bool -> VP -> Str = \isAux,vp -> + let vpi = infVP isAux vp in + vpi.p1 ! agrP3 Sg ++ vpi.p3 ++ vpi.p2 ; + + reflPron : Agr => Str = table { + {n = Sg ; p = P1} => "me" ; + {n = Sg ; p = P2} => "je" ; + {n = Sg ; p = P3} => "zich" ; + {n = Pl ; p = P1} => "ons" ; + {n = Pl ; p = P2} => "je" ; + {n = Pl ; p = P3} => "zich" + } ; + + conjThat : Str = "dat" ; + + conjThan : Str = "dan" ; + + conjAgr : Agr -> Agr -> Agr = \a,b -> { + g = Utr ; ---- + n = conjNumber a.n b.n ; + p = conjPerson a.p b.p + } ; + +-- The infinitive particle "zu" is used if and only if $vv.isAux = False$. + + infPart : Bool -> Str = \b -> if_then_Str b [] "te" ; + + mkDet : Str -> Str -> Number -> {s,sp : Gender => Str ; n : Number ; a : Adjf} = + \deze,dit,n -> { + s = \\g => case of { => dit ; _ => deze} ; + sp = \\g => case of { => dit ; _ => deze} ; + n = n ; + a = Weak + } ; + + mkQuant : Str -> Str -> { + s : Bool => Number => Gender => Str ; + sp : Number => Gender => Str ; + a : Adjf + } = + \deze,dit -> { + s = \\_ ,n,g => case of { => dit ; _ => deze} ; + sp = \\ n,g => case of { => dit ; _ => deze} ; + a = Weak + } ; + + mkPredet : Str -> Str -> {s : Number => Gender => Str} = + \deze,dit -> { + s = \\n,g => case of { => dit ; _ => deze} + } ; + + mkNP : Str -> Gender -> Number -> {s : NPCase => Str ; a : Agr ; isPron : Bool} = + \s,g,n -> heavyNP { + s = \\_ => s ; + a = agrgP3 g n ; + } ; + + auxVV : VVerb -> VVerb ** {isAux : Bool} = \v -> v ** {isAux = True} ; + + heavyNP : + {s : NPCase => Str ; a : Agr} -> {s : NPCase => Str ; a : Agr ; isPron : Bool} = \np -> + np ** {isPron = False} ; + +} diff --git a/lib/src/afrikaans/SentenceAfr.gf b/lib/src/afrikaans/SentenceAfr.gf new file mode 100644 index 000000000..3b12c8724 --- /dev/null +++ b/lib/src/afrikaans/SentenceAfr.gf @@ -0,0 +1,67 @@ +concrete SentenceAfr of Sentence = CatAfr ** open ResAfr, Prelude in { + + flags optimize=all_subs ; + + lin + + PredVP np vp = mkClause (np.s ! NPNom) np.a vp ; + + PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ; + + ImpVP vp = { + s = \\pol,im => + let + ps = case im of { + ImpF Pl _ => ; + ImpF Sg True => ; + ImpF Sg False => + } ; + agr = {g = Utr ; n = ps.p3 ; p = P2} ; ---- P2? -- g does not matter + verb = vp.s.s ! ps.p1 ; + inf = vp.inf.p1 ; + in + verb ++ ps.p2 ++ + vp.n2 ! agr ++ vp.a1 ! pol ++ vp.a2 ++ inf ++ vp.ext + } ; + + SlashVP np vp = + mkClause + (np.s ! NPNom) np.a + vp ** + {c2 = vp.c2} ; + + AdvSlash slash adv = { + s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ; + c2 = slash.c2 + } ; + + SlashPrep cl prep = cl ** {c2 = prep.s} ; + + SlashVS np vs slash = + mkClause (np.s ! NPNom) np.a + (insertExtrapos (conjThat ++ slash.s ! Sub) (predV vs)) ** + {c2 = slash.c2} ; + + EmbedS s = {s = conjThat ++ s.s ! Sub} ; + EmbedQS qs = {s = qs.s ! QIndir} ; + EmbedVP vp = {s = useInfVP False vp} ; + + UseCl t p cl = { + s = \\o => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! o + } ; + UseQCl t p cl = { + s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! q + } ; + UseRCl t p cl = { + s = \\g,n => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! g ! n + } ; + UseSlash t p cl = { + s = \\o => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! o ; + c2 = cl.c2 + } ; + + AdvS a s = {s = \\o => a.s ++ s.s ! Inv} ; + + RelS s r = {s = \\o => s.s ! o ++ "," ++ r.s ! Neutr ! Sg} ; + +} diff --git a/lib/src/afrikaans/StructuralAfr.gf b/lib/src/afrikaans/StructuralAfr.gf new file mode 100644 index 000000000..d685d956b --- /dev/null +++ b/lib/src/afrikaans/StructuralAfr.gf @@ -0,0 +1,125 @@ +concrete StructuralAfr of Structural = CatAfr, Prelude ** + + open ParadigmsAfr, ResAfr, (X = ConstructX) in +{ + + + flags optimize=all ; + + lin + + above_Prep = mkPrep "boven" ; + after_Prep = mkPrep "na" ; + all_Predet = mkPredet "alle" "alle" ; ---- + almost_AdA, almost_AdN = ss "byna" ; + although_Subj = ss "hoewel" ; + always_AdV = ss "altyd" ; + and_Conj = {s1 = [] ; s2 = "en" ; n = Pl} ; + because_Subj = ss "omdat" ; ---- doordat + before_Prep = mkPrep "voor" ; + behind_Prep = mkPrep "achter" ; + between_Prep = mkPrep "tussen" ; + both7and_DConj = {s1 = "sowel" ; s2 = "als" ; n = Pl} ; + but_PConj = ss "maar" ; + by8agent_Prep = mkPrep "door" ; + by8means_Prep = mkPrep "met" ; + can8know_VV, can_VV = auxVV (mkV "kan" "kon") ; + during_Prep = mkPrep "tydens" ; + either7or_DConj = {s1 = "ofwel" ; s2 = "of" ; n = Pl} ; + everybody_NP = mkNP "alle" Utr Pl ; ---- + every_Det = mkDet "elke" "elk" Sg ; ---- + everything_NP = mkNP "alles" Neutr Sg ; ---- + everywhere_Adv = ss "overal" ; + few_Det = mkDet "weinig" "weinig" Pl ; + for_Prep = mkPrep "voor" ; + from_Prep = mkPrep "uit" ; + he_Pron = mkPronoun "hy" "hem" "syn" "hy" "hem" "syn" "syne" Utr Sg P3 ; + here7to_Adv = ss ["hier"] ; + here7from_Adv = ss ["van hier"] ; ---- + here_Adv = ss "hier" ; + how_IAdv = ss "hoe" ; + how8much_IAdv = ss "hoeveel" ; + how8many_IDet = mkDet "hoeveel" "hoeveel" Pl ; + if_Subj = ss "als" ; + in8front_Prep = mkPrep "voor" ; + i_Pron = mkPronoun "ek" "me" "myn" "ik" "my" "myn" "myne" Utr Sg P1 ; + in_Prep = ss "in" ; + it_Pron = mkPronoun "het" "het" "syn" "het" "het" "syn" "syne" Neutr Sg P3 ; + + less_CAdv = X.mkCAdv "minder" "dan" ; + many_Det = mkDet "veel" "veel" Pl ; + more_CAdv = X.mkCAdv "meer" "dan" ; + most_Predet = mkPredet "meeste" "meeste" ; + much_Det = mkDet "veel" "veel" Sg ; + + must_VV = auxVV (mkV "moeten" "moest" "gemoeten") ; + + only_Predet = {s = \\_,_ => "slechts"} ; + no_Utt = ss "neen" ; + on_Prep = mkPrep "op" ; + or_Conj = {s1 = [] ; s2 = "of" ; n = Sg} ; + otherwise_PConj = ss "anders" ; + part_Prep = mkPrep "van" ; + please_Voc = ss "alsjeblieft" ; + possess_Prep = mkPrep "van" ; + quite_Adv = ss "heel" ; + she_Pron = mkPronoun "se" "haar" "haar" "sy" "haar" "haar" "hare" Utr Sg P3 ; + + so_AdA = ss "so" ; + somebody_NP = mkNP "iemand" Utr Sg ; + somePl_Det = mkDet "sommige" "sommige" Pl ; + someSg_Det = mkDet "sommige" "sommige" Sg ; + something_NP = mkNP "iets" Utr Sg ; + somewhere_Adv = ss "ergens" ; + that_Quant = mkQuant "die" "dat" ; + that_Subj = ss "dat" ; + there_Adv = ss "daar" ; + there7to_Adv = ss "daar" ; + there7from_Adv = ss "van daar" ; + therefore_PConj = ss "daarom" ; + + they_Pron = mkPronoun "se" "se" "hun" "sy" "hen" "hun" "hunne" Utr Pl P3 ; ---- + + this_Quant = mkQuant "dese" "dit" ; + through_Prep = mkPrep "door" ; + too_AdA = ss "te" ; + to_Prep = mkPrep "naar" ; + under_Prep = mkPrep "onder" ; + very_AdA = ss "erg" ; + want_VV = auxVV (mkV "wil" "wou" "gewil") ; + + we_Pron = mkPronoun "we" "ons" "ons" "wy" "ons" "onse" "onse" Utr Pl P3 ; ---- + + whatSg_IP = {s = \\_ => "wat" ; n = Sg} ; + whatPl_IP = {s = \\_ => "wat" ; n = Pl} ; + + when_IAdv = ss "wanneer" ; + when_Subj = ss "als" ; + where_IAdv = ss "waar" ; + which_IQuant = mkPredet "welke" "welk" ; + + whoSg_IP = {s = \\_ => "wie" ; n = Sg} ; + whoPl_IP = {s = \\_ => "wie" ; n = Pl} ; + why_IAdv = ss "waarom" ; + without_Prep = mkPrep "sonder" ; + with_Prep = mkPrep "met" ; + youSg_Pron = mkPronoun "je" "je" "je" "jy" "jou" "je" "jouwe" Neutr Sg P2 ; --- Neutr as hack for familiarity + youPl_Pron = mkPronoun "jullie" "jullie" "je" "jullie" "jullie" "jullie" "uwe" Utr Pl P2 ; + youPol_Pron = mkPronoun "u" "u" "uw" "u" "u" "uw" "uwe" Utr Sg P2 ; + yes_Utt = ss "ja" ; + + not_Predet = mkPredet "niet" "niet" ; + no_Quant = mkQuant "geen" "geen" ; + if_then_Conj = {s1 = "als" ; s2 = "dan" ; n = Sg ; lock_Conj = <>} ; + nobody_NP = mkNP "niemand" Utr Sg ; + nothing_NP = mkNP "niets" Neutr Sg ; + at_least_AdN = ss "ten minste" ; + at_most_AdN = ss "hooguit" ; + except_Prep = mkPrep "met uitsondering van" ; + + as_CAdv = X.mkCAdv "so" "als" ; + have_V2 = mkV2 ParadigmsAfr.hebben_V ; + + lin language_title_Utt = ss "nederlands" ; + +} diff --git a/lib/src/afrikaans/SymbolAfr.gf b/lib/src/afrikaans/SymbolAfr.gf new file mode 100644 index 000000000..27cc7b215 --- /dev/null +++ b/lib/src/afrikaans/SymbolAfr.gf @@ -0,0 +1,49 @@ +--# -path=.:../abstract:../common + +concrete SymbolAfr of Symbol = CatAfr ** open Prelude, ResAfr in +{ + + +lin + SymbPN i = {s = \\c => i.s ; g = Neutr} ; --- c + IntPN i = {s = \\c => i.s ; g = Neutr} ; --- c + FloatPN i = {s = \\c => i.s ; g = Neutr} ; --- c + NumPN i = {s = \\_ => i.s ! Neutr ! Nom ; g = Neutr} ; --- c + + CNIntNP cn i = { + s = \\c => cn.s ! Weak ! NF Sg Nom ++ i.s ; + a = agrP3 Sg ; + isPron = False + } ; + CNSymbNP det cn xs = let g = cn.g in { + s = \\c => det.s ! g ++ cn.s ! det.a ! NF det.n Nom ++ xs.s ; + a = agrP3 det.n ; + isPron = False + } ; + CNNumNP cn i = { + s = \\c => artDef Sg cn.g ++ cn.s ! Weak ! NF Sg Nom ++ i.s ! Neutr ! Nom ; + a = agrP3 Sg ; + isPron = False + } ; + + SymbS sy = {s = \\_ => sy.s} ; + + SymbNum n = {s = \\_,_ => n.s ; n = Pl ; isNum = True} ; + SymbOrd n = {s = \\_ => n.s ++ "."} ; + + +lincat + + Symb, [Symb] = SS ; + +lin + + MkSymb s = s ; + + BaseSymb = infixSS "en" ; + ConsSymb = infixSS "," ; + +oper + artDef : Number -> Gender -> Str = \n,g -> case of { => "het" ; _ => "de"} ; + +} diff --git a/lib/src/afrikaans/VerbAfr.gf b/lib/src/afrikaans/VerbAfr.gf new file mode 100644 index 000000000..ee4482510 --- /dev/null +++ b/lib/src/afrikaans/VerbAfr.gf @@ -0,0 +1,84 @@ +concrete VerbAfr of Verb = CatAfr ** open Prelude, ResAfr in { + + flags optimize=all_subs ; + + lin + UseV = predV ; + + ComplVV v vp = + let + vpi = infVP v.isAux vp + in + insertExtrapos vpi.p3 ( + insertInf vpi.p2 ( + insertObj vpi.p1 ( + predVGen v.isAux (v2v v)))) ; ---- subtyp + + ComplVS v s = + insertExtrapos (conjThat ++ s.s ! Sub) (predV v) ; + ComplVQ v q = + insertExtrapos (q.s ! QIndir) (predV v) ; + ComplVA v ap = insertObj (\\ _ => ap.s ! APred) (predV v) ; + + SlashV2a v = predV (v2v v) ** {c2 = v.c2} ; + + Slash2V3 v np = + insertObj (\\_ => appPrep v.c2 np.s) (predVv v) ** {c2 = v.c3} ; + Slash3V3 v np = + insertObj (\\_ => appPrep v.c3 np.s) (predVv v) ** {c2 = v.c2} ; + + SlashV2S v s = + insertExtrapos (conjThat ++ s.s ! Sub) (predVv v) ** {c2 = v.c2} ; + SlashV2Q v q = + insertExtrapos (q.s ! QIndir) (predVv v) ** {c2 = v.c2} ; + SlashV2V v vp = + let + vpi = infVP False vp + in + insertExtrapos vpi.p3 ( + insertInf vpi.p2 ( + insertObj vpi.p1 ((predVv v)))) ** {c2 = v.c2} ; + + SlashV2A v ap = + insertObj (\\_ => ap.s ! APred) (predVv v) ** {c2 = v.c2} ; + + ComplSlash vp np = insertObjNP np.isPron (\\_ => appPrep vp.c2 np.s) vp ; + + SlashVV v vp = + let + vpi = infVP v.isAux vp + in + insertExtrapos vpi.p3 ( + insertInf vpi.p2 ( + insertObj vpi.p1 ( + predVGen v.isAux (v2v v)))) ** {c2 = vp.c2} ; + + SlashV2VNP v np vp = + let + vpi = infVP False vp + in + insertExtrapos vpi.p3 ( + insertInf vpi.p2 ( + insertObj vpi.p1 ( + insertObj (\\_ => appPrep v.c2 np.s) ( + predVv v)))) ** {c2 = v.c2} ; + + UseComp comp = insertObj comp.s (predV zijn_V) ; -- agr not used + CompCN cn = {s = \\a => cn.s ! Strong ! NF a.n Nom} ; + CompAP ap = {s = \\_ => ap.s ! APred} ; + CompNP np = {s = \\_ => np.s ! NPNom} ; + CompAdv a = {s = \\_ => a.s} ; + + AdvVP vp adv = insertAdv adv.s vp ; + AdVVP adv vp = insertAdV adv.s vp ; + + ReflVP vp = insertObj (\\a => appPrep vp.c2 (\\_ => reflPron ! a)) vp ; + + PassV2 v = insertInf (v.s ! VPerf) (predV word_V) ; + +---- workaround for a subtyping bug + oper + v2v : VVerb -> VVerb = \v -> + {s = v.s ; aux = v.aux ; prefix = v.prefix ; vtype = v.vtype} ; + predVv : VVerb -> ResAfr.VP = \v -> predV (v2v v) ; +}