diff options
| author | aarne <unknown> | 2003-09-22 13:16:55 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2003-09-22 13:16:55 +0000 |
| commit | b1402e8bd6a68a891b00a214d6cf184d66defe19 (patch) | |
| tree | 90372ac4e53dce91cf949dbf8e93be06f1d9e8bd /grammars/resource/swedish | |
Founding the newly structured GF2.0 cvs archive.
Diffstat (limited to 'grammars/resource/swedish')
| -rw-r--r-- | grammars/resource/swedish/Morpho.gf | 1039 | ||||
| -rw-r--r-- | grammars/resource/swedish/ResSwe.gf | 196 | ||||
| -rw-r--r-- | grammars/resource/swedish/Svenska.gf | 1 | ||||
| -rw-r--r-- | grammars/resource/swedish/Syntax.gf | 1000 | ||||
| -rw-r--r-- | grammars/resource/swedish/TestSwe.gf | 35 | ||||
| -rw-r--r-- | grammars/resource/swedish/Types.gf | 150 |
6 files changed, 2421 insertions, 0 deletions
diff --git a/grammars/resource/swedish/Morpho.gf b/grammars/resource/swedish/Morpho.gf new file mode 100644 index 000000000..d7b2c66fa --- /dev/null +++ b/grammars/resource/swedish/Morpho.gf @@ -0,0 +1,1039 @@ +--1 A Simple Swedish 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 Morpho = Types ** open Prelude in { + +-- The indefinite and definite article +oper + artIndef = table {Utr => "en" ; Neutr => "ett"} ; + + artDef : Bool => GenNum => Str = table { + True => table { + ASg Utr => "den" ; + ASg Neutr => "det" ; -- det gamla huset + APl => variants {"de" ; "dom"} + } ; + False => table {_ => []} -- huset + } ; + +-- A simplified verb category: present tense only. +oper + verbVara = {s = table {Infinit => "vara" ; Indicat => "är" ; Imperat => "var"}} ; + verbHava = {s = table {Infinit => "ha" ; Indicat => "har" ; Imperat => "ha"}} ; + +-- Prepositions are just strings. + Preposition = Str ; + +-- Relative pronouns have a special case system. $RPrep$ is the form used +-- after a preposition (e.g. "det hus i vilket jag bor"). +param + RelCase = RNom | RAcc | RGen | RPrep ; + +oper + relPronForms : RelCase => GenNum => Str = table { + RNom => \\_ => "som" ; + RAcc => \\_ => variants {"som" ; []} ; + RGen => \\_ => "vars" ; + RPrep => pronVilken + } ; + + pronVilken = table { + ASg Utr => "vilken" ; + ASg Neutr => "vilket" ; + APl => "vilka" + } ; + + pronSådan = table { + ASg Utr => "sådan" ; + ASg Neutr => "sådant" ; + APl => "sådana" + } ; + +-- What follows are machine-generated inflection paradigms from functional +-- morphology. Hence they are low-level paradigms, without any +-- abstractions or generalizations: the Haskell code is better in these respects. +-- +-- The variable names are selected in such a way that the paradigms can be read +-- as inflection tables of certain words. + +oper sApa : Str -> Subst = \ap -> + {s = table { + SF Sg Indef Nom => ap + "a" ; + SF Sg Indef Gen => ap + "as" ; + SF Sg Def Nom => ap + "an" ; + SF Sg Def Gen => ap + "ans" ; + SF Pl Indef Nom => ap + "or" ; + SF Pl Indef Gen => ap + "ors" ; + SF Pl Def Nom => ap + "orna" ; + SF Pl Def Gen => ap + "ornas" + } ; + h1 = Utr + } ; + +oper sBil : Str -> Subst = \bil -> + {s = table { + SF Sg Indef Nom => bil ; + SF Sg Indef Gen => bil + "s" ; + SF Sg Def Nom => bil + "en" ; + SF Sg Def Gen => bil + "ens" ; + SF Pl Indef Nom => bil + "ar" ; + SF Pl Indef Gen => bil + "ars" ; + SF Pl Def Nom => bil + "arna" ; + SF Pl Def Gen => bil + "arnas" + } ; + h1 = Utr + } ; + +oper sPojke : Str -> Subst = \pojk -> + {s = table { + SF Sg Indef Nom => pojk + "e" ; + SF Sg Indef Gen => pojk + "es" ; + SF Sg Def Nom => pojk + "en" ; + SF Sg Def Gen => pojk + "ens" ; + SF Pl Indef Nom => pojk + "ar" ; + SF Pl Indef Gen => pojk + "ars" ; + SF Pl Def Nom => pojk + "arna" ; + SF Pl Def Gen => pojk + "arnas" + } ; + h1 = Utr + } ; + +oper sNyckel : Str -> Subst = \nyck -> + {s = table { + SF Sg Indef Nom => nyck + "el" ; + SF Sg Indef Gen => nyck + "els" ; + SF Sg Def Nom => nyck + "eln" ; + SF Sg Def Gen => nyck + "elns" ; + SF Pl Indef Nom => nyck + "lar" ; + SF Pl Indef Gen => nyck + "lars" ; + SF Pl Def Nom => nyck + "larna" ; + SF Pl Def Gen => nyck + "larnas" + } ; + h1 = Utr + } ; + +oper sKam : Str -> Subst = \kam -> + {s = table { + SF Sg Indef Nom => kam ; + SF Sg Indef Gen => kam + "s" ; + SF Sg Def Nom => kam + "men" ; + SF Sg Def Gen => kam + "mens" ; + SF Pl Indef Nom => kam + "mar" ; + SF Pl Indef Gen => kam + "mars" ; + SF Pl Def Nom => kam + "marna" ; + SF Pl Def Gen => kam + "marnas" + } ; + h1 = Utr + } ; + +oper sSak : Str -> Subst = \sak -> + {s = table { + SF Sg Indef Nom => sak ; + SF Sg Indef Gen => sak + "s" ; + SF Sg Def Nom => sak + "en" ; + SF Sg Def Gen => sak + "ens" ; + SF Pl Indef Nom => sak + "er" ; + SF Pl Indef Gen => sak + "ers" ; + SF Pl Def Nom => sak + "erna" ; + SF Pl Def Gen => sak + "ernas" + } ; + h1 = Utr + } ; + +oper sNivå : Str -> Subst = \nivå -> + {s = table { + SF Sg Indef Nom => nivå ; + SF Sg Indef Gen => nivå + "s" ; + SF Sg Def Nom => nivå + "n" ; + SF Sg Def Gen => nivå + "ns" ; + SF Pl Indef Nom => nivå + "er" ; + SF Pl Indef Gen => nivå + "ers" ; + SF Pl Def Nom => nivå + "erna" ; + SF Pl Def Gen => nivå + "ernas" + } ; + h1 = Utr + } ; + +oper sParti : Str -> Subst = \parti -> + {s = table { + SF Sg Indef Nom => parti ; + SF Sg Indef Gen => parti + "s" ; + SF Sg Def Nom => parti + "et" ; + SF Sg Def Gen => parti + "ets" ; + SF Pl Indef Nom => parti + "er" ; + SF Pl Indef Gen => parti + "ers" ; + SF Pl Def Nom => parti + "erna" ; + SF Pl Def Gen => parti + "ernas" + } ; + h1 = Neutr + } ; + +oper sMuseum : Str -> Subst = \muse -> + {s = table { + SF Sg Indef Nom => muse + "um" ; + SF Sg Indef Gen => muse + "ums" ; + SF Sg Def Nom => muse + "et" ; + SF Sg Def Gen => muse + "ets" ; + SF Pl Indef Nom => muse + "er" ; + SF Pl Indef Gen => muse + "ers" ; + SF Pl Def Nom => muse + "erna" ; + SF Pl Def Gen => muse + "ernas" + } ; + h1 = Neutr + } ; + +oper sRike : Str -> Subst = \rike -> + {s = table { + SF Sg Indef Nom => rike ; + SF Sg Indef Gen => rike + "s" ; + SF Sg Def Nom => rike + "t" ; + SF Sg Def Gen => rike + "ts" ; + SF Pl Indef Nom => rike + "n" ; + SF Pl Indef Gen => rike + "ns" ; + SF Pl Def Nom => rike + "na" ; + SF Pl Def Gen => rike + "nas" + } ; + h1 = Neutr + } ; + +oper sLik : Str -> Subst = \lik -> + {s = table { + SF Sg Indef Nom => lik ; + SF Sg Indef Gen => lik + "s" ; + SF Sg Def Nom => lik + "et" ; + SF Sg Def Gen => lik + "ets" ; + SF Pl Indef Nom => lik ; + SF Pl Indef Gen => lik + "s" ; + SF Pl Def Nom => lik + "en" ; + SF Pl Def Gen => lik + "ens" + } ; + h1 = Neutr + } ; + +oper sRum : Str -> Subst = \rum -> + {s = table { + SF Sg Indef Nom => rum ; + SF Sg Indef Gen => rum + "s" ; + SF Sg Def Nom => rum + "met" ; + SF Sg Def Gen => rum + "mets" ; + SF Pl Indef Nom => rum ; + SF Pl Indef Gen => rum + "s" ; + SF Pl Def Nom => rum + "men" ; + SF Pl Def Gen => rum + "mens" + } ; + h1 = Neutr + } ; + +oper sHus : Str -> Subst = \hus -> + {s = table { + SF Sg Indef Nom => hus ; + SF Sg Indef Gen => hus ; + SF Sg Def Nom => hus + "et" ; + SF Sg Def Gen => hus + "ets" ; + SF Pl Indef Nom => hus ; + SF Pl Indef Gen => hus ; + SF Pl Def Nom => hus + "en" ; + SF Pl Def Gen => hus + "ens" + } ; + h1 = Neutr + } ; + +oper sPapper : Str -> Subst = \papp -> + {s = table { + SF Sg Indef Nom => papp + "er" ; + SF Sg Indef Gen => papp + "ers" ; + SF Sg Def Nom => papp + "ret" ; + SF Sg Def Gen => papp + "rets" ; + SF Pl Indef Nom => papp + "er" ; + SF Pl Indef Gen => papp + "ers" ; + SF Pl Def Nom => papp + "ren" ; + SF Pl Def Gen => papp + "rens" + } ; + h1 = Neutr + } ; + +oper sNummer : Str -> Subst = \num -> + {s = table { + SF Sg Indef Nom => num + "mer" ; + SF Sg Indef Gen => num + "mers" ; + SF Sg Def Nom => num + "ret" ; + SF Sg Def Gen => num + "rets" ; + SF Pl Indef Nom => num + "mer" ; + SF Pl Indef Gen => num + "mers" ; + SF Pl Def Nom => num + "ren" ; + SF Pl Def Gen => num + "rens" + } ; + h1 = Neutr + } ; + +oper sKikare : Str -> Subst = \kikar -> + {s = table { + SF Sg Indef Nom => kikar + "e" ; + SF Sg Indef Gen => kikar + "es" ; + SF Sg Def Nom => kikar + "en" ; + SF Sg Def Gen => kikar + "ens" ; + SF Pl Indef Nom => kikar + "e" ; + SF Pl Indef Gen => kikar + "es" ; + SF Pl Def Nom => kikar + "na" ; + SF Pl Def Gen => kikar + "nas" + } ; + h1 = Utr + } ; + +oper sProgram : Str -> Subst = \program -> + {s = table { + SF Sg Indef Nom => program ; + SF Sg Indef Gen => program + "s" ; + SF Sg Def Nom => program + "met" ; + SF Sg Def Gen => program + "mets" ; + SF Pl Indef Nom => program ; + SF Pl Indef Gen => program + "s" ; + SF Pl Def Nom => program + "men" ; + SF Pl Def Gen => program + "mens" + } ; + h1 = Neutr + } ; + +oper aFin : Str -> Adj = \fin -> + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => fin ; + AF (Posit (Strong (ASg Utr))) Gen => fin + "s" ; + AF (Posit (Strong (ASg Neutr))) Nom => fin + "t" ; + AF (Posit (Strong (ASg Neutr))) Gen => fin + "ts" ; + AF (Posit (Strong APl)) Nom => fin + "a" ; + AF (Posit (Strong APl)) Gen => fin + "as" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => fin + "a" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => fin + "as" ; + AF (Posit (Weak (AxSg Masc))) Nom => fin + "e" ; + AF (Posit (Weak (AxSg Masc))) Gen => fin + "es" ; + AF (Posit (Weak AxPl)) Nom => fin + "a" ; + AF (Posit (Weak AxPl)) Gen => fin + "as" ; + AF Compar Nom => fin + "are" ; + AF Compar Gen => fin + "ares" ; + AF (Super SupStrong) Nom => fin + "ast" ; + AF (Super SupStrong) Gen => fin + "asts" ; + AF (Super SupWeak) Nom => fin + "aste" ; + AF (Super SupWeak) Gen => fin + "astes" + } + } ; + +oper aFager : Str -> Adj = \fag -> + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => fag + "er" ; + AF (Posit (Strong (ASg Utr))) Gen => fag + "ers" ; + AF (Posit (Strong (ASg Neutr))) Nom => fag + "ert" ; + AF (Posit (Strong (ASg Neutr))) Gen => fag + "erts" ; + AF (Posit (Strong APl)) Nom => fag + "era" ; + AF (Posit (Strong APl)) Gen => fag + "eras" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => fag + "era" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => fag + "eras" ; + AF (Posit (Weak (AxSg Masc))) Nom => fag + "ere" ; + AF (Posit (Weak (AxSg Masc))) Gen => fag + "eres" ; + AF (Posit (Weak AxPl)) Nom => fag + "era" ; + AF (Posit (Weak AxPl)) Gen => fag + "eras" ; + AF Compar Nom => fag + "erare" ; + AF Compar Gen => fag + "erares" ; + AF (Super SupStrong) Nom => fag + "erast" ; + AF (Super SupStrong) Gen => fag + "erasts" ; + AF (Super SupWeak) Nom => fag + "eraste" ; + AF (Super SupWeak) Gen => fag + "erastes" + } + } ; + +oper aGrund : Str -> Adj = \grun -> + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => grun + "d" ; + AF (Posit (Strong (ASg Utr))) Gen => grun + "ds" ; + AF (Posit (Strong (ASg Neutr))) Nom => grun + "t" ; + AF (Posit (Strong (ASg Neutr))) Gen => grun + "ts" ; + AF (Posit (Strong APl)) Nom => grun + "da" ; + AF (Posit (Strong APl)) Gen => grun + "das" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => grun + "da" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => grun + "das" ; + AF (Posit (Weak (AxSg Masc))) Nom => grun + "de" ; + AF (Posit (Weak (AxSg Masc))) Gen => grun + "des" ; + AF (Posit (Weak AxPl)) Nom => grun + "da" ; + AF (Posit (Weak AxPl)) Gen => grun + "das" ; + AF Compar Nom => grun + "dare" ; + AF Compar Gen => grun + "dares" ; + AF (Super SupStrong) Nom => grun + "dast" ; + AF (Super SupStrong) Gen => grun + "dasts" ; + AF (Super SupWeak) Nom => grun + "daste" ; + AF (Super SupWeak) Gen => grun + "dastes" + } + } ; + +oper aVid : Str -> Adj = \vi -> + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => vi + "d" ; + AF (Posit (Strong (ASg Utr))) Gen => vi + "ds" ; + AF (Posit (Strong (ASg Neutr))) Nom => vi + "tt" ; + AF (Posit (Strong (ASg Neutr))) Gen => vi + "tts" ; + AF (Posit (Strong APl)) Nom => vi + "da" ; + AF (Posit (Strong APl)) Gen => vi + "das" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => vi + "da" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => vi + "das" ; + AF (Posit (Weak (AxSg Masc))) Nom => vi + "de" ; + AF (Posit (Weak (AxSg Masc))) Gen => vi + "des" ; + AF (Posit (Weak AxPl)) Nom => vi + "da" ; + AF (Posit (Weak AxPl)) Gen => vi + "das" ; + AF Compar Nom => vi + "dare" ; + AF Compar Gen => vi + "dares" ; + AF (Super SupStrong) Nom => vi + "dast" ; + AF (Super SupStrong) Gen => vi + "dasts" ; + AF (Super SupWeak) Nom => vi + "daste" ; + AF (Super SupWeak) Gen => vi + "dastes" + } + } ; + +oper aVaken : Str -> Adj = \vak -> + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => vak + "en" ; + AF (Posit (Strong (ASg Utr))) Gen => vak + "ens" ; + AF (Posit (Strong (ASg Neutr))) Nom => vak + "et" ; + AF (Posit (Strong (ASg Neutr))) Gen => vak + "ets" ; + AF (Posit (Strong APl)) Nom => vak + "na" ; + AF (Posit (Strong APl)) Gen => vak + "nas" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => vak + "na" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => vak + "nas" ; + AF (Posit (Weak (AxSg Masc))) Nom => vak + "ne" ; + AF (Posit (Weak (AxSg Masc))) Gen => vak + "nes" ; + AF (Posit (Weak AxPl)) Nom => vak + "na" ; + AF (Posit (Weak AxPl)) Gen => vak + "nas" ; + AF Compar Nom => vak + "nare" ; + AF Compar Gen => vak + "nares" ; + AF (Super SupStrong) Nom => vak + "nast" ; + AF (Super SupStrong) Gen => vak + "nasts" ; + AF (Super SupWeak) Nom => vak + "naste" ; + AF (Super SupWeak) Gen => vak + "nastes" + } + } ; + +oper aKorkad : Str -> Adj = \korka -> + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => korka + "d" ; + AF (Posit (Strong (ASg Utr))) Gen => korka + "ds" ; + AF (Posit (Strong (ASg Neutr))) Nom => korka + "t" ; + AF (Posit (Strong (ASg Neutr))) Gen => korka + "ts" ; + AF (Posit (Strong APl)) Nom => korka + "de" ; + AF (Posit (Strong APl)) Gen => korka + "des" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => korka + "de" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => korka + "des" ; + AF (Posit (Weak (AxSg Masc))) Nom => korka + "de" ; + AF (Posit (Weak (AxSg Masc))) Gen => korka + "des" ; + AF (Posit (Weak AxPl)) Nom => korka + "de" ; + AF (Posit (Weak AxPl)) Gen => korka + "des" ; + AF Compar Nom => variants {} ; + AF Compar Gen => variants {} ; + AF (Super SupStrong) Nom => variants {} ; + AF (Super SupStrong) Gen => variants {} ; + AF (Super SupWeak) Nom => variants {} ; + AF (Super SupWeak) Gen => variants {} + } + } ; + +oper aAbstrakt : Str -> Adj = \abstrakt -> + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => abstrakt ; + AF (Posit (Strong (ASg Utr))) Gen => abstrakt + "s" ; + AF (Posit (Strong (ASg Neutr))) Nom => abstrakt ; + AF (Posit (Strong (ASg Neutr))) Gen => abstrakt + "s" ; + AF (Posit (Strong APl)) Nom => abstrakt + "a" ; + AF (Posit (Strong APl)) Gen => abstrakt + "as" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => abstrakt + "a" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => abstrakt + "as" ; + AF (Posit (Weak (AxSg Masc))) Nom => abstrakt + "e" ; + AF (Posit (Weak (AxSg Masc))) Gen => abstrakt + "es" ; + AF (Posit (Weak AxPl)) Nom => abstrakt + "a" ; + AF (Posit (Weak AxPl)) Gen => abstrakt + "as" ; + AF Compar Nom => abstrakt + "are" ; + AF Compar Gen => abstrakt + "ares" ; + AF (Super SupStrong) Nom => abstrakt + "ast" ; + AF (Super SupStrong) Gen => abstrakt + "asts" ; + AF (Super SupWeak) Nom => abstrakt + "aste" ; + AF (Super SupWeak) Gen => abstrakt + "astes" + } + } ; + +oper vTala : Str -> Verbum = \tal -> + {s = table { + VF (Pres Ind Act) => tal + "ar" ; + VF (Pres Ind Pass) => tal + "as" ; + VF (Pres Cnj Act) => tal + "e" ; + VF (Pres Cnj Pass) => tal + "es" ; + VF (Pret Ind Act) => tal + "ade" ; + VF (Pret Ind Pass) => tal + "ades" ; + VF (Pret Cnj Act) => tal + "ade" ; + VF (Pret Cnj Pass) => tal + "ades" ; + VF Imper => tal + "a" ; + VI (Inf Act) => tal + "a" ; + VI (Inf Pass) => tal + "as" ; + VI (Supin Act) => tal + "at" ; + VI (Supin Pass) => tal + "ats" ; + VI (PtPres Nom) => tal + "ande" ; + VI (PtPres Gen) => tal + "andes" ; + VI (PtPret (Strong (ASg Utr)) Nom) => tal + "ad" ; + VI (PtPret (Strong (ASg Utr)) Gen) => tal + "ads" ; + VI (PtPret (Strong (ASg Neutr)) Nom) => tal + "at" ; + VI (PtPret (Strong (ASg Neutr)) Gen) => tal + "ats" ; + VI (PtPret (Strong APl) Nom) => tal + "ade" ; + VI (PtPret (Strong APl) Gen) => tal + "ades" ; + VI (PtPret (Weak (AxSg NoMasc)) Nom) => tal + "ade" ; + VI (PtPret (Weak (AxSg NoMasc)) Gen) => tal + "ades" ; + VI (PtPret (Weak (AxSg Masc)) Nom) => tal + "ade" ; + VI (PtPret (Weak (AxSg Masc)) Gen) => tal + "ades" ; + VI (PtPret (Weak AxPl) Nom) => tal + "ade" ; + VI (PtPret (Weak AxPl) Gen) => tal + "ades" + } + } ; + +oper vLeka : Str -> Verbum = \lek -> + {s = table { + VF (Pres Ind Act) => lek + "er" ; + VF (Pres Ind Pass) => variants {lek + "s" ; lek + "es"} ; + VF (Pres Cnj Act) => lek + "e" ; + VF (Pres Cnj Pass) => lek + "es" ; + VF (Pret Ind Act) => lek + "te" ; + VF (Pret Ind Pass) => lek + "tes" ; + VF (Pret Cnj Act) => lek + "te" ; + VF (Pret Cnj Pass) => lek + "tes" ; + VF Imper => lek ; + VI (Inf Act) => lek + "a" ; + VI (Inf Pass) => lek + "as" ; + VI (Supin Act) => lek + "t" ; + VI (Supin Pass) => lek + "ts" ; + VI (PtPres Nom) => lek + "ande" ; + VI (PtPres Gen) => lek + "andes" ; + VI (PtPret (Strong (ASg Utr)) Nom) => lek + "t" ; + VI (PtPret (Strong (ASg Utr)) Gen) => lek + "ts" ; + VI (PtPret (Strong (ASg Neutr)) Nom) => lek + "t" ; + VI (PtPret (Strong (ASg Neutr)) Gen) => lek + "ts" ; + VI (PtPret (Strong APl) Nom) => lek + "ta" ; + VI (PtPret (Strong APl) Gen) => lek + "tas" ; + VI (PtPret (Weak (AxSg NoMasc)) Nom) => lek + "ta" ; + VI (PtPret (Weak (AxSg NoMasc)) Gen) => lek + "tas" ; + VI (PtPret (Weak (AxSg Masc)) Nom) => lek + "te" ; + VI (PtPret (Weak (AxSg Masc)) Gen) => lek + "tes" ; + VI (PtPret (Weak AxPl) Nom) => lek + "ta" ; + VI (PtPret (Weak AxPl) Gen) => lek + "tas" + } + } ; + +oper vTyda : Str -> Verbum = \ty -> + {s = table { + VF (Pres Ind Act) => ty + "der" ; + VF (Pres Ind Pass) => variants {ty + "ds" ; ty + "des"} ; + VF (Pres Cnj Act) => ty + "de" ; + VF (Pres Cnj Pass) => ty + "des" ; + VF (Pret Ind Act) => ty + "dde" ; + VF (Pret Ind Pass) => ty + "ddes" ; + VF (Pret Cnj Act) => ty + "dde" ; + VF (Pret Cnj Pass) => ty + "ddes" ; + VF Imper => ty + "d" ; + VI (Inf Act) => ty + "da" ; + VI (Inf Pass) => ty + "das" ; + VI (Supin Act) => ty + "tt" ; + VI (Supin Pass) => ty + "tts" ; + VI (PtPres Nom) => ty + "dande" ; + VI (PtPres Gen) => ty + "dandes" ; + VI (PtPret (Strong (ASg Utr)) Nom) => ty + "dd" ; + VI (PtPret (Strong (ASg Utr)) Gen) => ty + "dds" ; + VI (PtPret (Strong (ASg Neutr)) Nom) => ty + "tt" ; + VI (PtPret (Strong (ASg Neutr)) Gen) => ty + "tts" ; + VI (PtPret (Strong APl) Nom) => ty + "dda" ; + VI (PtPret (Strong APl) Gen) => ty + "ddas" ; + VI (PtPret (Weak (AxSg NoMasc)) Nom) => ty + "dda" ; + VI (PtPret (Weak (AxSg NoMasc)) Gen) => ty + "ddas" ; + VI (PtPret (Weak (AxSg Masc)) Nom) => ty + "dde" ; + VI (PtPret (Weak (AxSg Masc)) Gen) => ty + "ddes" ; + VI (PtPret (Weak AxPl) Nom) => ty + "dda" ; + VI (PtPret (Weak AxPl) Gen) => ty + "ddas" + } + } ; + +oper vVända : Str -> Verbum = \vän -> + {s = table { + VF (Pres Ind Act) => vän + "der" ; + VF (Pres Ind Pass) => variants {vän + "ds" ; vän + "des"} ; + VF (Pres Cnj Act) => vän + "de" ; + VF (Pres Cnj Pass) => vän + "des" ; + VF (Pret Ind Act) => vän + "de" ; + VF (Pret Ind Pass) => vän + "des" ; + VF (Pret Cnj Act) => vän + "de" ; + VF (Pret Cnj Pass) => vän + "des" ; + VF Imper => vän + "d" ; + VI (Inf Act) => vän + "da" ; + VI (Inf Pass) => vän + "das" ; + VI (Supin Act) => vän + "t" ; + VI (Supin Pass) => vän + "ts" ; + VI (PtPres Nom) => vän + "dande" ; + VI (PtPres Gen) => vän + "dandes" ; + VI (PtPret (Strong (ASg Utr)) Nom) => vän + "d" ; + VI (PtPret (Strong (ASg Utr)) Gen) => vän + "ds" ; + VI (PtPret (Strong (ASg Neutr)) Nom) => vän + "t" ; + VI (PtPret (Strong (ASg Neutr)) Gen) => vän + "ts" ; + VI (PtPret (Strong APl) Nom) => vän + "da" ; + VI (PtPret (Strong APl) Gen) => vän + "das" ; + VI (PtPret (Weak (AxSg NoMasc)) Nom) => vän + "da" ; + VI (PtPret (Weak (AxSg NoMasc)) Gen) => vän + "das" ; + VI (PtPret (Weak (AxSg Masc)) Nom) => vän + "de" ; + VI (PtPret (Weak (AxSg Masc)) Gen) => vän + "des" ; + VI (PtPret (Weak AxPl) Nom) => vän + "da" ; + VI (PtPret (Weak AxPl) Gen) => vän + "das" + } + } ; + +oper vByta : Str -> Verbum = \by -> + {s = table { + VF (Pres Ind Act) => by + "ter" ; + VF (Pres Ind Pass) => variants {by + "ts" ; by + "tes"} ; + VF (Pres Cnj Act) => by + "te" ; + VF (Pres Cnj Pass) => by + "tes" ; + VF (Pret Ind Act) => by + "tte" ; + VF (Pret Ind Pass) => by + "ttes" ; + VF (Pret Cnj Act) => by + "tte" ; + VF (Pret Cnj Pass) => by + "ttes" ; + VF Imper => by + "t" ; + VI (Inf Act) => by + "ta" ; + VI (Inf Pass) => by + "tas" ; + VI (Supin Act) => by + "tt" ; + VI (Supin Pass) => by + "tts" ; + VI (PtPres Nom) => by + "tande" ; + VI (PtPres Gen) => by + "tandes" ; + VI (PtPret (Strong (ASg Utr)) Nom) => by + "tt" ; + VI (PtPret (Strong (ASg Utr)) Gen) => by + "tts" ; + VI (PtPret (Strong (ASg Neutr)) Nom) => by + "tt" ; + VI (PtPret (Strong (ASg Neutr)) Gen) => by + "tts" ; + VI (PtPret (Strong APl) Nom) => by + "tta" ; + VI (PtPret (Strong APl) Gen) => by + "ttas" ; + VI (PtPret (Weak (AxSg NoMasc)) Nom) => by + "tta" ; + VI (PtPret (Weak (AxSg NoMasc)) Gen) => by + "ttas" ; + VI (PtPret (Weak (AxSg Masc)) Nom) => by + "tte" ; + VI (PtPret (Weak (AxSg Masc)) Gen) => by + "ttes" ; + VI (PtPret (Weak AxPl) Nom) => by + "tta" ; + VI (PtPret (Weak AxPl) Gen) => by + "ttas" + } + } ; + +oper vGömma : Str -> Verbum = \göm -> + {s = table { + VF (Pres Ind Act) => göm + "mer" ; + VF (Pres Ind Pass) => variants {göm + "s" ; göm + "mes"} ; + VF (Pres Cnj Act) => göm + "me" ; + VF (Pres Cnj Pass) => göm + "mes" ; + VF (Pret Ind Act) => göm + "de" ; + VF (Pret Ind Pass) => göm + "des" ; + VF (Pret Cnj Act) => göm + "de" ; + VF (Pret Cnj Pass) => göm + "des" ; + VF Imper => göm ; + VI (Inf Act) => göm + "ma" ; + VI (Inf Pass) => göm + "mas" ; + VI (Supin Act) => göm + "t" ; + VI (Supin Pass) => göm + "ts" ; + VI (PtPres Nom) => göm + "mande" ; + VI (PtPres Gen) => göm + "mandes" ; + VI (PtPret (Strong (ASg Utr)) Nom) => göm + "d" ; + VI (PtPret (Strong (ASg Utr)) Gen) => göm + "ds" ; + VI (PtPret (Strong (ASg Neutr)) Nom) => göm + "t" ; + VI (PtPret (Strong (ASg Neutr)) Gen) => göm + "ts" ; + VI (PtPret (Strong APl) Nom) => göm + "da" ; + VI (PtPret (Strong APl) Gen) => göm + "das" ; + VI (PtPret (Weak (AxSg NoMasc)) Nom) => göm + "da" ; + VI (PtPret (Weak (AxSg NoMasc)) Gen) => göm + "das" ; + VI (PtPret (Weak (AxSg Masc)) Nom) => göm + "de" ; + VI (PtPret (Weak (AxSg Masc)) Gen) => göm + "des" ; + VI (PtPret (Weak AxPl) Nom) => göm + "da" ; + VI (PtPret (Weak AxPl) Gen) => göm + "das" + } + } ; + +oper vHyra : Str -> Verbum = \hyr -> + {s = table { + VF (Pres Ind Act) => hyr ; + VF (Pres Ind Pass) => variants {hyr + "s" ; hyr + "es"} ; + VF (Pres Cnj Act) => hyr + "e" ; + VF (Pres Cnj Pass) => hyr + "es" ; + VF (Pret Ind Act) => hyr + "de" ; + VF (Pret Ind Pass) => hyr + "des" ; + VF (Pret Cnj Act) => hyr + "de" ; + VF (Pret Cnj Pass) => hyr + "des" ; + VF Imper => hyr ; + VI (Inf Act) => hyr + "a" ; + VI (Inf Pass) => hyr + "as" ; + VI (Supin Act) => hyr + "t" ; + VI (Supin Pass) => hyr + "ts" ; + VI (PtPres Nom) => hyr + "ande" ; + VI (PtPres Gen) => hyr + "andes" ; + VI (PtPret (Strong (ASg Utr)) Nom) => hyr + "d" ; + VI (PtPret (Strong (ASg Utr)) Gen) => hyr + "ds" ; + VI (PtPret (Strong (ASg Neutr)) Nom) => hyr + "t" ; + VI (PtPret (Strong (ASg Neutr)) Gen) => hyr + "ts" ; + VI (PtPret (Strong APl) Nom) => hyr + "da" ; + VI (PtPret (Strong APl) Gen) => hyr + "das" ; + VI (PtPret (Weak (AxSg NoMasc)) Nom) => hyr + "da" ; + VI (PtPret (Weak (AxSg NoMasc)) Gen) => hyr + "das" ; + VI (PtPret (Weak (AxSg Masc)) Nom) => hyr + "de" ; + VI (PtPret (Weak (AxSg Masc)) Gen) => hyr + "des" ; + VI (PtPret (Weak AxPl) Nom) => hyr + "da" ; + VI (PtPret (Weak AxPl) Gen) => hyr + "das" + } + } ; + +oper vTåla : Str -> Verbum = \tål -> + {s = table { + VF (Pres Ind Act) => tål ; + VF (Pres Ind Pass) => variants {tål + "s" ; tål + "es"} ; + VF (Pres Cnj Act) => tål + "e" ; + VF (Pres Cnj Pass) => tål + "es" ; + VF (Pret Ind Act) => tål + "de" ; + VF (Pret Ind Pass) => tål + "des" ; + VF (Pret Cnj Act) => tål + "de" ; + VF (Pret Cnj Pass) => tål + "des" ; + VF Imper => tål ; + VI (Inf Act) => tål + "a" ; + VI (Inf Pass) => tål + "as" ; + VI (Supin Act) => tål + "t" ; + VI (Supin Pass) => tål + "ts" ; + VI (PtPres Nom) => tål + "ande" ; + VI (PtPres Gen) => tål + "andes" ; + VI (PtPret (Strong (ASg Utr)) Nom) => tål + "d" ; + VI (PtPret (Strong (ASg Utr)) Gen) => tål + "ds" ; + VI (PtPret (Strong (ASg Neutr)) Nom) => tål + "t" ; + VI (PtPret (Strong (ASg Neutr)) Gen) => tål + "ts" ; + VI (PtPret (Strong APl) Nom) => tål + "da" ; + VI (PtPret (Strong APl) Gen) => tål + "das" ; + VI (PtPret (Weak (AxSg NoMasc)) Nom) => tål + "da" ; + VI (PtPret (Weak (AxSg NoMasc)) Gen) => tål + "das" ; + VI (PtPret (Weak (AxSg Masc)) Nom) => tål + "de" ; + VI (PtPret (Weak (AxSg Masc)) Gen) => tål + "des" ; + VI (PtPret (Weak AxPl) Nom) => tål + "da" ; + VI (PtPret (Weak AxPl) Gen) => tål + "das" + } + } ; + +oper vFinna : (_,_,_ : Str) -> Verbum = \finn, fann, funn -> + {s = table { + VF (Pres Ind Act) => finn + "er" ; + VF (Pres Ind Pass) => variants {finn + "s" ; finn + "es"} ; + VF (Pres Cnj Act) => finn + "e" ; + VF (Pres Cnj Pass) => finn + "es" ; + VF (Pret Ind Act) => fann ; + VF (Pret Ind Pass) => fann + "s" ; + VF (Pret Cnj Act) => funn + "e" ; + VF (Pret Cnj Pass) => funn + "es" ; + VF Imper => finn ; + VI (Inf Act) => finn + "a" ; + VI (Inf Pass) => finn + "as" ; + VI (Supin Act) => funn + "it" ; + VI (Supin Pass) => funn + "its" ; + VI (PtPres Nom) => finn + "ande" ; + VI (PtPres Gen) => finn + "andes" ; + VI (PtPret (Strong (ASg Utr)) Nom) => funn + "en" ; + VI (PtPret (Strong (ASg Utr)) Gen) => funn + "ens" ; + VI (PtPret (Strong (ASg Neutr)) Nom) => funn + "et" ; + VI (PtPret (Strong (ASg Neutr)) Gen) => funn + "ets" ; + VI (PtPret (Strong APl) Nom) => funn + "a" ; + VI (PtPret (Strong APl) Gen) => funn + "as" ; + VI (PtPret (Weak (AxSg NoMasc)) Nom) => funn + "a" ; + VI (PtPret (Weak (AxSg NoMasc)) Gen) => funn + "as" ; + VI (PtPret (Weak (AxSg Masc)) Nom) => funn + "e" ; + VI (PtPret (Weak (AxSg Masc)) Gen) => funn + "es" ; + VI (PtPret (Weak AxPl) Nom) => funn + "a" ; + VI (PtPret (Weak AxPl) Gen) => funn + "as" + } + } ; + +-- machine-generated exceptional inflection tables from rules.Swe.gf + +oper mor_1 : Subst = + {s = table { + SF Sg Indef Nom => variants {"mor" ; "moder"} ; + SF Sg Indef Gen => variants {"mors" ; "moders"} ; + SF Sg Def Nom => "modern" ; + SF Sg Def Gen => "moderns" ; + SF Pl Indef Nom => "mödrar" ; + SF Pl Indef Gen => "mödrars" ; + SF Pl Def Nom => "mödrarna" ; + SF Pl Def Gen => "mödrarnas" + } ; + h1 = Utr + } ; + +oper farbror_8 : Subst = + {s = table { + SF Sg Indef Nom => variants {"farbror" ; "farbroder"} ; + SF Sg Indef Gen => variants {"farbrors" ; "farbroders"} ; + SF Sg Def Nom => "farbrodern" ; + SF Sg Def Gen => "farbroderns" ; + SF Pl Indef Nom => "farbröder" ; + SF Pl Indef Gen => "farbröders" ; + SF Pl Def Nom => "farbröderna" ; + SF Pl Def Gen => "farbrödernas" + } ; + h1 = Utr + } ; + +oper gammal_16 : Adj = + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => "gammal" ; + AF (Posit (Strong (ASg Utr))) Gen => "gammals" ; + AF (Posit (Strong (ASg Neutr))) Nom => "gammalt" ; + AF (Posit (Strong (ASg Neutr))) Gen => "gammalts" ; + AF (Posit (Strong APl)) Nom => "gamla" ; + AF (Posit (Strong APl)) Gen => "gamlas" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => "gamla" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => "gamlas" ; + AF (Posit (Weak (AxSg Masc))) Nom => "gamle" ; + AF (Posit (Weak (AxSg Masc))) Gen => "gamles" ; + AF (Posit (Weak AxPl)) Nom => "gamla" ; + AF (Posit (Weak AxPl)) Gen => "gamlas" ; + AF Compar Nom => "äldre" ; + AF Compar Gen => "äldres" ; + AF (Super SupStrong) Nom => "äldst" ; + AF (Super SupStrong) Gen => "äldsts" ; + AF (Super SupWeak) Nom => "äldsta" ; + AF (Super SupWeak) Gen => "äldstas" + } + } ; + + +oper stor_25 : Adj = + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => "stor" ; + AF (Posit (Strong (ASg Utr))) Gen => "stors" ; + AF (Posit (Strong (ASg Neutr))) Nom => "stort" ; + AF (Posit (Strong (ASg Neutr))) Gen => "storts" ; + AF (Posit (Strong APl)) Nom => "stora" ; + AF (Posit (Strong APl)) Gen => "storas" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => "stora" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => "storas" ; + AF (Posit (Weak (AxSg Masc))) Nom => "store" ; + AF (Posit (Weak (AxSg Masc))) Gen => "stores" ; + AF (Posit (Weak AxPl)) Nom => "stora" ; + AF (Posit (Weak AxPl)) Gen => "storas" ; + AF Compar Nom => "större" ; + AF Compar Gen => "störres" ; + AF (Super SupStrong) Nom => "störst" ; + AF (Super SupStrong) Gen => "störsts" ; + AF (Super SupWeak) Nom => "största" ; + AF (Super SupWeak) Gen => "störstas" + } + } ; + +oper ung_29 : Adj = + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => "ung" ; + AF (Posit (Strong (ASg Utr))) Gen => "ungs" ; + AF (Posit (Strong (ASg Neutr))) Nom => "ungt" ; + AF (Posit (Strong (ASg Neutr))) Gen => "ungts" ; + AF (Posit (Strong APl)) Nom => "unga" ; + AF (Posit (Strong APl)) Gen => "ungas" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => "unga" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => "ungas" ; + AF (Posit (Weak (AxSg Masc))) Nom => "unge" ; + AF (Posit (Weak (AxSg Masc))) Gen => "unges" ; + AF (Posit (Weak AxPl)) Nom => "unga" ; + AF (Posit (Weak AxPl)) Gen => "ungas" ; + AF Compar Nom => "yngre" ; + AF Compar Gen => "yngres" ; + AF (Super SupStrong) Nom => "yngst" ; + AF (Super SupStrong) Gen => "yngsts" ; + AF (Super SupWeak) Nom => "yngsta" ; + AF (Super SupWeak) Gen => "yngstas" + } + } ; + + +oper jag_32 : ProPN = + {s = table { + PNom => "jag" ; + PAcc => "mig" ; + PGen (ASg Utr) => "min" ; + PGen (ASg Neutr) => "mitt" ; + PGen APl => "mina" + } ; + h1 = Utr ; + h2 = Sg ; + h3 = P1 + } ; + +oper du_33 : ProPN = + {s = table { + PNom => "du" ; + PAcc => "dig" ; + PGen (ASg Utr) => "din" ; + PGen (ASg Neutr) => "ditt" ; + PGen APl => "dina" + } ; + h1 = Utr ; + h2 = Sg ; + h3 = P2 + } ; + +oper han_34 : ProPN = + {s = table { + PNom => "han" ; + PAcc => "honom" ; + PGen (ASg Utr) => "hans" ; + PGen (ASg Neutr) => "hans" ; + PGen APl => "hans" + } ; + h1 = Utr ; + h2 = Sg ; + h3 = P3 + } ; + +oper hon_35 : ProPN = + {s = table { + PNom => "hon" ; + PAcc => "henne" ; + PGen (ASg Utr) => "hennes" ; + PGen (ASg Neutr) => "hennes" ; + PGen APl => "hennes" + } ; + h1 = Utr ; + 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åra" + } ; + h1 = Utr ; + h2 = Pl ; + h3 = P1 + } ; + +oper ni_37 : ProPN = + {s = table { + PNom => "ni" ; + PAcc => "er" ; + PGen (ASg Utr) => "er" ; + PGen (ASg Neutr) => "ert" ; + PGen APl => "era" + } ; + h1 = Utr ; + h2 = Pl ; + h3 = P2 + } ; + +oper de_38 : ProPN = + {s = table { + PNom => "de" ; + PAcc => "dem" ; + PGen (ASg Utr) => "deras" ; + PGen (ASg Neutr) => "deras" ; + PGen APl => "deras" + } ; + h1 = Utr ; + h2 = Pl ; + h3 = P3 + } ; + +oper den_39 : ProPN = + {s = table { + PNom => "den" ; + PAcc => "den" ; + PGen (ASg Utr) => "dess" ; + PGen (ASg Neutr) => "dess" ; + PGen APl => "dess" + } ; + h1 = Utr ; + h2 = Sg ; + h3 = P3 + } ; + +oper det_40 : ProPN = + {s = table { + PNom => "det" ; + PAcc => "det" ; + PGen (ASg Utr) => "dess" ; + PGen (ASg Neutr) => "dess" ; + PGen APl => "dess" + } ; + h1 = Neutr ; + h2 = Sg ; + h3 = P3 + } ; + +oper man_1144 : Subst = + {s = table { + SF Sg Indef Nom => "man" ; + SF Sg Indef Gen => "mans" ; + SF Sg Def Nom => "mannen" ; + SF Sg Def Gen => "mannens" ; + SF Pl Indef Nom => "män" ; + SF Pl Indef Gen => "mäns" ; + SF Pl Def Nom => "männen" ; + SF Pl Def Gen => "männens" + } ; + h1 = Utr + } ; + +oper liten_1146 : Adj = + {s = table { + AF (Posit (Strong (ASg Utr))) Nom => "liten" ; + AF (Posit (Strong (ASg Utr))) Gen => "litens" ; + AF (Posit (Strong (ASg Neutr))) Nom => "litet" ; + AF (Posit (Strong (ASg Neutr))) Gen => "litets" ; + AF (Posit (Strong APl)) Nom => "små" ; + AF (Posit (Strong APl)) Gen => "smås" ; + AF (Posit (Weak (AxSg NoMasc))) Nom => "lilla" ; + AF (Posit (Weak (AxSg NoMasc))) Gen => "lillas" ; + AF (Posit (Weak (AxSg Masc))) Nom => "lille" ; + AF (Posit (Weak (AxSg Masc))) Gen => "lilles" ; + AF (Posit (Weak AxPl)) Nom => "små" ; + AF (Posit (Weak AxPl)) Gen => "smås" ; + AF Compar Nom => "mindre" ; + AF Compar Gen => "mindres" ; + AF (Super SupStrong) Nom => "minst" ; + AF (Super SupStrong) Gen => "minsts" ; + AF (Super SupWeak) Nom => "minsta" ; + AF (Super SupWeak) Gen => "minstas" + } + } ; + +oper gå_1174 : Verbum = + {s = table { + VF (Pres Ind Act) => "går" ; + VF (Pres Ind Pass) => "gås" ; + VF (Pres Cnj Act) => "gå" ; + VF (Pres Cnj Pass) => "gås" ; + VF (Pret Ind Act) => "gick" ; + VF (Pret Ind Pass) => "gicks" ; + VF (Pret Cnj Act) => "ginge" ; + VF (Pret Cnj Pass) => "ginges" ; + VF Imper => "gå" ; + VI (Inf Act) => "gå" ; + VI (Inf Pass) => "gås" ; + VI (Supin Act) => "gått" ; + VI (Supin Pass) => "gåtts" ; + VI (PtPres Nom) => "gående" ; + VI (PtPres Gen) => "gåendes" ; + VI (PtPret (Strong (ASg Utr)) Nom) => "gången" ; + VI (PtPret (Strong (ASg Utr)) Gen) => "gångens" ; + VI (PtPret (Strong (ASg Neutr)) Nom) => "gånget" ; + VI (PtPret (Strong (ASg Neutr)) Gen) => "gångets" ; + VI (PtPret (Strong APl) Nom) => "gångna" ; + VI (PtPret (Strong APl) Gen) => "gångnas" ; + VI (PtPret (Weak (AxSg NoMasc)) Nom) => "gångna" ; + VI (PtPret (Weak (AxSg NoMasc)) Gen) => "gångnas" ; + VI (PtPret (Weak (AxSg Masc)) Nom) => "gångne" ; + VI (PtPret (Weak (AxSg Masc)) Gen) => "gångnes" ; + VI (PtPret (Weak AxPl) Nom) => "gångna" ; + VI (PtPret (Weak AxPl) Gen) => "gångnas" + } + } ; +} diff --git a/grammars/resource/swedish/ResSwe.gf b/grammars/resource/swedish/ResSwe.gf new file mode 100644 index 000000000..747929d59 --- /dev/null +++ b/grammars/resource/swedish/ResSwe.gf @@ -0,0 +1,196 @@ +--1 The Top-Level Swedish Resource Grammar +-- +-- Aarne Ranta 2002 -- 2003 +-- +-- This is the Swedish concrete syntax of the multilingual resource +-- grammar. Most of the work is done in the file $syntax.Swe.gf$. +-- However, for the purpose of documentation, we make here explicit the +-- linearization types of each category, so that their structures and +-- dependencies can be seen. +-- Another substantial part are the linearization rules of some +-- structural words. +-- +-- The users of the resource grammar should not look at this file for the +-- linearization rules, which are in fact hidden in the document version. +-- They should use $resource.Abs.gf$ to access the syntactic rules. +-- This file can be consulted in those, hopefully rare, occasions in which +-- one has to know how the syntactic categories are +-- implemented. The parameter types are defined in $Types.gf$. + +concrete ResSwe of ResAbs = open Prelude, Syntax in { + +flags + startcat=Phr ; + parser=chart ; + +lincat + CN = {s : Number => SpeciesP => Case => Str ; g : Gender ; x : Sex ; + p : IsComplexCN} ; + N = CommNoun ; + -- = {s : Number => Species => Case => Str ; g : Gender ; x : Sex} ; + NP = NounPhrase ; + -- = {s : NPForm => Str ; g : Gender ; n : Number} ; + PN = {s : Case => Str ; g : Gender ; x : Sex} ; + Det = {s : Gender => Sex => Str ; n : Number ; b : SpeciesP} ; + Fun = CommNoun ** {s2 : Preposition} ; + + Adj1 = Adjective ; + -- = {s : AdjFormPos => Case => Str} ; + Adj2 = Adjective ** {s2 : Preposition} ; + AdjDeg = {s : AdjForm => Str} ; + AP = Adjective ** {p : IsPostfixAdj} ; + + V = Verb ; + -- = {s : VForm => Str} ; + VP = Verb ** {s2 : Str ; s3 : Gender => Number => Str} ; + TV = Verb ** {s2 : Preposition} ; + VS = Verb ; + + AdV = {s : Str ; isPost : Bool} ; + + S = Sentence ; + -- = {s : Order => Str} ; + Slash = Sentence ** {s2 : Preposition} ; + RP = {s : RelCase => GenNum => Str ; g : RelGender} ; + RC = {s : GenNum => Str} ; + IP = NounPhrase ; + Qu = {s : QuestForm => Str} ; + Imp = {s : Number => Str} ; + + Phr = {s : Str} ; + + Conj = {s : Str ; n : Number} ; + ConjD = {s1 : Str ; s2 : Str ; n : Number} ; + + ListS = {s1,s2 : Order => Str} ; + ListAP = {s1,s2 : AdjFormPos => Case => Str ; p : Bool} ; + ListNP = {s1,s2 : NPForm => Str ; g : Gender ; n : Number} ; + +--. + +lin + UseN = noun2CommNounPhrase ; + ModAdj = modCommNounPhrase ; + ModGenOne = npGenDet singular ; + ModGenMany = npGenDet plural ; + UsePN = nameNounPhrase ; + UseFun = funAsCommNounPhrase ; + AppFun = appFunComm ; + AdjP1 = adj2adjPhrase ; + ComplAdj = complAdj ; + PositAdjP = positAdjPhrase ; + ComparAdjP = comparAdjPhrase ; + SuperlNP = superlNounPhrase ; + + DetNP = detNounPhrase ; + IndefOneNP = indefNounPhrase singular ; + IndefManyNP = indefNounPhrase plural ; + DefOneNP = defNounPhrase singular ; + DefManyNP = defNounPhrase plural ; + + PredVP = predVerbPhrase ; + PosV = predVerb True ; + NegV = predVerb False ; + PosA = predAdjective True ; + NegA = predAdjective False ; + PosCN = predCommNoun True ; + NegCN = predCommNoun False ; + PosTV = complTransVerb True ; + NegTV = complTransVerb False ; + PosNP = predNounPhrase True ; + NegNP = predNounPhrase False ; + PosVS = complSentVerb True ; + NegVS = complSentVerb False ; + + + AdvVP = adVerbPhrase ; + LocNP = locativeNounPhrase ; + AdvCN = advCommNounPhrase ; + + PosSlashTV = slashTransVerb True ; + NegSlashTV = slashTransVerb False ; + + IdRP = identRelPron ; + FunRP = funRelPron ; + RelVP = relVerbPhrase ; + RelSlash = relSlash ; + ModRC = modRelClause ; + RelSuch = relSuch ; + + WhoOne = intPronWho singular ; + WhoMany = intPronWho plural ; + WhatOne = intPronWhat singular ; + WhatMany = intPronWhat plural ; + FunIP = funIntPron ; + NounIPOne = nounIntPron singular ; + NounIPMany = nounIntPron plural ; + + QuestVP = questVerbPhrase ; + IntVP = intVerbPhrase ; + IntSlash = intSlash ; + QuestAdv = questAdverbial ; + + ImperVP = imperVerbPhrase ; + + IndicPhrase = indicUtt ; + QuestPhrase = interrogUtt ; + ImperOne = imperUtterance singular ; + ImperMany = imperUtterance plural ; + +lin + TwoS = twoSentence ; + ConsS = consSentence ; + ConjS = conjunctSentence ; + ConjDS = conjunctDistrSentence ; + + TwoAP = twoAdjPhrase ; + ConsAP = consAdjPhrase ; + ConjAP = conjunctAdjPhrase ; + ConjDAP = conjunctDistrAdjPhrase ; + + TwoNP = twoNounPhrase ; + ConsNP = consNounPhrase ; + ConjNP = conjunctNounPhrase ; + ConjDNP = conjunctDistrNounPhrase ; + + SubjS = subjunctSentence ; + SubjImper = subjunctImperative ; + SubjQu = subjunctQuestion ; + + PhrNP = useNounPhrase ; + PhrOneCN = useCommonNounPhrase singular ; + PhrManyCN = useCommonNounPhrase plural ; + PhrIP ip = ip ; + PhrIAdv ia = ia ; + + INP = pronNounPhrase jag_32 ; + ThouNP = pronNounPhrase du_33 ; + HeNP = pronNounPhrase han_34 ; + SheNP = pronNounPhrase hon_35 ; + WeNP = pronNounPhrase vi_36 ; + YeNP = pronNounPhrase ni_37 ; + TheyNP = pronNounPhrase de_38 ; + + YouNP = let {ni = pronNounPhrase ni_37 } in {s = ni.s ; g = ni.g ; n = Sg} ; + + EveryDet = varjeDet ; + AllDet = allaDet ; + WhichDet = vilkenDet ; + MostDet = flestaDet ; + + HowIAdv = ss "hur" ; + WhenIAdv = ss "när" ; + WhereIAdv = ss "var" ; + WhyIAdv = ss "varför" ; + + AndConj = ss "och" ** {n = Pl} ; + OrConj = ss "eller" ** {n = Sg} ; + BothAnd = sd2 "både" "och" ** {n = Pl} ; + EitherOr = sd2 "antingen" "eller" ** {n = Sg} ; + NeitherNor = sd2 "varken" "eller" ** {n = Sg} ; + IfSubj = ss "om" ; + WhenSubj = ss "när" ; + + PhrYes = ss ["Ja ."] ; + PhrNo = ss ["Nej ."] ; +} ; diff --git a/grammars/resource/swedish/Svenska.gf b/grammars/resource/swedish/Svenska.gf new file mode 100644 index 000000000..b86c1bb1d --- /dev/null +++ b/grammars/resource/swedish/Svenska.gf @@ -0,0 +1 @@ +resource Svenska = reuse ResSwe ; diff --git a/grammars/resource/swedish/Syntax.gf b/grammars/resource/swedish/Syntax.gf new file mode 100644 index 000000000..dab69b406 --- /dev/null +++ b/grammars/resource/swedish/Syntax.gf @@ -0,0 +1,1000 @@ +--1 A Small Swedish Resource Syntax +-- +-- Aarne Ranta 2002 +-- +-- This resource grammar contains definitions needed to construct +-- indicative, interrogative, and imperative sentences in Swedish. +-- +-- The following modules are presupposed: + +resource Syntax = Morpho ** open Prelude, (CO = Coordination) in { + +--2 Common Nouns +-- +--3 Simple common nouns + +oper + CommNoun : Type = {s : Number => Species => Case => Str ; g : Gender ; x : Sex} ; + +-- When common nouns are extracted from lexicon, the composite noun form is ignored. +-- But we have to indicate a sex. + extCommNoun : Sex -> Subst -> CommNoun = \x,sb -> + {s = \\n,b,c => sb.s ! SF n b c ; + g = sb.h1 ; + x = x} ; + +-- These constants are used for data abstraction over the parameter type $Num$. + singular = Sg ; + plural = Pl ; + +--3 Common noun phrases + +-- The need for this more complex type comes from the variation in the way in +-- which a modifying adjective is inflected after different determiners: +-- "(en) ful orm" / "(den) fula ormen" / "(min) fula orm". +param + SpeciesP = IndefP | DefP Species ; + +-- We also have to be able to decide if a $CommNounPhrase$ is complex +-- (to form the definite form: "bilen" / "den stora bilen"). + +oper + IsComplexCN : Type = Bool ; + +-- Coercions between simple $Species$ and $SpeciesP$: + unSpeciesP : SpeciesP -> Species = \b -> + case b of {IndefP => Indef ; DefP p => p} ; -- bil/bil/bilen + unSpeciesAdjP : SpeciesP -> Species = \b -> + case b of {IndefP => Indef ; DefP _ => Def} ; -- gammal/gamla/gamla + +-- Here's the type itself. + CommNounPhrase : Type = + {s : Number => SpeciesP => Case => Str ; + g : Gender ; x : Sex ; p : IsComplexCN} ; + +-- To use a $CommNoun$ as $CommNounPhrase$. + noun2CommNounPhrase : CommNoun -> CommNounPhrase = \hus -> + {s = \\n,b,c => hus.s ! n ! unSpeciesP b ! c ; + g = hus.g ; x = hus.x ; p = False} ; + + n2n = noun2CommNounPhrase ; + + +--2 Noun Phrases +-- +-- The worst case for noun phrases is pronouns, which have inflection +-- in (what is syntactically) their genitive. Most noun phrases can +-- ignore this variation. + +oper + npCase : NPForm -> Case = \c -> case c of {PGen _ => Gen ; _ => Nom} ; + mkNPForm : Case -> NPForm = \c -> case c of {Gen => PGen APl ; _ => PNom} ; + + NounPhrase : Type = {s : NPForm => Str ; g : Gender ; n : Number} ; + +-- Proper names are a simple kind of noun phrases. However, we want to +-- anticipate the rule that proper names can be modified by +-- adjectives, even though noun phrases in general cannot - hence the sex. + + ProperName : Type = {s : Case => Str ; g : Gender ; x : Sex} ; + + mkProperName : Str -> Gender -> Sex -> ProperName = \john,g,x -> + {s = table {Nom => john ; Gen => john + "s"} ; g = g ; x = x} ; + + nameNounPhrase : ProperName -> NounPhrase = + \john -> {s = table {c => john.s ! npCase c} ; g = john.g ; n = Sg} ; + + pronNounPhrase : ProPN -> NounPhrase = \jag -> + {s = jag.s ; g = jag.h1 ; n = jag.h2} ; + +--2 Determiners +-- +-- Determiners are inflected according to noun in gender and sex. +-- The number and species of the noun are determined by the determiner. + + Determiner : Type = {s : Gender => Sex => Str ; n : Number ; b : SpeciesP} ; + +-- This is the rule for building noun phrases. + + detNounPhrase : Determiner -> CommNounPhrase -> NounPhrase = \en, man -> + {s = table {c => en.s ! man.g ! man.x ++ man.s ! en.n ! en.b ! npCase c} ; + g = man.g ; n = en.n} ; + +-- The following macros are sufficient to define most determiners. +-- All $SpeciesP$ values come into question: +-- "en god vän" - "min gode vän" - "den gode vännen". + + DetSg : Type = Gender => Sex => Str ; + DetPl : Type = Str ; + + mkDeterminerSg : DetSg -> SpeciesP -> Determiner = \en, b -> + {s = en ; n = Sg ; b = b} ; + + mkDeterminerPl : DetPl -> SpeciesP -> Determiner = \alla, b -> + {s = table {_ => table {_ => alla}} ; n = Pl ; b = b} ; + + detSgInvar : Str -> DetSg = \varje -> table {_ => table {_ => varje}} ; + +-- A large class of determiners can be built from a gender-dependent table. + + mkDeterminerSgGender : (Gender => Str) -> SpeciesP -> Determiner = \en -> + mkDeterminerSg (table {g => table {_ => en ! g}}) ; + +-- Here are some examples. We are in fact doing some ad hoc morphology here, +-- instead of importing the lexicon. + + varjeDet = mkDeterminerSg (detSgInvar "varje") IndefP ; + allaDet = mkDeterminerPl "alla" IndefP ; + enDet = mkDeterminerSgGender artIndef IndefP ; + + flestaDet = mkDeterminerPl ["de flesta"] IndefP ; + vilkenDet = mkDeterminerSgGender + (table {Utr => "vilken" ; Neutr => "vilket"}) IndefP ; + vilkaDet = mkDeterminerPl "vilka" IndefP ; + + vilkDet : Number -> Determiner = \n -> case n of { + Sg => vilkenDet ; + Pl => vilkaDet + } ; + + någDet : Number -> Determiner = \n -> case n of { + Sg => mkDeterminerSgGender + (table {Utr => "någon" ; Neutr => "något"}) IndefP ; + Pl => mkDeterminerPl "några" IndefP + } ; + + +-- Genitives of noun phrases can be used like determiners, to build noun phrases. +-- The number argument makes the difference between "min bil" - "mina bilar". + + npGenDet : Number -> NounPhrase -> CommNounPhrase -> NounPhrase = + \n,huset,vin -> { + s = \\c => case n of { + Sg => huset.s ! PGen (ASg vin.g) ++ + vin.s ! Sg ! DefP Indef ! npCase c ; + Pl => huset.s ! PGen APl ++ + vin.s ! Pl ! DefP Indef ! npCase c + } ; + g = vin.g ; + n = n + } ; + +-- *Bare plural noun phrases* like "män", "goda vänner", are built without a +-- determiner word. + + plurDet : CommNounPhrase -> NounPhrase = \cn -> + {s = \\c => cn.s ! Pl ! IndefP ! npCase c ; + g = cn.g ; + n = Pl + } ; + +-- Definite phrases in Swedish are special, since determiner may be absent +-- depending on if the noun is complex: "bilen" - "den nya bilen". + + denDet : CommNounPhrase -> NounPhrase = \cn -> + detNounPhrase + (mkDeterminerSgGender (table {g => artDef ! cn.p ! ASg g}) (DefP Def)) cn ; + deDet : CommNounPhrase -> NounPhrase = \cn -> + detNounPhrase (mkDeterminerPl (artDef ! cn.p ! APl) (DefP Def)) cn ; + +-- It is useful to have macros for indefinite and definite, singular and plural +-- noun-phrase-like syncategorematic expressions. + + indefNounPhrase : Number -> CommNounPhrase -> NounPhrase = \n,hus -> case n of { + Sg => detNounPhrase enDet hus ; + Pl => plurDet hus + } ; + + defNounPhrase : Number -> CommNounPhrase -> NounPhrase = \n,hus -> case n of { + Sg => denDet hus ; + Pl => deDet hus + } ; + + indefNoun : Number -> CommNounPhrase -> Str = \n,man -> case n of { + Sg => artIndef ! man.g ++ man.s ! Sg ! IndefP ! Nom ; + Pl => man.s ! Pl ! IndefP ! Nom + } ; + +--2 Adjectives +--3 Simple adjectives +-- +-- A special type of adjectives just having positive forms (for semantic reasons) +-- is useful, e.g. "finsk", "trekantig". + + Adjective : Type = {s : AdjFormPos => Case => Str} ; + + extAdjective : Adj -> Adjective = \adj -> + {s = table {f => table {c => adj.s ! AF (Posit f) c}}} ; + +-- Coercions between the compound gen-num type and gender and number: + + gNum : Gender -> Number -> GenNum = \g,n -> + case n of {Sg => ASg g ; Pl => APl} ; + + genGN : GenNum -> Gender = \gn -> + case gn of {ASg g => g ; _ => Utr} ; + numGN : GenNum -> Number = \gn -> + case gn of {ASg _ => Sg ; APl => Pl} ; + +--3 Adjective phrases +-- +-- An adjective phrase may contain a complement, e.g. "yngre än Rolf". +-- Then it is used as postfix in modification, e.g. "en man yngre än Rolf". + + IsPostfixAdj = Bool ; + + AdjPhrase : Type = Adjective ** {p : IsPostfixAdj} ; + +-- Simple adjectives are not postfix: + + adj2adjPhrase : Adjective -> AdjPhrase = \ny -> ny ** {p = False} ; + +--3 Comparison adjectives + +-- We take comparison adjectives directly from +-- the lexicon, which has full adjectives: + + AdjDegr = Adj ; + +-- Each of the comparison forms has a characteristic use: +-- +-- Positive forms are used alone, as adjectival phrases ("ung"). + + positAdjPhrase : AdjDegr -> AdjPhrase = \ung -> + {s = table {a => \\c => ung.s ! AF (Posit a) c} ; + p = False + } ; + +-- Comparative forms are used with an object of comparison, as +-- adjectival phrases ("yngre än Rolf"). + + comparAdjPhrase : AdjDegr -> NounPhrase -> AdjPhrase = \yngre,rolf -> + {s = \\_, c => yngre.s ! AF Compar Nom ++ "än" ++ rolf.s ! mkNPForm c ; + p = True + } ; + +-- Superlative forms are used with a modified noun, picking out the +-- maximal representative of a domain ("den yngste mannen"). + + superlNounPhrase : AdjDegr -> CommNounPhrase -> NounPhrase = \yngst,man -> + {s = \\c => let {gn = gNum man.g Sg} in + artDef ! True ! gn ++ + yngst.s ! AF (Super SupWeak) Nom ++ + man.s ! Sg ! DefP Def ! npCase c ; + g = man.g ; + n = Sg + } ; + +-- Moreover, superlatives can be used alone as adjectival phrases +-- ("yngst", "den yngste" - in free variation). +-- N.B. the former is only permitted in predicative position. + + superlAdjPhrase : AdjDegr -> AdjPhrase = \ung -> + {s = \\a,c => variants { + --- artDef ! True ! gn ++ yngst.s ! AF (Super SupWeak) c + ung.s ! AF (Super SupStrong) c + } ; + p = False + } ; + +--3 Two-place adjectives +-- +-- A two-place adjective is an adjective with a preposition used before +-- the complement. (Rem. $Preposition = Str$). + + AdjCompl = Adjective ** {s2 : Preposition} ; + + complAdj : AdjCompl -> NounPhrase -> AdjPhrase = \förtjust,dig -> + {s = \\a,c => förtjust.s ! a ! c ++ förtjust.s2 ++ dig.s ! PAcc ; + p = True + } ; + + +--3 Modification of common nouns +-- +-- The two main functions of adjective are in predication ("Johan är ung") +-- and in modification ("en ung man"). Predication will be defined +-- later, in the chapter on verbs. + + modCommNounPhrase : AdjPhrase -> CommNounPhrase -> CommNounPhrase = \God,Nybil -> + {s = \\n, b, c => + let { + god = God.s ! mkAdjForm (unSpeciesAdjP b) n Nybil.g Nybil.x ! Nom ; + nybil = Nybil.s ! n ! b ! c + } in + preOrPost God.p nybil god ; + g = Nybil.g ; + x = Nybil.x ; + p = True} ; + +-- A special case is modification of a noun that has not yet been modified. +-- But it is simply a special case. + + modCommNoun : Adjective -> CommNoun -> CommNounPhrase = \god,bil -> + modCommNounPhrase (adj2adjPhrase god) (n2n bil) ; + +-- We have used a straightforward +-- method building adjective forms from simple parameters. + + mkAdjForm : Species -> Number -> Gender -> Sex -> AdjFormPos = \b,n,g,x -> + case <b,n> of { + <Indef,Sg> => Strong (ASg g) ; + <Indef,Pl> => Strong APl ; + <Def, Sg> => Weak (AxSg x) ; ---- add masc! + <Def, Pl> => Weak AxPl + } ; + + +--2 Function expressions + +-- A function expression is a common noun together with the +-- preposition prefixed to its argument ("mor till x"). +-- The type is analogous to two-place adjectives and transitive verbs. + + Function = CommNoun ** {s2 : Preposition} ; + + mkFun : CommNoun -> Preposition -> Function = \f,p -> + f ** {s2 = p} ; + +-- The application of a function gives, in the first place, a common noun: +-- "mor/mödrar till Johan". From this, other rules of the resource grammar +-- give noun phrases, such as "modern till Johan", "mödrarna till Johan", +-- "mödrarna till Johan och Maria", and "modern till Johan och Maria" (the +-- latter two corresponding to distributive and collective functions, +-- respectively). Semantics will eventually tell when each +-- of the readings is meaningful. + + appFunComm : Function -> NounPhrase -> CommNounPhrase = \värde,x -> + noun2CommNounPhrase + {s = \\n,b => table { + Gen => nonExist ; + _ => värde.s ! n ! b ! Nom ++ värde.s2 ++ x.s ! PAcc + } ; + g = värde.g ; + x = värde.x + } ; + +-- It is possible to use a function word as a common noun; the semantics is +-- often existential or indexical. + + funAsCommNounPhrase : Function -> CommNounPhrase = + noun2CommNounPhrase ; + +-- The following is an aggregate corresponding to the original function application +-- producing "Johans mor" and "modern till Johan". It does not appear in the +-- resource grammar API any longer. + + appFun : Bool -> Function -> NounPhrase -> NounPhrase = \coll,värde,x -> + let {n = x.n ; nf = if_then_else Number coll Sg n} in + variants { + defNounPhrase nf (appFunComm värde x) ; + npGenDet nf x (noun2CommNounPhrase värde) + } ; + + + +--2 Verbs + +-- Although the Swedish lexicon has full verb inflection, +-- we have limited this first version of the resource syntax to +-- verbs in present tense. Their mode can be infinitive, imperative, and indicative. + + +--3 Verb phrases +-- +-- Verb phrases are discontinuous: the parts of a verb phrase are +-- (s) an inflected verb, (s2) verb adverbials (such as negation), and +-- (s3) complement. This discontinuity is needed in sentence formation +-- to account for word order variations. + + VerbPhrase : Type = Verb ** {s2 : Str ; s3 : Gender => Number => Str} ; + +-- A simple verb can be made into a verb phrase with an empty complement. +-- There are two versions, depending on if we want to negate the verb. +-- N.B. negation is *not* a function applicable to a verb phrase, since +-- double negations with "inte" are not grammatical. + + predVerb : Bool -> Verb -> VerbPhrase = \b,se -> + se ** { + s2 = negation b ; + s3 = \\_,_ => [] + } ; + + negation : Bool -> Str = \b -> if_then_else Str b [] "inte" ; + +-- Sometimes we want to extract the verb part of a verb phrase. + + verbOfPhrase : VerbPhrase -> Verb = \v -> {s = v.s} ; + +-- Verb phrases can also be formed from adjectives ("är snäll"), +-- common nouns ("är en man"), and noun phrases ("är den yngste mannen"). +-- The third rule is overgenerating: "är varje man" has to be ruled out +-- on semantic grounds. + + predAdjective : Bool -> Adjective -> VerbPhrase = \b,arg -> + verbVara ** { + s2 = negation b ; + s3 = \\g,n => arg.s ! mkAdjForm Indef n g NoMasc ! Nom + } ; + + predCommNoun : Bool -> CommNounPhrase -> VerbPhrase = \b,man -> + verbVara ** { + s2 = negation b ; + s3 = \\_,n => indefNoun n man + } ; + + predNounPhrase : Bool -> NounPhrase -> VerbPhrase = \b,john -> + verbVara ** { + s2 = negation b ; + s3 = \\_,_ => john.s ! PNom + } ; + +--3 Transitive verbs +-- +-- Transitive verbs are verbs with a preposition for the complement, +-- in analogy with two-place adjectives and functions. +-- One might prefer to use the term "2-place verb", since +-- "transitive" traditionally means that the inherent preposition is empty. +-- Such a verb is one with a *direct object*. + + TransVerb : Type = Verb ** {s2 : Preposition} ; + + mkTransVerb : Verb -> Preposition -> TransVerb = \v,p -> + v ** {s2 = p} ; + + mkDirectVerb : Verb -> TransVerb = \v -> + mkTransVerb v nullPrep ; + + nullPrep : Preposition = [] ; + + extTransVerb : Verbum -> Preposition -> TransVerb = + \v -> mkTransVerb (extVerb Act v) ; + +-- The rule for using transitive verbs is the complementization rule: + + complTransVerb : Bool -> TransVerb -> NounPhrase -> VerbPhrase = \b,se,dig -> + {s = se.s ; s2 = negation b ; s3 = \\_,_ => se.s2 ++ dig.s ! PAcc} ; + +--2 Adverbials +-- +-- Adverbials that modify verb phrases are either post- or pre-verbal. +-- As a rule of thumb, simple adverbials ("bra","alltid") are pre-verbal, +-- but this is not always the case ("här" is post-verbal). + + Adverb : Type = SS ** {isPost : Bool} ; + + advPre : Str -> Adverb = \alltid -> ss alltid ** {isPost = False} ; + advPost : Str -> Adverb = \bra -> ss bra ** {isPost = True} ; + + adVerbPhrase : VerbPhrase -> Adverb -> VerbPhrase = \spelar, bra -> + let {postp = bra.isPost} in + { + --- this unfortunately generates VP#2 ::= VP#2 + s = spelar.s ; + s2 = (if_then_else Str postp [] bra.s) ++ spelar.s2 ; + s3 = \\g,n => spelar.s3 ! g ! n ++ (if_then_else Str postp bra.s []) + } ; + +-- Adverbials are typically generated by prefixing prepositions. +-- The rule for creating locative noun phrases by the preposition "i" +-- is a little shaky: "i Sverige" but "på Island". + + prepPhrase : Preposition -> NounPhrase -> Adverb = \i,huset -> + advPost (i ++ huset.s ! PAcc) ; + + locativeNounPhrase : NounPhrase -> Adverb = + prepPhrase "i" ; + +-- This is a source of the "mannen med teleskopen" ambiguity, and may produce +-- strange things, like "bilar alltid" (while "bilar idag" is OK). +-- Semantics will have to make finer distinctions among adverbials. + + advCommNounPhrase : CommNounPhrase -> Adverb -> CommNounPhrase = \bil,idag -> + {s = \\n, b, c => bil.s ! n ! b ! c ++ idag.s ; + g = bil.g ; + x = bil.x ; + p = bil.p} ; + + +--2 Sentences +-- +-- Sentences depend on a *word order parameter* selecting between main clause, +-- inverted, and subordinate clause. + +param + Order = Main | Inv | Sub ; + +oper + Sentence : Type = SS1 Order ; + +-- This is the traditional $S -> NP VP$ rule. It takes care of both +-- word order and agreement. + + predVerbPhrase : NounPhrase -> VerbPhrase -> Sentence = + \Jag, serdiginte -> + let { + jag = Jag.s ! PNom ; + ser = serdiginte.s ! Indicat ; + dig = serdiginte.s3 ! Jag.g ! Jag.n ; + inte = serdiginte.s2 + } in + {s = table { + Main => jag ++ ser ++ inte ++ dig ; + Inv => ser ++ jag ++ inte ++ dig ; + Sub => jag ++ inte ++ ser ++ dig + } + } ; + +-- This is a macro for simultaneous predication and complementation. + + predTransVerb : Bool -> NounPhrase -> TransVerb -> NounPhrase -> Sentence = + \b,jag,ser,dig -> predVerbPhrase jag (complTransVerb b ser dig) ; + +--3 Sentence-complement verbs +-- +-- Sentence-complement verbs take sentences as complements. + + SentenceVerb : Type = Verb ; + + complSentVerb : Bool -> SentenceVerb -> Sentence -> VerbPhrase = \b,se,duler -> + {s = se.s ; s2 = negation b ; s3 = \\_,_ => optStr "att" ++ duler.s ! Main} ; + + + +--2 Sentences missing noun phrases +-- +-- This is one instance of Gazdar's *slash categories*, corresponding to his +-- $S/NP$. +-- We cannot have - nor would we want to have - a productive slash-category former. +-- Perhaps a handful more will be needed. +-- +-- Notice that the slash category has the same relation to sentences as +-- transitive verbs have to verbs: it's like a *sentence taking a complement*. + + SentenceSlashNounPhrase : Type = Sentence ** {s2 : Preposition} ; + + slashTransVerb : Bool -> NounPhrase -> TransVerb -> SentenceSlashNounPhrase = + \b, Jag, se -> + let { + jag = Jag.s ! PNom ; + ser = se.s ! Indicat ; + inte = negation b + } in + {s = table { + Main => jag ++ ser ++ inte ; + Inv => ser ++ jag ++ inte ; + Sub => jag ++ inte ++ ser + } ; + s2 = se.s2 + } ; + + +--2 Relative pronouns and relative clauses +-- +-- Relative pronouns can be nominative, accusative, or genitive, and +-- they depend on gender and number just like adjectives. +-- Moreover they may or may not carry their own genders: for instance, +-- "som" just transmits the gender of a noun ("tal som är primt"), whereas +-- "vars efterföljare" is $Utrum$ independently of the noun +-- ("tal vars efterföljare är prim"). +-- This variation is expressed by the $RelGender$ type. + + RelPron : Type = {s : RelCase => GenNum => Str ; g : RelGender} ; + +param + RelGender = RNoGen | RG Gender ; + +-- The following functions are selectors for relative-specific parameters. + +oper + -- this will be needed in "tal som är jämnt" / "tal vars efterföljare är jämn" + mkGenderRel : RelGender -> Gender -> Gender = \rg,g -> case rg of { + RG gen => gen ; + _ => g + } ; + + relCase : RelCase -> Case = \c -> case c of { + RGen => Gen ; + _ => Nom + } ; + +-- The simplest relative pronoun has no gender of its own. As accusative variant, +-- it has the omission of the pronoun ("mannen (som) jag ser"). + + identRelPron : RelPron = + {s = table { + RNom => \\_ => "som" ; + RAcc => \\_ => variants {"som" ; []} ; + RGen => \\_ => "vars" ; + RPrep => pronVilken + } ; + g = RNoGen + } ; + +-- Composite relative pronouns have the same variation as function +-- applications ("efterföljaren till vilket" - "vars efterföljare"). + + funRelPron : Function -> RelPron -> RelPron = \värde,vilken -> + {s = \\c,gn => + variants { + vilken.s ! RGen ! gn ++ värde.s ! numGN gn ! Indef ! relCase c ; + värde.s ! numGN gn ! Def ! Nom ++ värde.s2 ++ vilken.s ! RPrep ! gn + } ; + g = RG värde.g + } ; + +-- Relative clauses can be formed from both verb phrases ("som sover") and +-- slash expressions ("som jag ser"). The latter has moreover the variation +-- as for the place of the preposition ("som jag talar om" - "om vilken jag talar"). + + RelClause : Type = {s : GenNum => Str} ; + + relVerbPhrase : RelPron -> VerbPhrase -> RelClause = \som,sover -> + {s = \\gn => + som.s ! RNom ! gn ++ sover.s2 ++ sover.s ! Indicat ++ + sover.s3 ! mkGenderRel som.g (genGN gn) ! numGN gn + } ; + + relSlash : RelPron -> SentenceSlashNounPhrase -> RelClause = \som,jagTalar -> + {s = \\gn => + let {jagtalar = jagTalar.s ! Sub ; om = jagTalar.s2} in + variants { + som.s ! RAcc ! gn ++ jagtalar ++ om ; + om ++ som.s ! RPrep ! gn ++ jagtalar + } + } ; + +-- A 'degenerate' relative clause is the one often used in mathematics, e.g. +-- "tal x sådant att x är primt". + + relSuch : Sentence -> RelClause = \A -> + {s = \\g => pronSådan ! g ++ "att" ++ A.s ! Sub} ; + +-- The main use of relative clauses is to modify common nouns. +-- The result is a common noun, out of which noun phrases can be formed +-- by determiners. + + modRelClause : CommNounPhrase -> RelClause -> CommNounPhrase = \man,somsover -> + {s = \\n,b,c => man.s ! n ! b ! c ++ somsover.s ! gNum man.g n ; + g = man.g ; + x = man.x ; + p = False + } ; + +-- N.B. we do not get the determinative pronoun +-- construction "den man som sover" in this way, but only "mannen som sover". +-- Thus we need an extra rule: + + detRelClause : Number -> CommNounPhrase -> RelClause -> NounPhrase = + \n,man,somsover -> + {s = \\c => let {gn = gNum man.g n} in + artDef ! True ! gn ++ + man.s ! n ! DefP Indef ! npCase c ++ somsover.s ! gn ; + g = man.g ; + n = n + } ; + + +--2 Interrogative pronouns +-- +-- If relative pronouns are adjective-like, interrogative pronouns are +-- noun-phrase-like. Actually we can use the very same type! + + IntPron : Type = NounPhrase ; + +-- In analogy with relative pronouns, we have a rule for applying a function +-- to a relative pronoun to create a new one. We can reuse the rule applying +-- functions to noun phrases! + + funIntPron : Function -> IntPron -> IntPron = + appFun False ; + +-- There is a variety of simple interrogative pronouns: +-- "vilken bil", "vem", "vad". + + nounIntPron : Number -> CommNounPhrase -> IntPron = \n -> + detNounPhrase (vilkDet n) ; + + intPronWho : Number -> IntPron = \num -> { + s = table { + PGen _ => "vems" ; + _ => "vem" + } ; + g = Utr ; + n = num + } ; + + intPronWhat : Number -> IntPron = \num -> { + s = table { + PGen _ => nonExist ; --- + _ => "vad" + } ; + n = num ; + g = Neutr + } ; + +--2 Utterances + +-- By utterances we mean whole phrases, such as +-- 'can be used as moves in a language game': indicatives, questions, imperative, +-- and one-word utterances. The rules are far from complete. +-- +-- N.B. we have not included rules for texts, which we find we cannot say much +-- about on this level. In semantically rich GF grammars, texts, dialogues, etc, +-- will of course play an important role as categories not reducible to utterances. +-- An example is proof texts, whose semantics show a dependence between premises +-- and conclusions. Another example is intersentential anaphora. + + Utterance = SS ; + + indicUtt : Sentence -> Utterance = \x -> postfixSS "." (defaultSentence x) ; + interrogUtt : Question -> Utterance = \x -> postfixSS "?" (defaultQuestion x) ; + + +--2 Questions +-- +-- Questions are either direct ("vem tog bollen") or indirect +-- ("vem som tog bollen"). + +param + QuestForm = DirQ | IndirQ ; + +oper + Question = SS1 QuestForm ; + +--3 Yes-no questions +-- +-- Yes-no questions are used both independently ("tog du bollen") +-- and after interrogative adverbials ("varför tog du bollen"). +-- It is economical to handle with these two cases by the one +-- rule, $questVerbPhrase'$. The only difference is if "om" appears +-- in the indirect form. + + questVerbPhrase : NounPhrase -> VerbPhrase -> Question = + questVerbPhrase' False ; + + questVerbPhrase' : Bool -> NounPhrase -> VerbPhrase -> Question = + \adv,du,sover -> + let {dusover = (predVerbPhrase du sover).s} in + {s = table { + DirQ => dusover ! Inv ; + IndirQ => (if_then_else Str adv [] "om") ++ dusover ! Sub + } + } ; + +--3 Wh-questions +-- +-- Wh-questions are of two kinds: ones that are like $NP - VP$ sentences, +-- others that are line $S/NP - NP$ sentences. + + intVerbPhrase : IntPron -> VerbPhrase -> Question = \vem,sover -> + let {vemsom : NounPhrase = + {s = \\c => vem.s ! c ++ "som" ; g = vem.g ; n = vem.n} + } in + {s = table { + DirQ => (predVerbPhrase vem sover).s ! Main ; + IndirQ => (predVerbPhrase vemsom sover).s ! Sub + } + } ; + + intSlash : IntPron -> SentenceSlashNounPhrase -> Question = \Vem, jagTalar -> + let { + vem = Vem.s ! PAcc ; + jagtalar = jagTalar.s ! Sub ; + talarjag = jagTalar.s ! Inv ; + om = jagTalar.s2 + } in + {s = table { + DirQ => variants { + vem ++ talarjag ++ om ; + om ++ vem ++ talarjag + } ; + IndirQ => variants { + vem ++ jagtalar ++ om ; + om ++ vem ++ jagtalar + } + } + } ; + +--3 Interrogative adverbials +-- +-- These adverbials will be defined in the lexicon: they include +-- "när", "var", "hur", "varför", etc, which are all invariant one-word +-- expressions. In addition, they can be formed by adding prepositions +-- to interrogative pronouns, in the same way as adverbials are formed +-- from noun phrases. N.B. we rely on record subtyping when ignoring the +-- position component. + + IntAdverb = SS ; + + prepIntAdverb : Preposition -> IntPron -> IntAdverb = + prepPhrase ; + +-- A question adverbial can be applied to anything, and whether this makes +-- sense is a semantic question. + + questAdverbial : IntAdverb -> NounPhrase -> VerbPhrase -> Question = + \hur, du, mår -> + {s = \\q => hur.s ++ (questVerbPhrase' True du mår).s ! q} ; + + +--2 Imperatives +-- +-- We only consider second-person imperatives. + + Imperative = SS1 Number ; + + imperVerbPhrase : VerbPhrase -> Imperative = \titta -> + {s = \\n => titta.s ! Imperat ++ titta.s2 ++ titta.s3 ! Utr ! n} ; + + imperUtterance : Number -> Imperative -> Utterance = \n,I -> + ss (I.s ! n ++ "!") ; + + +--2 Coordination +-- +-- Coordination is to some extent orthogonal to the rest of syntax, and +-- has been treated in a generic way in the module $CO$ in the file +-- $coordination.gf$. The overall structure is independent of category, +-- but there can be differences in parameter dependencies. +-- +--3 Conjunctions +-- +-- Coordinated phrases are built by using conjunctions, which are either +-- simple ("och", "eller") or distributed ("både - och", "antingen - eller"). +-- +-- The conjunction has an inherent number, which is used when conjoining +-- noun phrases: "John och Mary är rika" vs. "John eller Mary är rik"; in the +-- case of "eller", the result is however plural if any of the disjuncts is. + + Conjunction = CO.Conjunction ** {n : Number} ; + ConjunctionDistr = CO.ConjunctionDistr ** {n : Number} ; + + +--3 Coordinating sentences +-- +-- We need a category of lists of sentences. It is a discontinuous +-- category, the parts corresponding to 'init' and 'last' segments +-- (rather than 'head' and 'tail', because we have to keep track of the slot between +-- the last two elements of the list). A list has at least two elements. + + ListSentence : Type = {s1,s2 : Order => Str} ; + + twoSentence : (_,_ : Sentence) -> ListSentence = + CO.twoTable Order ; + + consSentence : ListSentence -> Sentence -> ListSentence = + CO.consTable Order CO.comma ; + +-- To coordinate a list of sentences by a simple conjunction, we place +-- it between the last two elements; commas are put in the other slots, +-- e.g. "månen lyser, solen skiner och stjärnorna blinkar". + + conjunctSentence : Conjunction -> ListSentence -> Sentence = + CO.conjunctTable Order ; + + conjunctOrd : Bool -> Conjunction -> CO.ListTable Order -> {s : Order => Str} = + \b,or,xs -> + {s = \\p => xs.s1 ! p ++ or.s ++ xs.s2 ! p} ; + + +-- To coordinate a list of sentences by a distributed conjunction, we place +-- the first part (e.g. "antingen") in front of the first element, the second +-- part ("eller") between the last two elements, and commas in the other slots. +-- For sentences this is really not used. + + conjunctDistrSentence : ConjunctionDistr -> ListSentence -> Sentence = + CO.conjunctDistrTable Order ; + +--3 Coordinating adjective phrases +-- +-- The structure is the same as for sentences. The result is a prefix adjective +-- if and only if all elements are prefix. + + ListAdjPhrase : Type = + {s1,s2 : AdjFormPos => Case => Str ; p : Bool} ; + + twoAdjPhrase : (_,_ : AdjPhrase) -> ListAdjPhrase = \x,y -> + CO.twoTable2 AdjFormPos Case x y ** {p = andB x.p y.p} ; + consAdjPhrase : ListAdjPhrase -> AdjPhrase -> ListAdjPhrase = \xs,x -> + CO.consTable2 AdjFormPos Case CO.comma xs x ** {p = andB xs.p x.p} ; + + conjunctAdjPhrase : Conjunction -> ListAdjPhrase -> AdjPhrase = \c,xs -> + CO.conjunctTable2 AdjFormPos Case c xs ** {p = xs.p} ; + + conjunctDistrAdjPhrase : ConjunctionDistr -> ListAdjPhrase -> AdjPhrase = \c,xs -> + CO.conjunctDistrTable2 AdjFormPos Case c xs ** {p = xs.p} ; + + +--3 Coordinating noun phrases +-- +-- The structure is the same as for sentences. The result is either always plural +-- or plural if any of the components is, depending on the conjunction. +-- The gender is neuter if any of the components is. + + ListNounPhrase : Type = {s1,s2 : NPForm => Str ; g : Gender ; n : Number} ; + + twoNounPhrase : (_,_ : NounPhrase) -> ListNounPhrase = \x,y -> + CO.twoTable NPForm x y ** {n = conjNumber x.n y.n ; g = conjGender x.g y.g} ; + + consNounPhrase : ListNounPhrase -> NounPhrase -> ListNounPhrase = \xs,x -> + CO.consTable NPForm CO.comma xs x ** + {n = conjNumber xs.n x.n ; g = conjGender xs.g x.g} ; + + conjunctNounPhrase : Conjunction -> ListNounPhrase -> NounPhrase = \c,xs -> + CO.conjunctTable NPForm c xs ** {n = conjNumber c.n xs.n ; g = xs.g} ; + + conjunctDistrNounPhrase : ConjunctionDistr -> ListNounPhrase -> NounPhrase = + \c,xs -> + CO.conjunctDistrTable NPForm c xs ** {n = conjNumber c.n xs.n ; g = xs.g} ; + +-- We hve to define a calculus of numbers of genders. For numbers, +-- it is like the conjunction with $Pl$ corresponding to $False$. For genders, +-- $Neutr$ corresponds to $False$. + + conjNumber : Number -> Number -> Number = \m,n -> case <m,n> of { + <Sg,Sg> => Sg ; + _ => Pl + } ; + + conjGender : Gender -> Gender -> Gender = \m,n -> case <m,n> of { + <Utr,Utr> => Utr ; + _ => Neutr + } ; + + +--2 Subjunction +-- +-- Subjunctions ("om", "när", etc) +-- are a different way to combine sentences than conjunctions. +-- The main clause can be a sentences, an imperatives, or a question, +-- but the subjoined clause must be a sentence. +-- +-- There are uniformly two variant word orders, e.g. "om du sover kommer björnen" +-- and "björnen kommer om du sover". + + Subjunction = SS ; + + subjunctSentence : Subjunction -> Sentence -> Sentence -> Sentence = \if, A, B -> + let {As = A.s ! Sub} in + {s = table { + Main => variants {if.s ++ As ++ "," ++ B.s ! Inv ; + B.s ! Main ++ "," ++ if.s ++ As} ; + o => B.s ! o ++ "," ++ if.s ++ As + } + } ; + + subjunctImperative : Subjunction -> Sentence -> Imperative -> Imperative = + \if, A, B -> + {s = \\n => subjunctVariants if A (B.s ! n)} ; + + subjunctQuestion : Subjunction -> Sentence -> Question -> Question = \if, A, B -> + {s = \\q => subjunctVariants if A (B.s ! q)} ; + + subjunctVariants : Subjunction -> Sentence -> Str -> Str = \if,A,B -> + let {As = A.s ! Sub} in + variants {if.s ++ As ++ "," ++ B ; B ++ "," ++ if.s ++ As} ; + +--2 One-word utterances +-- +-- An utterance can consist of one phrase of almost any category, +-- the limiting case being one-word utterances. These +-- utterances are often (but not always) in what can be called the +-- default form of a category, e.g. the nominative. +-- This list is far from exhaustive. + + useNounPhrase : NounPhrase -> Utterance = \john -> + postfixSS "." (defaultNounPhrase john) ; + useCommonNounPhrase : Number -> CommNounPhrase -> Utterance = \n,car -> + useNounPhrase (indefNounPhrase n car) ; + +-- Here are some default forms. + + defaultNounPhrase : NounPhrase -> SS = \john -> + ss (john.s ! PNom) ; + + defaultQuestion : Question -> SS = \whoareyou -> + ss (whoareyou.s ! DirQ) ; + + defaultSentence : Sentence -> Utterance = \x -> ss (x.s ! Main) ; +} ; diff --git a/grammars/resource/swedish/TestSwe.gf b/grammars/resource/swedish/TestSwe.gf new file mode 100644 index 000000000..063119b56 --- /dev/null +++ b/grammars/resource/swedish/TestSwe.gf @@ -0,0 +1,35 @@ +concrete TestSwe of TestAbs = ResSwe ** open Syntax in { + +flags startcat=Phr ; lexer=text ; parser=chart ; unlexer=text ; + +-- a random sample from the lexicon + +lin + Big = stor_25 ; + Small = liten_1146 ; + Old = gammal_16 ; + Young = ung_29 ; + Man = extCommNoun Masc man_1144 ; + Woman = extCommNoun NoMasc (sApa "kvinn") ; + Car = extCommNoun NoMasc (sBil "bil") ; + House = extCommNoun NoMasc (sHus "hus") ; + Light = extCommNoun NoMasc (sHus "ljus") ; + Walk = extVerb Act gå_1174 ; + Run = extVerb Act (vFinna "spring" "sprang" "sprung") ; + Love = extTransVerb (vTala "älsk") [] ; + Send = extTransVerb (vTala "skick") [] ; + Wait = extTransVerb (vTala "vänt") "på" ; + Say = extVerb Act (vLeka "säg") ; --- works in present tense... + Prove = extVerb Act (vTala "bevis") ; + SwitchOn = extTransVerb (vVända "tän") [] ; + SwitchOff = extTransVerb (vLeka "släck") [] ; + + Mother = mkFun (extCommNoun NoMasc mor_1) "till" ; + Uncle = mkFun (extCommNoun Masc farbror_8) "till" ; + + Always = advPre "alltid" ; + Well = advPost "bra" ; + + John = mkProperName "Johan" Utr Masc ; + Mary = mkProperName "Maria" Utr NoMasc ; +} ; diff --git a/grammars/resource/swedish/Types.gf b/grammars/resource/swedish/Types.gf new file mode 100644 index 000000000..21ddfcfc7 --- /dev/null +++ b/grammars/resource/swedish/Types.gf @@ -0,0 +1,150 @@ +--1 Swedish Word Classes and Morphological Parameters +-- +-- This is a resource module for Swedish morphology, defining the +-- morphological parameters and word classes of Swedish. It is aimed +-- to be complete w.r.t. the description of word forms. +-- However, it does not include those parameters that are not needed for +-- analysing individual words: such parameters are defined in syntax modules. +-- +-- This GF grammar was obtained from the functional morphology file TypesSw.hs +-- semi-automatically. The GF inflection engine obtained was obtained automatically. + +resource Types = open Prelude in { + +-- + +--2 Enumerated parameter types +-- +-- These types are the ones found in school grammars. +-- Their parameter values are atomic. + +param + Gender = Utr | Neutr ; + Number = Sg | Pl ; + Species = Indef | Def ; + Case = Nom | Gen ; + Sex = NoMasc | Masc ; + Mode = Ind | Cnj ; + Voice = Act | Pass ; + Degree = Pos | Comp | Sup ; + Person = P1 | P2 | P3 ; + +--2 Word classes and hierarchical parameter types +-- +-- Real parameter types (i.e. ones on which words and phrases depend) +-- are mostly hierarchical. The alternative would be cross-products of +-- simple parameters, but this would usually overgenerate. +-- + +--3 Substantives +-- +-- Substantives (= common nouns) have a parameter of type SubstForm. + +param SubstForm = SF Number Species Case ; + +-- Substantives moreover have an inherent gender. + +oper Subst : Type = {s : SubstForm => Str ; h1 : Gender} ; + +--3 Adjectives +-- +-- Adjectives are a very complex class, and the full table has as many as +-- 18 different forms. The major division is between the comparison degrees; +-- the comparative has only the 2 case forms, whereas the positive has 12 forms. + +param + AdjForm = AF AdjFormGrad Case ; + +-- The positive strong forms depend on gender: "en stor bil" - "ett stort hus". +-- But the weak forms depend on sex: "den stora bilen" - "den store mannen". +-- The plural never makes a gender-sex distinction. + + GenNum = ASg Gender | APl ; + SexNum = AxSg Sex | AxPl ; + + AdjFormPos = Strong GenNum | Weak SexNum ; + AdjFormSup = SupStrong | SupWeak ; + + AdjFormGrad = + Posit AdjFormPos + | Compar + | Super AdjFormSup ; + +oper + Adj : Type = {s : AdjForm => Str} ; + +--3 Verbs +-- +-- Verbs have 9 finite forms and as many as 18 infinite forms; the large number +-- of the latter comes from adjectives. + +oper Verbum : Type = {s : VerbForm => Str} ; + +param + VFin = + Pres Mode Voice + | Pret Mode Voice + | Imper ; --- no passive + + VInf = + Inf Voice + | Supin Voice + | PtPres Case + | PtPret AdjFormPos Case ; + + VerbForm = + VF VFin + | VI VInf ; + +-- However, the syntax only needs a simplified verb category, with +-- present tense only. Such a verb can be extracted from the full verb, +-- and a choice can be made between an active and a passive (deponent) verb. + +param + VForm = Infinit | Indicat | Imperat ; + +oper + Verb : Type = SS1 VForm ; + + extVerb : Voice -> Verbum -> Verb = \v,verb -> {s = table { + Infinit => verb.s ! VI (Inf v) ; + Indicat => verb.s ! VF (Pres Ind v) ; + Imperat => verb.s ! VF Imper --- no passive in Verbum + }} ; + +--3 Other open classes +-- +-- Proper names, adverbs (Adv having comparison forms and AdvIn not having them), +-- and interjections are the remaining open classes. + +oper + PNm : Type = {s : Case => Str ; h1 : Gender} ; + Adv : Type = {s : Degree => Str} ; + AdvInv : Type = {s : Str} ; + Interj : Type = {s : Str} ; + +--3 Closed classes +-- +-- The rest of the Swedish word classes are closed, i.e. not extensible by new +-- lexical entries. Thus we don't have to know how to build them, but only +-- how to use them, i.e. which parameters they have. +-- +-- The most important distinction is between proper-name-like pronouns and +-- adjective-like pronouns, which are inflected in completely different parameters. + +param + NPForm = PNom | PAcc | PGen GenNum ; + AdjPronForm = APron GenNum Case ; + AuxVerbForm = AuxInf | AuxPres | AuxPret | AuxSup ; + +oper + ProPN : Type = {s : NPForm => Str ; h1 : Gender ; h2 : Number ; h3 : Person} ; + ProAdj : Type = {s : AdjPronForm => Str} ; + Prep : Type = {s : Str} ; + Conjunct : Type = {s : Str} ; + Subjunct : Type = {s : Str} ; + Art : Type = {s : GenNum => Str} ; + Part : Type = {s : Str} ; + Infin : Type = {s : Str} ; + VAux : Type = {s : AuxVerbForm => Str} ; +} |
