diff --git a/lib/resource-1.0/danish/AdjectiveDan.gf b/lib/resource-1.0/danish/AdjectiveDan.gf new file mode 100644 index 000000000..71d3c56c2 --- /dev/null +++ b/lib/resource-1.0/danish/AdjectiveDan.gf @@ -0,0 +1,2 @@ +concrete AdjectiveDan of Adjective = CatDan ** AdjectiveScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.0/danish/AdverbDan.gf b/lib/resource-1.0/danish/AdverbDan.gf new file mode 100644 index 000000000..07bab5be4 --- /dev/null +++ b/lib/resource-1.0/danish/AdverbDan.gf @@ -0,0 +1,2 @@ +concrete AdverbDan of Adverb = CatDan ** AdverbScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.0/danish/CatDan.gf b/lib/resource-1.0/danish/CatDan.gf new file mode 100644 index 000000000..d3d6eec83 --- /dev/null +++ b/lib/resource-1.0/danish/CatDan.gf @@ -0,0 +1,2 @@ +concrete CatDan of Cat = CommonX ** CatScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.0/danish/ConjunctionDan.gf b/lib/resource-1.0/danish/ConjunctionDan.gf new file mode 100644 index 000000000..d8e9215fd --- /dev/null +++ b/lib/resource-1.0/danish/ConjunctionDan.gf @@ -0,0 +1,2 @@ +concrete ConjunctionDan of Conjunction = CatDan ** ConjunctionScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.0/danish/DiffDan.gf b/lib/resource-1.0/danish/DiffDan.gf new file mode 100644 index 000000000..6fad22f32 --- /dev/null +++ b/lib/resource-1.0/danish/DiffDan.gf @@ -0,0 +1,72 @@ +instance DiffDan of DiffScand = open CommonScand, Prelude in { + +-- Parameters. + + param + Gender = Utr | Neutr ; + + oper + utrum = Utr ; + neutrum = Neutr ; + + gennum : Gender -> Number -> GenNum = \g,n -> + case of { + => SgUtr ; + => SgNeutr ; + _ => Plg + } ; + + detDef : Species = Def ; + +-- Strings. + + conjThat = "at" ; + conjThan = "end" ; + conjAnd = "og" ; + infMark = "at" ; + + subjIf = "hvis" ; + + artIndef : Gender => Str = table { + Utr => "en" ; + Neutr => "et" + } ; + + verbHave = + mkVerb "have" "har" "hav" "havde" "haft" nonExist nonExist nonExist ; + verbBe = + mkVerb "være" "er" "var" "var" "været" "væren" "været" "værne" ; + verbBecome = + mkVerb "blive" "bliver" "bliv" "blev" "blevet" "bliven" "blivet" "blivne" ; + + auxFut = "vil" ; -- "skal" in ExtDan + auxCond = "ville" ; + + negation : Polarity => Str = table { + Pos => [] ; + Neg => "ikke" + } ; + + genderForms : (x1,x2 : Str) -> Gender => Str = \all,allt -> + table { + Utr => all ; + Neutr => allt + } ; + + relPron : GenNum => RCase => Str = \\gn,c => case c of { + RNom => "som" ; + RGen => "hvis" ; + RPrep => gennumForms "hvilken" "hvilket" "hvilke" ! gn + } ; + + pronSuch = gennumForms "sådan" "sådant" "sådanne" ; + + reflPron : Agr -> Str = \a -> case a of { + {gn = Plg ; p = P1} => "oss" ; + {gn = Plg ; p = P2} => "jer" ; + {p = P1} => "mig" ; + {p = P2} => "dig" ; + {p = P3} => "sig" + } ; + +} diff --git a/lib/resource-1.0/danish/IdiomDan.gf b/lib/resource-1.0/danish/IdiomDan.gf new file mode 100644 index 000000000..7d809f8f0 --- /dev/null +++ b/lib/resource-1.0/danish/IdiomDan.gf @@ -0,0 +1,17 @@ +concrete IdiomDan of Idiom = CatDan ** + open MorphoDan, ParadigmsDan, IrregDan, Prelude in { + + flags optimize=all_subs ; + + lin + ExistNP np = + mkClause "det" (agrP3 neutrum Sg) (insertObj + (\\_ => np.s ! accusative) (predV (depV finne_V))) ; + ImpersCl vp = mkClause "det" (agrP3 neutrum Sg) vp ; + GenericCl vp = mkClause "man" (agrP3 neutrum Sg) vp ; + + ProgrVP vp = + insertObj (\\a => ["ved å"] ++ infVP vp a) (predV verbBe) ; + +} + diff --git a/lib/resource-1.0/danish/IrregDan.gf b/lib/resource-1.0/danish/IrregDan.gf new file mode 100644 index 000000000..e3f43bd19 --- /dev/null +++ b/lib/resource-1.0/danish/IrregDan.gf @@ -0,0 +1,72 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +-- see: http://frodo.bruderhof.com/norskklassen/commonverbs.htm + +concrete IrregDan of IrregDanAbs = CatDan ** open ParadigmsDan in { + + flags optimize=values ; + + lin be_V = mkV "be" "ber" "bes" "bad" "bedt" "be" ; + lin bite_V = irregV "bite" (variants {"bet" ; "beit"}) "bitt" ; + lin bli_V = irregV "bli" (variants {"ble" ; "blei"}) "blitt" ; + lin brenne_V = irregV "brenne" (variants {"brant" ; "brente"}) "brent" ; + lin bringe_V = irregV "bringe" "brakte" "brakt" ; + lin burde_V = irregV "burde" "burde" "burdet" ; + lin bære_V = irregV "bære" "bar" "båret" ; + lin dra_V = mkV "dra" "drar" "dras" "drog" (variants {"dradd" ; "dratt"}) "dra" ; + lin drikke_V = irregV "drikke" "drakk" "drukket" ; + lin drive_V = irregV "drive" (variants {"drev" ; "dreiv"}) "drevet" ; + lin dø_V = irregV "dø" (variants {"dødde" ; "døde"}) "dødd" ; + lin eie_V = irregV "eie" (variants {"eide" ; "åtte"}) (variants {"eid" ; "ått"}) ; + lin falle_V = irregV "falle" "falt" "falt" ; + lin finne_V = irregV "finne" "fant" "funnet" ; + lin fly_V = irregV "fly" (variants {"fløy" ; "flaug"}) (variants {"fløyet";"flydd"}) ; + lin flyte_V = irregV "flyte" (variants {"fløte" ; "flaut"}) "flytt" ; + lin foretrekke_V = irregV "foretrekke" "foretrakk" "foretrukket" ; + lin forlate_V = irregV "forlate" "forlot" "forlatt" ; + lin forstå_V = irregV "forstå" "forstod" "forstått" ; + lin fortelle_V = irregV "fortelle" "fortalte" "fortalt" ; + lin fryse_V = irregV "fryse" "frøs" "frosset" ; + lin få_V = irregV "få" "fikk" "fått" ; + lin gi_V = irregV "gi" "gav" "gitt" ; + lin gjelde_V = irregV "gjelde" (variants {"gjaldt" ; "galdt"}) "gjeldt" ; + lin gjøre_V = irregV "gjøre" "gjorde" "gjort" ; + lin gni_V = irregV "gni" (variants {"gned" ; "gnei" ; "gnidde"}) "gnidd" ; + lin gå_V = irregV "gå" "gikk" "gått" ; + lin ha_V = irregV "ha" "hadde" "hatt" ; + lin hente_V = irregV "hente" "hentet" "hendt" ; + lin hete_V = irregV "hete" (variants {"het" ; "hette"}) "hett" ; + lin hjelpe_V = irregV "hjelpe" "hjalp" "hjulpet" ; + lin holde_V = irregV "holde" "holdt" "holdt" ; + lin komme_V = irregV "komme" "kom" "kommet" ; + lin kunne_V = irregV "kunne" "kunne" "kunnet" ; + lin la_V = irregV "la" "lot" "latt" ; + lin legge_V = irregV "legge" "la" "lagt" ; + lin ligge_V = irregV "ligge" "lå" "ligget" ; + lin løpe_V = irregV "løpe" "løp" (variants {"løpt" ; "løpet"}) ; + lin måtte_V = irregV "måtte" "måtte" "måttet" ; + lin renne_V = irregV "renne" "rant" "rent" ; + lin se_V = mkV "se" "ser" "ses" "så" "sett" "se" ; + lin selge_V = irregV "selge" "solgte" "solgt" ; + lin sette_V = irregV "sette" "satte" "satt" ; + lin si_V = irregV "si" "sa" "sagt" ; + lin sitte_V = irregV "sitte" "satt" "sittet" ; + lin skjære_V = irregV "skjære" "skar" "skåret" ; + lin skrive_V = irregV "skrive" "skrev" "skrevet" ; + lin skulle_V = irregV "skulle" "skulle" "skullet" ; + lin slå_V = irregV "slå" "slo" "slått" ; + lin slåss_V = mkV "slåss" "slåss" "slåss" "sloss" "slåss" "slåss" ; + lin sove_V = irregV "sove" "sov" "sovet" ; + lin springe_V = irregV "springe" "sprang" "sprunget" ; + lin spørre_V = irregV "spørre" "spurte" "spurt" ; + lin stikke_V = irregV "stikke" "stakk" "stukket" ; + lin stå_V = irregV "stå" "stod" "stått" ; + lin suge_V = irregV "suge" (variants {"sugde" ; "saug"}) "sugd" ; + lin synes_V = irregV "synes" "syntes" (variants {"synes" ; "syns"}) ; + lin synge_V = irregV "synge" "sang" "sunget" ; + lin ta_V = irregV "ta" "tok" "tatt" ; + lin treffe_V = irregV "treffe" "traff" "truffet" ; + lin trives_V = irregV "trives" "trivdes" (variants {"trives" ; "trivs"}) ; + lin ville_V = irregV "ville" "ville" "villet" ; + lin vite_V = mkV "vite" "vet" "vetes" "visste" "visst" "vit" ; +} diff --git a/lib/resource-1.0/danish/IrregDanAbs.gf b/lib/resource-1.0/danish/IrregDanAbs.gf new file mode 100644 index 000000000..899008962 --- /dev/null +++ b/lib/resource-1.0/danish/IrregDanAbs.gf @@ -0,0 +1,65 @@ +abstract IrregDanAbs = Cat ** { + fun be_V : V ; + fun bite_V : V ; + fun bli_V : V ; + fun brenne_V : V ; + fun bringe_V : V ; + fun burde_V : V ; + fun bære_V : V ; + fun dra_V : V ; + fun drikke_V : V ; + fun drive_V : V ; + fun dø_V : V ; + fun eie_V : V ; + fun falle_V : V ; + fun finne_V : V ; + fun fly_V : V ; + fun flyte_V : V ; + fun foretrekke_V : V ; + fun forlate_V : V ; + fun forstå_V : V ; + fun fortelle_V : V ; + fun fryse_V : V ; + fun få_V : V ; + fun gi_V : V ; + fun gjelde_V : V ; + fun gjøre_V : V ; + fun gni_V : V ; + fun gå_V : V ; + fun ha_V : V ; + fun hente_V : V ; + fun hete_V : V ; + fun hjelpe_V : V ; + fun holde_V : V ; + fun komme_V : V ; + fun kunne_V : V ; + fun la_V : V ; + fun legge_V : V ; + fun ligge_V : V ; + fun løpe_V : V ; + fun måtte_V : V ; + fun renne_V : V ; + fun se_V : V ; + fun selge_V : V ; + fun sette_V : V ; + fun si_V : V ; + fun sitte_V : V ; + fun skjære_V : V ; + fun skrive_V : V ; + fun skulle_V : V ; + fun slå_V : V ; + fun slåss_V : V ; + fun sove_V : V ; + fun springe_V : V ; + fun spørre_V : V ; + fun stikke_V : V ; + fun stå_V : V ; + fun suge_V : V ; + fun synes_V : V ; + fun synge_V : V ; + fun ta_V : V ; + fun treffe_V : V ; + fun trives_V : V ; + fun ville_V : V ; + fun vite_V : V ; +} diff --git a/lib/resource-1.0/danish/LangDan.gf b/lib/resource-1.0/danish/LangDan.gf new file mode 100644 index 000000000..3b2a64681 --- /dev/null +++ b/lib/resource-1.0/danish/LangDan.gf @@ -0,0 +1,22 @@ +--# -path=.:../scandinavian:../abstract:../common:prelude + +concrete LangDan of Lang = + NounDan, + VerbDan, + AdjectiveDan, + AdverbDan, + NumeralDan, + SentenceDan, + QuestionDan, + RelativeDan, + ConjunctionDan, + PhraseDan, + TextX, + IdiomDan, + StructuralDan, + LexiconDan + ** { + +flags startcat = Phr ; unlexer = text ; lexer = text ; + +} ; diff --git a/lib/resource-1.0/danish/LexiconDan.gf b/lib/resource-1.0/danish/LexiconDan.gf new file mode 100644 index 000000000..a1e81d920 --- /dev/null +++ b/lib/resource-1.0/danish/LexiconDan.gf @@ -0,0 +1,357 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +concrete LexiconDan of Lexicon = CatDan ** + open Prelude, ParadigmsDan, IrregDan in { + +flags startcat=Phr ; lexer=textlit ; unlexer=text ; + optimize=values ; + +lin + airplane_N = mk2N "fly" "flyet" ; + answer_V2S = mkV2S (regV "svare") "til" ; + apartment_N = mk2N "leilighet" "leiligheten" ; + apple_N = mk2N "eple" "eplet" ; + art_N = mk2N "kunst" "kunsten" ; + ask_V2Q = mkV2Q spørre_V [] ; + baby_N = mk2N "baby" "babyen" ; + bad_A = regADeg "dårlig" ; ---- + bank_N = mk2N "bank" "banken" ; + beautiful_A = mk3ADeg "vakker" "vakkert" "vakra" ; + become_VA = mkVA bli_V ; + beer_N = regGenN "øl" neutrum ; + beg_V2V = mkV2V be_V [] "att" ; + big_A = irregADeg "stor" "større" "størst"; + bike_N = mkN "sykkel" "sykkelen" "sykler" "syklene" ; + bird_N = mk2N "fugl" "fuglen" ; + black_A = mk2ADeg "svart" "svart" ; + blue_A = mk2ADeg "blå" "blått"; + boat_N = regGenN "båt" masculine ; + book_N = mkN "bok" "boka" "bøker" "bøkene" ; + boot_N = mkN "støvel" "støvelen" "støvler" "støvlene" ; + boss_N = mk2N "sjef" "sjefen" ; + boy_N = regGenN "gutt" masculine ; + bread_N = regGenN "brød" neutrum ; + break_V2 = dirV2 (mk2V "knuse" "knuste") ; + broad_A = regADeg "bred" ; + brother_N2 = mkN2 ( (mkN "bror" "broren" "brødre" "brødrene")) "til" ; + brown_A = regADeg "brun" ; + butter_N = regGenN "smør" neutrum ; + buy_V2 = dirV2 (mk2V "kjøpe" "kjøpte") ; + camera_N = mk2N "kamera" "kameraen" ; ---- + cap_N = mk2N "lue" "lua" ; + car_N = regGenN "bil" masculine ; + carpet_N = regGenN "matte" feminine ; + cat_N = mk2N "katt" "katten" ; + ceiling_N = regGenN "tak" neutrum ; + chair_N = regGenN "stol" masculine ; + cheese_N = regGenN "ost" masculine ; + child_N = regGenN "barn" neutrum ; + church_N = regGenN "kirke" feminine ; + city_N = mk2N "by" "byen" ; + clean_A = regADeg "rein" ; + clever_A = regADeg "klok" ; + close_V2 = dirV2 (mk2V "lukke" "lukket") ; + coat_N = regGenN "frakk" masculine ; + cold_A = regADeg "kald" ; + come_V = komme_V ; + computer_N = mk2N "datamaskin" "datamaskinen" ; + country_N = mk2N "land" "landet" ; + cousin_N = mk2N "fetter" "fetteren" ; ---- + cow_N = mkN "ku" "kua" "kyr" "kyrne" ; ---- + die_V = dø_V ; + dirty_A = mk3ADeg "skitten" "skittent" "skitne" ; ---- + distance_N3 = mkN3 (regGenN "avstand" masculine) "fra" "til" ; + doctor_N = mk2N "lege" "legen" ; + dog_N = regGenN "hund" masculine ; + door_N = regGenN "dør" feminine ; + drink_V2 = dirV2 drikke_V ; + easy_A2V = mkA2V (regA "grei") "før" ; + eat_V2 = dirV2 (mk2V "spise" "spiste") ; + empty_A = mkADeg "tom" "tomt" "tomme" "tommere" "tommest" ; + enemy_N = regGenN "fiende" masculine ; + factory_N = mk2N "fabrikk" "fabrikken" ; + father_N2 = mkN2 ( (mkN "far" "faren" "fedre" "fedrene")) "til" ; + fear_VS = mkVS (regV "frykte") ; + find_V2 = dirV2 (irregV "finne" "fann" "funnet") ; + fish_N = mk2N "fisk" "fisken" ; + floor_N = regGenN "golv" neutrum ; + forget_V2 = dirV2 (mkV "glemme" "glemmer" "glemmes" "glemte" "glemt" "glem") ; + fridge_N = regGenN "kjøleskap" neutrum ; + friend_N = mkN "venn" "vennen" "venner" "vennene" ; + fruit_N = mk2N "frukt" "frukten" ; + fun_AV = mkAV (mkA "morsom" "morsomt" "morsomme") ; + garden_N = regGenN "hage" masculine ; + girl_N = regGenN "jente" feminine ; + glove_N = regGenN "hanske" masculine ; + gold_N = regGenN "gull" neutrum ; + good_A = mkADeg "god" "godt" "gode" "bedre" "best" ; + go_V = gå_V ; + green_A = mk2ADeg "grønn" "grønt" ; + harbour_N = regGenN "havn" feminine; + hate_V2 = dirV2 (regV "hate") ; + hat_N = regGenN "hatt" masculine ; + have_V2 = dirV2 ha_V ; + hear_V2 = dirV2 (mk2V "høre" "hørte") ; + hill_N = regGenN "haug" masculine ; + hope_VS = mkVS (regV "håpe") ; + horse_N = regGenN "hest" masculine ; + hot_A = regADeg "heit" ; + house_N = regGenN "hus" neutrum ; + important_A = regADeg "viktig" ; + industry_N = mk2N "industri" "industrien" ; + iron_N = regGenN "jern" neutrum ; + king_N = regGenN "konge" masculine ; + know_V2 = dirV2 vite_V ; + lake_N = regGenN "vann" neutrum ; + lamp_N = regGenN "lampe" feminine ; + learn_V2 = dirV2 (mk2V "lære" "lærte") ; + leather_N = regGenN "lær" neutrum ; + leave_V2 = dirV2 forlate_V ; + like_V2 = dirV2 (mk2V "like" "likte") ; + listen_V2 = dirV2 (regV "lytte") ; + live_V = mk2V "leve" "levde" ; + long_A = irregADeg "lang" "lengre" "lengst" ; + lose_V2 = dirV2 (mk2V "tape" "tapte") ; + love_N = regGenN "kjærlighet" masculine ; + love_V2 = dirV2 (regV "elske") ; + man_N = (mkN "mann" "mannen" "menn" "mennen") ; + married_A2 = mkA2 (mk2A "gift" "gift") "med" ; + meat_N = regGenN "kjøtt" neutrum ; + milk_N = regGenN "melk" masculine ; + moon_N = regGenN "måne" masculine ; + mother_N2 = mkN2 (mkN "mor" "moren" "mødre" "mødrene") "til" ; ---- fem + mountain_N = regGenN "berg" neutrum ; + music_N = mk2N "musikk" "musikken" ; + narrow_A = regADeg "smal" ; + new_A = mkADeg "ny" "nytt" "nye" "nyere" "nyest" ; + newspaper_N = regGenN "avis" feminine ; + oil_N = regGenN "olje" masculine ; + old_A = mkADeg "gammel" "gammelt" "gamle" "eldre" "eldst" ; + open_V2 = dirV2 (regV "åpne") ; + paint_V2A = mkV2A (regV "male") [] ; + paper_N = regGenN "papir" neutrum ; ---- + paris_PN = regPN "Paris" neutrum ; + peace_N = regGenN "fred" masculine ; + pen_N = regGenN "penn" masculine ; + planet_N = mk2N "planet" "planeten" ; + plastic_N = mk2N "plast" "plasten" ; + play_V2 = dirV2 (mk2V "spille" "spilte") ; + policeman_N = mk2N "politi" "politien" ; + priest_N = mk2N "prest" "presten" ; + probable_AS = mkAS (regA "sannsynlig") ; + queen_N = regGenN "dronning" feminine ; + radio_N = regGenN "radio" masculine ; + rain_V0 = mkV0 (regV "regne") ; + read_V2 = dirV2 (mk2V "lese" "leste") ; + red_A = regADeg "rød" ; + religion_N = mk2N "religion" "religionen" ; + restaurant_N = mk2N "restaurant" "restauranten" ; + river_N = mk2N "elv" "elva" ; + rock_N = regGenN "stein" masculine ; + roof_N = regGenN "tak" neutrum ; + rubber_N = mk2N "gummi" "gummien" ; + run_V = springe_V ; + say_VS = mkVS si_V ; + school_N = regGenN "skole" feminine; + science_N = mk2N "vitenskap" "vitenskapen" ; + sea_N = mk2N "sjø" "sjøen" ; + seek_V2 = mkV2 (mk2V "lete" "lette") "etter" ; + see_V2 = dirV2 se_V ; + sell_V3 = dirV3 selge_V "til" ; + send_V3 = dirV3 (mk2V "sende" "sendte") "til" ; + sheep_N = mk2N "får" "fåret" ; + ship_N = regGenN "skip" neutrum ; + shirt_N = regGenN "skjorte" feminine ; + shoe_N = regGenN "sko" masculine ; + shop_N = mk2N "butikk" "butikken" ; + short_A = regADeg "kort" ; + silver_N = mk2N "sølv" "sølvet"; + sister_N = mkN "søster" "søsteren" "søstrer" "søstrene" ; + sleep_V = irregV "sove" "sov" "sovet" ; + small_A = mkADeg "liten" "lite" "små" "mindre" "minst" ; ---- lille + snake_N = regGenN "orm" masculine ; + sock_N = regGenN "strømpe" masculine ; + speak_V2 = dirV2 (regV "snakke") ; + star_N = regGenN "stjerne" feminine ; + steel_N = regGenN "stål" neutrum ; + stone_N = regGenN "stein" masculine ; + stove_N = regGenN "komfyr" masculine ; + student_N = mk2N "student" "studenten" ; + stupid_A = mk3ADeg "dum" "dumt" "dumme" ; + sun_N = regGenN "sol" feminine ; + switch8off_V2 = dirV2 (partV (irregV "slå" "slo" "slått") "av") ; + switch8on_V2 = dirV2 (partV (irregV "slå" "slo" "slått") "på") ; + table_N = regGenN "bord" neutrum ; + talk_V3 = mkV3 (regV "snakke") "til" "om" ; + teacher_N = mkN "lærer" "læreren" "lærere" "lærerne" ; + teach_V2 = dirV2 (mk2V "undervise" "underviste") ; + television_N = mk2N "fjernsyn" "fjernsynet" ; + thick_A = mk2ADeg "tykk" "tykt" ; + thin_A = mk2ADeg "tynn" "tynt" ; + train_N = regGenN "tog" neutrum ; + travel_V = mk2V "reise" "reiste" ; + tree_N = mkN "tre" "treet" "trær" "træne" ; + ---- trousers_N = regGenN "trousers" ; ---- pl t ! + ugly_A = mk2ADeg "stygg" "stygt" ; + understand_V2 = dirV2 (irregV "forstå" "forstod" "forstått") ; + university_N = regGenN "universitet" neutrum ; + village_N = mk2N "grend" "grenda" ; + wait_V2 = mkV2 (regV "vente") "på" ; + walk_V = (irregV "gå" "gikk" "gått") ; + warm_A = regADeg "varm" ; + war_N = regGenN "krig" masculine ; + watch_V2 = mkV2 se_V "på" ; + water_N = mk2N "vatn" "vatnet" ; + white_A = regADeg "hvit" ; + window_N = mkN "vindu" "vinduet" "vinduer" "vinduene" ; ---- er? + wine_N = mk2N "vin" "vinen" ; + win_V2 = dirV2 (irregV "vinne" "vant" "vunnet") ; + woman_N = regGenN "kvinne" feminine ; ---- kvinnen + wonder_VQ = mkVQ (regV "undre") ; ---- seg + wood_N = mkN "tre" "treet" "trær" "træne" ; + write_V2 = dirV2 (irregV "skrive" "skrev" "skrevet") ; + yellow_A = regADeg "gul" ; + young_A = irregADeg "ung" "yngre" "yngst" ; + + do_V2 = dirV2 (irregV "gjøre" "gjorde" "gjort") ; + now_Adv = mkAdv "nå" ; + already_Adv = mkAdv "allerede" ; + song_N = mk2N "sang" "sangen" ; + add_V3 = mkV3 (partV (irregV "legge" "la" "lagt") "til") [] "til" ; + number_N = mk2N "nummer" "nummeret" ; + put_V2 = mkV2 (irregV "sette" "satte" "satt") [] ; + stop_V = regV "stanse" ; + jump_V = regV "hoppe" ; + + left_Ord = {s = "venstre" ; isDet = True} ; + right_Ord = {s = "høyre" ; isDet = True} ; + far_Adv = mkAdv "fjern" ; + correct_A = regA "riktig" ; + dry_A = mk2A "tørr" "tørt" ; + dull_A = regA "sløv" ; + full_A = regA "full" ; + heavy_A = irregADeg "tung" "tyngre" "tyngst" ; + near_A = mkADeg "nære" "nære" "nære" "nærmere" "nærmest" ; + rotten_A = mk3ADeg "råtten" "råttent" "råtne" ; + round_A = regA "rund" ; + sharp_A = mk2A "kvass" "kvast" ; + smooth_A = mk2A "slett" "slett" ; + straight_A = regA "rak" ; + wet_A = regA "våt" ; + wide_A = regA "bred" ; + animal_N = mk2N "dyr" "dyret" ; + ashes_N = mk2N "aske" "aska" ; + back_N = mk2N "rygg" "ryggen" ; + bark_N = mk2N "bark" "barken" ; + belly_N = mk2N "mage" "magen" ; + blood_N = mk2N "blod" "blodet" ; + bone_N = mk2N "bein" "beinet" ; + breast_N = mk2N "bryst" "brystet" ; + cloud_N = mk2N "sky" "skya" ; + day_N = mk2N "dag" "dagen" ; + dust_N = mk2N "støv" "støvet" ; + ear_N = mk2N "øre" "øret" ; + earth_N = mk2N "jord" "jorda" ; + egg_N = mk2N "egg" "egget" ; + eye_N = mkN "øye" "øyet" "øyne" "øynene" ; + fat_N = mk2N "fett" "fettet" ; + feather_N = mk2N "fjør" "fjøra" ; + fingernail_N = mk2N "negl" "neglen" ; + fire_N = mk2N "ild" "ilden" ; + flower_N = mk2N "blomst" "blomsten" ; + fog_N = mk2N "tåke" "tåka" ; + foot_N = mk2N "fot" "føtter" ; + forest_N = mk2N "skog" "skogen" ; + grass_N = mk2N "gras" "graset" ; + guts_N = mk2N "tarm" "tarmen" ; ---- involler + hair_N = mk2N "hår" "håret" ; + hand_N = mk2N "hånd" "hånden" ; + head_N = mk2N "hode" "hodet" ; + heart_N = mk2N "hjerte" "hjertet" ; + horn_N = mk2N "horn" "hornet" ; + husband_N = mkN "ektemann" "ektemannen" "ektemenn" "ektemennen" ; + ice_N = mk2N "is" "isen" ; + knee_N = mkN "kne" "kneet" "knær" "knæne" ; + leaf_N = mk2N "løv" "løvet" ; + leg_N = mk2N "bein" "beinet" ; + liver_N = mkN "lever" "leveren" "levrer" "levrene" ; + louse_N = mk2N "lus" "lusa" ; + mouth_N = mk2N "munn" "munnen" ; + name_N = mk2N "navn" "navnet" ; + neck_N = mk2N "nakke" "nakken" ; + night_N = mkN "natt" "natta" "netter" "nettene" ; + nose_N = mk2N "nese" "nesen" ; + person_N = mk2N "person" "personen" ; + rain_N = mk2N "regn" "regnet" ; + road_N = mk2N "vei" "veien" ; + root_N = mkN "rot" "rota" "røtter" "røttene" ; + rope_N = mk2N "tau" "tauet" ; + salt_N = mk2N "salt" "saltet" ; + sand_N = mk2N "sand" "sanden" ; + seed_N = mk2N "frø" "frøet" ; + skin_N = mk2N "skinn" "skinnet" ; + sky_N = mkN "himmel" "himmelen" "himler" "himlene" ; + smoke_N = mk2N "røyk" "røyken" ; + snow_N = mk2N "snø" "snøen" ; + stick_N = mk2N "pinne" "pinnen" ; + tail_N = mk2N "hale" "halen" ; + tongue_N = mk2N "tunge" "tunga" ; + tooth_N = mkN "tann" "tanna" "tenner" "tennene" ; + wife_N = mk2N "kone" "kona" ; + wind_N = mk2N "vind" "vinden" ; + wing_N = mk2N "vinge" "vingen" ; + worm_N = mk2N "mark" "marken" ; + year_N = mk2N "år" "året" ; + bite_V2 = dirV2 (IrregDan.bite_V) ; + blow_V = mk2V "blåse" "blåste" ; + burn_V = brenne_V ; + count_V2 = dirV2 (regV "regne") ; + cut_V2 = dirV2 (skjære_V) ; + dig_V = mk2V "grave" "gravde" ; + fall_V = falle_V ; + fear_V2 = dirV2 (regV "frykte") ; + fight_V2 = dirV2 (slåss_V) ; + float_V = flyte_V ; + flow_V = renne_V ; + fly_V = fly_V ; + freeze_V = fryse_V ; + give_V3 = dirdirV3 gi_V ; + hit_V2 = dirV2 (slå_V) ; + hold_V2 = dirV2 (holde_V) ; + hunt_V2 = dirV2 (regV "jakte") ; + kill_V2 = dirV2 (mk2V "drepe" "drepte") ; + laugh_V = mkV "le" "ler" "les" "lo" "ledd" "le" ; + lie_V = ligge_V ; + play_V = mk2V "leke" "lekte" ; + pull_V2 = dirV2 (dra_V) ; + push_V2 = dirV2 (irregV "skyve" "skjøv" "skjøvet") ; + rub_V2 = dirV2 (gni_V) ; + scratch_V2 = dirV2 (regV "klø") ; + sew_V = mk2V "sy" "sydde" ; + sing_V = synge_V ; + sit_V = sitte_V ; + smell_V = regV "lukte" ; + spit_V = regV "spytte" ; + split_V2 = dirV2 (mk2V "kløyve" "kløyvde") ; + squeeze_V2 = dirV2 (mk2V "klemme" "klemte") ; + stab_V2 = dirV2 (stikke_V) ; + stand_V = stå_V ; + suck_V2 = dirV2 (suge_V) ; + swell_V = partV (regV "hovne") "opp" ; + swim_V = regV "simme" ; + think_V = mk2V "tenke" "tenkte" ; + throw_V2 = dirV2 (regV "kaste") ; + tie_V2 = dirV2 (regV "knytte") ; + turn_V = mk2V "vende" "vendte" ; + vomit_V = partV (regV "kaste") "opp" ; + wash_V2 = dirV2 (regV "vaske") ; + wipe_V2 = dirV2 (regV "tørke") ; + breathe_V = regV "puste" ; + + +} ; + +-- a" -> e" 86 +-- ö -> ø 66 +-- ck -> kk 20 +-- ä -> e 44 diff --git a/lib/resource-1.0/danish/MathDan.gf b/lib/resource-1.0/danish/MathDan.gf new file mode 100644 index 000000000..11d87f5d9 --- /dev/null +++ b/lib/resource-1.0/danish/MathDan.gf @@ -0,0 +1,2 @@ +concrete MathDan of Math = CatDan ** MathScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.0/danish/MorphoDan.gf b/lib/resource-1.0/danish/MorphoDan.gf new file mode 100644 index 000000000..979693f4e --- /dev/null +++ b/lib/resource-1.0/danish/MorphoDan.gf @@ -0,0 +1,158 @@ +--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 = CommonScand, ResDan ** open Prelude, Predef in { + +oper + +-- type synonyms + + Subst : Type = {s : Number => Species => Case => Str} ; + Adj = Adjective ; + +-- nouns + + mkSubstantive : (_,_,_,_ : Str) -> Subst = + \dreng, drengen, drenger, drengene -> + {s = nounForms dreng drengen drenger drengene} ; + + extNGen : Str -> Gender = \s -> case last s of { + "n" => Utr ; + _ => Neutr + } ; + + 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 + + mkAdject : (_,_,_,_,_ : Str) -> Adj = + \stor,stort,store,storre,storst -> {s = table { + 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 -> + mkAdject rod (rod + "t") (rod + "e") (rod + "ere") (rod + "est") ; + + aAbstrakt : Str -> Adj = \abstrakt -> + mkAdject abstrakt abstrakt (abstrakt + "e") (abstrakt + "ere") (abstrakt + "est") ; + + aRask : Str -> Adj = \rask -> + mkAdject rask rask (rask + "e") (rask + "ere") (rask + "est") ; + + +-- verbs + + Verbum : Type = {s : VForm => Str} ; + + mkVerb6 : (_,_,_,_,_,_ : Str) -> Verbum = + \spise,spiser,spises,spiste,spist,spis -> {s = table { + 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 + } + } ; + + irregVerb : (drikke,drakk,drukket : Str) -> Verbum = + \drikke,drakk,drukket -> + let + drikk = init drikke ; + drikker = case last (init drikke) of { + "r" => drikk ; + _ => drikke + "r" + } + in + mkVerb6 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 + } ; + + vHusk : Str -> Verbum = \husk -> + mkVerb6 (husk + "e") (husk + "er") (husk + "es") (husk + "ede") (husk + "et") husk ; + + vSpis : Str -> Verbum = \spis -> + mkVerb6 (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t") spis ; + + vBo : Str -> Verbum = \bo -> + mkVerb6 bo (bo + "r") (bo + "es") (bo + "ede") (bo + "et") bo ; + + +-- For $Numeral$. + +param DForm = ental | ton | tiotal ; + +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, tolfte -> + {s = table { + ental => cardOrd två andra ; + ton => cardOrd tolv tolfte ; + tiotal => cardReg tjugo + } + } ; + + numPl : (CardOrd => Str) -> {s : CardOrd => Str ; n : Number} = \n -> + {s = n ; n = Pl} ; + + invNum : CardOrd = NCard Neutr ; + + +} diff --git a/lib/resource-1.0/danish/NounDan.gf b/lib/resource-1.0/danish/NounDan.gf new file mode 100644 index 000000000..8005b0d30 --- /dev/null +++ b/lib/resource-1.0/danish/NounDan.gf @@ -0,0 +1,2 @@ +concrete NounDan of Noun = CatDan ** NounScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.0/danish/NumeralDan.gf b/lib/resource-1.0/danish/NumeralDan.gf new file mode 100644 index 000000000..ef4975436 --- /dev/null +++ b/lib/resource-1.0/danish/NumeralDan.gf @@ -0,0 +1,47 @@ +concrete NumeralDan of Numeral = CatDan ** open ResScand, MorphoDan in { + +lincat + Digit = {s : DForm => CardOrd => Str} ; + Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; + Sub100, Sub1000, Sub1000000 = + {s : CardOrd => Str ; n : Number} ; + +lin + num x = x ; + + n2 = mkTal "to" "tolv" "tjue" "andre" "tolfte" ; + n3 = mkTal "tre" "tretten" "tretti" "tredje" "trettende" ; + n4 = mkTal "fire" "fjorten" "førti" "fjerde" "fjortende" ; + n5 = mkTal "fem" "femten" "femti" "femte" "femtende" ; + n6 = mkTal "seks" "seksten" "seksti" "sjette" "sextende" ; + n7 = mkTal "sju" "sytten" "sytti" "syvende" "syttende" ; + n8 = mkTal "åtte" "atten" "åtti" "åttende" "attende" ; + n9 = mkTal "ni" "nitten" "nitti" "niende" "nittende" ; + + pot01 = { + s = \\f => table { + NCard g => case g of {Neutr => "ett" ; _ => "en"} ; + _ => "første" + } ; + n = Sg + } ; + pot0 d = {s = \\f,g => d.s ! f ! g ; n = Pl} ; + pot110 = numPl (cardReg "ti") ; + pot111 = numPl (cardOrd "elve" "elfte") ; + pot1to19 d = numPl (d.s ! ton) ; + pot0as1 n = {s = n.s ! ental ; n = n.n} ; + pot1 d = numPl (d.s ! tiotal) ; + pot1plus d e = {s = \\g => d.s ! tiotal ! invNum ++ e.s ! ental ! g ; n = Pl} ; + pot1as2 n = n ; + pot2 d = + numPl (\\g => d.s ! ental ! invNum ++ cardOrd "hundre" "hundrede" ! g) ; + pot2plus d e = + {s = \\g => d.s ! ental ! invNum ++ "hundre" ++ "og" ++ e.s ! g ; n = Pl} ; + pot2as3 n = n ; + pot3 n = + numPl (\\g => n.s ! invNum ++ cardOrd "tusen" "tusende" ! g) ; + pot3plus n m = + {s = \\g => n.s ! invNum ++ "tusen" ++ "og" ++ m.s ! g ; n = Pl} ; + +} + diff --git a/lib/resource-1.0/danish/ParadigmsDan.gf b/lib/resource-1.0/danish/ParadigmsDan.gf new file mode 100644 index 000000000..d100a8e05 --- /dev/null +++ b/lib/resource-1.0/danish/ParadigmsDan.gf @@ -0,0 +1,409 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +--1 Danish Lexical Paradigms +-- +-- Aarne Ranta 2003 +-- +-- This is an API to the user of the resource grammar +-- for adding lexical items. It gives functions for forming +-- expressions of open categories: nouns, adjectives, verbs. +-- +-- Closed categories (determiners, pronouns, conjunctions) are +-- accessed through the resource syntax API, $Structural.gf$. +-- +-- The main difference with $MorphoDan.gf$ is that the types +-- referred to are compiled resource grammar types. We have moreover +-- had the design principle of always having existing forms, rather +-- than stems, as string arguments of the paradigms. +-- +-- The structure of functions for each word class $C$ is the following: +-- first we give a handful of patterns that aim to cover all +-- regular cases. Then we give a worst-case function $mkC$, which serves as an +-- escape to construct the most irregular words of type $C$. +-- However, this function should only seldom be needed: we have a +-- separate module $IrregularEng$, which covers all irregularly inflected +-- words. + +resource ParadigmsDan = + open + (Predef=Predef), + Prelude, + CommonScand, + ResDan, + MorphoDan, + CatDan in { + +--2 Parameters +-- +-- To abstract over gender names, we define the following identifiers. + +oper + Gender : Type ; + + masculine : Gender ; + feminine : Gender ; + neutrum : Gender ; + +-- To abstract over number names, we define the following. + + Number : Type ; + + singular : Number ; + plural : Number ; + +-- To abstract over case names, we define the following. + + Case : Type ; + + nominative : Case ; + genitive : Case ; + +-- Prepositions used in many-argument functions are just strings. + + Preposition : Type = Str ; + +--2 Nouns + +-- Worst case: give all four forms. The gender is computed from the +-- last letter of the second form (if "n", then $utrum$, otherwise $neutrum$). + + mkN : (dreng,drengen,drenger,drengene : Str) -> N ; + +-- The regular function takes the singular indefinite form +-- and computes the other forms and the gender by a heuristic. +-- The heuristic is that nouns ending "e" are feminine like "kvinne", +-- all others are masculine like "bil". +-- If in doubt, use the $cc$ command to test! + + regN : Str -> N ; + +-- Giving gender manually makes the heuristic more reliable. + + regGenN : Str -> Gender -> N ; + +-- This function takes the singular indefinite and definite forms; the +-- gender is computed from the definite form. + + mk2N : (bil,bilen : Str) -> N ; + + +--3 Compound nouns +-- +-- All the functions above work quite as well to form compound nouns, +-- such as "fotboll". + + +--3 Relational nouns +-- +-- Relational nouns ("daughter of x") need a preposition. + + mkN2 : N -> Preposition -> N2 ; + +-- The most common preposition is "av", and the following is a +-- shortcut for regular, $nonhuman$ relational nouns with "av". + + regN2 : Str -> Gender -> N2 ; + +-- Use the function $mkPreposition$ or see the section on prepositions below to +-- form other prepositions. +-- +-- Three-place relational nouns ("the connection from x to y") need two prepositions. + + mkN3 : N -> Preposition -> Preposition -> N3 ; + + +--3 Relational common noun phrases +-- +-- In some cases, you may want to make a complex $CN$ into a +-- relational noun (e.g. "the old town hall of"). However, $N2$ and +-- $N3$ are purely lexical categories. But you can use the $AdvCN$ +-- and $PrepNP$ constructions to build phrases like this. + +-- +--3 Proper names and noun phrases +-- +-- Proper names, with a regular genitive, are formed as follows + + regPN : Str -> Gender -> PN ; -- John, John's + +-- Sometimes you can reuse a common noun as a proper name, e.g. "Bank". + + nounPN : N -> PN ; + +-- To form a noun phrase that can also be plural and have an irregular +-- genitive, you can use the worst-case function. + + mkNP : Str -> Str -> Number -> Gender -> NP ; + +--2 Adjectives + +-- Non-comparison one-place adjectives need three forms: + + mkA : (galen,galet,galne : Str) -> A ; + +-- For regular adjectives, the other forms are derived. + + regA : Str -> A ; + +-- In most cases, two forms are enough. + + mk2A : (stor,stort : Str) -> A ; + +--3 Two-place adjectives +-- +-- Two-place adjectives need a preposition for their second argument. + + mkA2 : A -> Preposition -> A2 ; + +-- Comparison adjectives may need as many as five forms. + + mkADeg : (stor,stort,store,storre,storst : Str) -> A ; + +-- The regular pattern works for many adjectives, e.g. those ending +-- with "ig". + + regADeg : Str -> A ; + +-- Just the comparison forms can be irregular. + + irregADeg : (tung,tyngre,tyngst : Str) -> A ; + +-- Sometimes just the positive forms are irregular. + + mk3ADeg : (galen,galet,galna : Str) -> A ; + mk2ADeg : (bred,bredt : Str) -> A ; + +-- If comparison is formed by "mer, "mest", as in general for +-- long adjective, the following pattern is used: + + compoundADeg : A -> A ; -- -/mer/mest norsk + + +--2 Adverbs + +-- Adverbs are not inflected. Most lexical ones have position +-- after the verb. Some can be preverbal (e.g. "always"). + + mkAdv : Str -> Adv ; + mkAdV : Str -> AdV ; + +-- Adverbs modifying adjectives and sentences can also be formed. + + mkAdA : Str -> AdA ; + +--2 Prepositions +-- +-- A preposition is just a string. + + mkPreposition : Str -> Preposition ; + +--2 Verbs +-- +-- The worst case needs six forms. + + mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V ; + +-- The 'regular verb' function is the first conjugation. + + regV : (snakke : Str) -> V ; + +-- The almost regular verb function needs the infinitive and the preteritum. + + mk2V : (leve,levde : Str) -> V ; + +-- There is an extensive list of irregular verbs in the module $IrregDan$. +-- In practice, it is enough to give three forms, as in school books. + + irregV : (drikke, drakk, drukket : Str) -> V ; + + +--3 Verbs with a particle. +-- +-- The particle, such as in "switch on", is given as a string. + + partV : V -> Str -> V ; + +--3 Deponent verbs. +-- +-- Some words are used in passive forms only, e.g. "hoppas", some as +-- reflexive e.g. "ångra sig". + + depV : V -> V ; + reflV : V -> V ; + +--3 Two-place verbs +-- +-- Two-place verbs need a preposition, except the special case with direct object. +-- (transitive verbs). Notice that a particle comes from the $V$. + + mkV2 : V -> Preposition -> V2 ; + + dirV2 : V -> V2 ; + +--3 Three-place verbs +-- +-- Three-place (ditransitive) verbs need two prepositions, of which +-- the first one or both can be absent. + + mkV3 : V -> Str -> Str -> V3 ; -- speak, with, about + dirV3 : V -> Str -> V3 ; -- give,_,to + dirdirV3 : V -> V3 ; -- give,_,_ + +--3 Other complement patterns +-- +-- Verbs and adjectives can take complements such as sentences, +-- questions, verb phrases, and adjectives. + + mkV0 : V -> V0 ; + mkVS : V -> VS ; + mkV2S : V -> Str -> V2S ; + mkVV : V -> VV ; + mkV2V : V -> Str -> Str -> V2V ; + mkVA : V -> VA ; + mkV2A : V -> Str -> V2A ; + mkVQ : V -> VQ ; + mkV2Q : V -> Str -> V2Q ; + + mkAS : A -> AS ; + mkA2S : A -> Str -> A2S ; + mkAV : A -> AV ; + mkA2V : A -> Str -> A2V ; + +-- Notice: categories $V2S, V2V, V2A, V2Q$ are in v 1.0 treated +-- just as synonyms of $V2$, and the second argument is given +-- as an adverb. Likewise $AS, A2S, AV, A2V$ are just $A$. +-- $V0$ is just $V$. + + V0, V2S, V2V, V2A, V2Q : Type ; + AS, A2S, AV, A2V : Type ; + + +--2 Definitions of the paradigms +-- +-- The definitions should not bother the user of the API. So they are +-- hidden from the document. +--. + + Gender = MorphoDan.Gender ; + Number = MorphoDan.Number ; + Case = MorphoDan.Case ; + utrum = Utr ; + neutrum = Neutr ; + singular = Sg ; + plural = Pl ; + nominative = Nom ; + genitive = Gen ; + + mkN x y z u = mkSubstantive x y z u ** {g = extNGen y ; lock_N = <>} ; + + regN x = regGenN x Utr ; + + regGenN x g = case last x of { + "e" => case g of { + Utr => mkN x (x + "n") (x + "r") (x + "rne") ; + Neutr => mkN x (x + "t") (x + "r") (init x + "ene") + } ; + _ => case g of { + Utr => mkN x (x + "en") (x + "er") (x + "rene") ; + Neutr => mkN x (x + "et") (x + "") (x + "ene") + } + } ; + + + mk2N x y = case last y of { + "n" => regGenN x utrum ; + _ => regGenN x neutrum + } ; + + mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ; + regN2 n g = mkN2 (regGenN n g) (mkPreposition "av") ; + mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; + + regPN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ; + nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ; + mkNP x y n g = + {s = table {NPPoss _ => x ; _ => y} ; a = agrP3 g n ; + lock_NP = <>} ; + + mkA a b c = (mkAdject a b c [] []) ** {lock_A = <>} ; + mk2A a b = mkA a b (a + "e") ; + regA a = (regADeg a) ** {lock_A = <>} ; + + mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; + + mkADeg a b c d e = mkAdject a b c d e ** {lock_A = <>} ; + + regADeg a = case Predef.dp 2 a of { + "sk" => aRask a ; + _ => case last a of { + "t" => aAbstrakt a ; + _ => aRod a + }} ** {lock_A = <>} ; + + irregADeg a b c = mkAdject a (a + "t") (a + "e") b c ** {lock_A = <>} ; + mk3ADeg a b c = mkAdject a b c (a + "ere") (a + "est") ** {lock_A = <>} ; + mk2ADeg a b = mkAdject a b (a + "e") (a + "ere") (a + "est") ** {lock_A = <>} ; + + mkAdv x = ss x ** {lock_Adv = <>} ; + mkAdV x = ss x ** {lock_AdV = <>} ; + mkAdA x = ss x ** {lock_AdA = <>} ; + + mkPreposition p = p ; + + mkV a b c d e f = mkVerb6 a b c d e f ** {s1 = [] ; vtype = VAct ; lock_V = <>} ; + + regV a = case last a of { + "e" => vHusk (init a) ; + _ => vBo a + } ** {s1 = [] ; vtype = VAct ; lock_V = <>} ; + + mk2V a b = regVerb a b ** {s1 = [] ; vtype = VAct ; lock_V = <>} ; + + irregV = + \drikke,drakk,drukket -> + let + drikk = case last drikke of { + "e" => init drikke ; + _ => drikke + } ; + drikker = case last (init drikke) of { + "r" => init drikke ; + _ => drikke + "r" + } + in + mkV drikke drikker (drikke + "s") drakk drukket drikk ; + + + partV v p = {s = \\f => v.s ! f ++ p ; vtype = v.vtype ; lock_V = <>} ; + depV v = {s = v.s ; vtype = VPass ; lock_V = <>} ; + reflV v = {s = v.s ; vtype = VRefl ; lock_V = <>} ; + + mkV2 v p = v ** {c2 = p ; lock_V2 = <>} ; + dirV2 v = mkV2 v [] ; + + mkV3 v p q = v ** {c2 = p ; c3 = q ; lock_V3 = <>} ; + dirV3 v p = mkV3 v [] p ; + dirdirV3 v = dirV3 v [] ; + + mkV0 v = v ** {lock_V0 = <>} ; + mkVS v = v ** {lock_VS = <>} ; + mkV2S v p = mkV2 v p ** {lock_V2S = <>} ; + mkVV v = v ** {c2 = "å" ; lock_VV = <>} ; + mkV2V v p t = mkV2 v p ** {s3 = t ; lock_V2V = <>} ; + mkVA v = v ** {lock_VA = <>} ; + mkV2A v p = mkV2 v p ** {lock_V2A = <>} ; + mkVQ v = v ** {lock_VQ = <>} ; + mkV2Q v p = mkV2 v p ** {lock_V2Q = <>} ; + + mkAS v = v ** {lock_A = <>} ; + mkA2S v p = mkA2 v p ** {lock_A = <>} ; + mkAV v = v ** {lock_A = <>} ; + mkA2V v p = mkA2 v p ** {lock_A = <>} ; + + V0 : Type = V ; + V2S, V2V, V2Q, V2A : Type = V2 ; + AS, A2S, AV : Type = A ; + A2V : Type = A2 ; + + +} ; diff --git a/lib/resource-1.0/danish/PhraseDan.gf b/lib/resource-1.0/danish/PhraseDan.gf new file mode 100644 index 000000000..86a9789bf --- /dev/null +++ b/lib/resource-1.0/danish/PhraseDan.gf @@ -0,0 +1,2 @@ +concrete PhraseDan of Phrase = CatDan ** PhraseScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.0/danish/QuestionDan.gf b/lib/resource-1.0/danish/QuestionDan.gf new file mode 100644 index 000000000..3dee9e7c7 --- /dev/null +++ b/lib/resource-1.0/danish/QuestionDan.gf @@ -0,0 +1,2 @@ +concrete QuestionDan of Question = CatDan ** QuestionScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.0/danish/RelativeDan.gf b/lib/resource-1.0/danish/RelativeDan.gf new file mode 100644 index 000000000..361169b16 --- /dev/null +++ b/lib/resource-1.0/danish/RelativeDan.gf @@ -0,0 +1,2 @@ +concrete RelativeDan of Relative = CatDan ** RelativeScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.0/danish/ResDan.gf b/lib/resource-1.0/danish/ResDan.gf new file mode 100644 index 000000000..5e761c268 --- /dev/null +++ b/lib/resource-1.0/danish/ResDan.gf @@ -0,0 +1,3 @@ +instance ResDan of ResScand = DiffDan ** open CommonScand, Prelude in { +} ; + diff --git a/lib/resource-1.0/danish/SentenceDan.gf b/lib/resource-1.0/danish/SentenceDan.gf new file mode 100644 index 000000000..542fffac4 --- /dev/null +++ b/lib/resource-1.0/danish/SentenceDan.gf @@ -0,0 +1,2 @@ +concrete SentenceDan of Sentence = CatDan ** SentenceScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.0/danish/StructuralDan.gf b/lib/resource-1.0/danish/StructuralDan.gf new file mode 100644 index 000000000..1b034ecdd --- /dev/null +++ b/lib/resource-1.0/danish/StructuralDan.gf @@ -0,0 +1,126 @@ +concrete StructuralDan of Structural = CatDan ** + open MorphoDan, ParadigmsDan, Prelude in { + + flags optimize=all ; + + lin + above_Prep = ss "ovenfor" ; + after_Prep = ss "efter" ; + by8agent_Prep = ss "af" ; + all_Predet = {s = gennumForms "all" "alt" "alle"} ; + almost_AdA, almost_AdN = ss "næsten" ; + although_Subj = ss ["selv om"] ; + always_AdV = ss "altid" ; + and_Conj = ss "og" ** {n = Pl} ; + because_Subj = ss "fordi" ; + before_Prep = ss "før" ; + behind_Prep = ss "bag" ; + between_Prep = ss "mellem" ; + both7and_DConj = sd2 "både" "og" ** {n = Pl} ; + but_PConj = ss "men" ; + by8means_Prep = ss "med" ; + can8know_VV, can_VV = + mkV "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** + {c2 = [] ; lock_VV = <>} ; + during_Prep = ss "under" ; + either7or_DConj = sd2 "enten" "eller" ** {n = Sg} ; + everybody_NP = regNP "alle" "alles" Plg ; + every_Det = {s = \\_,_ => "hver" ; n = Sg ; det = DDef Indef} ; + everything_NP = regNP "alt" "alts" SgNeutr ; + everywhere_Adv = ss "overalt" ; + few_Det = {s = \\_,_ => "få" ; n = Pl ; det = DDef Indef} ; + first_Ord = {s = "første" ; isDet = True} ; + from_Prep = ss "fra" ; + he_Pron = MorphoDan.mkNP "han" "ham" "hans" "hans" "hans" SgUtr P3 ; + here_Adv = ss "her" ; + here7to_Adv = ss "hit" ; + here7from_Adv = ss "herfra" ; + how_IAdv = ss "hvor" ; + how8many_IDet = {s = \\_ => ["hur mange"] ; n = Pl ; det = DDef Indef} ; + if_Subj = ss "hvis" ; + in8front_Prep = ss "foran" ; + i_Pron = + MorphoDan.mkNP "jeg" "mig" "min" "mit" "mine" SgUtr P1 ; + in_Prep = ss "i" ; + it_Pron = MorphoDan.regNP "det" "dets" SgNeutr ; + less_CAdv = ss "mindre" ; + many_Det = {s = \\_,_ => "mange" ; n = Pl ; det = DDef Indef} ; + more_CAdv = ss "mer" ; + most_Predet = {s = gennumForms ["den meste"] ["det meste"] ["de fleste"]} ; + much_Det = {s = \\_,_ => "meget" ; n = Pl ; det = DDef Indef} ; + must_VV = + mkV "måtte" "må" "må" "måtte" "måttet" "mått" ** {c2 = [] ; lock_VV = <>} ; + no_Phr = ss ["Nej"] ; + on_Prep = ss "på" ; + one_Quant = {s = \\_ => genderForms ["en"] ["et"] ; n = Sg ; det = DIndef} ; --- ei + only_Predet = {s = \\_ => "kun"} ; + or_Conj = ss "eller" ** {n = Sg} ; + otherwise_PConj = ss "anderledes" ; + part_Prep = ss "af" ; + please_Voc = ss "tak" ; --- + possess_Prep = ss "af" ; + quite_Adv = ss "temmelig" ; + she_Pron = MorphoDan.mkNP "hun" "hende" "hendes" "hendes" "hendes" SgUtr P3 ; + so_AdA = ss "så" ; + someSg_Det = {s = \\_ => genderForms "nogen" "noget" ; n = Sg ; det = DIndef} ; + somePl_Det = {s = \\_,_ => "nogle" ; n = Pl ; det = DIndef} ; + somebody_NP = regNP "nogen" "nogens" SgUtr ; + something_NP = regNP "noget" "nogets" SgNeutr ; + somewhere_Adv = ss ["et eller annet sted"] ; ---- ? + that_Quant = + {s = table { + Sg => \\_ => genderForms ["den der"] ["det der"] ; + Pl => \\_,_ => ["de der"] + } ; + det = DDef Indef + } ; + that_NP = regNP ["det der"] ["det ders"] SgNeutr ; + there_Adv = ss "der" ; + there7to_Adv = ss "dit" ; + there7from_Adv = ss "derfra" ; + therefore_PConj = ss "derfor" ; + these_NP = regNP ["de her"] ["det hers"] Plg ; + they_Pron = MorphoDan.mkNP "de" "dem" "deres" "deres" "deres" Plg P1 ; + this_Quant = + {s = table { + Sg => \\_ => genderForms ["den her"] ["det her"] ; + Pl => \\_,_ => ["de her"] + } ; + det = DDef Indef + } ; + this_NP = regNP ["det her"] ["det hers"] SgNeutr ; + those_NP = regNP ["de der"] ["de ders"] Plg ; + through_Prep = ss "gennem" ; + too_AdA = ss "for" ; + to_Prep = ss "til" ; + under_Prep = ss "under" ; + very_AdA = ss "meget" ; + want_VV = + mkV "ville" "vil" nonExist "ville" "villet" "villed" ** + {c2 = [] ; lock_VV = <>} ; + we_Pron = MorphoDan.mkNP "vi" "os" "vores" "vores" "vores" Plg P1 ; + whatSg_IP = {s = \\_ => "hvad" ; gn = SgUtr} ; ---- infl + whatPl_IP = {s = \\_ => "hvilke" ; gn = Plg} ; ---- infl + when_IAdv = ss "hvornår" ; + when_Subj = ss "når" ; + where_IAdv = ss "hver" ; + whichPl_IDet = {s = \\_ => "hvilke" ; n = Pl ; det = DIndef} ; + whichSg_IDet = {s = genderForms "hvilken" "hvilket" ; n = Sg ; det = DIndef} ; + whoSg_IP = {s = vem.s ; gn = SgUtr} ; + whoPl_IP = {s = \\_ => "hvilke" ; gn = Plg} ; + why_IAdv = ss "hvorfor" ; + without_Prep = ss "uden" ; + with_Prep = ss "med" ; + yes_Phr = ss ["ja"] ; + youSg_Pron = + MorphoDan.mkNP "du" "dig" "din" "dit" "dine" SgUtr P2 ; ---- + youPl_Pron = MorphoDan.mkNP "i" "jer" "jeres" "jeres" "jeres" Plg P2 ; + youPol_Pron = MorphoDan.mkNP "Dere" "Dere" "Deres" "Deres" "Deres" SgUtr P2 ; --- wrong in refl + +-- Auxiliaries that are used repeatedly. + + oper + vem = MorphoDan.mkNP "hvem" "hvem" "hvis" "hvis" "hvis" SgUtr P3 ; + +} + diff --git a/lib/resource-1.0/danish/VerbDan.gf b/lib/resource-1.0/danish/VerbDan.gf new file mode 100644 index 000000000..90d1b8bcd --- /dev/null +++ b/lib/resource-1.0/danish/VerbDan.gf @@ -0,0 +1,2 @@ +concrete VerbDan of Verb = CatDan ** VerbScand with + (ResScand = ResDan) ;