forked from GitHub/gf-core
267 lines
6.0 KiB
Plaintext
267 lines
6.0 KiB
Plaintext
--1 A Simple Danish Resource Morphology
|
|
--
|
|
-- Aarne Ranta 2002
|
|
--
|
|
-- This resource morphology contains definitions needed in the resource
|
|
-- syntax. It moreover contains copies of the most usual inflectional patterns
|
|
-- as defined in functional morphology (in the Haskell file $RulesSw.hs$).
|
|
--
|
|
-- We use the parameter types and word classes defined for morphology.
|
|
|
|
resource MorphoDan = open Prelude, TypesDan in {
|
|
|
|
-- Danish grammar source: http://users.cybercity.dk/~nmb3879/danish.html
|
|
|
|
-- nouns
|
|
|
|
oper
|
|
mkSubstantive : (_,_,_,_ : Str) -> {s : SubstForm => Str} =
|
|
\dreng, drengen, drenge, drengene -> {s = table {
|
|
SF Sg Indef c => mkCase dreng ! c ;
|
|
SF Sg Def c => mkCase drengen ! c ;
|
|
SF Pl Indef c => mkCase drenge ! c ;
|
|
SF Pl Def c => mkCase drengene ! c
|
|
}
|
|
} ;
|
|
|
|
mkCase : Str -> Case => Str = \bil -> table {
|
|
Nom => bil ;
|
|
Gen => bil + "s" --- but: hus --> hus
|
|
} ;
|
|
|
|
extNGen : Str -> NounGender = \s -> case last s of {
|
|
"n" => NUtr ;
|
|
_ => NNeutr
|
|
} ;
|
|
|
|
nDreng : Str -> Subst = \dreng ->
|
|
mkSubstantive dreng (dreng + "en") (dreng + "e") (dreng + "ene") **
|
|
{h1 = Utr} ;
|
|
|
|
nBil : Str -> Subst = \bil ->
|
|
mkSubstantive bil (bil + "en") (bil + "er") (bil + "erne") **
|
|
{h1 = Utr} ;
|
|
|
|
nUge : Str -> Subst = \uge ->
|
|
mkSubstantive uge (uge + "n") (uge + "r") (uge + "rne") **
|
|
{h1 = Utr} ;
|
|
|
|
nHus : Str -> Subst = \hus ->
|
|
mkSubstantive hus (hus + "et") hus (hus + "ene") **
|
|
{h1 = Neutr} ;
|
|
|
|
-- adjectives
|
|
|
|
mkAdjective : (_,_,_,_,_ : Str) -> Adj =
|
|
\stor,stort,store,storre,storst -> {s = table {
|
|
AF (Posit (Strong (ASg Utr))) c => mkCase stor ! c ;
|
|
AF (Posit (Strong (ASg Neutr))) c => mkCase stort ! c ;
|
|
AF (Posit _) c => mkCase store ! c ;
|
|
AF Compar c => mkCase storre ! c ;
|
|
AF (Super SupStrong) c => mkCase storst ! c ;
|
|
AF (Super SupWeak) c => mkCase (storst + "e") ! c
|
|
}
|
|
} ;
|
|
|
|
aRod : Str -> Adj = \rod ->
|
|
mkAdjective rod (rod + "t") (rod + "e") (rod + "ere") (rod + "est") ;
|
|
|
|
aAbstrakt : Str -> Adj = \abstrakt ->
|
|
mkAdjective abstrakt abstrakt (abstrakt + "e") (abstrakt + "ere") (abstrakt + "est") ;
|
|
|
|
aRask : Str -> Adj = \rask ->
|
|
mkAdjective rask rask (rask + "e") (rask + "ere") (rask + "est") ;
|
|
|
|
extractPositive : Adj -> {s : AdjFormPos => Case => Str} = \adj ->
|
|
{s = \\a,c => adj.s ! (AF (Posit a) c)} ;
|
|
|
|
-- verbs
|
|
|
|
mkVerb : (_,_,_,_,_,_ : Str) -> Verbum =
|
|
\spise,spiser,spises,spiste,spist,spis -> {s = table {
|
|
VI (Inf v) => mkVoice v spise ;
|
|
VF (Pres Act) => spiser ;
|
|
VF (Pres Pass) => spises ;
|
|
VF (Pret v) => mkVoice v spiste ;
|
|
VI (Supin v) => mkVoice v spist ;
|
|
VI (PtPret _ c) => mkCase spist ! c ; ---- GenNum
|
|
VF (Imper v) => mkVoice v spis
|
|
}
|
|
} ;
|
|
|
|
irregVerb : (drikke,drakk,drukket : Str) -> Verbum =
|
|
\drikke,drakk,drukket ->
|
|
let
|
|
drikk = init drikke ;
|
|
drikker = case last (init drikke) of {
|
|
"r" => drikk ;
|
|
_ => drikke + "r"
|
|
}
|
|
in
|
|
mkVerb drikke drikker (drikke + "s") drakk drukket drikk ;
|
|
|
|
regVerb : Str -> Str -> Verbum = \spise, spiste ->
|
|
let
|
|
spis = init spise ;
|
|
te = Predef.dp 2 spiste
|
|
in
|
|
case te of {
|
|
"te" => vSpis spis ;
|
|
"de" => case last spise of {
|
|
"e" => vHusk spis ;
|
|
_ => vBo spise
|
|
} ;
|
|
_ => vHusk spis
|
|
} ;
|
|
|
|
mkVoice : Voice -> Str -> Str = \v,s -> case v of {
|
|
Act => s ;
|
|
Pass => s + case last s of {
|
|
"s" => "es" ;
|
|
_ => "s"
|
|
}
|
|
} ;
|
|
|
|
vHusk : Str -> Verbum = \husk ->
|
|
mkVerb (husk + "e") (husk + "er") (husk + "es") (husk + "ede") (husk + "et") husk ;
|
|
|
|
vSpis : Str -> Verbum = \spis ->
|
|
mkVerb (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t") spis ;
|
|
|
|
vBo : Str -> Verbum = \bo ->
|
|
mkVerb bo (bo + "r") (bo + "es") (bo + "ede") (bo + "et") bo ;
|
|
|
|
-- pronouns
|
|
|
|
oper jag_32 : ProPN =
|
|
{s = table {
|
|
PNom => "jeg" ;
|
|
PAcc => "mig" ;
|
|
PGen (ASg Utr) => "min" ;
|
|
PGen (ASg Neutr) => "mit" ;
|
|
PGen APl => "mine"
|
|
} ;
|
|
h1 = Utr ;
|
|
h2 = Sg ;
|
|
h3 = P1
|
|
} ;
|
|
|
|
oper du_33 : ProPN =
|
|
{s = table {
|
|
PNom => "du" ;
|
|
PAcc => "dig" ;
|
|
PGen (ASg Utr) => "din" ;
|
|
PGen (ASg Neutr) => "dit" ;
|
|
PGen APl => "dine"
|
|
} ;
|
|
h1 = Utr ;
|
|
h2 = Sg ;
|
|
h3 = P2
|
|
} ;
|
|
|
|
oper han_34 : ProPN =
|
|
{s = table {
|
|
PNom => "han" ;
|
|
PAcc => "ham" ;
|
|
PGen (ASg Utr) => "hans" ;
|
|
PGen (ASg Neutr) => "hans" ;
|
|
PGen APl => "hans"
|
|
} ;
|
|
h1 = Utr ;
|
|
h2 = Sg ;
|
|
h3 = P3
|
|
} ;
|
|
oper hon_35 : ProPN =
|
|
{s = table {
|
|
PNom => "hun" ;
|
|
PAcc => "hende" ;
|
|
PGen (ASg Utr) => "hendes" ;
|
|
PGen (ASg Neutr) => "hendes" ;
|
|
PGen APl => "hendes"
|
|
} ;
|
|
h1 = Utr ;
|
|
h2 = Sg ;
|
|
h3 = P3
|
|
} ;
|
|
|
|
oper vi_36 : ProPN =
|
|
{s = table {
|
|
PNom => "vi" ;
|
|
PAcc => "os" ;
|
|
PGen _ => "vores"
|
|
} ;
|
|
h1 = Utr ;
|
|
h2 = Pl ;
|
|
h3 = P1
|
|
} ;
|
|
|
|
oper ni_37 : ProPN =
|
|
{s = table {
|
|
PNom => "i" ;
|
|
PAcc => "jer" ;
|
|
PGen _ => "jeres"
|
|
} ;
|
|
h1 = Utr ;
|
|
h2 = Pl ;
|
|
h3 = P2
|
|
} ;
|
|
|
|
oper de_38 : ProPN =
|
|
{s = table {
|
|
PNom => "de" ;
|
|
PAcc => "dem" ;
|
|
PGen _ => "deres"
|
|
} ;
|
|
h1 = Utr ;
|
|
h2 = Pl ;
|
|
h3 = P3
|
|
} ;
|
|
|
|
oper De_38 : ProPN =
|
|
{s = table {
|
|
PNom => "De" ;
|
|
PAcc => "Dem" ;
|
|
PGen _ => "Deres"
|
|
} ;
|
|
h1 = Utr ;
|
|
h2 = Sg ;
|
|
h3 = P2
|
|
} ;
|
|
|
|
oper den_39 : ProPN =
|
|
{s = table {
|
|
PNom => "den" ;
|
|
PAcc => "den" ;
|
|
PGen _ => "dens"
|
|
} ;
|
|
h1 = Utr ;
|
|
h2 = Sg ;
|
|
h3 = P3
|
|
} ;
|
|
|
|
oper det_40 : ProPN =
|
|
{s = table {
|
|
PNom => "det" ;
|
|
PAcc => "det" ;
|
|
PGen _ => "dets"
|
|
} ;
|
|
h1 = Neutr ;
|
|
h2 = Sg ;
|
|
h3 = P3
|
|
} ;
|
|
|
|
|
|
-- from Numerals
|
|
|
|
param DForm = ental | ton | tiotal ;
|
|
|
|
oper mkTal : Str -> Str -> Str -> {s : DForm => Str} =
|
|
\to, tolv, tyve ->
|
|
{s = table {ental => to ; ton => tolv ; tiotal => tyve}} ;
|
|
oper regTal : Str -> {s : DForm => Str} = \fem -> mkTal fem (fem + "ton") (fem + "tio") ;
|
|
numPl : Str -> {s : Gender => Str ; n : Number} = \n ->
|
|
{s = \\_ => n ; n = Pl} ;
|
|
|
|
|
|
}
|