summaryrefslogtreecommitdiff
path: root/next-lib/src/german/ResGer.gf
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2009-06-22 15:39:08 +0000
committeraarne <aarne@chalmers.se>2009-06-22 15:39:08 +0000
commite89fdae2fa1626348d8025824a7469252fa85e42 (patch)
treec7d46bbd0494043b4bd6f917a25a7687517d0547 /next-lib/src/german/ResGer.gf
parent3049b59b35b25381a7c6787444165c200d66e08b (diff)
next-lib renamed to lib, lib to old-lib
Diffstat (limited to 'next-lib/src/german/ResGer.gf')
-rw-r--r--next-lib/src/german/ResGer.gf638
1 files changed, 0 insertions, 638 deletions
diff --git a/next-lib/src/german/ResGer.gf b/next-lib/src/german/ResGer.gf
deleted file mode 100644
index ea87cabbd..000000000
--- a/next-lib/src/german/ResGer.gf
+++ /dev/null
@@ -1,638 +0,0 @@
---# -path=.:../abstract:../common:prelude
-
---1 German auxiliary operations.
---
--- (c) 2002-2006 Aarne Ranta and Harald Hammarström
---
--- This module contains operations that are needed to make the
--- resource syntax work. To define everything that is needed to
--- implement $Test$, it moreover contains some lexical
--- patterns needed for $Lex$.
-
-resource ResGer = ParamX ** open Prelude in {
-
- flags optimize=all ;
-
---2 For $Noun$
-
--- These are the standard four-value case and three-value gender.
-
- param
- Case = Nom | Acc | Dat | Gen ;
- Gender = Masc | Fem | Neutr ;
-
--- Complex $CN$s, like adjectives, have strong and weak forms.
-
- 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 ;
-
- param VAux = VHaben | VSein ;
-
- param VType = VAct | VRefl Case ;
-
--- The order of sentence is depends on whether it is used as a main
--- clause, inverted, or subordinate.
-
- param
- Order = Main | Inv | Sub ;
-
--- Main clause mood: "es sei, es wäre, es werde sein".
--- Not relevant for $Fut$. ---
-
- Mood = MIndic | MConjunct ;
-
---2 For $Relative$
-
- RAgr = RNoAg | RAg {n : Number ; p : Person} ;
-
---2 For $Numeral$
-
- CardOrd = NCard Gender Case | NOrd AForm ;
- DForm = DUnit | DTeen | DTen ;
-
---2 Transformations between parameter types
-
- 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 $RelativeGer$.
-
- numGenNum : GenNum -> Number = \gn ->
- case gn of {
- GSg _ => Sg ;
- GPl => Pl
- } ;
-
--- Used in $NounGer$.
-
- agrAdj : Gender -> Adjf -> Number -> Case -> AForm = \g,a,n,c ->
- let
- gn = gennum g n ;
- e = AMod (GSg Fem) Nom ;
- en = AMod (GSg Masc) Acc ;
- in
- case a of {
- Strong => AMod gn c ;
- _ => case <gn,c> of {
- <GSg _, Nom> => e ;
- <GSg Masc,Acc> => en ;
- <GSg _, Acc> => e ;
- _ => en
- }
- } ;
-
--- This is used twice in NounGer.
-
- adjfCase : Adjf -> Case -> Adjf = \a,c -> case <a,c> of {
- <Strong, Nom|Acc> => Strong ;
- _ => Weak
- } ;
-
- vFin : Bool -> Mood -> Tense -> Agr -> VForm = \b,m,t,a ->
- case <t,m> of {
- <Pres,MIndic> => VFin b (VPresInd a.n a.p) ;
- <Pres,MConjunct> => VFin b (VPresSubj a.n a.p)
- ; --# notpresent
- <Past,MIndic> => VFin b (VImpfInd a.n a.p) ; --# notpresent
- <Past,MConjunct> => VFin b (VImpfSubj a.n a.p) ; --# notpresent
- _ => VInf False --# notpresent
- } ;
-
- conjAgr : Agr -> Agr -> Agr = \a,b -> {
- g = Neutr ; ----
- n = conjNumber a.n b.n ;
- p = conjPerson a.p b.p
- } ;
-
--- For $Lex$.
-
--- For conciseness and abstraction, we first define a method for
--- generating a case-dependent table from a list of four forms.
-
- oper
- caselist : (x1,_,_,x4 : Str) -> Case => Str = \n,a,d,g ->
- table {
- Nom => n ;
- Acc => a ;
- Dat => d ;
- Gen => g
- } ;
-
--- For each lexical category, here are the worst-case constructors and
--- some practical special cases.
--- More paradigms are given in $ParadigmsGer$.
-
--- The worst-case constructor for common nouns needs six forms: all plural forms
--- are always the same except for the dative. Actually the six forms are never
--- needed at the same time, but just subsets of them.
-
- Noun : Type = {s : Number => Case => Str ; g : Gender} ;
-
- mkN : (x1,_,_,_,_,x6 : Str) -> Gender -> Noun =
- \mann, mannen, manne, mannes, maenner, maennern, g -> {
- s = table {
- Sg => caselist mann mannen manne mannes ;
- Pl => caselist maenner maenner maennern maenner
- } ;
- g = g
- } ;
-
--- Adjectives need four forms: two for the positive and one for the other degrees.
-
- Adjective : Type = {s : Degree => AForm => Str} ;
-
- mkA : (x1,_,_,x4 : Str) -> Adjective = \gut,gute,besser,best ->
- {s = table {
- Posit => adjForms gut gute ;
- Compar => adjForms besser besser ;
- Superl => adjForms best best
- }
- } ;
-
--- Verbs need as many as 12 forms, to cover the variations with
--- suffixes "t" and "st". Auxiliaries like "sein" will have to
--- make extra cases even for this.
-
- Verb : Type = {
- s : VForm => Str ;
- prefix : Str ;
- aux : VAux ;
- vtype : VType
- } ;
-
- mkV : (x1,_,_,_,_,_,_,_,_,_,_,x12 : Str) -> Str -> VAux -> Verb =
- \geben,gebe,gibst,gibt,gebt,gib,
- gab,gabst,gaben,gabt,
- gaebe,gegeben,ein,aux ->
- let
- 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 (case vf of {
- VPresInd Sg P1 => gebe ;
- VPresInd Sg P2 => gibst ;
- VPresInd Sg P3 => gibt ;
- VPresInd Pl P2 => gebt ;
- VPresInd Pl _ => geben ;
- VImpfInd Sg P2 => gabst ; --# notpresent
- VImpfInd Sg _ => gab ; --# notpresent
- VImpfInd Pl P2 => gabt ; --# notpresent
- VImpfInd Pl _ => gaben ; --# notpresent
- VImpfSubj Sg P2 => gaebe + "st" ; --# notpresent
- VImpfSubj Sg _ => gaebe ; --# notpresent
- VImpfSubj Pl P2 => gaebe + "t" ; --# notpresent
- VImpfSubj Pl _ => gaebe + "n" ; --# notpresent
- VPresSubj Sg P2 => init geben + "st" ;
- VPresSubj Sg _ => init geben ;
- VPresSubj Pl P2 => init geben + "t" ;
- VPresSubj Pl _ => geben
- }) ;
- VImper Sg => gib ;
- VImper Pl => gebt ;
- VPresPart a => ein + (regA (geben + "d")).s ! Posit ! a ;
- VPastPart a => ein + (regA gegeben).s ! Posit ! a
- } ;
- prefix = ein ;
- aux = aux ;
- vtype = VAct
- } ;
-
--- 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
- } ;
-
-
--- These functions cover many regular cases; full coverage inflectional patterns are
--- defined in $MorphoGer$.
-
- mkN4 : (x1,_,_,x4 : Str) -> Gender -> Noun = \wein,weines,weine,weinen ->
- mkN wein wein wein weines weine weinen ;
-
- regA : Str -> Adjective = \blau ->
- mkA blau blau (blau + "er") (blau + "est") ;
-
- regV : Str -> Verb = \legen ->
- let
- lege = init legen ;
- leg = init lege ;
- legt = leg + "t" ;
- legte = legt + "e"
- in
- mkV
- legen lege (leg+"st") legt legt leg
- legte (legte + "st") (legte + "n") (legte + "t")
- legte ("ge" + legt)
- [] VHaben ;
-
--- Prepositions for complements indicate the complement case.
-
- Preposition : Type = {s : Str ; c : Case} ;
-
--- To apply a preposition to a complement.
-
- appPrep : Preposition -> (Case => Str) -> Str = \prep,arg ->
- prep.s ++ arg ! prep.c ;
-
--- To build a preposition from just a case.
-
- noPreposition : Case -> Preposition = \c ->
- {s = [] ; c = c} ;
-
--- 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.
-
- appAdj : Adjective -> Number => Gender => Case => Str = \adj ->
- let
- ad : GenNum -> Case -> Str = \gn,c ->
- adj.s ! Posit ! AMod gn c
- in
- \\n,g,c => case n of {
- Sg => ad (GSg g) c ;
- _ => ad GPl c
- } ;
-
--- This auxiliary gives the forms in each degree of adjectives.
-
- adjForms : (x1,x2 : Str) -> AForm => Str = \teuer,teur ->
- table {
- APred => teuer ;
- AMod (GSg Masc) c =>
- caselist (teur+"er") (teur+"en") (teur+"em") (teur+"es") ! c ;
- AMod (GSg Fem) c =>
- caselist (teur+"e") (teur+"e") (teur+"er") (teur+"er") ! c ;
- AMod (GSg Neut) c =>
- caselist (teur+"es") (teur+"es") (teur+"em") (teur+"es") ! c ;
- AMod GPl c =>
- caselist (teur+"e") (teur+"e") (teur+"en") (teur+"er") ! c
- } ;
-
--- For $Verb$.
-
- VPC : Type = {
- s : Bool => Agr => VPForm => { -- True = prefix glued to verb
- fin : Str ; -- hat
- inf : Str -- wollen
- }
- } ;
-
- VP : Type = {
- s : Verb ;
- a1 : Polarity => Str ; -- nicht
- n2 : Agr => Str ; -- dich
- a2 : Str ; -- heute
- isAux : Bool ; -- is a double infinitive
- inf : Str ; -- sagen
- ext : Str -- dass sie kommt
- } ;
-
- predV : Verb -> VP = predVGen False ;
-
- useVP : VP -> VPC = \vp ->
- let
- isAux = vp.isAux ;
- verb = vp.s ;
- vfin : Bool -> Mood -> Tense -> Agr -> Str = \b,m,t,a ->
- verb.s ! vFin b m t a ;
- vinf = verb.s ! VInf False ;
- vpart = if_then_Str isAux vinf (verb.s ! VPastPart APred) ;
-
- vHaben = auxPerfect verb ;
- hat : Mood -> Tense -> Agr -> Str = \m,t,a ->
- vHaben ! vFin False m t a ;
- haben : Str = vHaben ! VInf False ;
-
- wird : Mood -> Agr -> Str = \m,a -> case m of {
- MIndic => werden_V.s ! VFin False (VPresInd a.n a.p) ;
- MConjunct => werden_V.s ! VFin False (VPresSubj a.n a.p)
- } ;
- wuerde : Agr -> Str = \a -> --# notpresent
- werden_V.s ! VFin False (VImpfSubj a.n a.p) ; --# notpresent
-
- auf = verb.prefix ;
-
- vf : Bool -> Str -> Str -> {fin,inf : Str} = \b,fin,inf -> {
- fin = fin ;
- inf = if_then_Str b [] auf ++ inf --- negation of main b
- } ;
-
- in {
- s = \\b,a => table {
- VPFinite m t Simul => case t of {
--- Pres | Past => vf (vfin m t a) [] ; -- the general rule
- Past => vf b (vfin b m t a) [] ; --# notpresent
- Fut => vf True (wird m a) vinf ; --# notpresent
- Cond => vf True (wuerde a) vinf ; --# notpresent
- Pres => vf b (vfin b m t a) []
- } ;
- VPFinite m t Anter => case t of { --# notpresent
- Pres | Past => vf True (hat m t a) vpart ; --# notpresent
- Fut => vf True (wird m a) (vpart ++ haben) ; --# notpresent
- Cond => vf True (wuerde a) (vpart ++ haben) --# notpresent
- } ; --# notpresent
- VPImperat False => vf False (verb.s ! VImper a.n) [] ;
- VPImperat True => vf False (verb.s ! VFin False (VPresSubj Pl P3)) [] ;
- VPInfinit Anter => vf True [] (vpart ++ haben) ; --# notpresent
- VPInfinit Simul => vf True [] (verb.s ! VInf b)
- }
- } ;
-
-
- predVGen : Bool -> Verb -> VP = \isAux, verb -> {
- s = {
- s = verb.s ;
- prefix = verb.prefix ;
- aux = verb.aux ;
- vtype = verb.vtype
- } ;
-
- a1 : Polarity => Str = negation ;
- n2 : Agr => Str = case verb.vtype of {
- VAct => \\_ => [] ;
- VRefl c => \\a => reflPron ! a ! c
- } ;
- a2 : Str = [] ;
- isAux = isAux ; ----
- inf,ext : Str = []
- } ;
-
- auxPerfect : Verb -> VForm => Str = \verb ->
- case verb.aux of {
- VHaben => haben_V.s ;
- VSein => sein_V.s
- } ;
-
- haben_V : Verb =
- mkV
- "haben" "habe" "hast" "hat" "habt" "hab"
- "hatte" "hattest" "hatten" "hattet"
- "hätte" "gehabt"
- [] VHaben ;
-
- werden_V : Verb =
- mkV
- "werden" "werde" "wirst" "wird" "werdet" "werd"
- "wurde" "wurdest" "wurden" "wurdet"
- "würde" "geworden"
- [] VSein ;
-
- werdenPass : Verb =
- mkV
- "werden" "werde" "wirst" "wird" "werdet" "werd"
- "wurde" "wurdest" "wurden" "wurdet"
- "würde" "worden"
- [] VSein ;
-
- sein_V : Verb =
- let
- sein = mkV
- "sein" "bin" "bist" "ist" "seid" "sei"
- "war" "warst" "waren" "wart"
- "wäre" "gewesen"
- [] VSein
- in
- {s = table {
- VFin _ (VPresInd Pl (P1 | P3)) => "sind" ;
- VFin _ (VPresSubj Sg P2) => (variants {"seiest" ; "seist"}) ;
- VFin _ (VPresSubj Sg _) => "sei" ;
- VFin _ (VPresSubj Pl P2) => "seiet" ;
- VFin _ (VPresSubj Pl _) => "seien" ;
- VPresPart a => (regA "seiend").s ! Posit ! a ;
- v => sein.s ! v
- } ;
- prefix = [] ;
- aux = VSein ;
- vtype = VAct
- } ;
-
- auxVV : Verb -> Verb ** {isAux : Bool} = \v -> v ** {isAux = True} ;
-
- negation : Polarity => Str = table {
- Pos => [] ;
- Neg => "nicht"
- } ;
-
--- Extending a verb phrase with new constituents.
-
- insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> {
- s = vp.s ;
- a1 = vp.a1 ;
- n2 = \\a => 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
- 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 ;
- 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 ;
- 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 ;
- n2 = vp.n2 ;
- a2 = vp.a2 ;
- isAux = vp.isAux ; ----
- inf = inf ++ vp.inf ;
- ext = vp.ext
- } ;
-
--- For $Sentence$.
-
- Clause : Type = {
- s : Mood => Tense => Anteriority => Polarity => Order => Str
- } ;
-
- mkClause : Str -> Agr -> VP -> Clause = \subj,agr,vp -> let vps = useVP vp in {
- s = \\m,t,a,b,o =>
- let
- ord = case o of {
- Sub => True ; -- glue prefix to verb
- _ => False
- } ;
- verb = vps.s ! ord ! agr ! VPFinite m t a ;
- neg = vp.a1 ! b ;
- obj = vp.n2 ! agr ;
- compl = obj ++ neg ++ vp.a2 ;
- inf = vp.inf ++ verb.inf ;
- extra = vp.ext ;
- inffin =
- case <a,vp.isAux> of { --# notpresent
- <Anter,True> => verb.fin ++ inf ; -- double inf --# notpresent
- _ => --# notpresent
- inf ++ verb.fin --- or just auxiliary vp
- } --# notpresent
- in
- case o of {
- Main => subj ++ verb.fin ++ compl ++ inf ++ extra ;
- Inv => verb.fin ++ subj ++ compl ++ inf ++ extra ;
- Sub => subj ++ compl ++ inffin ++ extra
- }
- } ;
-
- infVP : Bool -> VP -> ((Agr => Str) * Str * Str) = \isAux, vp -> let vps = useVP vp in
- <
- \\agr => vp.n2 ! agr ++ vp.a2,
- vp.a1 ! Pos ++ (vps.s ! (notB isAux) ! agrP3 Sg ! VPInfinit Simul).inf,
- vp.inf ++ vp.ext
- > ;
-
- useInfVP : Bool -> VP -> Str = \isAux,vp ->
- let vpi = infVP isAux vp in
- vpi.p1 ! agrP3 Sg ++ vpi.p3 ++ vpi.p2 ;
-
--- The nominative case is not used as reflexive, but defined here
--- so that we can reuse this in personal pronouns.
--- The missing Sg "ihrer" shows that a dependence on gender would
--- be needed.
-
- reflPron : Agr => Case => Str = table {
- {n = Sg ; p = P1} => caselist "ich" "mich" "mir" "meiner" ;
- {n = Sg ; p = P2} => caselist "du" "dich" "dir" "deiner" ;
- {g = Masc ; n = Sg ; p = P3} => caselist "er" "sich" "sich" "seiner" ;
- {g = Fem ; n = Sg ; p = P3} => caselist "sie" "sich" "sich" "ihrer" ;
- {g = Neutr ; n = Sg ; p = P3} => caselist "es" "sich" "sich" "seiner" ;
- {n = Pl ; p = P1} => caselist "wir" "uns" "uns" "unser" ;
- {n = Pl ; p = P2} => caselist "ihr" "euch" "euch" "euer" ;
- {n = Pl ; p = P3} => caselist "sie" "sich" "sich" "ihrer"
- } ;
-
- conjThat : Str = "daß" ;
-
- conjThan : Str = "als" ;
-
--- The infinitive particle "zu" is used if and only if $vv.isAux = False$.
-
- infPart : Bool -> Str = \b -> if_then_Str b [] "zu" ;
-
-}