From 174bff70e0aa877ee414c9206af577935e588807 Mon Sep 17 00:00:00 2001 From: aarne Date: Mon, 2 Jun 2008 15:35:17 +0000 Subject: [PATCH] danish and norwegian in 1.4 --- lib/resource-1.4/danish/AdjectiveDan.gf | 2 + lib/resource-1.4/danish/AdverbDan.gf | 2 + lib/resource-1.4/danish/CatDan.gf | 2 + lib/resource-1.4/danish/ConjunctionDan.gf | 2 + lib/resource-1.4/danish/Danish.gf | 7 + lib/resource-1.4/danish/DanishAbs.gf | 5 + lib/resource-1.4/danish/DiffDan.gf | 86 +++ lib/resource-1.4/danish/ExtraDan.gf | 3 + lib/resource-1.4/danish/ExtraDanAbs.gf | 7 + lib/resource-1.4/danish/ExtraScandDan.gf | 2 + lib/resource-1.4/danish/GrammarDan.gf | 21 + lib/resource-1.4/danish/IdiomDan.gf | 41 ++ lib/resource-1.4/danish/IrregDan.gf | 72 +++ lib/resource-1.4/danish/IrregDanAbs.gf | 65 +++ lib/resource-1.4/danish/LangDan.gf | 10 + lib/resource-1.4/danish/LexiconDan.gf | 359 +++++++++++++ lib/resource-1.4/danish/MathDan.gf | 2 + lib/resource-1.4/danish/MorphoDan.gf | 164 ++++++ lib/resource-1.4/danish/NounDan.gf | 2 + lib/resource-1.4/danish/NumeralDan.gf | 83 +++ lib/resource-1.4/danish/ParadigmsDan.gf | 517 +++++++++++++++++++ lib/resource-1.4/danish/PhraseDan.gf | 2 + lib/resource-1.4/danish/QuestionDan.gf | 2 + lib/resource-1.4/danish/RelativeDan.gf | 2 + lib/resource-1.4/danish/ResDan.gf | 3 + lib/resource-1.4/danish/SentenceDan.gf | 2 + lib/resource-1.4/danish/StructuralDan.gf | 128 +++++ lib/resource-1.4/danish/VerbDan.gf | 2 + lib/resource-1.4/norwegian/AdjectiveNor.gf | 2 + lib/resource-1.4/norwegian/AdverbNor.gf | 2 + lib/resource-1.4/norwegian/CatNor.gf | 2 + lib/resource-1.4/norwegian/ConjunctionNor.gf | 2 + lib/resource-1.4/norwegian/DiffNor.gf | 90 ++++ lib/resource-1.4/norwegian/ExtraNor.gf | 8 + lib/resource-1.4/norwegian/ExtraNorAbs.gf | 9 + lib/resource-1.4/norwegian/ExtraScandNor.gf | 2 + lib/resource-1.4/norwegian/GrammarNor.gf | 21 + lib/resource-1.4/norwegian/IdiomNor.gf | 42 ++ lib/resource-1.4/norwegian/IrregNor.gf | 72 +++ lib/resource-1.4/norwegian/IrregNorAbs.gf | 65 +++ lib/resource-1.4/norwegian/LangNor.gf | 10 + lib/resource-1.4/norwegian/LexiconNor.gf | 361 +++++++++++++ lib/resource-1.4/norwegian/MathNor.gf | 2 + lib/resource-1.4/norwegian/MorphoNor.gf | 171 ++++++ lib/resource-1.4/norwegian/Norwegian.gf | 7 + lib/resource-1.4/norwegian/NorwegianAbs.gf | 5 + lib/resource-1.4/norwegian/NounNor.gf | 2 + lib/resource-1.4/norwegian/NumeralNor.gf | 85 +++ lib/resource-1.4/norwegian/ParadigmsNor.gf | 502 ++++++++++++++++++ lib/resource-1.4/norwegian/PhraseNor.gf | 2 + lib/resource-1.4/norwegian/QuestionNor.gf | 2 + lib/resource-1.4/norwegian/RelativeNor.gf | 2 + lib/resource-1.4/norwegian/ResNor.gf | 3 + lib/resource-1.4/norwegian/SentenceNor.gf | 2 + lib/resource-1.4/norwegian/StructuralNor.gf | 128 +++++ lib/resource-1.4/norwegian/VerbNor.gf | 2 + 56 files changed, 3198 insertions(+) create mode 100644 lib/resource-1.4/danish/AdjectiveDan.gf create mode 100644 lib/resource-1.4/danish/AdverbDan.gf create mode 100644 lib/resource-1.4/danish/CatDan.gf create mode 100644 lib/resource-1.4/danish/ConjunctionDan.gf create mode 100644 lib/resource-1.4/danish/Danish.gf create mode 100644 lib/resource-1.4/danish/DanishAbs.gf create mode 100644 lib/resource-1.4/danish/DiffDan.gf create mode 100644 lib/resource-1.4/danish/ExtraDan.gf create mode 100644 lib/resource-1.4/danish/ExtraDanAbs.gf create mode 100644 lib/resource-1.4/danish/ExtraScandDan.gf create mode 100644 lib/resource-1.4/danish/GrammarDan.gf create mode 100644 lib/resource-1.4/danish/IdiomDan.gf create mode 100644 lib/resource-1.4/danish/IrregDan.gf create mode 100644 lib/resource-1.4/danish/IrregDanAbs.gf create mode 100644 lib/resource-1.4/danish/LangDan.gf create mode 100644 lib/resource-1.4/danish/LexiconDan.gf create mode 100644 lib/resource-1.4/danish/MathDan.gf create mode 100644 lib/resource-1.4/danish/MorphoDan.gf create mode 100644 lib/resource-1.4/danish/NounDan.gf create mode 100644 lib/resource-1.4/danish/NumeralDan.gf create mode 100644 lib/resource-1.4/danish/ParadigmsDan.gf create mode 100644 lib/resource-1.4/danish/PhraseDan.gf create mode 100644 lib/resource-1.4/danish/QuestionDan.gf create mode 100644 lib/resource-1.4/danish/RelativeDan.gf create mode 100644 lib/resource-1.4/danish/ResDan.gf create mode 100644 lib/resource-1.4/danish/SentenceDan.gf create mode 100644 lib/resource-1.4/danish/StructuralDan.gf create mode 100644 lib/resource-1.4/danish/VerbDan.gf create mode 100644 lib/resource-1.4/norwegian/AdjectiveNor.gf create mode 100644 lib/resource-1.4/norwegian/AdverbNor.gf create mode 100644 lib/resource-1.4/norwegian/CatNor.gf create mode 100644 lib/resource-1.4/norwegian/ConjunctionNor.gf create mode 100644 lib/resource-1.4/norwegian/DiffNor.gf create mode 100644 lib/resource-1.4/norwegian/ExtraNor.gf create mode 100644 lib/resource-1.4/norwegian/ExtraNorAbs.gf create mode 100644 lib/resource-1.4/norwegian/ExtraScandNor.gf create mode 100644 lib/resource-1.4/norwegian/GrammarNor.gf create mode 100644 lib/resource-1.4/norwegian/IdiomNor.gf create mode 100644 lib/resource-1.4/norwegian/IrregNor.gf create mode 100644 lib/resource-1.4/norwegian/IrregNorAbs.gf create mode 100644 lib/resource-1.4/norwegian/LangNor.gf create mode 100644 lib/resource-1.4/norwegian/LexiconNor.gf create mode 100644 lib/resource-1.4/norwegian/MathNor.gf create mode 100644 lib/resource-1.4/norwegian/MorphoNor.gf create mode 100644 lib/resource-1.4/norwegian/Norwegian.gf create mode 100644 lib/resource-1.4/norwegian/NorwegianAbs.gf create mode 100644 lib/resource-1.4/norwegian/NounNor.gf create mode 100644 lib/resource-1.4/norwegian/NumeralNor.gf create mode 100644 lib/resource-1.4/norwegian/ParadigmsNor.gf create mode 100644 lib/resource-1.4/norwegian/PhraseNor.gf create mode 100644 lib/resource-1.4/norwegian/QuestionNor.gf create mode 100644 lib/resource-1.4/norwegian/RelativeNor.gf create mode 100644 lib/resource-1.4/norwegian/ResNor.gf create mode 100644 lib/resource-1.4/norwegian/SentenceNor.gf create mode 100644 lib/resource-1.4/norwegian/StructuralNor.gf create mode 100644 lib/resource-1.4/norwegian/VerbNor.gf diff --git a/lib/resource-1.4/danish/AdjectiveDan.gf b/lib/resource-1.4/danish/AdjectiveDan.gf new file mode 100644 index 000000000..71d3c56c2 --- /dev/null +++ b/lib/resource-1.4/danish/AdjectiveDan.gf @@ -0,0 +1,2 @@ +concrete AdjectiveDan of Adjective = CatDan ** AdjectiveScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/AdverbDan.gf b/lib/resource-1.4/danish/AdverbDan.gf new file mode 100644 index 000000000..07bab5be4 --- /dev/null +++ b/lib/resource-1.4/danish/AdverbDan.gf @@ -0,0 +1,2 @@ +concrete AdverbDan of Adverb = CatDan ** AdverbScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/CatDan.gf b/lib/resource-1.4/danish/CatDan.gf new file mode 100644 index 000000000..d3d6eec83 --- /dev/null +++ b/lib/resource-1.4/danish/CatDan.gf @@ -0,0 +1,2 @@ +concrete CatDan of Cat = CommonX ** CatScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/ConjunctionDan.gf b/lib/resource-1.4/danish/ConjunctionDan.gf new file mode 100644 index 000000000..d8e9215fd --- /dev/null +++ b/lib/resource-1.4/danish/ConjunctionDan.gf @@ -0,0 +1,2 @@ +concrete ConjunctionDan of Conjunction = CatDan ** ConjunctionScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/Danish.gf b/lib/resource-1.4/danish/Danish.gf new file mode 100644 index 000000000..6626048cf --- /dev/null +++ b/lib/resource-1.4/danish/Danish.gf @@ -0,0 +1,7 @@ +--# -path=.:../scandinavian:../abstract:../common:prelude + +concrete Danish of DanishAbs = + LangDan, + IrregDan - [fly_V], + ExtraDan + ** {} ; diff --git a/lib/resource-1.4/danish/DanishAbs.gf b/lib/resource-1.4/danish/DanishAbs.gf new file mode 100644 index 000000000..734717b6d --- /dev/null +++ b/lib/resource-1.4/danish/DanishAbs.gf @@ -0,0 +1,5 @@ +abstract DanishAbs = + Lang, + IrregDanAbs - [fly_V], + ExtraDanAbs + ** {} ; diff --git a/lib/resource-1.4/danish/DiffDan.gf b/lib/resource-1.4/danish/DiffDan.gf new file mode 100644 index 000000000..cd7185def --- /dev/null +++ b/lib/resource-1.4/danish/DiffDan.gf @@ -0,0 +1,86 @@ +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 < : Gender * Number> of { + => SgUtr ; + => SgNeutr ; + _ => Plg + } ; + + detDef : Species = Indef ; + + Verb : Type = { + s : VForm => Str ; + part : Str ; + vtype : VType ; + isVaere : Bool + } ; + + hasAuxBe v = v.isVaere ; + +-- Strings. + + conjThat = "at" ; + conjThan = "end" ; + conjAnd = "og" ; + infMark = "at" ; + compMore = "mere" ; + + subjIf = "hvis" ; + + artIndef : Gender => Str = table { + Utr => "en" ; + Neutr => "et" + } ; + + verbHave = + mkVerb "have" "har" "hav" "havde" "haft" "haven" "havet" "havne" ** + {part = [] ; isVaere = False} ; + verbBe = + mkVerb "være" "er" "var" "var" "været" "væren" "været" "værne" ** + {part = [] ; isVaere = False} ; + verbBecome = + mkVerb "blive" "bliver" "bliv" "blev" "blevet" + "bliven" "blivet" "blivne" ** + {part = [] ; isVaere = True} ; + + 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.4/danish/ExtraDan.gf b/lib/resource-1.4/danish/ExtraDan.gf new file mode 100644 index 000000000..28083b20c --- /dev/null +++ b/lib/resource-1.4/danish/ExtraDan.gf @@ -0,0 +1,3 @@ +concrete ExtraDan of ExtraDanAbs = ExtraScandDan ** open CommonScand, ResDan in { + +} diff --git a/lib/resource-1.4/danish/ExtraDanAbs.gf b/lib/resource-1.4/danish/ExtraDanAbs.gf new file mode 100644 index 000000000..45ac75290 --- /dev/null +++ b/lib/resource-1.4/danish/ExtraDanAbs.gf @@ -0,0 +1,7 @@ +-- Structures special for Danish. These are not implemented in other +-- Scandinavian languages. + +abstract ExtraDanAbs = ExtraScandAbs ** { + + +} \ No newline at end of file diff --git a/lib/resource-1.4/danish/ExtraScandDan.gf b/lib/resource-1.4/danish/ExtraScandDan.gf new file mode 100644 index 000000000..26fa8f390 --- /dev/null +++ b/lib/resource-1.4/danish/ExtraScandDan.gf @@ -0,0 +1,2 @@ +concrete ExtraScandDan of ExtraScandAbs = CatDan ** ExtraScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/GrammarDan.gf b/lib/resource-1.4/danish/GrammarDan.gf new file mode 100644 index 000000000..1c2424787 --- /dev/null +++ b/lib/resource-1.4/danish/GrammarDan.gf @@ -0,0 +1,21 @@ +--# -path=.:../scandinavian:../abstract:../common:prelude + +concrete GrammarDan of Grammar = + NounDan, + VerbDan, + AdjectiveDan, + AdverbDan, + NumeralDan, + SentenceDan, + QuestionDan, + RelativeDan, + ConjunctionDan, + PhraseDan, + TextX, + IdiomDan, + StructuralDan + ** { + +flags startcat = Phr ; unlexer = text ; lexer = text ; + +} ; diff --git a/lib/resource-1.4/danish/IdiomDan.gf b/lib/resource-1.4/danish/IdiomDan.gf new file mode 100644 index 000000000..e0f79439d --- /dev/null +++ b/lib/resource-1.4/danish/IdiomDan.gf @@ -0,0 +1,41 @@ +concrete IdiomDan of Idiom = CatDan ** + open MorphoDan, ParadigmsDan, IrregDan, Prelude in { + + flags optimize=all_subs ; + + lin + ImpersCl vp = mkClause "det" (agrP3 MorphoDan.neutrum Sg) vp ; + GenericCl vp = mkClause "man" (agrP3 MorphoDan.utrum Sg) vp ; + + CleftNP np rs = mkClause "det" (agrP3 MorphoDan.neutrum Sg) + (insertObj (\\_ => rs.s ! np.a) + (insertObj (\\_ => np.s ! rs.c) (predV verbBe))) ; + + CleftAdv ad s = mkClause "det" (agrP3 MorphoDan.neutrum Sg) + (insertObj (\\_ => "som" ++ s.s ! Sub) + (insertObj (\\_ => ad.s) (predV verbBe))) ; + + + ExistNP np = + mkClause "det" (agrP3 MorphoDan.neutrum Sg) (insertObj + (\\_ => np.s ! accusative) (predV (depV finde_V))) ; + + ExistIP ip = { + s = \\t,a,p => + let + cls = + (mkClause "det" (agrP3 MorphoDan.neutrum Sg) (predV (depV finde_V))).s ! t ! a ! p ; + who = ip.s ! accusative + in table { + QDir => who ++ cls ! Inv ; + QIndir => who ++ cls ! Sub + } + } ; + + ProgrVP vp = + insertObj (\\a => ["ved å"] ++ infVP vp a) (predV verbBe) ; + + ImpPl1 vp = {s = ["lad os"] ++ infVP vp {gn = Plg ; p = P1}} ; + +} + diff --git a/lib/resource-1.4/danish/IrregDan.gf b/lib/resource-1.4/danish/IrregDan.gf new file mode 100644 index 000000000..31dfebeff --- /dev/null +++ b/lib/resource-1.4/danish/IrregDan.gf @@ -0,0 +1,72 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +-- http://users.cybercity.dk/~nmb3879/danishgram3.html + +concrete IrregDan of IrregDanAbs = CatDan ** open Prelude, ParadigmsDan in { + + flags optimize=values ; + + lin + + bære_V = irregV "bære" "bar" "båret" ; + bede_V = mkV "bede" "beder" "bedes" "bad" "bedt" "bed" ; + bide_V = irregV "bite" "bed" "bidt" ; + binde_V = irregV "binde" "bandt" "bundet" ; + blive_V = irregV "blive" "blev" "blevet" ; + brænde_V = irregV "brænde" "brandt" "brændt" ;-- + bringe_V = irregV "bringe" "bragte" "bragt" ; + burde_V = irregV "burde" "burde" "burdet" ;-- + dø_V = irregV "dø" "døde" "død" ; + drage_V = irregV "drage" "drog" "draget" ; + drikke_V = irregV "drikke" "drak" "drukket" ; + drive_V = irregV "drive" "drev" "drevet" ; + falde_V = irregV "falde" "faldt" "faldet" ;----er + få_V = irregV "få" "fik" "fået" ; + finde_V = irregV "finde" "fandt" "fundet" ; + flyde_V = irregV "flyde" "flød" "flydt" ; + flyve_V = irregV "flyve" "fløj" "fløjet" ; + forlade_V = irregV "forlade" "forlod" "forladet" ; + forstå_V = irregV "forstå" "forstod" "forstået" ; + fryse_V = irregV "fryse" "frøs" "frosset" ; + gå_V = irregV "gå" "gik" "gået" ;----er + give_V = irregV "give" "gav" "givet" ; + gnide_V = irregV "gnide" "gned" "gnidd" ;-- + gøre_V = irregV "gøre" "gjorde" "gjort" ; + have_V = mkV "have" "har" "havde" "haft" "havd" "hav" ; + hente_V = irregV "hente" "hentet" "hendt" ;-- +-- hete_V = irregV "hete" (variants {"het" ;-- "hette"}) "hett" ;-- +-- hjelpe_V = irregV "hjelpe" "hjalp" "hjulpet" ;-- + holde_V = irregV "holde" "holdt" "holdt" ;-- + komme_V = irregV "komme" "kom" "kommet" ; + kunne_V = irregV "kunne" "kunne" "kunnet" ; + lade_V = irregV "lade" "lod" "ladet" ; + lægge_V = irregV "lægge" "lagde" "lagt" ; + le_V = irregV "le" "lo" "leet" ; + ligge_V = irregV "ligge" "lå" "ligget" ; + løbe_V = irregV "løbe" "løb" "løbet" ; + måtte_V = irregV "måtte" "måtte" "måttet" ; + renne_V = irregV "renne" "rant" "rent" ;-- + sælge_V = irregV "sælge" "solgte" "solgt" ; + sætte_V = irregV "sætte" "satte" "sat" ; + se_V = irregV "se" "så" "set" ; + sidde_V = irregV "sidde" "sad" "siddet" ; + sige_V = irregV "sige" "sagde" "sagt" ; + skære_V = irregV "skære" "skar" "skåret" ;-- + skrive_V = irregV "skrive" "skrev" "skrevet" ; + skulle_V = irregV "skulle" "skulle" "skullet" ; + slå_V = irregV "slå" "slog" "slått" ;-- + sove_V = irregV "sove" "sov" "sovet" ; + spørge_V = irregV "spørge" "spurgte" "spurgt" ; + springe_V = irregV "springe" "sprang" "sprunget" ;-- + stå_V = irregV "stå" "stod" "stået" ; + stikke_V = irregV "stikke" "stakk" "stukket" ;-- + synge_V = irregV "synge" "sang" "sunget" ;-- + tage_V = irregV "tage" "tog" "taget" ; +-- treffe_V = irregV "treffe" "traff" "truffet" ;-- +-- trives_V = irregV "trives" "trivdes" (variants {"trives" ;-- "trivs"}) ;-- + tælle_V = irregV "tælle" "talte" "talt" ; + vide_V = irregV "vide" "vidste" "vidst" ; + +} + +-- readFile "vrbs.tmp" >>= mapM_ (putStrLn . (\ (a:_:b:c:_) -> " " ++ a ++ "_V = irregV \"" ++ a ++ "\" \"" ++ b ++ "\" \"" ++ c ++ "\" ;") . words) . lines diff --git a/lib/resource-1.4/danish/IrregDanAbs.gf b/lib/resource-1.4/danish/IrregDanAbs.gf new file mode 100644 index 000000000..5f8942f76 --- /dev/null +++ b/lib/resource-1.4/danish/IrregDanAbs.gf @@ -0,0 +1,65 @@ +abstract IrregDanAbs = Cat ** { + + fun + + bære_V : V ; + bede_V : V ; + bide_V : V ; + binde_V : V ; + blive_V : V ; + brænde_V : V ; + bringe_V : V ; + burde_V : V ; + dø_V : V ; + drage_V : V ; + drikke_V : V ; + drive_V : V ; + falde_V : V ; + få_V : V ; + finde_V : V ; + flyde_V : V ; + flyve_V : V ; + forlade_V : V ; + forstå_V : V ; + fryse_V : V ; + gå_V : V ; + give_V : V ; +-- gjelde_V : V ; + gnide_V : V ; + gøre_V : V ; + have_V : V ; + hente_V : V ; +-- hete_V : V ; +-- hjelpe_V : V ; + holde_V : V ; + komme_V : V ; + kunne_V : V ; + lade_V : V ; + lægge_V : V ; + le_V : V ; + ligge_V : V ; + løbe_V : V ; + måtte_V : V ; + renne_V : V ; + sælge_V : V ; + sætte_V : V ; + se_V : V ; + sidde_V : V ; + sige_V : V ; + skære_V : V ; + skrive_V : V ; + skulle_V : V ; + slå_V : V ; + sove_V : V ; + spørge_V : V ; + springe_V : V ; + stå_V : V ; + stikke_V : V ; + synge_V : V ; + tage_V : V ; + tælle_V : V ; +-- treffe_V : V ; +-- trives_V : V ; + vide_V : V ; + +} diff --git a/lib/resource-1.4/danish/LangDan.gf b/lib/resource-1.4/danish/LangDan.gf new file mode 100644 index 000000000..7a80aded4 --- /dev/null +++ b/lib/resource-1.4/danish/LangDan.gf @@ -0,0 +1,10 @@ +--# -path=.:../scandinavian:../abstract:../common:prelude + +concrete LangDan of Lang = + GrammarDan, + LexiconDan + ** { + +flags startcat = Phr ; unlexer = text ; lexer = text ; + +} ; diff --git a/lib/resource-1.4/danish/LexiconDan.gf b/lib/resource-1.4/danish/LexiconDan.gf new file mode 100644 index 000000000..11a47a78b --- /dev/null +++ b/lib/resource-1.4/danish/LexiconDan.gf @@ -0,0 +1,359 @@ +--# -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") (mkPrep "til") ; + apartment_N = mk2N "værelse" "værelsen" ; + apple_N = mk3N "æble" "æblet" "æbler" ; + art_N = mk2N "kunst" "kunsten" ; + ask_V2Q = mkV2Q spørge_V noPrep ; + baby_N = mk2N "baby" "babyen" ; ---- babyen + bad_A = regADeg "dårlig" ; ---- + bank_N = mk2N "bank" "banken" ; + beautiful_A = mk3ADeg "smuk" "smukt" "smukke" ; ---- + become_VA = mkVA blive_V ; + beer_N = mk2N "øl" "ølet" ; + beg_V2V = mkV2V bede_V noPrep (mkPrep "at") ; + big_A = irregADeg "stor" "større" "størst"; + bike_N = mkN "cykel" "cykeln" "cykler" "cyklerne" ; ---- + bird_N = mk2N "fugl" "fuglen" ; + black_A = mk2ADeg "sort" "sort" ; + blue_A = mk2ADeg "blå" "blått"; + boat_N = mk3N "båd" "båden" "både" ; + book_N = mkN "bog" "bogen" "bøger" "bøgene" ; + boot_N = mkN "støvle" "støvlen" "støvler" "støvlerne" ; + boss_N = mk2N "chef" "chefen" ; + boy_N = mk2N "dreng" "drengen" ; + bread_N = mk2N "brød" "brødet" ; + break_V2 = dirV2 (mk2V "knuse" "knuste") ; + broad_A = regADeg "bred" ; + brother_N2 = mkN2 (mk3N "broder" "brodren" "brødre") (mkPrep "til") ; ---- + brown_A = regADeg "brun" ; + butter_N = mk2N "smør" "smøret" ; + buy_V2 = dirV2 (mk2V "købe" "købte") ; ---- + camera_N = mk2N "kamera" "kameraen" ; ---- + cap_N = mk2N "hue" "huen" ; + car_N = mk2N "bil" "bilen" ; + carpet_N = mk2N "tæppe" "tæppen" ; + cat_N = mk3N "kat" "katten" "katte" ; + ceiling_N = mk2N "loft" "loftet" ; + chair_N = mk3N "stol" "stolen" "stole" ; + cheese_N = mk2N "ost" "osten" ; + child_N = mk3N "barn" "barnet" "børn" ; ---- + church_N = mk2N "kirke" "kirken" ; + city_N = mk2N "by" "byen" ; + clean_A = regADeg "ren" ; + clever_A = regADeg "flink" ; + close_V2 = dirV2 (mk2V "lukke" "lukkede") ; + coat_N = mk2N "frakke" "frakken" ; + cold_A = regADeg "kold" ; + come_V = vaereV komme_V ; + computer_N = mk2N "datamaskine" "datamaskinen" ; + country_N = mk2N "land" "landet" ; + cousin_N = mk3N "fætter" "fættren" "fættre" ; ---- + cow_N = mk2N "ku" "kuen" ; ---- + die_V = vaereV dø_V ; + dirty_A = regADeg "smudsig" ; ---- + distance_N3 = mkN3 (regGenN "afstand" utrum) (mkPrep "fra") (mkPrep "til") ; + doctor_N = mk2N "læge" "lægen" ; + dog_N = mk2N "hund" "hunden" ; + door_N = mk2N "dør" "døren" ; + drink_V2 = dirV2 drikke_V ; + easy_A2V = mkA2V (regA "nem") (mkPrep "for") ; ---- + eat_V2 = dirV2 (mk2V "spise" "spiste") ; + empty_A = mkADeg "tøm" "tømt" "tømme" "tømmere" "tømmest" ; ---- + enemy_N = mk2N "fjende" "fjenden" ; + factory_N = mk2N "fabrik" "fabriken" ; + father_N2 = mkN2 ( (mk3N "far" "fadren" "fædre")) (mkPrep "til") ; ---- + fear_VS = mkVS (regV "frygte") ; + find_V2 = dirV2 (irregV "finde" "fand" "fundet") ; ---- + fish_N = mk2N "fisk" "fisken" ; + floor_N = mk2N "gulv" "gulvet" ; + forget_V2 = dirV2 (mkV "glemme" "glemmer" "glemmes" "glemte" "glemt" "glem") ; ---- + fridge_N = mk2N "køleskab" "køleskabet" ; + friend_N = mk3N "ven" "vennen" "venner" ; ---- + fruit_N = mk2N "frugt" "frugten" ; + fun_AV = mkAV (mkA "morsom" "morsomt" "morsomme") ; ---- + garden_N = mk2N "have" "haven" ; + girl_N = mk2N "pige" "pigen" ; + glove_N = mk2N "handske" "handsken" ; + gold_N = mk2N "guld" "guldet" ; + good_A = mkADeg "god" "godt" "gode" "bedre" "bedst" ; ---- + go_V = vaereV gå_V ; + green_A = mk3ADeg "grøn" "grønt" "grønne" ; + harbour_N = mk2N "havn" "havnen" ; + hate_V2 = dirV2 (regV "hade") ; + hat_N = mk3N "hat" "hatten" "hatte" ; + have_V2 = dirV2 have_V ; + hear_V2 = dirV2 (mk2V "høre" "hørte") ; + hill_N = mk2N "høj" "højen" ; + hope_VS = mkVS (regV "håbe") ; + horse_N = mk3N "hest" "hesten" "heste" ; + hot_A = regADeg "hed" ; + house_N = mk3N "hus" "huset" "huse" ; + important_A = regADeg "vigtig" ; + industry_N = mk2N "industri" "industrien" ; + iron_N = mk2N "jern" "jernet" ; + king_N = mk2N "konge" "kongen" ; + know_V2 = dirV2 vide_V ; + lake_N = mk2N "sø" "søen" ; + lamp_N = mk2N "lampe" "lampen" ; + learn_V2 = dirV2 (mk2V "lære" "lærte") ; + leather_N = mk2N "læder" "lædret" ; + leave_V2 = dirV2 forlade_V ; + like_V2 = mkV2 holde_V (mkPrep "af") ; + listen_V2 = dirV2 (regV "lytte") ; + live_V = mk2V "leve" "levde" ; + long_A = irregADeg "lang" "længere" "længst" ; ---- + lose_V2 = dirV2 (regV "tabe") ; + love_N = mk2N "kærlighed" "kærligheden" ; + love_V2 = dirV2 (regV "elske") ; + man_N = mkN "mand" "manden" "mænd" "mændene" ; + married_A2 = mkA2 (mk2A "gift" "gift") (mkPrep "med") ; + meat_N = mk2N "kød" "kødet" ; + milk_N = mk2N "mælk" "mælken" ; + moon_N = mk2N "måne" "månen" ; + mother_N2 = mkN2 (mkN "moder" "moderen" "mødre" "mødrene") (mkPrep "til") ; ---- + mountain_N = mk2N "bjerg" "bjerget" ; + music_N = mk2N "musik" "musiken" ; + narrow_A = regADeg "smal" ; + new_A = mkADeg "ny" "nytt" "nye" "nyere" "nyest" ; + newspaper_N = mk2N "avis" "avisen" ; + oil_N = mk2N "olie" "olien" ; + old_A = mkADeg "gammel" "gammelt" "gamle" "ældre" "ældst" ; ---- + open_V2 = dirV2 (regV "åbne") ; + paint_V2A = mkV2A (regV "male") noPrep ; + paper_N = mk2N "papir" "papiret" ; + paris_PN = mkPN "Paris" neutrum ; + peace_N = mk2N "fred" "freden" ; + pen_N = mk2N "pen" "penen" ; + planet_N = mk2N "planet" "planeten" ; + plastic_N = mk2N "plast" "plasten" ; + play_V2 = dirV2 (mk2V "spille" "spilte") ; + policeman_N = mk2N "politibetjent" "politibetjenten" ; ---- + priest_N = mk2N "præst" "præsten" ; + probable_AS = mkAS (regA "sandsynlig") ; + queen_N = mk2N "dronning" "dronningen" ; + radio_N = mk2N "radio" "radioen" ; + rain_V0 = mkV0 (regV "regne") ; + read_V2 = dirV2 (mk2V "læse" "læste") ; + red_A = regADeg "rød" ; + religion_N = mk2N "religion" "religionen" ; + restaurant_N = mk2N "restaurant" "restauranten" ; + river_N = mk2N "flod" "floden" ; + rock_N = mk2N "sten" "stenen" ; + roof_N = mk2N "tag" "taget" ; + rubber_N = mk2N "gummi" "gummien" ; + run_V = vaereV (regV "løbe") ; + say_VS = mkVS sige_V ; + school_N = mk2N "skole" "skolen" ; + science_N = mk2N "videnskab" "videnskaben" ; + sea_N = mk2N "hav" "havet" ; + see_V2 = dirV2 se_V ; + seek_V2 = mkV2 (mk2V "søge" "søgte") (mkPrep "efter") ; + sell_V3 = dirV3 sælge_V (mkPrep "til") ; + send_V3 = dirV3 (mk2V "sende" "sendte") (mkPrep "til") ; + sheep_N = mk2N "får" "fåret" ; + ship_N = mk2N "skib" "skibet" ; + shirt_N = mk2N "skjorte" "skjorten" ; + shoe_N = mk2N "sko" "skoen" ; + shop_N = mk2N "butik" "butiken" ; + short_A = regADeg "kort" ; + silver_N = mk2N "sølv" "sølvet"; + sister_N = mk3N "søster" "søstren" "søstrer" ; ---- + sleep_V = sove_V ; + small_A = mkADeg "lille" "lille" "små" "mindre" "mindst" ; ---- + snake_N = mk2N "slange" "slangen" ; + sock_N = mk2N "sok" "sokken" ; + speak_V2 = dirV2 (regV "tale") ; ---- + star_N = mk2N "stjerne" "stjernen" ; + steel_N = mk2N "stål" "stålet" ; + stone_N = mk2N "sten" "stenen" ; + stove_N = mk2N "komfur" "komfuren" ; + student_N = mk2N "student" "studenten" ; + stupid_A = mk3ADeg "dum" "dumt" "dumme" ; + sun_N = mk2N "sol" "solen" ; + switch8off_V2 = dirV2 (partV (regV "lukke") "for") ; + switch8on_V2 = dirV2 (partV (regV "lukke") "op") ; + table_N = mk2N "bord" "bordet" ; + talk_V3 = mkV3 (regV "tale") (mkPrep "til") (mkPrep "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 = mk3ADeg "tyk" "tykt" "tykke" ; + thin_A = mk2ADeg "tynd" "tyndt" ; ---- + train_N = mk2N "tog" "toget" ; + travel_V = vaereV (mk2V "rejse" "rejste") ; + tree_N = mkN "træ" "træet" "træer" "træene" ; ---- + ---- trousers_N = regGenN "trousers" ; ---- pl t ! + ugly_A = mk3ADeg "grim" "grimt" "grimme" ; + understand_V2 = dirV2 (irregV "forstå" "forstod" "forstått") ; + university_N = mk2N "universitet" "universitetet" ; + village_N = mk2N "landsby" "landsbyen" ; + wait_V2 = mkV2 (regV "vente") (mkPrep "på") ; + walk_V = vaereV gå_V ; + warm_A = regADeg "varm" ; + war_N = mk2N "krig" "krigen" ; + watch_V2 = mkV2 se_V (mkPrep "på") ; + water_N = mk2N "vand" "vandet" ; + white_A = regADeg "hvid" ; + window_N = mkN "vindue" "vinduet" "vinduer" "vinduene" ; ---- er? + wine_N = mk2N "vin" "vinen" ; + win_V2 = dirV2 (irregV "vinde" "vand" "vundet") ; + woman_N = mk2N "kvinde" "kvinden" ; + wonder_VQ = mkVQ (depV (regV "undre")) ; + wood_N = mkN "træ" "træet" "træer" "træene" ; ---- + write_V2 = dirV2 (irregV "skrive" "skrev" "skrevet") ; + yellow_A = regADeg "gul" ; + young_A = irregADeg "ung" "yngre" "yngst" ; ---- + + do_V2 = dirV2 gøre_V ; + now_Adv = mkAdv "nu" ; + already_Adv = mkAdv "allerede" ; + song_N = mk2N "sang" "sangen" ; + add_V3 = mkV3 (regV "tilføje") noPrep (mkPrep "til") ; ---- + number_N = mk2N "nummer" "numret" ; ---- + put_V2 = dirV2 sætte_V ; + stop_V = vaereV (regV "standse") ; + jump_V = regV "hoppe" ; + + left_Ord = {s = "venstre" ; isDet = True} ; + right_Ord = {s = "højre" ; isDet = True} ; + far_Adv = mkAdv "fjern" ; + correct_A = regA "rigtig" ; + dry_A = mk3ADeg "tør" "tørt" "tørre" ; + dull_A = regA "sløv" ; + full_A = regA "fuld" ; + heavy_A = irregADeg "tung" "tyngre" "tyngst" ; + near_A = mkADeg "nære" "nære" "nære" "nærmere" "nærmest" ; + rotten_A = mk3ADeg "rådden" "råddent" "rådne" ; ---- + round_A = regA "rund" ; + sharp_A = regA "skarp" ; + smooth_A = regA "jævn" ; + straight_A = mk3ADeg "ret" "rett" "rette" ; ---- + wet_A = regA "våd" ; + wide_A = regA "bred" ; + animal_N = mk2N "dyr" "dyret" ; + ashes_N = mk2N "aske" "asken" ; + back_N = mk2N "ryg" "ryggen" ; ---- + bark_N = mk2N "bark" "barken" ; + belly_N = mk2N "mave" "maven" ; + blood_N = mk2N "blod" "blodet" ; + bone_N = mk2N "ben" "benet" ; + breast_N = mk2N "bryst" "brystet" ; + cloud_N = mk2N "sky" "skyen" ; + day_N = mk3N "dag" "dagen" "dage" ; + dust_N = mk2N "støv" "støvet" ; + ear_N = mk3N "øre" "øret" "ører" ; + earth_N = mk2N "jord" "jorden" ; + egg_N = mk2N "æg" "æget" ; + eye_N = mk3N "øje" "øjet" "øjne" ; + fat_N = mk2N "fedt" "fedtet" ; + feather_N = mk2N "fjer" "fjeren" ; + fingernail_N = mk2N "negl" "neglen" ; + fire_N = mk2N "ild" "ilden" ; + flower_N = mk2N "blomst" "blomsten" ; + fog_N = mk2N "tåge" "tågen" ; + foot_N = mk2N "fod" "føder" ; ---- + forest_N = mk2N "skov" "skoven" ; + grass_N = mk2N "græs" "græset" ; + guts_N = mk2N "tarm" "tarmen" ; ---- indvolde + hair_N = mk2N "hår" "håret" ; + hand_N = mk2N "hånd" "hånden" ; + head_N = mk2N "hoved" "hovedet" ; + heart_N = mk3N "hjerte" "hjertet" "hjerter" ; + horn_N = mk2N "horn" "hornet" ; + husband_N = mk2N "ægtefælle" "ægtefællen" ; ---- + ice_N = mk2N "is" "isen" ; + knee_N = mkN "knæ" "knæt" "knær" "knæne" ; ---- + leaf_N = mk2N "løv" "løvet" ; + leg_N = mk2N "ben" "benet" ; + liver_N = mkN "lever" "leveren" "levrer" "levrene" ; ---- + louse_N = mk3N "lus" "lusen" "lus" ; + mouth_N = mk2N "mund" "munden" ; + name_N = mk2N "navn" "navnet" ; + neck_N = mk2N "hals" "halsen" ; + night_N = mk3N "nat" "natten" "nætter" ; ---- + nose_N = mk2N "næse" "næsen" ; + person_N = mk2N "person" "personen" ; + rain_N = mk2N "regn" "regnet" ; + road_N = mk2N "vej" "vejen" ; + root_N = mk3N "rod" "roden" "røder" ; ---- + rope_N = mk2N "reb" "rebet" ; + salt_N = mk2N "salt" "saltet" ; + sand_N = mk2N "sand" "sanden" ; + seed_N = mk2N "frø" "frøet" ; + skin_N = mk2N "skind" "skindet" ; + sky_N = mk3N "himmel" "himlen" "himler" ; ---- + smoke_N = mk2N "røg" "røgen" ; + snow_N = mk2N "snø" "snøen" ; + stick_N = mk2N "pind" "pinden" ; + tail_N = mk2N "hale" "halen" ; + tongue_N = mk2N "tunge" "tungen" ; + tooth_N = mkN "tand" "tanden" "tænder" "tændene" ; ---- + wife_N = mk2N "kone" "konen" ; + wind_N = mk2N "vind" "vinden" ; + wing_N = mk2N "vinge" "vingen" ; + worm_N = mk2N "orm" "ormen" ; + year_N = mk2N "år" "året" ; + bite_V2 = dirV2 bide_V ; + blow_V = mk2V "blæse" "blæste" ; + burn_V = brænde_V ; + count_V2 = dirV2 tælle_V ; + cut_V2 = dirV2 (skære_V) ; + dig_V = mk2V "grave" "gravde" ; + fall_V = vaereV falde_V ; + fear_V2 = dirV2 (regV "frygte") ; + fight_V2 = dirV2 (regV "kæmpe") ; + float_V = flyde_V ; + flow_V = regV "strømme" ; + fly_V = vaereV flyve_V ; + freeze_V = fryse_V ; + give_V3 = dirV3 give_V (mkPrep "til"); + hit_V2 = dirV2 (slå_V) ; + hold_V2 = dirV2 (holde_V) ; + hunt_V2 = dirV2 (regV "jage") ; + kill_V2 = dirV2 (regV "dræbe") ; + laugh_V = le_V ; + lie_V = ligge_V ; + play_V = regV "spille" ; + pull_V2 = dirV2 (regV "trække") ; + push_V2 = dirV2 (regV "skubbe") ; + rub_V2 = dirV2 (gnide_V) ; + scratch_V2 = dirV2 (regV "kradse") ; + sew_V = mk2V "sy" "sydde" ; + sing_V = synge_V ; + sit_V = sidde_V ; + smell_V = regV "lugte" ; + spit_V = regV "spytte" ; + split_V2 = dirV2 (regV "splitte") ; ---- + squeeze_V2 = dirV2 (regV "presse") ; + stab_V2 = dirV2 (stikke_V) ; + stand_V = vaereV stå_V ; + suck_V2 = dirV2 (regV "sutte") ; ---- + swell_V = regV "svulme" ; + swim_V = regV "svømme" ; + think_V = mk2V "tænke" "tænkte" ; ---- + throw_V2 = dirV2 (regV "kaste") ; + tie_V2 = dirV2 binde_V ; + turn_V = regV "dreje" ; + vomit_V = partV (regV "kaste") "op" ; + wash_V2 = dirV2 (regV "vaske") ; + wipe_V2 = dirV2 (regV "viske") ; + breathe_V = regV "ånde" ; + + grammar_N = regN "grammatik" ; + language_N = mk2N "sprog" "sproget" ; + rule_N = mkN "regel" "regeln" "regler" "reglerne" ; + + +} ; + diff --git a/lib/resource-1.4/danish/MathDan.gf b/lib/resource-1.4/danish/MathDan.gf new file mode 100644 index 000000000..11d87f5d9 --- /dev/null +++ b/lib/resource-1.4/danish/MathDan.gf @@ -0,0 +1,2 @@ +concrete MathDan of Math = CatDan ** MathScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/MorphoDan.gf b/lib/resource-1.4/danish/MorphoDan.gf new file mode 100644 index 000000000..a5ee90a48 --- /dev/null +++ b/lib/resource-1.4/danish/MorphoDan.gf @@ -0,0 +1,164 @@ +--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 (mkImper 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") + (mkImper husk) ; + + vSpis : Str -> Verbum = \spis -> + mkVerb6 (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t") + (mkImper spis) ; + + vBo : Str -> Verbum = \bo -> + mkVerb6 bo (bo + "r") (bo + "es") (bo + "ede") (bo + "et") (mkImper bo) ; + +-- Remove consonant duplication: "passe - pas" + + mkImper : Str -> Str = \s -> + if_then_Str (pbool2bool (Predef.eqStr (last s) (last (init s)))) (init s) s ; + +-- 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, 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 ; + + +} diff --git a/lib/resource-1.4/danish/NounDan.gf b/lib/resource-1.4/danish/NounDan.gf new file mode 100644 index 000000000..8005b0d30 --- /dev/null +++ b/lib/resource-1.4/danish/NounDan.gf @@ -0,0 +1,2 @@ +concrete NounDan of Noun = CatDan ** NounScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/NumeralDan.gf b/lib/resource-1.4/danish/NumeralDan.gf new file mode 100644 index 000000000..b8846c8ef --- /dev/null +++ b/lib/resource-1.4/danish/NumeralDan.gf @@ -0,0 +1,83 @@ +concrete NumeralDan of Numeral = CatDan ** open MorphoDan in { + + +-- AR 12/10/2002 following www.geocities.com/tsca.geo/dansk/dknummer.html + +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 ; + +lin n2 = mkTal "to" "tolv" "tyve" "anden" "tyvende" ; +lin n3 = mkTal "tre" "tretten" "tredive" "tredje" "tredivte" ; +lin n4 = mkTal "fire" "fjorten" "fyrre" "fjerde" "fyrretyvende" ; +lin n5 = mkTal "fem" "femten" "halvtreds" "femte" "halvtredsindstyvende" ; +lin n6 = mkTal "seks" "seksten" "tres" "sjette" "tredsindstyvende" ; +lin n7 = mkTal "syv" "sytten" "halvfjerds" "syvende""halvfjerdsindstyvende" ; +lin n8 = mkTal "otte" "atten" "firs" "ottende""firsindstyvende" ; +lin n9 = mkTal "ni" "nitten" "halvfems" "niende" "halvfemsindstyvende" ; + + pot01 = { + s = \\f => table { + NCard g => case g of {Neutr => "et" ; _ => "en"} ; + _ => "første" + } ; + n = Sg + } ; + pot0 d = {s = \\f,g => d.s ! f ! g ; n = Pl} ; + pot110 = numPl (cardReg "ti") ; + pot111 = numPl (cardOrd "elleve" "elvte") ; + 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 => e.s ! ental ! invNum ++ "og" ++ d.s ! tiotal ! g ; n = Pl} ; + pot1as2 n = n ; + pot2 d = numPl (\\_ => d.s ! ental ! invNum ++ "hundrede") ; + pot2plus d e = + {s = \\g => d.s ! ental ! invNum ++ "hundrede" ++ "og" ++ e.s ! g ; n = Pl} ; + pot2as3 n = n ; + pot3 n = numPl (\\g => n.s ! invNum ++ cardOrd "tusind" "tusinde" ! g) ; + pot3plus n m = {s = \\g => n.s ! invNum ++ "tusind" ++ "og" ++ m.s ! g ; n =Pl} ; + + lincat + Dig = TDigit ; + + lin + IDig d = d ; + + IIDig d i = { + s = \\o => d.s ! NCard neutrum ++ i.s ! o ; + n = Pl + } ; + + D_0 = mkDig "0" ; + D_1 = mk3Dig "1" "1:e" Sg ; + D_2 = mk2Dig "2" "2:e" ; + D_3 = mkDig "3" ; + D_4 = mkDig "4" ; + D_5 = mkDig "5" ; + D_6 = mkDig "6" ; + D_7 = mkDig "7" ; + D_8 = mkDig "8" ; + D_9 = mkDig "9" ; + + oper + mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; + mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":e") ; + + mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { + s = table {NCard _ => c ; NOrd _ => o} ; + n = n + } ; + + TDigit = { + n : Number ; + s : CardOrd => Str + } ; + +} diff --git a/lib/resource-1.4/danish/ParadigmsDan.gf b/lib/resource-1.4/danish/ParadigmsDan.gf new file mode 100644 index 000000000..e6b63c4df --- /dev/null +++ b/lib/resource-1.4/danish/ParadigmsDan.gf @@ -0,0 +1,517 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +--1 Danish Lexical Paradigms +-- +-- Aarne Ranta 2005 - 2006 +-- +-- This is an API for 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 [``IrregDan`` ../../danish/IrregDan.gf], +-- which haves a list of irregular verbs. + +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 ; + + 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. + + mkPrep : Str -> Prep ; + noPrep : Prep ; -- empty string + +--2 Nouns + + mkN : overload { + +-- The regular function takes the singular indefinite form +-- and computes the other forms and the gender by a heuristic. +-- The heuristic is that all nouns are $utrum$ with the +-- plural ending "er" or "r". + + mkN : (bil : Str) -> N ; + +-- Giving gender manually makes the heuristic more reliable. + + mkN : (hus : Str) -> Gender -> N ; + +-- This function takes the singular indefinite and definite forms; the +-- gender is computed from the definite form. + + mkN : (bil,bilen : Str) -> N ; + +-- This function takes the singular indefinite and definite and the plural +-- indefinite + + mkN : (bil,bilen,biler : Str) -> N ; + +-- 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,drenge,drengene : Str) -> N ; + } ; + + + + +--3 Compound nouns +-- +-- All the functions above work quite as well to form compound nouns, +-- such as "fodbold". + + +--3 Relational nouns +-- +-- Relational nouns ("datter til x") need a preposition. + + mkN2 : N -> Prep -> N2 ; + +-- The most common preposition is "af", and the following is a +-- shortcut for regular relational nouns with "af". + + regN2 : Str -> Gender -> N2 ; + +-- Use the function $mkPrep$ or see the section on prepositions below to +-- form other prepositions. +-- +-- Three-place relational nouns ("forbindelse fra x til y") +-- need two prepositions. + + mkN3 : N -> Prep -> Prep -> N3 ; + + +--3 Relational common noun phrases +-- +-- In some cases, you may want to make a complex $CN$ into a +-- relational noun (e.g. "tidligere kone til"). 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 + + mkPN : overload { + mkPN : Str -> PN ; -- utrum + mkPN : Str -> Gender -> PN ; + mkPN : N -> PN ; + } ; + + +--2 Adjectives + +-- The regular pattern works for many adjectives, e.g. those ending +-- with "ig". Two, five, or at worst five forms are sometimes needed. + + mkA : overload { + mkA : (fin : Str) -> A ; + mkA : (fin,fint : Str) -> A ; + mkA : (galen,galet,galne : Str) -> A ; + mkA : (stor,stort,store,storre,storst : Str) -> A ; + +-- If comparison is formed by "mer", "mest", as in general for +-- long adjective, the following pattern is used: + + mkA : A -> A ; -- -/mer/mest norsk + } ; + +--3 Two-place adjectives +-- +-- Two-place adjectives need a preposition for their second argument. + + mkA2 : A -> Prep -> A2 ; + + + +--2 Adverbs + +-- Adverbs are not inflected. Most lexical ones have position +-- after the verb. Some can be close to the verb like the negation +-- "ikke" (e.g. "altid"). + + mkAdv : Str -> Adv ; + mkAdV : Str -> AdV ; + +-- Adverbs modifying adjectives and sentences can also be formed. + + mkAdA : Str -> AdA ; + + +--2 Verbs +-- + + mkV : overload { + +-- The 'regular verb' function is the first conjugation. + + mkV : (snakke : Str) -> V ; + +-- The almost regular verb function needs the infinitive and the preteritum. + + mkV : (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. + + mkV : (drikke, drakk, drukket : Str) -> V ; + +-- The worst case needs six forms. + + mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V ; + + +--3 Verbs with a particle. +-- +-- The particle, such as in "lukke op", is given as a string. + + mkV : V -> Str -> V ; + } ; + + + +--3 Verbs with 'være' as auxiliary +-- +-- By default, the auxiliary is "have". This function changes it to "være". + + vaereV : V -> V ; + + + + +--3 Deponent verbs +-- +-- Some words are used in passive forms only, e.g. "undres", some as +-- reflexive e.g. "forestille 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, if a particle is needed, it comes from the $V$. + + mkV2 : overload { + mkV2 : Str -> V2 ; + mkV2 : V -> V2 ; + mkV2 : V -> Prep -> V2 ; + } ; + + +--3 Three-place verbs +-- +-- Three-place (ditransitive) verbs need two prepositions, of which +-- the first one or both can be absent. + + mkV3 : V -> Prep -> Prep -> V3 ; -- snakke, med, om + dirV3 : V -> Prep -> V3 ; -- give,_,til + 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 -> Prep -> V2S ; + mkVV : V -> VV ; + mkV2V : V -> Prep -> Prep -> V2V ; + mkVA : V -> VA ; + mkV2A : V -> Prep -> V2A ; + mkVQ : V -> VQ ; + mkV2Q : V -> Prep -> V2Q ; + + mkAS : A -> AS ; + mkA2S : A -> Prep -> A2S ; + mkAV : A -> AV ; + mkA2V : A -> Prep -> A2V ; + +-- Notice: categories $AS, A2S, AV, A2V$ are just $A$, +-- and the second argument is given as an adverb.. +-- $V0$ is just $V$. + + V0 : 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 ; + + Preposition : Type = Str ; -- obsolete + + mkPreposition : Str -> Prep ; -- obsolete + mkPreposition = mkPrep ; + + mkPrep p = {s = p ; lock_Prep = <>} ; + noPrep = mkPrep [] ; + + mk4N 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 => mk4N x (x + "n") (x + "r") (x + "rne") ; + Neutr => mk4N x (x + "t") (x + "r") (init x + "ene") + } ; + _ => case g of { + Utr => mk4N x (x + "en") (x + "er") (x + "erne") ; + Neutr => mk4N x (x + "et") (x + "") (x + "ene") + } + } ; + + + mk2N x y = case last y of { + "n" => mk3N x y (init y + "r") ; + _ => mk3N x y x + } ; + + mk3N x y z = let u = ifTok Str x z "ene" "ne" in mk4N x y z (z + u) ; + + mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p.s} ; + regN2 n g = mkN2 (regGenN n g) (mkPreposition "av") ; + mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q.s} ; + + mk2PN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ; + regPN n = mk2PN n utrum ; + nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ; + +-- To form a noun phrase that can also be plural and have an irregular +-- genitive, you can use the worst-case function. + + makeNP : Str -> Str -> Number -> Gender -> NP ; + makeNP x y n g = + {s = table {NPPoss _ => x ; _ => y} ; a = agrP3 g n ; + lock_NP = <>} ; + + mk3A = mk3ADeg ; + mk2A a b = mk3A a b (a + "e") ; + regA a = (regADeg a) ** {lock_A = <>} ; + + mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ; + + mkADeg a b c d e = mkAdject a b c d e ** {isComp = False ; lock_A = <>} ; + + regADeg a = case Predef.dp 2 a of { + "sk" => aRask a ; + _ => case last a of { + "t" => aAbstrakt a ; + _ => aRod a + }} ** {isComp = False ; lock_A = <>} ; + + irregADeg a b c = mkAdject a (a + "t") (a + "e") b c ** + {isComp = False ; lock_A = <>} ; + mk3ADeg a b c = mkAdject a b c (c + "re") (c + "st") ** + {isComp = False ; lock_A = <>} ; + mk2ADeg a b = mkAdject a b (a + "e") (a + "ere") (a + "est") ** + {isComp = False ; lock_A = <>} ; + + compoundA adj = {s = adj.s ; isComp = True ; lock_A = <>} ; + + mkAdv x = ss x ** {lock_Adv = <>} ; + mkAdV x = ss x ** {lock_AdV = <>} ; + mkAdA x = ss x ** {lock_AdA = <>} ; + + mk6V a b c d e f = mkVerb6 a b c d e f ** + {part = [] ; vtype = VAct ; lock_V = <> ; isVaere = False} ; + + regV a = case last a of { + "e" => vHusk (init a) ; + _ => vBo a + } ** {part = [] ; vtype = VAct ; isVaere = False ; lock_V = <>} ; + + mk2V a b = regVerb a b ** + {part = [] ; vtype = VAct ; isVaere = False ; 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 + mk6V drikke drikker (drikke + "s") drakk drukket (mkImper drikk) ; + + vaereV v = { + s = v.s ; + part = [] ; + vtype = v.vtype ; + isVaere = True ; + lock_V = <> + } ; + + partV v p = { + s = v.s ; + part = p ; + vtype = v.vtype ; + isVaere = v.isVaere ; + lock_V = <> + } ; + + depV v = { + s = v.s ; part = v.part ; vtype = VPass ; isVaere = False ; lock_V = <> + } ; + reflV v = { + s = v.s ; part = v.part ; vtype = VRefl ; isVaere = False ; lock_V = <> + } ; + + mk2V2 v p = v ** {c2 = p.s ; lock_V2 = <>} ; + dirV2 v = mk2V2 v (mkPrep []) ; + + mkV3 v p q = v ** {c2 = p.s ; c3 = q.s ; lock_V3 = <>} ; + dirV3 v p = mkV3 v noPrep p ; + dirdirV3 v = dirV3 v noPrep ; + + mkV0 v = v ** {lock_V0 = <>} ; + mkVS v = v ** {lock_VS = <>} ; + mkV2S v p = mk2V2 v p ** {lock_V2S = <>} ; + mkVV v = v ** {c2 = "å" ; lock_VV = <>} ; + mkV2V v p t = mk2V2 v p ** {c3 = "att" ; lock_V2V = <>} ; + mkVA v = v ** {lock_VA = <>} ; + mkV2A v p = mk2V2 v p ** {lock_V2A = <>} ; + mkVQ v = v ** {lock_VQ = <>} ; + mkV2Q v p = mk2V2 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 ; + AS, A2S, AV : Type = A ; + A2V : Type = A2 ; + +--------------- + + mkN = overload { + mkN : Str -> N = regN ; + mkN : Str -> Gender -> N = regGenN ; + mkN : (bil,bilen : Str) -> N = mk2N ; + mkN : (bil,bilen,biler : Str) -> N = mk3N ; + mkN : (dreng,drengen,drenge,drengene : Str) -> N = mk4N ; + } ; + + + regN : Str -> N ; + regGenN : Str -> Gender -> N ; + mk2N : (bil,bilen : Str) -> N ; + mk3N : (bil,bilen,biler : Str) -> N ; + mk4N : (dreng,drengen,drenge,drengene : Str) -> N ; + + mkPN = overload { + mkPN : Str -> PN = regPN ; -- masculine + mkPN : Str -> Gender -> PN = mk2PN ; + mkPN : N -> PN = nounPN ; + } ; + + regPN : Str -> PN ; -- utrum + mk2PN : Str -> Gender -> PN ; + nounPN : N -> PN ; + + mkA = overload { + mkA : (fin : Str) -> A = regADeg ; + mkA : (fin,fint : Str) -> A = mk2ADeg ; + mkA : (galen,galet,galne : Str) -> A = mk3ADeg ; + mkA : (stor,stort,store,storre,storst : Str) -> A = mkADeg ; + mkA : A -> A = compoundA ; -- -/mer/mest norsk + } ; + + mk3A : (galen,galet,galne : Str) -> A ; + regA : Str -> A ; + mk2A : (stor,stort : Str) -> A ; + mkADeg : (stor,stort,store,storre,storst : Str) -> A ; + regADeg : Str -> A ; + irregADeg : (tung,tyngre,tyngst : Str) -> A ; + mk3ADeg : (galen,galet,galne : Str) -> A ; + mk2ADeg : (bred,bredt : Str) -> A ; + compoundA : A -> A ; -- -/mer/mest norsk + + mkV = overload { + mkV : (snakke : Str) -> V = regV ; + mkV : (leve,levde : Str) -> V = mk2V ; + mkV : (drikke, drakk, drukket : Str) -> V = irregV ; + mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V = mk6V ; + mkV : V -> Str -> V = partV ; + } ; + + + regV : (snakke : Str) -> V ; + mk2V : (leve,levde : Str) -> V ; + irregV : (drikke, drakk, drukket : Str) -> V ; + mk6V : (spise,spiser,spises,spiste,spist,spis : Str) -> V ; + partV : V -> Str -> V ; + + mkV2 = overload { + mkV2 : Str -> V2 = \s -> dirV2 (regV s) ; + mkV2 : V -> V2 = dirV2 ; + mkV2 : V -> Prep -> V2 = mk2V2 ; + } ; + + mk2V2 : V -> Prep -> V2 ; + dirV2 : V -> V2 ; + +} ; diff --git a/lib/resource-1.4/danish/PhraseDan.gf b/lib/resource-1.4/danish/PhraseDan.gf new file mode 100644 index 000000000..86a9789bf --- /dev/null +++ b/lib/resource-1.4/danish/PhraseDan.gf @@ -0,0 +1,2 @@ +concrete PhraseDan of Phrase = CatDan ** PhraseScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/QuestionDan.gf b/lib/resource-1.4/danish/QuestionDan.gf new file mode 100644 index 000000000..3dee9e7c7 --- /dev/null +++ b/lib/resource-1.4/danish/QuestionDan.gf @@ -0,0 +1,2 @@ +concrete QuestionDan of Question = CatDan ** QuestionScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/RelativeDan.gf b/lib/resource-1.4/danish/RelativeDan.gf new file mode 100644 index 000000000..361169b16 --- /dev/null +++ b/lib/resource-1.4/danish/RelativeDan.gf @@ -0,0 +1,2 @@ +concrete RelativeDan of Relative = CatDan ** RelativeScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/ResDan.gf b/lib/resource-1.4/danish/ResDan.gf new file mode 100644 index 000000000..5e761c268 --- /dev/null +++ b/lib/resource-1.4/danish/ResDan.gf @@ -0,0 +1,3 @@ +instance ResDan of ResScand = DiffDan ** open CommonScand, Prelude in { +} ; + diff --git a/lib/resource-1.4/danish/SentenceDan.gf b/lib/resource-1.4/danish/SentenceDan.gf new file mode 100644 index 000000000..542fffac4 --- /dev/null +++ b/lib/resource-1.4/danish/SentenceDan.gf @@ -0,0 +1,2 @@ +concrete SentenceDan of Sentence = CatDan ** SentenceScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/danish/StructuralDan.gf b/lib/resource-1.4/danish/StructuralDan.gf new file mode 100644 index 000000000..0790978fe --- /dev/null +++ b/lib/resource-1.4/danish/StructuralDan.gf @@ -0,0 +1,128 @@ +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 = {s1 = [] ; s2 = "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" "kan" "kunne" "kunnet" "kan" ** + {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} ; + for_Prep = ss "for" ; + 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_Utt = ss ["nej"] ; + on_Prep = ss "på" ; +--- one_Quant = {s = \\_ => genderForms ["en"] ["et"] ; n = Sg ; det = DIndef} ; --- ei + only_Predet = {s = \\_ => "kun"} ; + or_Conj = {s1 = [] ; s2 = "eller" ; n = Pl} ; + 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 + } ; + there_Adv = ss "der" ; + there7to_Adv = ss "dit" ; + there7from_Adv = ss "derfra" ; + therefore_PConj = ss "derfor" ; + they_Pron = MorphoDan.mkNP "de" "dem" "deres" "deres" "deres" Plg P1 ; + this_Quant = + {s = table { + Sg => \\_ => genderForms ["denne"] ["dette"] ; + Pl => \\_,_ => ["disse"] + } ; + det = DDef Indef + } ; + 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" "vil" "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" ; + which_IQuant = { + s = table { + Sg => genderForms "hvilken" "hvilket" ; + Pl => \\_ => "hvilke" + } ; + 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_Utt = 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.4/danish/VerbDan.gf b/lib/resource-1.4/danish/VerbDan.gf new file mode 100644 index 000000000..90d1b8bcd --- /dev/null +++ b/lib/resource-1.4/danish/VerbDan.gf @@ -0,0 +1,2 @@ +concrete VerbDan of Verb = CatDan ** VerbScand with + (ResScand = ResDan) ; diff --git a/lib/resource-1.4/norwegian/AdjectiveNor.gf b/lib/resource-1.4/norwegian/AdjectiveNor.gf new file mode 100644 index 000000000..e1c722b36 --- /dev/null +++ b/lib/resource-1.4/norwegian/AdjectiveNor.gf @@ -0,0 +1,2 @@ +concrete AdjectiveNor of Adjective = CatNor ** AdjectiveScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/AdverbNor.gf b/lib/resource-1.4/norwegian/AdverbNor.gf new file mode 100644 index 000000000..09244f110 --- /dev/null +++ b/lib/resource-1.4/norwegian/AdverbNor.gf @@ -0,0 +1,2 @@ +concrete AdverbNor of Adverb = CatNor ** AdverbScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/CatNor.gf b/lib/resource-1.4/norwegian/CatNor.gf new file mode 100644 index 000000000..bfc4b5390 --- /dev/null +++ b/lib/resource-1.4/norwegian/CatNor.gf @@ -0,0 +1,2 @@ +concrete CatNor of Cat = CommonX ** CatScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/ConjunctionNor.gf b/lib/resource-1.4/norwegian/ConjunctionNor.gf new file mode 100644 index 000000000..85357dffd --- /dev/null +++ b/lib/resource-1.4/norwegian/ConjunctionNor.gf @@ -0,0 +1,2 @@ +concrete ConjunctionNor of Conjunction = CatNor ** ConjunctionScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/DiffNor.gf b/lib/resource-1.4/norwegian/DiffNor.gf new file mode 100644 index 000000000..d485f9e7e --- /dev/null +++ b/lib/resource-1.4/norwegian/DiffNor.gf @@ -0,0 +1,90 @@ +instance DiffNor of DiffScand = open CommonScand, Prelude in { + +-- Parameters. + + param + Gender = Utr Sex | Neutr ; + Sex = Masc | Fem ; + + oper + utrum = Utr Masc ; + neutrum = Neutr ; + + gennum : Gender -> Number -> GenNum = \g,n -> + case < : Gender * Number> of { + => SgUtr ; + => SgNeutr ; + _ => Plg + } ; + + detDef : Species = Def ; + + Verb : Type = { + s : VForm => Str ; + part : Str ; + vtype : VType ; + isVaere : Bool + } ; + + hasAuxBe v = v.isVaere ; + +-- Strings. + + conjThat = "at" ; + conjThan = "enn" ; + conjAnd = "og" ; + compMore = "mere" ; + infMark = "å" ; + + subjIf = "hvis" ; + + artIndef : Gender => Str = table { + Utr Masc => "en" ; + Utr Fem => "ei" ; + Neutr => "et" + } ; + + verbHave = + mkVerb "ha" "har" "ha" "hadde" "hatt" "haven" "havet" "havne" + ** {part = [] ; isVaere = False} ; + verbBe = + mkVerb "være" "er" "var" "var" "vært" "væren" "været" "værne" + ** {part = [] ; isVaere = False} ; + verbBecome = + mkVerb "bli" "blir" "bli" "ble" "blitt" "bliven" "blivet" "blivne" + ** {part = [] ; isVaere = True} ; + + -- auxiliary + noPart = {part = []} ; + + auxFut = "vil" ; -- "skal" in ExtNor + 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} => "meg" ; + {p = P2} => "deg" ; + {p = P3} => "seg" + } ; + +} diff --git a/lib/resource-1.4/norwegian/ExtraNor.gf b/lib/resource-1.4/norwegian/ExtraNor.gf new file mode 100644 index 000000000..1cfd1008b --- /dev/null +++ b/lib/resource-1.4/norwegian/ExtraNor.gf @@ -0,0 +1,8 @@ +concrete ExtraNor of ExtraNorAbs = ExtraScandNor ** open CommonScand, ResNor in { + + lin + PossNP np pro = { + s = \\c => np.s ! NPNom ++ pro.s ! NPPoss np.a.gn ; ---- c + a = np.a + } ; +} diff --git a/lib/resource-1.4/norwegian/ExtraNorAbs.gf b/lib/resource-1.4/norwegian/ExtraNorAbs.gf new file mode 100644 index 000000000..21c03ae7e --- /dev/null +++ b/lib/resource-1.4/norwegian/ExtraNorAbs.gf @@ -0,0 +1,9 @@ +-- Structures special for Norwegian. These are not implemented in other +-- Scandinavian languages. + +abstract ExtraNorAbs = ExtraScandAbs ** { + + fun + PossNP : NP -> Pron -> NP ; -- bilen min + +} \ No newline at end of file diff --git a/lib/resource-1.4/norwegian/ExtraScandNor.gf b/lib/resource-1.4/norwegian/ExtraScandNor.gf new file mode 100644 index 000000000..5f988fe7e --- /dev/null +++ b/lib/resource-1.4/norwegian/ExtraScandNor.gf @@ -0,0 +1,2 @@ +concrete ExtraScandNor of ExtraScandAbs = CatNor ** ExtraScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/GrammarNor.gf b/lib/resource-1.4/norwegian/GrammarNor.gf new file mode 100644 index 000000000..ed36ad496 --- /dev/null +++ b/lib/resource-1.4/norwegian/GrammarNor.gf @@ -0,0 +1,21 @@ +--# -path=.:../scandinavian:../abstract:../common:prelude + +concrete GrammarNor of Grammar = + NounNor, + VerbNor, + AdjectiveNor, + AdverbNor, + NumeralNor, + SentenceNor, + QuestionNor, + RelativeNor, + ConjunctionNor, + PhraseNor, + TextX, + IdiomNor, + StructuralNor + ** { + +flags startcat = Phr ; unlexer = text ; lexer = text ; + +} ; diff --git a/lib/resource-1.4/norwegian/IdiomNor.gf b/lib/resource-1.4/norwegian/IdiomNor.gf new file mode 100644 index 000000000..fbb7f6a9c --- /dev/null +++ b/lib/resource-1.4/norwegian/IdiomNor.gf @@ -0,0 +1,42 @@ +concrete IdiomNor of Idiom = CatNor ** + open MorphoNor, ParadigmsNor, IrregNor, Prelude in { + + flags optimize=all_subs ; + + lin + + ImpersCl vp = mkClause "det" (agrP3 ParadigmsNor.neutrum Sg) vp ; + GenericCl vp = mkClause "man" (agrP3 utrum Sg) vp ; + + CleftNP np rs = mkClause "det" (agrP3 ParadigmsNor.neutrum Sg) + (insertObj (\\_ => rs.s ! np.a) + (insertObj (\\_ => np.s ! rs.c) (predV verbBe))) ; + + CleftAdv ad s = mkClause "det" (agrP3 ParadigmsNor.neutrum Sg) + (insertObj (\\_ => "som" ++ s.s ! Sub) + (insertObj (\\_ => ad.s) (predV verbBe))) ; + + ExistNP np = + mkClause "det" (agrP3 ParadigmsNor.neutrum Sg) (insertObj + (\\_ => np.s ! accusative) (predV (depV finne_V))) ; + + ExistIP ip = { + s = \\t,a,p => + let + cls = + (mkClause "det" (agrP3 ParadigmsNor.neutrum Sg) (predV (depV finne_V))).s ! t ! a ! p ; + who = ip.s ! accusative + in table { + QDir => who ++ cls ! Inv ; + QIndir => who ++ cls ! Sub + } + } ; + + ProgrVP vp = + insertObj (\\a => ["ved å"] ++ infVP vp a) (predV verbBe) ; + + ImpPl1 vp = {s = ["lat oss"] ++ infVP vp {gn = Plg ; p = P1}} ; + + +} + diff --git a/lib/resource-1.4/norwegian/IrregNor.gf b/lib/resource-1.4/norwegian/IrregNor.gf new file mode 100644 index 000000000..ba734148b --- /dev/null +++ b/lib/resource-1.4/norwegian/IrregNor.gf @@ -0,0 +1,72 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +-- see: http://frodo.bruderhof.com/norskklassen/commonverbs.htm + +concrete IrregNor of IrregNorAbs = CatNor ** open ParadigmsNor 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 = mkV "si" "sier" "sies" "sa" "sagt" "sagd" ; + 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.4/norwegian/IrregNorAbs.gf b/lib/resource-1.4/norwegian/IrregNorAbs.gf new file mode 100644 index 000000000..2c6c61181 --- /dev/null +++ b/lib/resource-1.4/norwegian/IrregNorAbs.gf @@ -0,0 +1,65 @@ +abstract IrregNorAbs = 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.4/norwegian/LangNor.gf b/lib/resource-1.4/norwegian/LangNor.gf new file mode 100644 index 000000000..41d51c2a9 --- /dev/null +++ b/lib/resource-1.4/norwegian/LangNor.gf @@ -0,0 +1,10 @@ +--# -path=.:../scandinavian:../abstract:../common:prelude + +concrete LangNor of Lang = + GrammarNor, + LexiconNor + ** { + +flags startcat = Phr ; unlexer = text ; lexer = text ; + +} ; diff --git a/lib/resource-1.4/norwegian/LexiconNor.gf b/lib/resource-1.4/norwegian/LexiconNor.gf new file mode 100644 index 000000000..b674dd97d --- /dev/null +++ b/lib/resource-1.4/norwegian/LexiconNor.gf @@ -0,0 +1,361 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +concrete LexiconNor of Lexicon = CatNor ** + open Prelude, ParadigmsNor, IrregNor in { + +flags startcat=Phr ; lexer=textlit ; unlexer=text ; + optimize=values ; + +lin + airplane_N = mk2N "fly" "flyet" ; + answer_V2S = mkV2S (regV "svare") (mkPrep "til") ; + apartment_N = mk2N "leilighet" "leiligheten" ; + apple_N = mk2N "eple" "eplet" ; + art_N = mk2N "kunst" "kunsten" ; + ask_V2Q = mkV2Q spørre_V noPrep ; + baby_N = mk2N "baby" "babyen" ; + bad_A = regADeg "dårlig" ; ---- + bank_N = mk2N "bank" "banken" ; + beautiful_A = mk3ADeg "vakker" "vakkert" "vakre" ; + become_VA = mkVA (vaereV bli_V) ; + beer_N = regGenN "øl" neutrum ; + beg_V2V = mkV2V be_V noPrep (mkPrep "at") ; + 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")) (mkPrep "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 = vaereV IrregNor.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 = vaereV IrregNor.dø_V ; + dirty_A = mk3ADeg "skitten" "skittent" "skitne" ; ---- + distance_N3 = mkN3 (regGenN "avstand" masculine) (mkPrep "fra") (mkPrep "til") ; + doctor_N = mk2N "lege" "legen" ; + dog_N = regGenN "hund" masculine ; + door_N = regGenN "dør" feminine ; + drink_V2 = dirV2 IrregNor.drikke_V ; + easy_A2V = mkA2V (regA "grei") (mkPrep "for") ; + 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")) (mkPrep "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 = vaereV IrregNor.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 IrregNor.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 IrregNor.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") (mkPrep "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") (mkPrep "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") noPrep ; + paper_N = regGenN "papir" neutrum ; ---- + paris_PN = regGenPN "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 = vaereV IrregNor.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") (mkPrep "etter") ; + see_V2 = dirV2 se_V ; + sell_V3 = dirV3 selge_V (mkPrep "til") ; + send_V3 = dirV3 (mk2V "sende" "sendte") (mkPrep "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") (mkPrep "til") (mkPrep "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 = vaereV (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") (mkPrep "på") ; + walk_V = vaereV IrregNor.gå_V ; + warm_A = regADeg "varm" ; + war_N = regGenN "krig" masculine ; + watch_V2 = mkV2 se_V (mkPrep "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") noPrep (mkPrep "til") ; + number_N = mk2N "nummer" "nummeret" ; + put_V2 = mkV2 (irregV "sette" "satte" "satt") noPrep ; + stop_V = vaereV (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 (IrregNor.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 = vaereV falle_V ; + fear_V2 = dirV2 (regV "frykte") ; + fight_V2 = dirV2 (slåss_V) ; + float_V = flyte_V ; + flow_V = renne_V ; + fly_V = vaereV IrregNor.fly_V ; + freeze_V = fryse_V ; + give_V3 = dirV3 gi_V (mkPrep "til"); + 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 = vaereV 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" ; + + + grammar_N = regN "grammatikk" ; + language_N = mk2N "språk" "språket" ; + rule_N = mkN "regel" "regelen" "regler" "reglene" ; + +} ; + +-- a" -> e" 86 +-- ö -> ø 66 +-- ck -> kk 20 +-- ä -> e 44 diff --git a/lib/resource-1.4/norwegian/MathNor.gf b/lib/resource-1.4/norwegian/MathNor.gf new file mode 100644 index 000000000..53e9ffd99 --- /dev/null +++ b/lib/resource-1.4/norwegian/MathNor.gf @@ -0,0 +1,2 @@ +concrete MathNor of Math = CatNor ** MathScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/MorphoNor.gf b/lib/resource-1.4/norwegian/MorphoNor.gf new file mode 100644 index 000000000..13a87125a --- /dev/null +++ b/lib/resource-1.4/norwegian/MorphoNor.gf @@ -0,0 +1,171 @@ +--1 A Simple Norwegian 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 MorphoNor = CommonScand, ResNor ** open Prelude, Predef in { + +-- genders + +oper + masc = Utr Masc ; + fem = Utr Fem ; + neutr = Neutr ; + +-- 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 Masc ; + "a" => Utr Fem ; + _ => Neutr + } ; + + nBil : Str -> Subst = \bil -> + mkSubstantive bil (bil + "en") (bil + "er") (bil + "erne") ** + {h1 = masc} ; + + nUke : Str -> Subst = \uke -> + mkSubstantive uke (init uke + "a") (uke + "r") (uke + "ne") ** + {h1 = fem} ; + + nHus : Str -> Subst = \hus -> + mkSubstantive hus (hus + "et") hus (hus + "ene") ** + {h1 = neutr} ; + + nHotell : Str -> Subst = \hotell -> + mkSubstantive hotell (hotell + "et") (hotell + "er") (hotell + "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") ; + + aBillig : Str -> Adj = \billig -> + mkAdject billig billig (billig + "e") (billig + "ere") (billig + "st") ; + +-- 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) => case last spist of { + "a" => mkCase c spist ; + _ => mkCase c (spist + "e") + } ; + VF (VImper v) => mkVoice v spis + } + } ; + + vHusk : Str -> Verbum = \husk -> + let huska : Str = husk + "a" ---- variants {husk + "a" ; husk + "et"} + in + mkVerb6 (husk + "e") (husk + "er") (husk + "es") huska huska husk ; + + vSpis : Str -> Verbum = \spis -> + mkVerb6 (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t") spis ; + + vLev : Str -> Verbum = \lev -> + let lever = case last lev of { + "r" => lev ; + _ => lev + "er" + } + in + mkVerb6 (lev + "e") lever (lev + "es") (lev + "de") (lev + "d") lev ; + + vBo : Str -> Verbum = \bo -> + mkVerb6 bo (bo + "r") (bo + "es") (bo + "dde") (bo + "dd") bo ; + + regVerb : Str -> Str -> Verbum = \spise, spiste -> + let + spis = init spise ; + te = dp 2 spiste + in + case te of { + "te" => vSpis spis ; + "de" => case last spise of { + "e" => vLev spis ; + _ => vBo spise + } ; + _ => vHusk spis + } ; + + +-- 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.4/norwegian/Norwegian.gf b/lib/resource-1.4/norwegian/Norwegian.gf new file mode 100644 index 000000000..ccf8899df --- /dev/null +++ b/lib/resource-1.4/norwegian/Norwegian.gf @@ -0,0 +1,7 @@ +--# -path=.:../scandinavian:../abstract:../common:prelude + +concrete Norwegian of NorwegianAbs = + LangNor, + IrregNor - [fly_V], + ExtraNor + ** {} ; diff --git a/lib/resource-1.4/norwegian/NorwegianAbs.gf b/lib/resource-1.4/norwegian/NorwegianAbs.gf new file mode 100644 index 000000000..34c3f929a --- /dev/null +++ b/lib/resource-1.4/norwegian/NorwegianAbs.gf @@ -0,0 +1,5 @@ +abstract NorwegianAbs = + Lang, + IrregNorAbs - [fly_V], + ExtraNorAbs + ** {} ; diff --git a/lib/resource-1.4/norwegian/NounNor.gf b/lib/resource-1.4/norwegian/NounNor.gf new file mode 100644 index 000000000..d3aa276ab --- /dev/null +++ b/lib/resource-1.4/norwegian/NounNor.gf @@ -0,0 +1,2 @@ +concrete NounNor of Noun = CatNor ** NounScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/NumeralNor.gf b/lib/resource-1.4/norwegian/NumeralNor.gf new file mode 100644 index 000000000..0d0a6e907 --- /dev/null +++ b/lib/resource-1.4/norwegian/NumeralNor.gf @@ -0,0 +1,85 @@ +concrete NumeralNor of Numeral = CatNor ** open MorphoNor 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} ; + +-- Numerals from sequences of digits. + + lincat + Dig = TDigit ; + + lin + IDig d = d ; + + IIDig d i = { + s = \\o => d.s ! NCard neutrum ++ i.s ! o ; + n = Pl + } ; + + D_0 = mkDig "0" ; + D_1 = mk3Dig "1" "1:e" Sg ; + D_2 = mk2Dig "2" "2:e" ; + D_3 = mkDig "3" ; + D_4 = mkDig "4" ; + D_5 = mkDig "5" ; + D_6 = mkDig "6" ; + D_7 = mkDig "7" ; + D_8 = mkDig "8" ; + D_9 = mkDig "9" ; + + oper + mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; + mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":e") ; + + mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { + s = table {NCard _ => c ; NOrd _ => o} ; + n = n + } ; + + TDigit = { + n : Number ; + s : CardOrd => Str + } ; + +} + diff --git a/lib/resource-1.4/norwegian/ParadigmsNor.gf b/lib/resource-1.4/norwegian/ParadigmsNor.gf new file mode 100644 index 000000000..ee662323f --- /dev/null +++ b/lib/resource-1.4/norwegian/ParadigmsNor.gf @@ -0,0 +1,502 @@ +--# -path=.:../scandinavian:../common:../abstract:../../prelude + +--1 Norwegian Lexical Paradigms +-- +-- Aarne Ranta 2003 +-- +-- This is an API for the user of the resource grammar +-- for adding lexical items. It gives functions for forming +-- expressions of open categories: nouns, adjectives, verbs. +-- It covers the "bokmål" variant of Norwegian. +-- +-- Closed categories (determiners, pronouns, conjunctions) are +-- accessed through the resource syntax API, $Structural$. +-- +-- The main difference with $MorphoNor.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 [``IrregNor`` ../../norwegian/IrregNor], +-- which covers irregularly inflected verbs. + +resource ParadigmsNor = + open + (Predef=Predef), + Prelude, + CommonScand, + ResNor, + MorphoNor, + CatNor 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. + + mkPrep : Str -> Prep ; + noPrep : Prep ; -- empty string + +--2 Nouns + +-- 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". +-- Giving gender manually makes the heuristic more reliable. +-- One can also compute the gender from the definite form. +-- gender is computed from the definite form. +-- If in doubt, use the $cc$ command to test! +-- In the 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 : overload { + mkN : Str -> N ; + mkN : Str -> Gender -> N ; + mkN : (bil,bilen : Str) -> N ; + mkN : (dreng,drengen,drenger,drengene : 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 ("datter til x") need a preposition. + + mkN2 : N -> Prep -> 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 $mkPrep$ or see the section on prepositions below to +-- form other prepositions. +-- +-- Three-place relational nouns ("forbindelse fra x til y") +-- need two prepositions. + + mkN3 : N -> Prep -> Prep -> N3 ; + + +--3 Relational common noun phrases +-- +-- In some cases, you may want to make a complex $CN$ into a +-- relational noun (e.g. "den gamle kongen av"). 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 +-- Sometimes you can reuse a common noun as a proper name, e.g. "Bank". + + mkPN : overload { + mkPN : Str -> PN ; -- masculine + mkPN : Str -> Gender -> PN ; + mkPN : N -> PN ; + } ; + + +--2 Adjectives + +-- The regular pattern works for many adjectives, e.g. those ending +-- with "ig". Two, five, or at worst five forms are sometimes needed. + + mkA : overload { + mkA : (fin : Str) -> A ; + mkA : (fin,fint : Str) -> A ; + mkA : (galen,galet,galne : Str) -> A ; + mkA : (stor,stort,store,storre,storst : Str) -> A ; + +-- If comparison is formed by "mer", "mest", as in general for +-- long adjective, the following pattern is used: + + mkA : A -> A ; -- -/mer/mest norsk + } ; + + +--3 Two-place adjectives +-- +-- Two-place adjectives need a preposition for their second argument. + + mkA2 : A -> Prep -> A2 ; + + + +--2 Adverbs + +-- Adverbs are not inflected. Most lexical ones have position +-- after the verb. Some follow the verb (e.g. "altid"). + + mkAdv : Str -> Adv ; -- e.g. her + mkAdV : Str -> AdV ; -- e.g. altid + +-- Adverbs modifying adjectives and sentences can also be formed. + + mkAdA : Str -> AdA ; + + +--2 Verbs +-- + + mkV : overload { + +-- The 'regular verb' function is the first conjugation. + + mkV : (snakke : Str) -> V ; + +-- The almost regular verb function needs the infinitive and the preteritum. + + mkV : (leve,levde : Str) -> V ; + +-- There is an extensive list of irregular verbs in the module $IrregNor$. +-- In practice, it is enough to give three forms, as in school books. + + mkV : (drikke, drakk, drukket : Str) -> V ; + +-- The worst case needs six forms. + + mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V ; + +--3 Verbs with a particle. +-- +-- The particle, such as in "lukke opp", is given as a string. + + mkV : V -> Str -> V ; + } ; + + + +--3 Verbs with 'være' as auxiliary +-- +-- By default, the auxiliary is "have". This function changes it to "være". + + vaereV : V -> V ; + + + +--3 Deponent verbs. +-- +-- Some words are used in passive forms only, e.g. "trives", some as +-- reflexive e.g. "forestille seg". + + 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, if a particle is needed, it comes from the $V$. + + mkV2 : overload { + mkV2 : Str -> V2 ; + mkV2 : V -> V2 ; + mkV2 : V -> Prep -> V2 ; + } ; + + +--3 Three-place verbs +-- +-- Three-place (ditransitive) verbs need two prepositions, of which +-- the first one or both can be absent. + + mkV3 : V -> Prep -> Prep -> V3 ; -- snakke, med, om + dirV3 : V -> Prep -> V3 ; -- gi,_,til + dirdirV3 : V -> V3 ; -- gi,_,_ + +--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 -> Prep -> V2S ; + mkVV : V -> VV ; + mkV2V : V -> Prep -> Prep -> V2V ; + mkVA : V -> VA ; + mkV2A : V -> Prep -> V2A ; + mkVQ : V -> VQ ; + mkV2Q : V -> Prep -> V2Q ; + + mkAS : A -> AS ; + mkA2S : A -> Prep -> A2S ; + mkAV : A -> AV ; + mkA2V : A -> Prep -> A2V ; + +-- Notice: categories $AS, A2S, AV, A2V$ are just $A$. +-- $V0$ is just $V$. + + V0 : 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 = MorphoNor.Gender ; + Number = MorphoNor.Number ; + Case = MorphoNor.Case ; + masculine = Utr Masc ; + feminine = Utr Fem ; + neutrum = Neutr ; + singular = Sg ; + plural = Pl ; + nominative = Nom ; + genitive = Gen ; + + mk4N x y z u = mkSubstantive x y z u ** {g = extNGen y ; lock_N = <>} ; + + regN x = regGenN x g where { + g = case of { + _ + "e" => Utr Fem ; + _ => Utr Masc + } + } ; + + regGenN x g = case last x of { + "e" => case g of { + Utr Masc => mk4N x (x + "n") (x + "r") (x + "ne") ; + Utr Fem => mk4N x (init x + "a") (x + "r") (x + "ne") ; + Neutr => mk4N x (x + "t") (x + "r") (init x + "a") + } ; + _ => case g of { + Utr Masc => mk4N x (x + "en") (x + "er") (x + "ene") ; + Utr Fem => mk4N x (x + "a") (x + "er") (x + "ene") ; + Neutr => mk4N x (x + "et") (x + "") (x + "a") + } + } ; + + mk2N x y = case last y of { + "n" => regGenN x masculine ; + "a" => regGenN x feminine ; + _ => regGenN x neutrum + } ; + + + mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p.s} ; + regN2 n g = mkN2 (regGenN n g) (mkPrep "av") ; + mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q.s} ; + + regGenPN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ; + regPN n = regGenPN n utrum ; + nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ; + +-- To form a noun phrase that can also be plural and have an irregular +-- genitive, you can use the worst-case function. + + makeNP : Str -> Str -> Number -> Gender -> NP ; + makeNP x y n g = + {s = table {NPPoss _ => x ; _ => y} ; a = agrP3 g n ; + lock_NP = <>} ; + + mk3A a b c = (mkAdject a b c [] []) ** {isComp = False ; lock_A = <>} ; + mk2A a b = mk3A a b (a + "e") ; + regA a = (regADeg a) ** {isComp = False ; lock_A = <>} ; + + mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ; + + mkADeg a b c d e = mkAdject a b c d e ** {isComp = False ; lock_A = <>} ; + regADeg a = case Predef.dp 2 a of { + "ig" => aBillig a ; + "sk" => aRask a ; + _ => aRod a + } ** {isComp = False ; lock_A = <>} ; + irregADeg a b c = mkAdject a (a + "t") (a + "e") b c ** + {isComp = False ; lock_A = <>} ; + mk3ADeg a b c = mkAdject a b c (a + "ere") (a + "est") ** + {isComp = False ; lock_A = <>} ; + mk2ADeg a b = mkAdject a b (a + "e") (a + "ere") (a + "est") ** + {isComp = False ; lock_A = <>} ; + + compoundA adj = {s = adj.s ; isComp = True ; lock_A = <>} ; + + mkAdv x = ss x ** {lock_Adv = <>} ; + mkAdV x = ss x ** {lock_AdV = <>} ; + mkAdA x = ss x ** {lock_AdA = <>} ; + + mkPrep p = {s = p ; lock_Prep = <>} ; + noPrep = mkPrep [] ; + + mk6V a b c d e f = mkVerb6 a b c d e f ** + {part = [] ; vtype = VAct ; isVaere = False ; lock_V = <>} ; + + regV a = case last a of { + +--3 Verbs with a particle. +-- +-- The particle, such as in "lukke opp", is given as a string. + + + +--3 Verbs with a particle. +-- +-- The particle, such as in "lukke opp", is given as a string. + + + "e" => vHusk (init a) ; + _ => vBo a + } ** {part = [] ; vtype = VAct ; isVaere = False ; lock_V = <>} ; + + mk2V a b = regVerb a b ** {part = [] ; vtype = VAct ; isVaere = False ; 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 + mk6V drikke drikker (drikke + "s") drakk drukket drikk ; + + vaereV v = { + s = v.s ; + part = [] ; + vtype = v.vtype ; + isVaere = True ; + lock_V = <> + } ; + + partV v p = {s = v.s ; part = p ; vtype = v.vtype ; isVaere = v.isVaere ; lock_V = <>} ; + depV v = {s = v.s ; part = v.part ; vtype = VPass ; isVaere = False ; lock_V = <>} ; + reflV v = {s = v.s ; part = v.part ; vtype = VRefl ; isVaere = False ; lock_V = <>} ; + + mk2V2 v p = v ** {c2 = p.s ; lock_V2 = <>} ; + dirV2 v = mk2V2 v noPrep ; + + mkV3 v p q = v ** {c2 = p.s ; c3 = q.s ; lock_V3 = <>} ; + dirV3 v p = mkV3 v noPrep p ; + dirdirV3 v = dirV3 v noPrep ; + + mkV0 v = v ** {lock_V0 = <>} ; + mkVS v = v ** {lock_VS = <>} ; + mkV2S v p = mk2V2 v p ** {lock_V2S = <>} ; + mkVV v = v ** {c2 = "å" ; lock_VV = <>} ; + mkV2V v p t = mk2V2 v p ** {c3 = "att" ; lock_V2V = <>} ; + mkVA v = v ** {lock_VA = <>} ; + mkV2A v p = mk2V2 v p ** {lock_V2A = <>} ; + mkVQ v = v ** {lock_VQ = <>} ; + mkV2Q v p = mk2V2 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 ; + AS, A2S, AV : Type = A ; + A2V : Type = A2 ; + + +--------- + + mk2N : (bil,bilen : Str) -> N ; + mk4N : (dreng,drengen,drenger,drengene : Str) -> N ; + regN : Str -> N ; + regGenN : Str -> Gender -> N ; + mk2N : (bil,bilen : Str) -> N ; + + mkN = overload { + mkN : Str -> N = regN ; + mkN : Str -> Gender -> N = regGenN ; + mkN : (bil,bilen : Str) -> N = mk2N ; + mkN : (dreng,drengen,drenger,drengene : Str) -> N = mk4N + } ; + + mkPN = overload { + mkPN : Str -> PN = regPN ; -- masculine + mkPN : Str -> Gender -> PN = regGenPN ; + mkPN : N -> PN = nounPN ; + } ; + + regPN : Str -> PN ; -- utrum + regGenPN : Str -> Gender -> PN ; + nounPN : N -> PN ; + + mkA = overload { + mkA : (fin : Str) -> A = regADeg ; + mkA : (fin,fint : Str) -> A = mk2ADeg ; + mkA : (galen,galet,galne : Str) -> A = mk3ADeg ; + mkA : (stor,stort,store,storre,storst : Str) -> A = mkADeg ; + mkA : A -> A = compoundA ; -- -/mer/mest norsk + } ; + + mk3A : (galen,galet,galne : Str) -> A ; + regA : Str -> A ; + mk2A : (stor,stort : Str) -> A ; + mkADeg : (stor,stort,store,storre,storst : Str) -> A ; + regADeg : Str -> A ; + irregADeg : (tung,tyngre,tyngst : Str) -> A ; + mk3ADeg : (galen,galet,galne : Str) -> A ; + mk2ADeg : (bred,bredt : Str) -> A ; + compoundA : A -> A ; -- -/mer/mest norsk + + mkV = overload { + mkV : (snakke : Str) -> V = regV ; + mkV : (leve,levde : Str) -> V = mk2V ; + mkV : (drikke, drakk, drukket : Str) -> V = irregV ; + mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V = mk6V ; + mkV : V -> Str -> V = partV ; + } ; + + + regV : (snakke : Str) -> V ; + mk2V : (leve,levde : Str) -> V ; + irregV : (drikke, drakk, drukket : Str) -> V ; + mk6V : (spise,spiser,spises,spiste,spist,spis : Str) -> V ; + partV : V -> Str -> V ; + + + mkV2 = overload { + mkV2 : Str -> V2 = \s -> dirV2 (regV s) ; + mkV2 : V -> V2 = dirV2 ; + mkV2 : V -> Prep -> V2 = mk2V2 ; + } ; + + mk2V2 : V -> Prep -> V2 ; + dirV2 : V -> V2 ; + +} ; diff --git a/lib/resource-1.4/norwegian/PhraseNor.gf b/lib/resource-1.4/norwegian/PhraseNor.gf new file mode 100644 index 000000000..da463adb1 --- /dev/null +++ b/lib/resource-1.4/norwegian/PhraseNor.gf @@ -0,0 +1,2 @@ +concrete PhraseNor of Phrase = CatNor ** PhraseScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/QuestionNor.gf b/lib/resource-1.4/norwegian/QuestionNor.gf new file mode 100644 index 000000000..8a7c08e0f --- /dev/null +++ b/lib/resource-1.4/norwegian/QuestionNor.gf @@ -0,0 +1,2 @@ +concrete QuestionNor of Question = CatNor ** QuestionScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/RelativeNor.gf b/lib/resource-1.4/norwegian/RelativeNor.gf new file mode 100644 index 000000000..18be3bc45 --- /dev/null +++ b/lib/resource-1.4/norwegian/RelativeNor.gf @@ -0,0 +1,2 @@ +concrete RelativeNor of Relative = CatNor ** RelativeScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/ResNor.gf b/lib/resource-1.4/norwegian/ResNor.gf new file mode 100644 index 000000000..490389ad2 --- /dev/null +++ b/lib/resource-1.4/norwegian/ResNor.gf @@ -0,0 +1,3 @@ +instance ResNor of ResScand = DiffNor ** open CommonScand, Prelude in { +} ; + diff --git a/lib/resource-1.4/norwegian/SentenceNor.gf b/lib/resource-1.4/norwegian/SentenceNor.gf new file mode 100644 index 000000000..eeca680ab --- /dev/null +++ b/lib/resource-1.4/norwegian/SentenceNor.gf @@ -0,0 +1,2 @@ +concrete SentenceNor of Sentence = CatNor ** SentenceScand with + (ResScand = ResNor) ; diff --git a/lib/resource-1.4/norwegian/StructuralNor.gf b/lib/resource-1.4/norwegian/StructuralNor.gf new file mode 100644 index 000000000..690c4918d --- /dev/null +++ b/lib/resource-1.4/norwegian/StructuralNor.gf @@ -0,0 +1,128 @@ +concrete StructuralNor of Structural = CatNor ** + open MorphoNor, ParadigmsNor, Prelude in { + + flags optimize=all ; + + lin + above_Prep = ss "ovenfor" ; + after_Prep = ss "etter" ; + by8agent_Prep = ss "av" ; + all_Predet = {s = gennumForms "all" "alt" "alle"} ; + almost_AdA, almost_AdN = ss "nesten" ; + although_Subj = ss ["selv om"] ; + always_AdV = ss "altid" ; + and_Conj = {s1 = [] ; s2 = "og" ; n = Pl} ; + because_Subj = ss "fordi" ; + before_Prep = ss "før" ; + behind_Prep = ss "bakom" ; + between_Prep = ss "mellom" ; + both7and_DConj = sd2 "både" "og" ** {n = Pl} ; + but_PConj = ss "men" ; + by8means_Prep = ss "med" ; + can8know_VV, can_VV = + mkV "kunne" "kan" "kunn" "kunne" "kunnet" "kunnen" ** + {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} ; DEPREC + for_Prep = ss "for" ; + from_Prep = ss "fra" ; + he_Pron = MorphoNor.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 = + MorphoNor.mkNP "jeg" "meg" (variants {"min" ; "mi"}) "mit" "mine" SgUtr P1 ; --- mi + in_Prep = ss "i" ; + it_Pron = MorphoNor.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 = \\_,_ => "mye" ; n = Pl ; det = DDef Indef} ; + must_VV = + mkV "måtte" "må" "må" "måtte" "måttet" "mått" ** {c2 = [] ; lock_VV = <>} ; + no_Utt = ss ["nei"] ; + on_Prep = ss "på" ; +--- one_Quant = {s = \\_ => genderForms ["en"] ["et"] ; n = Sg ; det = DIndef} ; DEPREC + only_Predet = {s = \\_ => "kun"} ; + or_Conj = {s1 = [] ; s2 = "eller" ; n = Pl} ; + otherwise_PConj = ss "annarledes" ; + part_Prep = ss "av" ; + please_Voc = ss "takk" ; --- + possess_Prep = ss "av" ; + quite_Adv = ss "temmelig" ; + she_Pron = MorphoNor.mkNP "hun" "henne" "hennes" "hennes" "hennes" SgUtr P3 ; + so_AdA = ss "så" ; + someSg_Det = {s = \\_ => genderForms "noen" "noe" ; n = Sg ; det = DIndef} ; + somePl_Det = {s = \\_,_ => "noen" ; n = Pl ; det = DIndef} ; + somebody_NP = regNP "noen" "noens" SgUtr ; + something_NP = regNP "noe" "noes" SgNeutr ; + somewhere_Adv = ss ["et eller annet sted"] ; ---- ? + that_Quant = + {s = table { + Sg => \\_ => genderForms ["den der"] ["det der"] ; + Pl => \\_,_ => ["de der"] + } ; + det = DDef Indef + } ; + there_Adv = ss "der" ; + there7to_Adv = ss "dit" ; + there7from_Adv = ss "derfra" ; + therefore_PConj = ss "derfor" ; + they_Pron = MorphoNor.mkNP "de" "dem" "deres" "deres" "deres" Plg P1 ; + this_Quant = + {s = table { + Sg => \\_ => genderForms ["denne"] ["dette"] ; + Pl => \\_,_ => ["disse"] + } ; + det = DDef Def + } ; + through_Prep = ss "gjennom" ; + too_AdA = ss "for" ; + to_Prep = ss "til" ; + under_Prep = ss "under" ; + very_AdA = ss "mye" ; + want_VV = + mkV "ville" "vil" "vill" "ville" "villet" "villed" ** + {c2 = [] ; lock_VV = <>} ; + we_Pron = MorphoNor.mkNP "vi" "oss" "vår" "vårt" "våre" Plg P1 ; + whatSg_IP = {s = \\_ => "hva" ; gn = SgUtr} ; ---- infl + whatPl_IP = {s = \\_ => "hva" ; gn = Plg} ; ---- infl + when_IAdv = ss "når" ; + when_Subj = ss "når" ; + where_IAdv = ss "hver" ; + which_IQuant = { + s = table { + Sg => genderForms "hvilken" "hvilket" ; + Pl => \\_ => "hvilke" + } ; + det = DIndef + } ; + whoSg_IP = {s = vem.s ; gn = SgUtr} ; + whoPl_IP = {s = \\_ => "hvilke" ; gn = Plg} ; + why_IAdv = ss "hvorfor" ; + without_Prep = ss "uten" ; + with_Prep = ss "med" ; + yes_Utt = ss ["ja"] ; + youSg_Pron = + MorphoNor.mkNP "du" "deg" (variants {"din" ; "di"}) "dit" "dine" SgUtr P2 ; ---- + youPl_Pron = MorphoNor.mkNP "dere" "dere" "deres" "deres" "deres" Plg P2 ; + youPol_Pron = MorphoNor.mkNP "Dere" "Dere" "Deres" "Deres" "Deres" SgUtr P2 ; --- wrong in refl + +-- Auxiliaries that are used repeatedly. + + oper + vem = MorphoNor.mkNP "hvem" "hvem" "hvis" "hvis" "hvis" SgUtr P3 ; + +} + diff --git a/lib/resource-1.4/norwegian/VerbNor.gf b/lib/resource-1.4/norwegian/VerbNor.gf new file mode 100644 index 000000000..cd816e2fc --- /dev/null +++ b/lib/resource-1.4/norwegian/VerbNor.gf @@ -0,0 +1,2 @@ +concrete VerbNor of Verb = CatNor ** VerbScand with + (ResScand = ResNor) ;