forked from GitHub/gf-core
German lexicon started
This commit is contained in:
@@ -20,31 +20,32 @@ concrete CatGer of Cat = open ResGer, Prelude, (R = ParamX) in {
|
|||||||
-- s2 : Agr => Str
|
-- s2 : Agr => Str
|
||||||
-- } ;
|
-- } ;
|
||||||
--
|
--
|
||||||
-- V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
|
V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
|
||||||
-- V2, VV, V2A = Verb ** {c2 : Str} ;
|
V2, VV, V2A = Verb ** {c2 : Preposition} ;
|
||||||
-- V3 = Verb ** {c2, c3 : Str} ;
|
V3 = Verb ** {c2, c3 : Preposition} ;
|
||||||
--
|
|
||||||
-- AP = {s : Agr => Str ; isPre : Bool} ;
|
AP = {s : AForm => Str ; isPre : Bool} ;
|
||||||
-- Comp = {s : Agr => Str} ;
|
Comp = {s : Str} ;
|
||||||
--
|
--
|
||||||
-- SC = {s : Str} ;
|
-- SC = {s : Str} ;
|
||||||
--
|
--
|
||||||
-- A = {s : AForm => Str} ;
|
A = {s : Degree => AForm => Str} ;
|
||||||
-- A2 = {s : AForm => Str ; c2 : Str} ;
|
A2 = {s : Degree => AForm => Str ; c2 : Preposition} ;
|
||||||
--
|
|
||||||
-- Adv, AdV, AdA, AdS, AdN = {s : Str} ;
|
Adv, AdV, AdA, AdS, AdN = {s : Str} ;
|
||||||
-- Prep = {s : Str} ;
|
Prep = {s : Str ; c : Case} ;
|
||||||
--
|
|
||||||
-- Det, Quant = {s : Str ; n : Number} ;
|
Det, Quant = {s : Gender => Case => Str ; n : Number ; a : Adjf} ;
|
||||||
-- Predet, Num, Ord = {s : Str} ;
|
Predet = {s : Number => Gender => Case => Str} ;
|
||||||
--
|
Num, Ord = {s : Gender => Case => Str} ;
|
||||||
|
|
||||||
CN = {s : Adjf => Number => Case => Str ; g : Gender} ;
|
CN = {s : Adjf => Number => Case => Str ; g : Gender} ;
|
||||||
N = {s : Number => Case => Str ; g : Gender} ;
|
N = {s : Number => Case => Str ; g : Gender} ;
|
||||||
-- PN = {s : Case => Str} ;
|
PN = {s : Case => Str} ;
|
||||||
-- Pron, NP = {s : Case => Str ; a : Agr} ;
|
Pron, NP = {s : Case => Str ; a : Agr} ;
|
||||||
-- N2 = {s : Number => Case => Str} ** {c2 : Str} ;
|
N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Preposition} ;
|
||||||
-- N3 = {s : Number => Case => Str} ** {c2,c3 : Str} ;
|
N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Preposition} ;
|
||||||
--
|
|
||||||
-- IP = {s : Case => Str ; n : Number} ;
|
-- IP = {s : Case => Str ; n : Number} ;
|
||||||
-- IDet = {s : Str ; n : Number} ;
|
-- IDet = {s : Str ; n : Number} ;
|
||||||
-- IAdv = {s : Str} ;
|
-- IAdv = {s : Str} ;
|
||||||
|
|||||||
@@ -1,25 +1,27 @@
|
|||||||
concrete LexGer of Lex = CatGer ** open ResGer, Prelude in {
|
concrete LexGer of Lex = CatGer ** open ResGer, Prelude in {
|
||||||
--
|
|
||||||
-- lin
|
lin
|
||||||
-- walk_V = regV "walk" ;
|
walk_V = mkV "gehen" "geht" "geh" "ging" "ginge" "gegangen" ;
|
||||||
-- help_V2 = regV "help" ** {c2 = []} ;
|
help_V2 = mkV "helfen" "hilft" "hilf" "half" "hälfe" "geholfen" **
|
||||||
-- show_V3 = regV "show" ** {c2 = [] ; c3 = "to"} ;
|
{c2 = {s = [] ; c = Dat}} ;
|
||||||
|
show_V3 = regV "zeigen" **
|
||||||
|
{c2 = {s = [] ; c = Acc} ; c3 = {s = [] ; c = Dat}} ;
|
||||||
-- want_VV = regV "want" ** {c2 = "to"} ;
|
-- want_VV = regV "want" ** {c2 = "to"} ;
|
||||||
-- claim_VS = regV "claim" ;
|
claim_VS = no_geV (regV "behaupten") ;
|
||||||
-- ask_VQ = regV "ask" ;
|
ask_VQ = regV "fragen" ;
|
||||||
--
|
|
||||||
-- dog_N = regN "dog" ;
|
dog_N = mkN4 "Hund" "Hundes" "Hünde" "Hünden" Masc ;
|
||||||
-- son_N2 = regN "son" ** {c2 = "of"} ;
|
-- son_N2 = regN "son" ** {c2 = "of"} ;
|
||||||
-- way_N3 = regN "way" ** {c2 = "from" ; c3 = "to"} ;
|
-- way_N3 = regN "way" ** {c2 = "from" ; c3 = "to"} ;
|
||||||
--
|
--
|
||||||
-- warm_A = regA "warm" ;
|
warm_A = mkA "warm" "warm" "wärmer" "wärmst" ;
|
||||||
-- close_A2 = regA "close" ** {c2 = "to"} ;
|
-- close_A2 = regA "close" ** {c2 = "to"} ;
|
||||||
--
|
--
|
||||||
-- here_Adv = {s = "here"} ;
|
here_Adv = {s = "hier"} ;
|
||||||
-- very_AdA = {s = "very"} ;
|
very_AdA = {s = "sehr"} ;
|
||||||
-- always_AdV = {s = "always"} ;
|
always_AdV = {s = "immer"} ;
|
||||||
--
|
|
||||||
-- only_Predet = {s = "only"} ;
|
only_Predet = {s = \\_,_,_ => "nur"} ;
|
||||||
-- all_Predet = {s = "only"} ;
|
-- all_Predet = {s = "only"} ;
|
||||||
-- this_Quant = {s = "this" ; n = Sg} ;
|
-- this_Quant = {s = "this" ; n = Sg} ;
|
||||||
-- these_Quant = {s = "these" ; n = Pl} ;
|
-- these_Quant = {s = "these" ; n = Pl} ;
|
||||||
|
|||||||
@@ -22,22 +22,21 @@ resource ParamGer = ParamX ** {
|
|||||||
|
|
||||||
GenNum = GSg Gender | GPl ;
|
GenNum = GSg Gender | GPl ;
|
||||||
|
|
||||||
-- The predicative form of adjectives is not inflected further.
|
|
||||||
|
|
||||||
AForm = APred | AMod Adjf GenNum Case ;
|
|
||||||
|
|
||||||
|
|
||||||
---- Agreement of $NP$ is a record. We'll add $Gender$ later.
|
---- Agreement of $NP$ is a record. We'll add $Gender$ later.
|
||||||
--
|
--
|
||||||
-- oper
|
oper Agr = {n : Number ; p : Person} ;
|
||||||
-- Agr = {n : Number ; p : Person} ;
|
|
||||||
--
|
----2 For $Adjective$
|
||||||
-- param
|
|
||||||
-- Gender = Neutr | Masc | Fem ;
|
-- The predicative form of adjectives is not inflected further.
|
||||||
--
|
|
||||||
|
param
|
||||||
|
AForm = APred | AMod Adjf GenNum Case ;
|
||||||
|
|
||||||
|
|
||||||
--2 For $Verb$
|
--2 For $Verb$
|
||||||
|
|
||||||
VForm =
|
param VForm =
|
||||||
VInf
|
VInf
|
||||||
| VPresInd Number Person
|
| VPresInd Number Person
|
||||||
| VPresSubj Number Person
|
| VPresSubj Number Person
|
||||||
@@ -47,20 +46,11 @@ resource ParamGer = ParamX ** {
|
|||||||
| VPresPart AForm
|
| VPresPart AForm
|
||||||
| VPastPart AForm ;
|
| VPastPart AForm ;
|
||||||
|
|
||||||
|
-- The order of sentence is depends on whether it is used as a main
|
||||||
|
-- clause, inverted, or subordinate.
|
||||||
|
|
||||||
---- Only these five forms are needed for open-lexicon verbs.
|
Order = ODir | OQuest ;
|
||||||
--
|
--
|
||||||
-- param
|
|
||||||
-- VForm = VInf | VPres | VPast | VPPart | VPresPart ;
|
|
||||||
--
|
|
||||||
---- The order of sentence is needed already in $VP$.
|
|
||||||
--
|
|
||||||
-- Order = ODir | OQuest ;
|
|
||||||
--
|
|
||||||
--
|
|
||||||
----2 For $Adjective$
|
|
||||||
--
|
|
||||||
-- AForm = AAdj Degree | AAdv ;
|
|
||||||
--
|
--
|
||||||
----2 For $Relative$
|
----2 For $Relative$
|
||||||
--
|
--
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ resource ResGer = ParamGer ** open Prelude in {
|
|||||||
|
|
||||||
Noun : Type = {s : Number => Case => Str ; g : Gender} ;
|
Noun : Type = {s : Number => Case => Str ; g : Gender} ;
|
||||||
|
|
||||||
mkNoun : (x1,_,_,_,_,x6 : Str) -> Gender -> Noun =
|
mkN : (x1,_,_,_,_,x6 : Str) -> Gender -> Noun =
|
||||||
\mann, mannen, manne, mannes, maenner, maennern, g -> {
|
\mann, mannen, manne, mannes, maenner, maennern, g -> {
|
||||||
s = table {
|
s = table {
|
||||||
Sg => caselist mann mannen manne mannes ;
|
Sg => caselist mann mannen manne mannes ;
|
||||||
@@ -47,17 +47,17 @@ resource ResGer = ParamGer ** open Prelude in {
|
|||||||
-- But we never need all the six forms at the same time. Often
|
-- But we never need all the six forms at the same time. Often
|
||||||
-- we need just two or four forms.
|
-- we need just two or four forms.
|
||||||
|
|
||||||
mkNoun4 : (x1,_,_,x4 : Str) -> Gender -> Noun = \wein,weines,weine,weinen ->
|
mkN4 : (x1,_,_,x4 : Str) -> Gender -> Noun = \wein,weines,weine,weinen ->
|
||||||
mkNoun wein wein wein weines weine weinen ;
|
mkN wein wein wein weines weine weinen ;
|
||||||
|
|
||||||
mkNoun2 : (x1,x2 : Str) -> Gender -> Noun = \frau,frauen ->
|
mkN2 : (x1,x2 : Str) -> Gender -> Noun = \frau,frauen ->
|
||||||
mkNoun4 frau frau frauen frauen ;
|
mkN4 frau frau frauen frauen ;
|
||||||
|
|
||||||
-- Adjectives need four forms: two for the positive and one for the other degrees.
|
-- Adjectives need four forms: two for the positive and one for the other degrees.
|
||||||
|
|
||||||
Adjective : Type = {s : Degree => AForm => Str} ;
|
Adjective : Type = {s : Degree => AForm => Str} ;
|
||||||
|
|
||||||
mkAdjective : (x1,_,_,x4 : Str) -> Adjective = \gut,gute,besser,best ->
|
mkA : (x1,_,_,x4 : Str) -> Adjective = \gut,gute,besser,best ->
|
||||||
{s = table {
|
{s = table {
|
||||||
Posit => adjForms gut gute ;
|
Posit => adjForms gut gute ;
|
||||||
Compar => adjForms besser besser ;
|
Compar => adjForms besser besser ;
|
||||||
@@ -65,8 +65,8 @@ resource ResGer = ParamGer ** open Prelude in {
|
|||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
regAdjective : Str -> Adjective = \blau ->
|
regA : Str -> Adjective = \blau ->
|
||||||
mkAdjective blau blau (blau + "er") (blau + "est") ;
|
mkA blau blau (blau + "er") (blau + "est") ;
|
||||||
|
|
||||||
-- This auxiliary gives the forms in each degree.
|
-- This auxiliary gives the forms in each degree.
|
||||||
|
|
||||||
@@ -89,9 +89,21 @@ resource ResGer = ParamGer ** open Prelude in {
|
|||||||
AMod Weak GPl c => teur+"en"
|
AMod Weak GPl c => teur+"en"
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- This is used e.g. when forming determiners.
|
||||||
|
|
||||||
|
appAdj : Adjective -> Number => Gender => Case => Str = \adj ->
|
||||||
|
let
|
||||||
|
ad : GenNum -> Case -> Str = \gn,c ->
|
||||||
|
adj.s ! Posit ! AMod Strong gn c
|
||||||
|
in
|
||||||
|
\\n,g,c => case n of {
|
||||||
|
Sg => ad (GSg g) c ;
|
||||||
|
_ => ad GPl c
|
||||||
|
} ;
|
||||||
|
|
||||||
Verb : Type = {s : VForm => Str} ;
|
Verb : Type = {s : VForm => Str} ;
|
||||||
|
|
||||||
mkVerb : (x1,_,_,_,_,x6 : Str) -> Verb = \geben,gibt,gib,gab,gaebe,gegeben ->
|
mkV : (x1,_,_,_,_,x6 : Str) -> Verb = \geben,gibt,gib,gab,gaebe,gegeben ->
|
||||||
let
|
let
|
||||||
ifSibilant : Str -> Str -> Str -> Str = \u,b1,b2 ->
|
ifSibilant : Str -> Str -> Str -> Str = \u,b1,b2 ->
|
||||||
case u of {
|
case u of {
|
||||||
@@ -109,7 +121,7 @@ resource ResGer = ParamGer ** open Prelude in {
|
|||||||
gebt = addE geb + "t" ;
|
gebt = addE geb + "t" ;
|
||||||
gebte = ifTok Tok (Predef.dp 1 gab) "e" gab (gab + "e") ;
|
gebte = ifTok Tok (Predef.dp 1 gab) "e" gab (gab + "e") ;
|
||||||
gibst = ifSibilant (Predef.dp 1 gib) (gib + "t") (gib + "st") ;
|
gibst = ifSibilant (Predef.dp 1 gib) (gib + "t") (gib + "st") ;
|
||||||
gegebener = (regAdjective gegeben).s ! Posit ;
|
gegebener = (regA gegeben).s ! Posit ;
|
||||||
gabe = addE gab ;
|
gabe = addE gab ;
|
||||||
gibe = ifTok Str (Predef.dp 2 gib) "ig" "e" [] ++ addE gib
|
gibe = ifTok Str (Predef.dp 2 gib) "ig" "e" [] ++ addE gib
|
||||||
in {s = table {
|
in {s = table {
|
||||||
@@ -126,7 +138,7 @@ resource ResGer = ParamGer ** open Prelude in {
|
|||||||
VPresSubj Sg P3 => geb + "e" ;
|
VPresSubj Sg P3 => geb + "e" ;
|
||||||
VPresSubj Pl P2 => geb + "et" ;
|
VPresSubj Pl P2 => geb + "et" ;
|
||||||
VPresSubj Pl _ => geben ;
|
VPresSubj Pl _ => geben ;
|
||||||
VPresPart a => (regAdjective (geben + "d")).s ! Posit ! a ;
|
VPresPart a => (regA (geben + "d")).s ! Posit ! a ;
|
||||||
|
|
||||||
VImpfInd Sg P1 => gab ;
|
VImpfInd Sg P1 => gab ;
|
||||||
VImpfInd Sg P2 => gabe + "st" ;
|
VImpfInd Sg P2 => gabe + "st" ;
|
||||||
@@ -146,7 +158,7 @@ resource ResGer = ParamGer ** open Prelude in {
|
|||||||
|
|
||||||
-- Weak verbs, including "lächeln", "kümmern".
|
-- Weak verbs, including "lächeln", "kümmern".
|
||||||
|
|
||||||
regVerb : Str -> Verb = \legen ->
|
regV : Str -> Verb = \legen ->
|
||||||
let
|
let
|
||||||
leg = case Predef.dp 2 legen of {
|
leg = case Predef.dp 2 legen of {
|
||||||
"en" => Predef.tk 2 legen ;
|
"en" => Predef.tk 2 legen ;
|
||||||
@@ -155,7 +167,16 @@ resource ResGer = ParamGer ** open Prelude in {
|
|||||||
lege = addE leg ;
|
lege = addE leg ;
|
||||||
legte = lege + "te"
|
legte = lege + "te"
|
||||||
in
|
in
|
||||||
mkVerb legen (lege+"t") leg legte legte ("ge"+lege+"t") ;
|
mkV legen (lege+"t") leg legte legte ("ge"+lege+"t") ;
|
||||||
|
|
||||||
|
-- To eliminate the morpheme "ge".
|
||||||
|
|
||||||
|
no_geV : Verb -> Verb = \verb -> {
|
||||||
|
s = table {
|
||||||
|
VPastPart a => Predef.drop 2 (verb.s ! VPastPart a) ;
|
||||||
|
v => verb.s ! v
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
-- This function decides whether to add an "e" to the stem before "t".
|
-- This function decides whether to add an "e" to the stem before "t".
|
||||||
-- Examples: "töten - tötet", "kehren - kehrt", "lernen - lernt", "atmen - atmet".
|
-- Examples: "töten - tötet", "kehren - kehrt", "lernen - lernt", "atmen - atmet".
|
||||||
@@ -175,6 +196,10 @@ resource ResGer = ParamGer ** open Prelude in {
|
|||||||
in
|
in
|
||||||
stem + e ;
|
stem + e ;
|
||||||
|
|
||||||
|
-- Prepositions for complements indicate the complement case.
|
||||||
|
|
||||||
|
Preposition : Type = {s : Str ; c : Case} ;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- mkIP : (i,me,my : Str) -> Number -> {s : Case => Str ; n : Number} =
|
-- mkIP : (i,me,my : Str) -> Number -> {s : Case => Str ; n : Number} =
|
||||||
-- \i,me,my,n -> let who = mkNP i me my n P3 in {s = who.s ; n = n} ;
|
-- \i,me,my,n -> let who = mkNP i me my n P3 in {s = who.s ; n = n} ;
|
||||||
|
|||||||
Reference in New Issue
Block a user