summaryrefslogtreecommitdiff
path: root/grammars/resource/swedish/SyntaxSwe.gf
diff options
context:
space:
mode:
authorbjorn <bjorn@bringert.net>2008-08-14 07:58:04 +0000
committerbjorn <bjorn@bringert.net>2008-08-14 07:58:04 +0000
commit77270a010a0b453e9a84c3e62db7cfd22e49d55d (patch)
treed17682a545d6ac1e68ff49b8c20964182794baf7 /grammars/resource/swedish/SyntaxSwe.gf
parent0bbb906141711767678f82b15a7b43e65e0b5bd6 (diff)
Remove the grammars directory. It was full of old grammars that don't compile these days. See the old source distributions if you want them.
Diffstat (limited to 'grammars/resource/swedish/SyntaxSwe.gf')
-rw-r--r--grammars/resource/swedish/SyntaxSwe.gf1138
1 files changed, 0 insertions, 1138 deletions
diff --git a/grammars/resource/swedish/SyntaxSwe.gf b/grammars/resource/swedish/SyntaxSwe.gf
deleted file mode 100644
index a8b0c20dc..000000000
--- a/grammars/resource/swedish/SyntaxSwe.gf
+++ /dev/null
@@ -1,1138 +0,0 @@
---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 SyntaxSwe = MorphoSwe ** 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} ;
-
--- The following construction has to be refined for genitive forms:
--- "vi tre", "oss tre" are OK, but "vår tres" is not.
-
- Numeral : Type = {s : Case => Str} ;
-
- pronWithNum : ProPN -> Numeral -> ProPN = \we,two ->
- {s = \\c => we.s ! c ++ two.s ! npCase c ;
- h1 = we.h1 ;
- h2 = we.h2 ;
- h3 = we.h3
- } ;
-
- noNum : Numeral = {s = \\_ => []} ;
-
--- Formal subjects
-
- npMan = nameNounPhrase (mkProperName "man" Utr Masc) ;
- npDet = nameNounPhrase (mkProperName "det" Neutr NoMasc) ;
-
---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 ->
- mkDeterminerPlNum alla b noNum ;
-
- mkDeterminerPlNum : DetPl -> SpeciesP -> Numeral -> Determiner = \alla,b,n ->
- {s = \\_,_ => alla ++ n.s ! Nom ;
- 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 -> Numeral -> NounPhrase -> CommNounPhrase -> NounPhrase =
- \n,tre,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 ++ tre.s ! Nom ++
- 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. But a $Numeral$ may occur.
-
- plurDet : CommNounPhrase -> NounPhrase = plurDetNum noNum ;
-
- plurDetNum : Numeral -> CommNounPhrase -> NounPhrase = \num,cn ->
- {s = \\c => num.s ! Nom ++ 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 : Numeral -> CommNounPhrase -> NounPhrase = \n,cn ->
- detNounPhrase (mkDeterminerPlNum (artDef ! cn.p ! APl) (DefP Def) n) cn ;
-
--- It is useful to have macros for indefinite and definite, singular and plural
--- noun-phrase-like syncategorematic expressions.
-
- indefNounPhrase : Number -> CommNounPhrase -> NounPhrase = \n ->
- indefNounPhraseNum n noNum ;
-
- indefNounPhraseNum : Number -> Numeral -> CommNounPhrase -> NounPhrase =
- \n,num,hus ->
- case n of {
- Sg => detNounPhrase enDet hus ;
- Pl => plurDetNum num hus
- } ;
-
- defNounPhrase : Number -> CommNounPhrase -> NounPhrase = \n ->
- defNounPhraseNum n noNum ;
-
- defNounPhraseNum : Number -> Numeral -> CommNounPhrase -> NounPhrase =
- \n,num,hus -> case n of {
- Sg => denDet hus ;
- Pl => deDet num 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
- } ;
-
--- Constructions like "tanken att två är jämnt" are formed at the
--- first place as common nouns, so that one can also have "ett förslag att...".
-
- nounThatSentence : CommNounPhrase -> Sentence -> CommNounPhrase = \tanke,x ->
- {s = \\n,d,c => tanke.s ! n ! d ! c ++ "att" ++ x.s ! Sub ;
- g = tanke.g ;
- x = tanke.x ;
- p = tanke.p
- } ;
-
-
---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 noNum x (noun2CommNounPhrase värde)
- } ;
-
--- Two-place functions add one argument place.
-
- Function2 = Function ** {s3 : Preposition} ;
-
--- There application starts by filling the first place.
-
- appFun2 : Function2 -> NounPhrase -> Function = \flyg, paris ->
- {s = \\n,d,c => flyg.s ! n ! d ! c ++ flyg.s2 ++ paris.s ! PAcc ;
- g = flyg.g ;
- x = flyg.x ;
- s2 = flyg.s3
- } ;
-
-
---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} ;
- VerbGroup : Type = Verb ** {s2 : Bool => Str ; s3 : Gender => Number => Str} ;
-
- predVerbGroup : Bool -> VerbGroup -> VerbPhrase = \b,vg -> {
- s = vg.s ;
- s2 = vg.s2 ! b ;
- s3 = vg.s3
- } ;
-
--- 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 : Verb -> VerbGroup = \se ->
- se ** {
- s2 = negation ;
- s3 = \\_,_ => []
- } ;
-
- negation : Bool => Str = \\b => if_then_Str b [] "inte" ;
-
--- 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 : Adjective -> VerbGroup = \arg ->
- verbVara ** {
- s2 = negation ;
- s3 = \\g,n => arg.s ! mkAdjForm Indef n g NoMasc ! Nom
- } ;
-
- predCommNoun : CommNounPhrase -> VerbGroup = \man ->
- verbVara ** {
- s2 = negation ;
- s3 = \\_,n => indefNoun n man
- } ;
-
- predNounPhrase : NounPhrase -> VerbGroup = \john ->
- verbVara ** {
- s2 = negation ;
- s3 = \\_,_ => john.s ! PNom
- } ;
-
- predAdverb : Adverb -> VerbGroup = \ute ->
- verbVara ** {
- s2 = negation ;
- s3 = \\_,_ => ute.s
- } ;
-
---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 : TransVerb -> NounPhrase -> VerbGroup = \se,dig ->
- {s = se.s ;
- s2 = negation ;
- s3 = \\_,_ => se.s2 ++ dig.s ! PAcc
- } ;
-
--- Transitive verbs with accusative objects can be used passively.
--- The function does not check that the verb is transitive.
--- Therefore, the function can also be used for "han löps", etc.
--- The syntax is the same as for active verbs, with the choice of the
--- "s" passive form.
-
- passVerb : Verb -> VerbGroup = \se -> ---- passive not yet
- {s = table {VPres m _ => se.s ! VPres m Pass} ;
- s2 = negation ;
- s3 = \\_,_ => []
- } ;
-
--- Transitive verbs can be used elliptically as verbs. The semantics
--- is left to applications. The definition is trivial, due to record
--- subtyping.
-
- transAsVerb : TransVerb -> Verb = \love ->
- love ;
-
--- *Ditransitive verbs* are verbs with three argument places.
--- We treat so far only the rule in which the ditransitive
--- verb takes both complements to form a verb phrase.
-
- DitransVerb = TransVerb ** {s3 : Preposition} ;
-
- mkDitransVerb : Verb -> Preposition -> Preposition -> DitransVerb = \v,p1,p2 ->
- v ** {s2 = p1 ; s3 = p2} ;
-
- complDitransVerb :
- DitransVerb -> NounPhrase -> NounPhrase -> VerbGroup = \ge,dig,vin ->
- {s = ge.s ;
- s2 = negation ;
- s3 = \\_,_ => ge.s2 ++ dig.s ! PAcc ++ ge.s3 ++ vin.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 [])
- } ;
-
- advAdjPhrase : SS -> AdjPhrase -> AdjPhrase = \mycket, dyr ->
- {s = \\a,c => mycket.s ++ dyr.s ! a ! c ;
- p = dyr.p
- } ;
-
--- 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 ! VPres Indicat Act ;
- 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
- }
- } ;
-
-
---3 Sentence-complement verbs
---
--- Sentence-complement verbs take sentences as complements.
-
- SentenceVerb : Type = Verb ;
-
- complSentVerb : SentenceVerb -> Sentence -> VerbGroup = \se,duler ->
- {s = se.s ;
- s2 = negation ;
- s3 = \\_,_ => optStr "att" ++ duler.s ! Main
- } ;
-
---3 Verb-complement verbs
---
--- Sentence-complement verbs take verb phrases as complements.
--- They can be auxiliaries ("kan", "måste") or ordinary verbs
--- ("försöka"); this distinction cannot be done in the multilingual
--- API and leads to some anomalies in Swedish, but less so than in English.
-
- VerbVerb : Type = Verb ** {isAux : Bool} ;
-
- complVerbVerb : VerbVerb -> VerbGroup -> VerbGroup = \vilja, simma ->
- {s = vilja.s ;
- s2 = negation ;
- s3 = \\g,n => if_then_Str vilja.isAux [] "att" ++
- simma.s ! VPres Infinit Act ++ simma.s2 ! True ++ simma.s3 ! g ! n
- } ;
-
-
---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 ! VPres Indicat Act ;
- 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 ! VPres Indicat Act ++
- 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 ! VPres Imperat Act ++ titta.s2 ++ titta.s3 ! Utr ! n} ;
-
- imperUtterance : Number -> Imperative -> Utterance = \n,I ->
- ss (I.s ! n ++ "!") ;
-
---2 Sentence adverbials
---
--- This class covers adverbials such as "annars", "därför", which are prefixed
--- to a sentence to form a phrase.
-
- advSentence : SS -> Sentence -> Utterance = \annars,soverhan ->
- ss (annars.s ++ soverhan.s ! Inv ++ ".") ;
-
-
---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} ;
-
- subjunctVerbPhrase : VerbPhrase -> Subjunction -> Sentence -> VerbPhrase =
- \V, if, A ->
- adVerbPhrase V (advPost (if.s ++ A.s ! Sub)) ;
-
---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) ;
-} ;