1
0
forked from GitHub/gf-core

Overloaded German mkN.

This commit is contained in:
bringert
2007-05-11 14:36:14 +00:00
parent 7f9fe8b2fd
commit 41fb10fb18

View File

@@ -61,24 +61,23 @@ oper
--2 Nouns
-- Worst case: give all four singular forms, two plural forms (others + dative),
-- and the gender.
mkN : (x1,_,_,_,_,x6 : Str) -> Gender -> N ;
-- mann, mann, manne, mannes, männer, männern
mkN : overload {
-- The regular heuristics recognizes some suffixes, from which it
-- guesses the gender and the declension: "e, ung, ion" give the
-- feminine with plural ending "-n, -en", and the rest are masculines
-- with the plural "-e" (without Umlaut).
regN : Str -> N ;
mkN : Str -> N ;
-- The 'almost regular' case is much like the information given in an ordinary
-- dictionary. It takes the singular and plural nominative and the
-- gender, and infers the other forms from these.
mkN : (x1,x2 : Str) -> Gender -> N ;
-- Worst case: give all four singular forms, two plural forms (others + dative),
-- and the gender.
mkN : (x1,_,_,_,_,x6 : Str) -> Gender -> N
-- mann, mann, manne, mannes, männer, männern
};
reg2N : (x1,x2 : Str) -> Gender -> N ;
-- Relational nouns need a preposition. The most common is "von" with
-- the dative. Some prepositions are constructed in [StructuralGer StructuralGer.html].
@@ -254,13 +253,13 @@ mkV : overload {
singular = Sg ;
plural = Pl ;
mkN a b c d e f g = MorphoGer.mkN a b c d e f g ** {lock_N = <>} ;
mk6N a b c d e f g = MorphoGer.mkN a b c d e f g ** {lock_N = <>} ;
regN : Str -> N = \hund -> case hund of {
_ + "e" => mkN hund hund hund hund (hund + "n") (hund + "n") Fem ;
_ + ("ion" | "ung") => mkN hund hund hund hund (hund + "en") (hund + "en") Fem ;
_ + ("er" | "en" | "el") => mkN hund hund hund (genitS hund) hund (pluralN hund) Masc ;
_ => mkN hund hund hund (genitS hund) (hund + "e") (pluralN hund) Masc
_ + "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 ->
@@ -271,17 +270,17 @@ mkV : overload {
in
case <hund,hunde,g> of { -- Duden p. 223
<_,_ + ("e" | "er"), Masc | Neutr> => -- I,IV
mkN hund hund hundE hunds hunde hunden g ;
mk6N hund hund hundE hunds hunde hunden g ;
<_ + ("el"|"er"|"en"),_ + ("el"|"er"|"en"), Masc | Neutr> => -- II
mkN hund hund hund hunds hunde hunden g ;
mk6N hund hund hund hunds hunde hunden g ;
<_,_ + "s", Masc | Neutr> => -- V
mkN hund hund hund (hund + "s") hunde hunde g ;
mk6N hund hund hund (hund + "s") hunde hunde g ;
<_,_ + "en", Masc> => -- VI
mkN hund hunde hunde hunde hunde hunde g ;
mk6N hund hunde hunde hunde hunde hunde g ;
<_,_ + ("e" | "er"), Fem> => -- VII,VIII
mkN hund hund hund hund hunde hunden g ;
mk6N hund hund hund hund hunde hunden g ;
<_,_ + ("n" | "s"), Fem> => -- IX,X
mkN hund hund hund hund hunde hunde g ;
mk6N hund hund hund hund hunde hunde g ;
_ => regN hund
} ;
@@ -403,6 +402,17 @@ mkV : overload {
-- 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
};
regV : Str -> V ;
irregV : (x1,_,_,_,x5 : Str) -> V ;
mk6V : (x1,_,_,_,_,x6 : Str) -> V ;