diff --git a/lib/resource/danish/BasicDan.gf b/lib/resource/danish/BasicDan.gf new file mode 100644 index 000000000..203abfb9e --- /dev/null +++ b/lib/resource/danish/BasicDan.gf @@ -0,0 +1,236 @@ +--# -path=.:../scandinavian:../abstract:../../prelude + +concrete BasicDan of Basic = CategoriesDan ** open ParadigmsDan,VerbsDan in { + +flags startcat=Phr ; lexer=textlit ; parser=chart ; 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_ADeg = regADeg "dårlig" ; ---- + bank_N = mk2N "bank" "banken" ; + beautiful_ADeg = mk3ADeg "vakker" "vakkert" "vakra" ; + become_VA = mkVA bli_V; + beer_N = regN "øl" neutrum ; + beg_V2V = mkV2V be_V [] "att" ; + big_ADeg = irregADeg "stor" "større" "størst"; + bike_N = mkN "sykkel" "sykkelen" "sykler" "syklene" ; + bird_N = mk2N "fugl" "fuglen" ; + black_ADeg = mk2ADeg "svart" "svart" ; + blue_ADeg = mk2ADeg "blå" "blått"; + boat_N = regN "båt" utrum ; + 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 = regN "gutt" utrum ; + bread_N = regN "brød" neutrum ; + break_V2 = dirV2 (mk2V "knuse" "knuste") ; + broad_ADeg = regADeg "bred" ; + brother_N2 = mkN2 ( (mkN "bror" "broren" "brødre" "brødrene")) "til" ; + brown_ADeg = regADeg "brun" ; + butter_N = regN "smør" neutrum ; + buy_V2 = dirV2 (mk2V "kjøpe" "kjøpte") ; + camera_N = mk2N "kamera" "kameraen" ; ---- + cap_N = mk2N "lue" "lua" ; + car_N = regN "bil" utrum ; + carpet_N = regN "matte" utrum ; + cat_N = mk2N "katt" "katten" ; + ceiling_N = regN "tak" neutrum ; + chair_N = regN "stol" utrum ; + cheese_N = regN "ost" utrum ; + child_N = regN "barn" neutrum ; + church_N = regN "kirke" utrum ; + city_N = mk2N "by" "byen" ; + clean_ADeg = regADeg "rein" ; + clever_ADeg = regADeg "klok" ; + close_V2 = dirV2 (mk2V "lukke" "lukket") ; + coat_N = regN "frakk" utrum ; + cold_ADeg = 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_ADeg = mk3ADeg "skitten" "skittent" "skitne" ; ---- + distance_N3 = mkN3 (regN "avstand" utrum) "fra" "til" ; + doctor_N = mk2N "lege" "legen" ; + dog_N = regN "hund" utrum ; + door_N = regN "dør" utrum ; + drink_V2 = dirV2 drikke_V ; + easy_A2V = mkA2V (regA "grei") "før" ; + eat_V2 = dirV2 (mk2V "spise" "spiste") ; + empty_ADeg = mkADeg "tom" "tomt" "tomme" "tommere" "tommest" ; + enemy_N = regN "fiende" utrum ; + 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 = regN "golv" neutrum ; + forget_V2 = dirV2 (mkV "glemme" "glemmer" "glemmes" "glemte" "glemt" "glem") ; + fridge_N = regN "kjøleskap" neutrum ; + friend_N = mkN "venn" "vennen" "venner" "vennene" ; + fruit_N = mk2N "frukt" "frukten" ; + fun_AV = mkAV (mkA "morsom" "morsomt" "morsomme") ; + garden_N = regN "hage" utrum ; + girl_N = regN "jente" utrum ; + glove_N = regN "hanske" utrum ; + gold_N = regN "gull" neutrum ; + good_ADeg = mkADeg "god" "godt" "gode" "bedre" "best" ; + go_V = gå_V ; + green_ADeg = mk2ADeg "grønn" "grønt" ; + harbour_N = regN "havn" utrum; + hate_V2 = dirV2 (regV "hate") ; + hat_N = regN "hatt" utrum ; + have_V2 = dirV2 ha_V ; + hear_V2 = dirV2 (mk2V "høre" "hørte") ; + hill_N = regN "haug" utrum ; + hope_VS = mkVS (regV "håpe") ; + horse_N = regN "hest" utrum ; + hot_ADeg = regADeg "heit" ; + house_N = regN "hus" neutrum ; + important_ADeg = regADeg "viktig" ; + industry_N = mk2N "industri" "industrien" ; + iron_N = regN "jern" neutrum ; + king_N = regN "konge" utrum ; + know_V2 = dirV2 vite_V ; + lake_N = regN "vann" neutrum ; + lamp_N = regN "lampe" utrum ; + learn_V2 = dirV2 (mk2V "lære" "lærte") ; + leather_N = regN "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_ADeg = irregADeg "lang" "lengre" "lengst" ; + lose_V2 = dirV2 (mk2V "tape" "tapte") ; + love_N = regN "kjærlighet" utrum ; + love_V2 = dirV2 (regV "elske") ; + man_N = (mkN "mann" "mannen" "menn" "mennen") ; + married_A2 = mkA2 (mk2A "gift" "gift") "med" ; + meat_N = regN "kjøtt" neutrum ; + milk_N = regN "melk" utrum ; + moon_N = regN "måne" utrum ; + mother_N2 = mkN2 (mkN "mor" "moren" "mødre" "mødrene") "til" ; ---- fem + mountain_N = regN "berg" neutrum ; + music_N = mk2N "musikk" "musikken" ; + narrow_ADeg = regADeg "smal" ; + new_ADeg = mkADeg "ny" "nytt" "nye" "nyere" "nyest" ; + newspaper_N = regN "avis" utrum ; + oil_N = regN "olje" utrum ; + old_ADeg = mkADeg "gammel" "gammelt" "gamle" "eldre" "eldst" ; + open_V2 = dirV2 (regV "åpne") ; + paint_V2A = mkV2A (regV "male") [] ; + paper_N = regN "papir" neutrum ; ---- + peace_N = regN "fred" utrum ; + pen_N = regN "penn" utrum ; + 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 = regN "dronning" utrum ; + radio_N = regN "radio" utrum ; + rain_V0 = mkV0 (regV "regne") ; + read_V2 = dirV2 (mk2V "lese" "leste") ; + red_ADeg = regADeg "rød" ; + religion_N = mk2N "religion" "religionen" ; + restaurant_N = mk2N "restaurant" "restauranten" ; + river_N = mk2N "elv" "elva" ; + rock_N = regN "stein" utrum ; + roof_N = regN "tak" neutrum ; + rubber_N = mk2N "gummi" "gummien" ; + run_V = springe_V ; + say_VS = mkVS si_V ; + school_N = regN "skole" utrum; + 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 = regN "skip" neutrum ; + shirt_N = regN "skjorte" utrum ; + shoe_N = regN "sko" utrum ; + shop_N = mk2N "butikk" "butikken" ; + short_ADeg = 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_ADeg = mkADeg "liten" "lite" "små" "mindre" "minst" ; ---- lille + snake_N = regN "orm" utrum ; + sock_N = regN "strømpe" utrum ; + speak_V2 = dirV2 (regV "snakke") ; + star_N = regN "stjerne" utrum ; + steel_N = regN "stål" neutrum ; + stone_N = regN "stein" utrum ; + stove_N = regN "komfyr" utrum ; + student_N = mk2N "student" "studenten" ; + stupid_ADeg = mk3ADeg "dum" "dumt" "dumme" ; + sun_N = regN "sol" utrum ; + switch8off_V2 = dirV2 (partV (irregV "slå" "slo" "slått") "av") ; + switch8on_V2 = dirV2 (partV (irregV "slå" "slo" "slått") "på") ; + table_N = regN "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_ADeg = mk2ADeg "tykk" "tykt" ; + thin_ADeg = mk2ADeg "tynn" "tynt" ; + train_N = regN "tog" neutrum ; + travel_V = mk2V "reise" "reiste" ; + tree_N = mkN "tre" "treet" "trær" "træne" ; + ---- trousers_N = regN "trousers" ; ---- pl t ! + ugly_ADeg = mk2ADeg "stygg" "stygt" ; + understand_V2 = dirV2 (irregV "forstå" "forstod" "forstått") ; + university_N = regN "universitet" neutrum ; + village_N = mk2N "grend" "grenda" ; + wait_V2 = mkV2 (regV "vente") "på" ; + walk_V = (irregV "gå" "gikk" "gått") ; + warm_ADeg = regADeg "varm" ; + war_N = regN "krig" utrum ; + watch_V2 = mkV2 se_V "på" ; + water_N = mk2N "vatn" "vatnet" ; + white_ADeg = regADeg "hvit" ; + window_N = mkN "vindu" "vinduet" "vinduer" "vinduene" ; ---- er? + wine_N = mk2N "vin" "vinen" ; + win_V2 = dirV2 (irregV "vinne" "vant" "vunnet") ; + woman_N = regN "kvinne" utrum ; ---- kvinnen + wonder_VQ = mkVQ (regV "undre") ; ---- seg + wood_N = mkN "tre" "treet" "trær" "træne" ; + write_V2 = dirV2 (irregV "skrive" "skrev" "skrevet") ; + yellow_ADeg = regADeg "gul" ; + young_ADeg = 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" ; + here_Adv = mkAdv "her" ; + here7to_Adv = mkAdv "hit" ; + here7from_Adv = mkAdv ["herfra"] ; + there_Adv = mkAdv "der" ; + there7to_Adv = mkAdv "dit" ; + there7from_Adv = mkAdv ["derfra"] ; + +} ; + +-- a" -> e" 86 +-- ö -> ø 66 +-- ck -> kk 20 +-- ä -> e 44 diff --git a/lib/resource/danish/CountryDan.gf b/lib/resource/danish/CountryDan.gf new file mode 100644 index 000000000..17e9acb15 --- /dev/null +++ b/lib/resource/danish/CountryDan.gf @@ -0,0 +1,27 @@ +concrete CountryDan of Country = open CategoriesDan, ParadigmsDan in { + + lincat + Country = PN ; + Nationality = A ; + Language = N ; + + lin + Denmark = regPN "Danmark" neutrum ; + England = regPN "England" neutrum ; + Finland = regPN "Finland" neutrum ; + France = regPN "Frankrike" neutrum ; + Germany = regPN "Tyskland" neutrum ; + Italy = regPN "Italien" neutrum ; + Norway = regPN "Norge" neutrum ; + Russia = regPN "Ryssland" neutrum ; + Spain = regPN "Spanien" neutrum ; + Sweden = regPN "Sverige" neutrum ; + + Danish = regA "dansk" ; + English = regA "engelsk" ; + + DanishLang = regN "dansk" utrum ; + EnglishLang = regN "engelsk" utrum ; + + +} ; diff --git a/lib/resource/danish/LangDan.gf b/lib/resource/danish/LangDan.gf new file mode 100644 index 000000000..a857196b8 --- /dev/null +++ b/lib/resource/danish/LangDan.gf @@ -0,0 +1,22 @@ +--# -path=.:../scandinavian:../abstract:../../prelude + +concrete LangDan of Lang = + RulesDan, + ClauseDan, + StructuralDan, + BasicDan, + TimeDan, + CountryDan + + ** open Prelude, ParadigmsDan in { + +lin + AdvDate d = prefixSS "på" d ; + AdvTime t = prefixSS "klokken" t ; + NWeekday w = w ; + PNWeekday w = nounPN w ; + + PNCountry x = x ; + ANationality x = x ; + NLanguage x = x ; +} diff --git a/lib/resource/danish/ParadigmsDan.gf b/lib/resource/danish/ParadigmsDan.gf new file mode 100644 index 000000000..d7fc4e4e0 --- /dev/null +++ b/lib/resource/danish/ParadigmsDan.gf @@ -0,0 +1,370 @@ +--# -path=.:../scandinavian:../abstract:../../prelude + +--1 Sanish 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. +-- +-- The following modules are presupposed: + +resource ParadigmsDan = + open (Predef=Predef), Prelude, TypesDan, MorphoDan, SyntaxDan, CategoriesDan in { + +--2 Parameters +-- +-- To abstract over gender names, we define the following identifiers. + +oper + Gender : Type ; + + utrum : 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 the gender, +-- and computes the other forms by a heuristic. +-- If in doubt, use the $cc$ command to test! + + regN : 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) -> ADeg ; + +-- The regular pattern works for many adjectives, e.g. those ending +-- with "ig". + + regADeg : Str -> ADeg ; + +-- Just the comparison forms can be irregular. + + irregADeg : (tung,tyngre,tyngst : Str) -> ADeg ; + +-- Sometimes just the positive forms are irregular. + + mk3ADeg : (galen,galet,galna : Str) -> ADeg ; + mk2ADeg : (bred,bredt : Str) -> ADeg ; + +-- If comparison is formed by "mer, "mest", as in general for +-- long adjective, the following pattern is used: + + compoundADeg : A -> ADeg ; -- -/mer/mest norsk + +-- From a given $ADeg$, it is possible to get back to $A$. + + adegA : ADeg -> A ; + + +--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 $IrregularSwe$. +-- 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". + + depV : 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 ; + + +--2 Definitions of the paradigms +-- +-- The definitions should not bother the user of the API. So they are +-- hidden from the document. +--. + + Gender = SyntaxDan.NounGender ; + Number = TypesDan.Number ; + Case = TypesDan.Case ; + utrum = NUtr ; + neutrum = NNeutr ; + singular = Sg ; + plural = Pl ; + nominative = Nom ; + genitive = Gen ; + + mkN x y z u = let sb = mkSubstantive x y z u + in {s = \\n,b,c => sb.s ! SF n b c ; g = extNGen y ; lock_N = <>} ; + regN x g = case last x of { + "e" => case g of { + NUtr => mkN x (x + "n") (x + "r") (x + "rne") ; + NNeutr => mkN x (x + "t") (x + "r") (init x + "ene") + } ; + _ => case g of { + NUtr => mkN x (x + "en") (x + "er") (x + "rene") ; + NNeutr => mkN x (x + "et") (x + "") (x + "ene") + } + } ; + + mk2N x y = case last y of { + "n" => regN x utrum ; + _ => regN x neutrum + } ; + + + mkN2 = \n,p -> n ** {lock_N2 = <> ; s2 = p} ; + regN2 n g = mkN2 (regN n g) (mkPreposition "av") ; + mkN3 = \n,p,q -> n ** {lock_N3 = <> ; s2 = p ; s3 = q} ; + + regPN n g = {s = \\c => mkCase n ! c ; g = g} ** {lock_PN = <>} ; + nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ; + mkNP x y n g = + {s = table {PGen _ => x ; _ => y} ; g = genNoun g ; n = n ; p = P3 ; + lock_NP = <>} ; + + mkA a b c = extractPositive (mkAdjective a b c [] []) ** {lock_A = <>} ; + mk2A a b = mkA a b (a + "e") ; + regA a = extractPositive (regADeg a) ** {lock_A = <>} ; + + mkA2 a p = a ** {s2 = p ; lock_A2 = <>} ; + + mkADeg a b c d e = mkAdjective a b c d e ** {lock_ADeg = <>} ; + regADeg a = case Predef.dp 2 a of { +---- "ig" => aBillig a ; + "sk" => aRask a ; + _ => case last a of { + "t" => aAbstrakt a ; + _ => aRod a + }} ** {lock_ADeg = <>} ; + irregADeg a b c = mkAdjective a (a + "t") (a + "e") b c ** {lock_ADeg = <>} ; + mk3ADeg a b c = mkAdjective a b c (a + "ere") (a + "est") ** {lock_ADeg = <>} ; + mk2ADeg a b = mkAdjective a b (a + "e") (a + "ere") (a + "est") ** {lock_ADeg = <>} ; + + 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 = mkVerb a b c d e f ** {s1 = [] ; lock_V = <>} ; + + regV a = case last a of { + "e" => vHusk (init a) ; + _ => vBo a + } ** {s1 = [] ; lock_V = <>} ; + + mk2V a b = regVerb a b ** {s1 = [] ; lock_V = <>} ; + + irregV x y z = irregVerb x y z + ** {s1 = [] ; lock_V = <>} ; + + partV v p = {s = v.s ; s1 = p ; lock_V = <>} ; + depV v = deponentVerb v ** {lock_V = <>} ; + + mkV2 v p = v ** {s = v.s ; s1 = v.s1 ; s2 = p ; lock_V2 = <>} ; + dirV2 v = mkV2 v [] ; + + mkV3 v p q = v ** {s = v.s ; s1 = v.s1 ; s2 = p ; s3 = 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 ** {isAux = False ; 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_AS = <>} ; + mkA2S v p = mkA2 v p ** {lock_A2S = <>} ; + mkAV v = v ** {lock_AV = <>} ; + mkA2V v p = mkA2 v p ** {lock_A2V = <>} ; + +} ; diff --git a/lib/resource/danish/ResourceDan.gf b/lib/resource/danish/ResourceDan.gf new file mode 100644 index 000000000..4d7df5a13 --- /dev/null +++ b/lib/resource/danish/ResourceDan.gf @@ -0,0 +1,4 @@ +--# -path=.:../scandinavian:../abstract:../../prelude + +concrete ResourceDan of Resource = RulesDan, StructuralDan, ClauseDan ** {} ; + diff --git a/lib/resource/danish/TimeDan.gf b/lib/resource/danish/TimeDan.gf new file mode 100644 index 000000000..2734f9f07 --- /dev/null +++ b/lib/resource/danish/TimeDan.gf @@ -0,0 +1,33 @@ +concrete TimeDan of Time = NumeralsDan ** + open Prelude, TypesDan, CategoriesDan, ParadigmsDan in { + +lincat +Date = SS ; +Weekday = N ; +Hour = SS ; +Minute = SS ; +Time = SS ; + +lin +DayDate day = ss (day.s ! singular ! Indef ! nominative) ; +DayTimeDate day time = ss (day.s ! singular ! Indef ! nominative ++ "klokken" ++ time.s) ; + +FormalTime = infixSS "og" ; +PastTime h m = ss (m.s ++ "over" ++ h.s) ; +ToTime h m = ss (m.s ++ "på" ++ h.s) ; +ExactTime h = ss (h.s ++ "akkurat") ; + +NumHour n = {s = n.s ! Neutr} ; +NumMinute n = {s = n.s ! Neutr} ; + +monday = regN "mandag" masculine ; +tuesday = regN "tirsdag" masculine ; +wednesday = regN "onsdag" masculine ; +thursday = regN "torsdag" masculine ; +friday = regN "fredag" masculine ; +saturday = regN "lørdag" masculine ; +sunday = regN "søndag" masculine ; + + + +} ; diff --git a/lib/resource/danish/VerbsDan.gf b/lib/resource/danish/VerbsDan.gf new file mode 100644 index 000000000..376fcf0af --- /dev/null +++ b/lib/resource/danish/VerbsDan.gf @@ -0,0 +1,71 @@ +--# -path=.:../scandinavian:../abstract:../../prelude + +-- see: http://frodo.bruderhof.com/norskklassen/commonverbs.htm + +concrete VerbsDan of VerbsDanAbs = CategoriesDan ** open ParadigmsDan in { + + flags optimize=values ; + + lin be_V = irregV "be" "bad" "bedt" ; + 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 = irregV "se" "så" "sett" ; + 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/danish/VerbsDanAbs.gf b/lib/resource/danish/VerbsDanAbs.gf new file mode 100644 index 000000000..9da6aaa7a --- /dev/null +++ b/lib/resource/danish/VerbsDanAbs.gf @@ -0,0 +1,65 @@ +abstract VerbsDanAbs = Categories ** { + 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 ; +}