mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-24 18:28:55 -06:00
resource = resource-1.0
This commit is contained in:
@@ -8,30 +8,24 @@
|
||||
--
|
||||
-- We use the parameter types and word classes defined for morphology.
|
||||
|
||||
resource MorphoDan = open Prelude, TypesDan in {
|
||||
resource MorphoDan = CommonScand, ResDan ** open Prelude, Predef in {
|
||||
|
||||
-- Danish grammar source: http://users.cybercity.dk/~nmb3879/danish.html
|
||||
oper
|
||||
|
||||
-- type synonyms
|
||||
|
||||
Subst : Type = {s : Number => Species => Case => Str} ;
|
||||
Adj = Adjective ;
|
||||
|
||||
-- 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
|
||||
}
|
||||
} ;
|
||||
mkSubstantive : (_,_,_,_ : Str) -> Subst =
|
||||
\dreng, drengen, drenger, drengene ->
|
||||
{s = nounForms dreng drengen drenger drengene} ;
|
||||
|
||||
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
|
||||
extNGen : Str -> Gender = \s -> case last s of {
|
||||
"n" => Utr ;
|
||||
_ => Neutr
|
||||
} ;
|
||||
|
||||
nDreng : Str -> Subst = \dreng ->
|
||||
@@ -52,40 +46,41 @@ oper
|
||||
|
||||
-- adjectives
|
||||
|
||||
mkAdjective : (_,_,_,_,_ : Str) -> Adj =
|
||||
mkAdject : (_,_,_,_,_ : 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
|
||||
AF (APosit (Strong SgUtr )) c => mkCase c stor ;
|
||||
AF (APosit (Strong SgNeutr)) c => mkCase c stort ;
|
||||
AF (APosit _) c => mkCase c store ;
|
||||
AF ACompar c => mkCase c storre ;
|
||||
AF (ASuperl SupStrong) c => mkCase c storst ;
|
||||
AF (ASuperl SupWeak) c => mkCase c (storst + "e")
|
||||
}
|
||||
} ;
|
||||
|
||||
aRod : Str -> Adj = \rod ->
|
||||
mkAdjective rod (rod + "t") (rod + "e") (rod + "ere") (rod + "est") ;
|
||||
mkAdject rod (rod + "t") (rod + "e") (rod + "ere") (rod + "est") ;
|
||||
|
||||
aAbstrakt : Str -> Adj = \abstrakt ->
|
||||
mkAdjective abstrakt abstrakt (abstrakt + "e") (abstrakt + "ere") (abstrakt + "est") ;
|
||||
mkAdject abstrakt abstrakt (abstrakt + "e") (abstrakt + "ere") (abstrakt + "est") ;
|
||||
|
||||
aRask : Str -> Adj = \rask ->
|
||||
mkAdjective rask rask (rask + "e") (rask + "ere") (rask + "est") ;
|
||||
mkAdject 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 =
|
||||
Verbum : Type = {s : VForm => Str} ;
|
||||
|
||||
mkVerb6 : (_,_,_,_,_,_ : 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
|
||||
VI (VInfin v) => mkVoice v spise ;
|
||||
VF (VPres Act) => spiser ;
|
||||
VF (VPres Pass) => spises ;
|
||||
VF (VPret v) => mkVoice v spiste ; --# notpresent
|
||||
VI (VSupin v) => mkVoice v spist ; --# notpresent
|
||||
VI (VPtPret (Strong (SgUtr | SgNeutr)) c) => mkCase c spist ;
|
||||
VI (VPtPret _ c) => mkCase c (spist + "e") ;
|
||||
VF (VImper v) => mkVoice v spis
|
||||
}
|
||||
} ;
|
||||
|
||||
@@ -98,7 +93,7 @@ oper
|
||||
_ => drikke + "r"
|
||||
}
|
||||
in
|
||||
mkVerb drikke drikker (drikke + "s") drakk drukket drikk ;
|
||||
mkVerb6 drikke drikker (drikke + "s") drakk drukket (mkImper drikk) ;
|
||||
|
||||
regVerb : Str -> Str -> Verbum = \spise, spiste ->
|
||||
let
|
||||
@@ -114,153 +109,56 @@ oper
|
||||
_ => 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 ;
|
||||
mkVerb6 (husk + "e") (husk + "er") (husk + "es") (husk + "ede") (husk + "et")
|
||||
(mkImper husk) ;
|
||||
|
||||
vSpis : Str -> Verbum = \spis ->
|
||||
mkVerb (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t") spis ;
|
||||
mkVerb6 (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t")
|
||||
(mkImper spis) ;
|
||||
|
||||
vBo : Str -> Verbum = \bo ->
|
||||
mkVerb bo (bo + "r") (bo + "es") (bo + "ede") (bo + "et") bo ;
|
||||
mkVerb6 bo (bo + "r") (bo + "es") (bo + "ede") (bo + "et") (mkImper bo) ;
|
||||
|
||||
-- pronouns
|
||||
-- Remove consonant duplication: "passe - pas"
|
||||
|
||||
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
|
||||
} ;
|
||||
mkImper : Str -> Str = \s ->
|
||||
if_then_Str (pbool2bool (Predef.eqStr (last s) (last (init s)))) (init s) s ;
|
||||
|
||||
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
|
||||
-- For $Numeral$.
|
||||
|
||||
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} ;
|
||||
oper
|
||||
LinDigit = {s : DForm => CardOrd => Str} ;
|
||||
|
||||
cardOrd : Str -> Str -> CardOrd => Str = \tre,tredje ->
|
||||
table {
|
||||
NCard _ => tre ;
|
||||
NOrd a => tredje ---- a
|
||||
} ;
|
||||
|
||||
cardReg : Str -> CardOrd => Str = \syv ->
|
||||
cardOrd syv (syv + case last syv of {
|
||||
"n" => "de" ;
|
||||
"e" => "nde" ;
|
||||
_ => "ende"
|
||||
}) ;
|
||||
|
||||
|
||||
mkTal : (x1,_,_,_,x5 : Str) -> LinDigit =
|
||||
\två, tolv, tjugo, andra, tyvende ->
|
||||
{s = table {
|
||||
ental => cardOrd två andra ;
|
||||
ton => cardReg tolv ;
|
||||
tiotal => cardOrd tjugo tyvende
|
||||
}
|
||||
} ;
|
||||
|
||||
numPl : (CardOrd => Str) -> {s : CardOrd => Str ; n : Number} = \n ->
|
||||
{s = n ; n = Pl} ;
|
||||
|
||||
invNum : CardOrd = NCard Neutr ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user