summaryrefslogtreecommitdiff
path: root/grammars/resource/swedish
diff options
context:
space:
mode:
authoraarne <unknown>2003-09-22 13:16:55 +0000
committeraarne <unknown>2003-09-22 13:16:55 +0000
commitb1402e8bd6a68a891b00a214d6cf184d66defe19 (patch)
tree90372ac4e53dce91cf949dbf8e93be06f1d9e8bd /grammars/resource/swedish
Founding the newly structured GF2.0 cvs archive.
Diffstat (limited to 'grammars/resource/swedish')
-rw-r--r--grammars/resource/swedish/Morpho.gf1039
-rw-r--r--grammars/resource/swedish/ResSwe.gf196
-rw-r--r--grammars/resource/swedish/Svenska.gf1
-rw-r--r--grammars/resource/swedish/Syntax.gf1000
-rw-r--r--grammars/resource/swedish/TestSwe.gf35
-rw-r--r--grammars/resource/swedish/Types.gf150
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} ;
+}