From 26f6e9b53cc87f11e036f298776dfd0da4065c37 Mon Sep 17 00:00:00 2001 From: aarne Date: Thu, 20 Jan 2005 14:04:31 +0000 Subject: [PATCH] Norwegian now --- lib/resource/norwegian/CategoriesNor.gf | 4 + lib/resource/norwegian/MorphoNor.gf | 241 ++++++++++++++++++++++ lib/resource/norwegian/NumeralsNor.gf | 41 ++++ lib/resource/norwegian/RulesNor.gf | 4 + lib/resource/norwegian/StructuralNor.gf | 118 +++++++++++ lib/resource/norwegian/SyntaxNor.gf | 115 +++++++++++ lib/resource/norwegian/TestResourceNor.gf | 49 +++++ lib/resource/norwegian/TypesNor.gf | 38 ++++ 8 files changed, 610 insertions(+) create mode 100644 lib/resource/norwegian/CategoriesNor.gf create mode 100644 lib/resource/norwegian/MorphoNor.gf create mode 100644 lib/resource/norwegian/NumeralsNor.gf create mode 100644 lib/resource/norwegian/RulesNor.gf create mode 100644 lib/resource/norwegian/StructuralNor.gf create mode 100644 lib/resource/norwegian/SyntaxNor.gf create mode 100644 lib/resource/norwegian/TestResourceNor.gf create mode 100644 lib/resource/norwegian/TypesNor.gf diff --git a/lib/resource/norwegian/CategoriesNor.gf b/lib/resource/norwegian/CategoriesNor.gf new file mode 100644 index 000000000..d46431af0 --- /dev/null +++ b/lib/resource/norwegian/CategoriesNor.gf @@ -0,0 +1,4 @@ +--# -path=.:../scandinavian:../abstract:../../prelude + +concrete CategoriesNor of Categories = + CategoriesScand with (SyntaxScand=SyntaxNor) ; diff --git a/lib/resource/norwegian/MorphoNor.gf b/lib/resource/norwegian/MorphoNor.gf new file mode 100644 index 000000000..0a96be878 --- /dev/null +++ b/lib/resource/norwegian/MorphoNor.gf @@ -0,0 +1,241 @@ +--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 = open Prelude, TypesNor in { + +-- Danish grammar source: http://users.cybercity.dk/~nmb3879/danish.html + +-- genders + +oper + masc = Utr Masc ; + fem = Utr NoMasc ; + neutr = Neutr ; + +-- nouns + +oper + mkSubstantive : (_,_,_,_ : Str) -> {s : SubstForm => Str} = + \dreng, drengen, drenger, drengene -> {s = table { + SF Sg Indef c => mkCase dreng ! c ; + SF Sg Def c => mkCase drengen ! c ; + SF Pl Indef c => mkCase drenger ! c ; + SF Pl Def c => mkCase drengene ! c + } + } ; + + mkCase : Str -> Case => Str = \bil -> table { + Nom => bil ; + Gen => bil + "s" --- but: hus --> hus + } ; + + 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 + + mkAdjective : (_,_,_,_,_ : Str) -> Adj = + \stor,stort,store,storre,storst -> {s = table { + AF (Posit (Strong (ASg (Utr _)))) c => mkCase stor ! c ; + AF (Posit (Strong (ASg Neutr))) c => mkCase stort ! c ; + AF (Posit _) c => mkCase store ! c ; + AF Compar c => mkCase storre ! c ; + AF (Super SupStrong) c => mkCase storst ! c ; + AF (Super SupWeak) c => mkCase (storst + "e") ! c + } + } ; + + aRod : Str -> Adj = \rod -> + mkAdjective rod (rod + "t") (rod + "e") (rod + "ere") (rod + "est") ; + + aAbstrakt : Str -> Adj = \abstrakt -> + mkAdjective abstrakt abstrakt (abstrakt + "e") (abstrakt + "ere") (abstrakt + "est") ; + + aRask : Str -> Adj = \rask -> + mkAdjective rask rask (rask + "e") (rask + "ere") (rask + "est") ; + +-- verbs + + mkVerb : (_,_,_,_,_,_ : Str) -> Verbum = + \spise,spiser,spises,spiste,spist,spis -> {s = table { + VI (Inf v) => mkVoice v spise ; + VF (Pres m Act) => spiser ; + VF (Pres m Pass) => spises ; + VF (Pret m v) => mkVoice v spiste ; + VI (Supin v) => mkVoice v spist ; + VI (PtPret c) => mkCase spist ! c ; + VF Imper => spis + } + } ; + + mkVoice : Voice -> Str -> Str = \v,s -> case v of { + Act => s ; + Pass => s + case last s of { + "t" => "es" ; + _ => "s" + } + } ; + + vHusk : Str -> Verbum = \husk -> + mkVerb (husk + "e") (husk + "er") (husk + "es") (husk + "et") (husk + "et") husk ; + + vSpis : Str -> Verbum = \spis -> + mkVerb (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t") spis ; + + vBo : Str -> Verbum = \bo -> + mkVerb bo (bo + "r") (bo + "es") (bo + "dde") (bo + "dd") bo ; + +-- pronouns + +oper jag_32 : ProPN = + {s = table { + PNom => "jeg" ; + PAcc => "meg" ; + PGen (ASg (Utr Masc)) => "min" ; + PGen (ASg (Utr NoMasc)) => "mi" ; + PGen (ASg Neutr) => "mitt" ; + PGen APl => "mine" + } ; + h1 = Utr Masc ; -- Masc doesn't matter + h2 = Sg ; + h3 = P1 + } ; + +oper du_33 : ProPN = + {s = table { + PNom => "du" ; + PAcc => "deg" ; + PGen (ASg (Utr Masc)) => "din" ; + PGen (ASg (Utr NoMasc)) => "di" ; + PGen (ASg Neutr) => "ditt" ; + PGen APl => "dine" + } ; + h1 = Utr Masc ; + h2 = Sg ; + h3 = P2 + } ; + +oper han_34 : ProPN = + {s = table { + PNom => "han" ; + PAcc => "ham" ; + PGen (ASg (Utr _)) => "hans" ; + PGen (ASg Neutr) => "hans" ; + PGen APl => "hans" + } ; + h1 = masc ; + h2 = Sg ; + h3 = P3 + } ; +oper hon_35 : ProPN = + {s = table { + PNom => "hun" ; + PAcc => "henne" ; + PGen (ASg (Utr _)) => "hennes" ; + PGen (ASg Neutr) => "hennes" ; + PGen APl => "hennes" + } ; + h1 = fem ; + h2 = Sg ; + h3 = P3 + } ; + +oper vi_36 : ProPN = + {s = table { + PNom => "vi" ; + PAcc => "oss" ; + PGen (ASg (Utr _)) => "vår" ; + PGen (ASg Neutr) => "vårt" ; + PGen APl => "våre" + } ; + h1 = Utr Masc ; + h2 = Pl ; + h3 = P1 + } ; + +oper ni_37 : ProPN = + {s = table { + PNom => "dere" ; + PAcc => "dere" ; + PGen _ => "deres" + } ; + h1 = Utr Masc ; + h2 = Pl ; + h3 = P2 + } ; + +oper de_38 : ProPN = + {s = table { + PNom => "de" ; + PAcc => "dem" ; + PGen _ => "deres" + } ; + h1 = Utr Masc ; + h2 = Pl ; + h3 = P3 + } ; + +oper De_38 : ProPN = + {s = table { + PNom => "Dere" ; + PAcc => "Dere" ; + PGen _ => "Deres" + } ; + h1 = Utr Masc ; + h2 = Sg ; + h3 = P2 + } ; + +oper den_39 : ProPN = + {s = table { + PNom => "de " ; + PAcc => "den" ; + PGen _ => "dens" + } ; + h1 = Utr Masc ; + h2 = Sg ; + h3 = P3 + } ; + +oper det_40 : ProPN = + {s = table { + PNom => "det" ; + PAcc => "det" ; + PGen _ => "dets" + } ; + h1 = Neutr ; + h2 = Sg ; + h3 = P3 + } ; + + +-- from Numerals + +param DForm = ental | ton | tiotal ; + +oper mkTal : Str -> Str -> Str -> {s : DForm => Str} = + \två -> \tolv -> \tjugo -> + {s = table {ental => två ; ton => tolv ; tiotal => tjugo}} ; +oper regTal : Str -> {s : DForm => Str} = \fem -> mkTal fem (fem + "ten") (fem + "ti") ; + +} diff --git a/lib/resource/norwegian/NumeralsNor.gf b/lib/resource/norwegian/NumeralsNor.gf new file mode 100644 index 000000000..4ebb11dc9 --- /dev/null +++ b/lib/resource/norwegian/NumeralsNor.gf @@ -0,0 +1,41 @@ +-- norsk bokmol, by Herman R Jervell herman.jervell@ilf.uio.no, +-- 6/3/2001 + +concrete NumeralsNor of Numerals = open Prelude, MorphoNor in { + + +lincat Numeral = {s : Str} ; +lincat Digit = {s : DForm => Str} ; +lincat Sub10 = {s : DForm => Str} ; +lincat Sub100 = {s : Str} ; +lincat Sub1000 = {s : Str} ; +lincat Sub1000000 = {s : Str} ; + +lin num x = x ; + +lin n2 = mkTal "to" "tolv" "tjue" ; +lin n3 = mkTal "tre" "tretten" "tretti" ; +lin n4 = mkTal "fire" "fjorten" "førti" ; +lin n5 = regTal "fem" ; +lin n6 = regTal "seks" ; +lin n7 = mkTal "sju" "sytten" "sytti" ; +lin n8 = mkTal "åtte" "atten" "åtti" ; +lin n9 = mkTal "ni" "nitten" "nitti" ; + +lin pot01 = {s = table {f => "et"}} ; +lin pot0 d = {s = table {f => d.s ! f}} ; +lin pot110 = ss "ti" ; +lin pot111 = ss "elve" ; +lin pot1to19 d = ss (d.s ! ton) ; +lin pot0as1 n = ss (n.s ! ental) ; +lin pot1 d = ss (d.s ! tiotal) ; +lin pot1plus d e = ss (d.s ! tiotal ++ e.s ! ental) ; +lin pot1as2 n = n ; +lin pot2 d = ss (d.s ! ental ++ "hundre") ; +lin pot2plus d e = ss (d.s ! ental ++ "hundre" ++ "og" ++ e.s) ; +lin pot2as3 n = n ; +lin pot3 n = ss (n.s ++ "tusen") ; +lin pot3plus n m = ss (n.s ++ "tusen" ++ "og" ++ m.s) ; + + +} \ No newline at end of file diff --git a/lib/resource/norwegian/RulesNor.gf b/lib/resource/norwegian/RulesNor.gf new file mode 100644 index 000000000..6f993b69a --- /dev/null +++ b/lib/resource/norwegian/RulesNor.gf @@ -0,0 +1,4 @@ +--# -path=.:../scandinavian:../abstract:../../prelude + +concrete RulesNor of Rules = + RulesScand with (SyntaxScand=SyntaxNor) ; diff --git a/lib/resource/norwegian/StructuralNor.gf b/lib/resource/norwegian/StructuralNor.gf new file mode 100644 index 000000000..cc4e2bec0 --- /dev/null +++ b/lib/resource/norwegian/StructuralNor.gf @@ -0,0 +1,118 @@ +--# -path=.:../scandinavian:../abstract:../../prelude + +--1 The Top-Level Norwegian Resource Grammar: Structural Words +-- +-- Aarne Ranta 2002 -- 2004 +-- +concrete StructuralNor of Structural = + CategoriesNor, NumeralsNor ** open Prelude, MorphoNor, SyntaxNor in { + lin + + INP = pronNounPhrase jag_32 ; + ThouNP = pronNounPhrase du_33 ; + HeNP = pronNounPhrase han_34 ; + SheNP = pronNounPhrase hon_35 ; + WeNumNP n = pronNounPhrase (pronWithNum vi_36 n) ; + YeNumNP n = pronNounPhrase (pronWithNum ni_37 n) ; + TheyNP = pronNounPhrase de_38 ; + TheyFemNP = pronNounPhrase de_38 ; + + YouNP = pronNounPhrase De_38 ; + + ItNP = pronNounPhrase det_40 ; ---- + ThisNP = regNameNounPhrase ["dette"] NNeutr ; + ThatNP = regNameNounPhrase ["det"] NNeutr ; + TheseNumNP n = + {s = \\c => ["disse"] ++ n.s ! npCase c ; g = Neutr ; n = Pl} ; + ThoseNumNP n = + {s = \\c => ["de der"] ++ n.s ! npCase c ; g = Neutr ; n = Pl} ; + + EveryDet = varjeDet ; + AllMassDet = mkDeterminerSgGender2 "all" "alt" IndefP ; + AllNumDet = mkDeterminerPlNum "alle" IndefP ; + AnyDet = mkDeterminerSgGender2 "noen" "noe" IndefP ; + AnyNumDet = mkDeterminerPlNum "noen" IndefP ; + SomeDet = mkDeterminerSgGender2 "noen" "noe" IndefP ; + SomeNumDet = mkDeterminerPlNum "noen" IndefP ; + ManyDet = mkDeterminerPl "mange" IndefP ; + HowManyDet = mkDeterminerPl ["hvor mange"] IndefP ; + NoDet = mkDeterminerSgGender2 "ingen" "ingen" IndefP ; + NoNumDet = mkDeterminerPlNum "ingen" IndefP ; + WhichNumDet = mkDeterminerPlNum "hvilke" IndefP ; + + UseNumeral i = {s = table {Nom => i.s ; Gen => i.s ++ "s"}} ; --- + + WhichDet = vilkenDet ; + MostDet = mkDeterminerSgGender2 ["den meste"] ["det meste"] (DefP Def) ; + MostsDet = flestaDet ; + MuchDet = mkDeterminerSg (detSgInvar "mye") IndefP ; + + ThisDet = mkDeterminerSgGender2 ["denne"] ["dette"] (DefP Def) ; + ThatDet = mkDeterminerSgGender2 ["den der"] ["det der"] (DefP Indef) ; + TheseNumDet = mkDeterminerPlNum ["disse"] (DefP Def) ; + ThoseNumDet = mkDeterminerPlNum ["de der"] (DefP Def) ; + + HowIAdv = ss "hvor" ; + WhenIAdv = ss "når" ; + WhereIAdv = ss "hver" ; + WhyIAdv = ss "hvorfor" ; + + AndConj = ss "og" ** {n = Pl} ; + OrConj = ss "eller" ** {n = Sg} ; + BothAnd = sd2 "både" "og" ** {n = Pl} ; + EitherOr = sd2 "enten" "eller" ** {n = Sg} ; + NeitherNor = sd2 "verken" "eller" ** {n = Sg} ; + IfSubj = ss "hvis" ; + WhenSubj = ss "når" ; + + PhrYes = ss ["Ja ."] ; + PhrNo = ss ["Nei ."] ; + + VeryAdv = ss "meget" ; + TooAdv = ss "for" ; ---- ? + OtherwiseAdv = ss "annerledes" ; ---- ? + ThereforeAdv = ss "derfor" ; + + EverybodyNP = let alla = table {Nom => "alle" ; Gen => "alles"} in + {s = \\c => alla ! npCase c ; g = Utr Masc ; n = Pl} ; + SomebodyNP = nameNounPhrase (mkProperName "noen" (NUtr Masc)) ; + NobodyNP = nameNounPhrase (mkProperName "ingen" (NUtr Masc)) ; + EverythingNP = nameNounPhrase (mkProperName "alt" NNeutr) ; + SomethingNP = nameNounPhrase (mkProperName "noe" NNeutr) ; + NothingNP = nameNounPhrase (mkProperName "intet" NNeutr) ; + + CanVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; isAux = True} ; + CanKnowVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; isAux = True} ; + MustVV = mkVerb "måtte" "må" "mås" "måtte" "måttet" "mått" ** {s1 = [] ; isAux = True} ; ---- ? + WantVV = mkVerb "ville" "vil" nonExist "ville" "villet" "vill" ** {s1 = [] ; isAux = True} ; --- + + EverywhereNP = advPost "overalt" ; + SomewhereNP = advPost ["et eller annet sted"] ; ---- ? + NowhereNP = advPost "ingensteds" ; + + AlthoughSubj = ss ["selv om"] ; + + AlmostAdv = ss "nesten" ; + QuiteAdv = ss "temmelig" ; + + InPrep = ss "i" ; + OnPrep = ss "på" ; + ToPrep = ss "til" ; + ThroughPrep = ss "gjennom" ; + AbovePrep = ss "ovenfor" ; + UnderPrep = ss "under" ; + InFrontPrep = ss "foran" ; + BehindPrep = ss "bakom" ; + BetweenPrep = ss "mellom" ; + FromPrep = ss "fra" ; + BeforePrep = ss "før" ; + DuringPrep = ss "under" ; + AfterPrep = ss "etter" ; + WithPrep = ss "med" ; + WithoutPrep = ss "uten" ; + ByMeansPrep = ss "med" ; + PossessPrep = ss "av" ; + PartPrep = ss "av" ; + AgentPrep = ss "av" ; + +} diff --git a/lib/resource/norwegian/SyntaxNor.gf b/lib/resource/norwegian/SyntaxNor.gf new file mode 100644 index 000000000..d86af0951 --- /dev/null +++ b/lib/resource/norwegian/SyntaxNor.gf @@ -0,0 +1,115 @@ +--# -path=.:../scandinavian:../../prelude + +instance SyntaxNor of SyntaxScand = TypesNor ** + open Prelude, (CO = Coordination), MorphoNor in { + + oper + +------ mkAdjForm + +-- When common nouns are extracted from lexicon, the composite noun form is ignored. + + extCommonNounMasc = extCommNoun ; + + npMan : NounPhrase = nameNounPhrase (mkProperName "man" (NUtr Masc)) ; + npDet : NounPhrase = nameNounPhrase (mkProperName "det" NNeutr) ; + + + mkAdjForm : Species -> Number -> NounGender -> AdjFormPos = \b,n,g -> + case of { + => Strong (ASg (genNoun g)) ; + => Strong APl ; + => Weak + } ; + + deponentVerb : Verb -> Verb = \finna -> { + s = table { + VF (Pres m _) => finna.s ! VF (Pres m Pass) ; + VF (Pret m _) => finna.s ! VF (Pret m Pass) ; + VI (Inf _) => finna.s ! VI (Inf Pass) ; + VI (Supin _) => finna.s ! VI (Supin Pass) ; + v => finna.s ! v --- Imper ! + } ; + s1 = finna.s1 + } ; + + verbFinnas : Verb = + deponentVerb (mkVerb "finne" "finner" "finnes" "fant" "funnet" "finn" ** {s1 = []}) ; + verbVara = mkVerb "være" "er" nonExist "var" "vært" "vær" ** {s1 = []} ; + verbHava = mkVerb "ha" "ha" "has" "hadde" "hatt" "ha" ** {s1 = []} ; + + relPronForms : RelCase => GenNum => Str = table { + RNom => \\_ => "som" ; + RAcc => \\_ => variants {"som" ; []} ; + RGen => \\_ => "hvis" ; + RPrep => pronVilken + } ; + + pronVilken = table { + ASg (Utr Masc) => "hvilken" ; --- cannot reduce patter _ in Rules + ASg (Utr NoMasc) => "hvilken" ; + ASg Neutr => "hvilket" ; + APl => "hvilke" + } ; + + pronSådan = table { + ASg (Utr _) => "sådan" ; + ASg Neutr => "sådant" ; + APl => "sådanne" + } ; + + pronNågon = table { + ASg (Utr _) => "noen" ; + ASg Neutr => "noe" ; + APl => "noen" + } ; + + specDefPhrase : Bool -> Species = \b -> + Def ; + + superlSpecies = Def ; + + artIndef = table {Utr Masc => "en" ; Utr NoMasc => "ei" ; Neutr => "et"} ; + + artDef : Bool => GenNum => Str = table { + True => table { + ASg (Utr _) => "den" ; + ASg Neutr => "det" ; -- det gamla huset + APl => variants {"de"} + } ; + False => table {_ => []} -- huset + } ; + + auxHar = "har" ; + auxHade = "hadde" ; + auxHa = "ha" ; + auxSka = "vil" ; + auxSkulle = "ville" ; + + infinAtt = "at" ; + + varjeDet : Determiner = mkDeterminerSg (detSgInvar "hver") IndefP ; + allaDet : Determiner = mkDeterminerPl "alle" IndefP ; + flestaDet : Determiner = mkDeterminerPl ["de fleste"] IndefP ; + + prepÄn = "enn" ; + negInte = "ikke" ; + + conjOm = "hvis" ; + + pronVars = "hvis" ; + pronVem = "hvem" ; + pronVems = "hvis" ; ---- ?? + pronVad = "hva" ; + +--- added with Nor + + conjGender : Gender -> Gender -> Gender = \m,n -> Neutr ; + ---- case of { + ---- _ => Neutr ----- bug in type check + ---- } ; + + mkDeterminerSgGender3 : Str -> Str -> Str -> SpeciesP -> Determiner = \en,ei,ett -> + mkDeterminerSgGender (table {Utr Masc => en ; Utr NoMasc => ei ; Neutr => ett}) ; + +} diff --git a/lib/resource/norwegian/TestResourceNor.gf b/lib/resource/norwegian/TestResourceNor.gf new file mode 100644 index 000000000..bbc688e48 --- /dev/null +++ b/lib/resource/norwegian/TestResourceNor.gf @@ -0,0 +1,49 @@ +--# -path=.:../scandinavian:../abstract:../../prelude + +concrete TestResourceNor of TestResource = RulesNor, StructuralNor ** open MorphoNor, SyntaxNor in { + +flags startcat=Phr ; lexer=text ; unlexer=text ; + +-- a random sample from the lexicon + +lin + Big = mkAdjective "stor" "stort" "store" "større" "størst" ; + Small = mkAdjective "liten" "litet" "små" "mindre" "minst" ; ---- ? + Old = mkAdjective "gammel" "gammelt" "gamle" "eldre" "eldst" ; + Young = mkAdjective "ung" "ungt" "unge" "yngre" "yngst" ; + American = extAdjective (aAbstrakt "amerikansk") ; + Finnish = extAdjective (aAbstrakt "finsk") ; + Happy = aAbstrakt "heldig" ; + Married = extAdjective (aAbstrakt "gift") ** {s2 = "med"} ; + Man = extCommNoun (mkSubstantive "mann" "mannen" "menn" "mennen" ** {h1 = masc}) ; + Bar = extCommNoun (nBil "bar") ; ---- ? + Bottle = extCommNoun (nUke "flaske") ; + Woman = extCommNoun (nUke "kvinne") ; + Car = extCommNoun (nBil "bil") ; + House = extCommNoun (nHus "hus") ; + Light = extCommNoun (nHus "lys") ; + Wine = extCommNoun (nHus "vin") ; ---- ? + Walk = mkVerb "gå" "går" "gås" "gikk" "gått" "gå" ** {s1 = []} ; + Run = mkVerb "springe" "springer" "springes" "sprang" "sprunget" "spring" ** {s1 = []} ; + Drink = extTransVerb (mkVerb "drikke" "drikker" "drikkes" "drakk" "drukket" "drikk" ** {s1 = []}) [] ; + Love = extTransVerb (vNopart (vHusk "elsk")) [] ; + Send = extTransVerb (vNopart (vSpis "send")) [] ; ---- ? + Wait = extTransVerb (vNopart (vSpis "vent")) "på" ; + Give = extTransVerb (vNopart (mkVerb "gi" "gir" "gives" "gav" "givet" "gi")) [] ** {s3 = "til"} ; ---- ? + Prefer = extTransVerb (vNopart (vSpis "foretrekk")) [] ** {s3 = "for"} ; + + Say = vNopart (mkVerb "si" "sier" "sies" "sagde" "sagt" "sig") ; ---- ? + Prove = vNopart (vSpis "bevis") ; + SwitchOn = mkDirectVerb (vHusk "lukk" ** {s1 = "opp"}) ; + SwitchOff = mkDirectVerb (vHusk "slukk" ** {s1 = []}) ; + + Mother = mkFun (extCommNoun (mkSubstantive "mor" "moderen" "mødre" "mødrene" ** {h1 = fem})) "til" ; ---- ? + Uncle = mkFun (extCommNoun (mkSubstantive "onkel" "onkelen" "onkler" "onklene" ** {h1 = masc})) "til" ; ---- ? + Connection = mkFun (extCommNoun (nUke "forbindelse")) "fra" ** {s3 = "til"} ; + + Always = advPre "altid" ; + Well = advPost "godt" ; + + John = mkProperName "Johan" (NUtr Masc) ; + Mary = mkProperName "Maria" (NUtr NoMasc) ; +} ; diff --git a/lib/resource/norwegian/TypesNor.gf b/lib/resource/norwegian/TypesNor.gf new file mode 100644 index 000000000..9a7c551b2 --- /dev/null +++ b/lib/resource/norwegian/TypesNor.gf @@ -0,0 +1,38 @@ +--1 Norwegian Word Classes and Morphological Parameters +-- +-- This is a resource module for Italian morphology, defining the +-- morphological parameters and word classes of Italian. +-- The morphology is so far only +-- complete w.r.t. the syntax part of the resource grammar. +-- It does not include those parameters that are not needed for +-- analysing individual words: such parameters are defined in syntax modules. + +instance TypesNor of TypesScand = { + +param + Gender = Utr Sex | Neutr ; + NounGender = NUtr Sex | NNeutr ; + +oper + utrum : Gender = Utr Masc ; --- where it doesn't matter + neutrum : Gender = Neutr ; + +oper + genNoun = \s -> case s of {NUtr x => Utr x ; NNeutr => Neutr} ; + sexNoun _ = NoMasc ; + gen2nounGen = \s -> case s of {Utr x => NUtr x ; Neutr => NNeutr} ; + +param + AdjFormPos = Strong GenNum | Weak ; + + VFin = + Pres Mode Voice + | Pret Mode Voice + | Imper ; --- no passive + + VInf = + Inf Voice + | Supin Voice + | PtPret Case ; ---- number and gender + +}