mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 11:42:49 -06:00
new structure of much in Rules
This commit is contained in:
11
lib/resource/README
Normal file
11
lib/resource/README
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
23/1/2005
|
||||||
|
|
||||||
|
Radically extended and restructured Categories and Rules
|
||||||
|
|
||||||
|
Implemented for Scandinavian languages only; more to come soon
|
||||||
|
|
||||||
|
Old abstract modules are temporarily found in oldabstract/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@ cat
|
|||||||
Cl ; -- clause (variable tense) e.g. "John walks"/"John walked"
|
Cl ; -- clause (variable tense) e.g. "John walks"/"John walked"
|
||||||
Slash ; -- sentence without NP, e.g. "John waits for (...)"
|
Slash ; -- sentence without NP, e.g. "John waits for (...)"
|
||||||
RP ; -- relative pronoun, e.g. "which", "the mother of whom"
|
RP ; -- relative pronoun, e.g. "which", "the mother of whom"
|
||||||
RC ; -- relative clause, e.g. "who walks", "that I wait for"
|
RCl ; -- relative clause, e.g. "who walks", "that I wait for"
|
||||||
|
|
||||||
--!
|
--!
|
||||||
--3 Questions and imperatives
|
--3 Questions and imperatives
|
||||||
@@ -129,7 +129,7 @@ cat
|
|||||||
|
|
||||||
IP ; -- interrogative pronoun, e.g. "who", "whose mother", "which yellow car"
|
IP ; -- interrogative pronoun, e.g. "who", "whose mother", "which yellow car"
|
||||||
IAdv ; -- interrogative adverb., e.g. "when", "why"
|
IAdv ; -- interrogative adverb., e.g. "when", "why"
|
||||||
Qu ; -- question, e.g. "who walks"
|
QCl ; -- question, e.g. "who walks"
|
||||||
Imp ; -- imperative, e.g. "walk!"
|
Imp ; -- imperative, e.g. "walk!"
|
||||||
|
|
||||||
--!
|
--!
|
||||||
@@ -153,6 +153,28 @@ cat
|
|||||||
Text ; -- sequence of phrases e.g. "One is odd. Therefore, two is even."
|
Text ; -- sequence of phrases e.g. "One is odd. Therefore, two is even."
|
||||||
|
|
||||||
---- next
|
---- next
|
||||||
|
|
||||||
V3A ; -- paint the house red
|
V3A ; -- paint the house red
|
||||||
V3V ; -- ask John to come
|
V3VSubj ; -- promise John to come
|
||||||
|
V3VObj ; -- ask John to come
|
||||||
|
V3S ; -- tell John that it is raining
|
||||||
|
VQ ; -- ask who comes
|
||||||
|
V3Q ; -- ask John who comes
|
||||||
|
VA ; -- look yellow
|
||||||
|
|
||||||
|
V0 ; -- (it) rains
|
||||||
|
|
||||||
|
AS ; -- (it is) important that he comes
|
||||||
|
AV ; -- difficult to play
|
||||||
|
|
||||||
|
-- NB: it is difficult to play the sonata
|
||||||
|
-- vs. it (the sonata) is difficult to play
|
||||||
|
|
||||||
|
QS ; -- question with fixed tense and polarity
|
||||||
|
RS ; -- relative clause with fixed tense and polarity
|
||||||
|
|
||||||
|
TP ; -- tense x polarity selector
|
||||||
|
Tense ; -- (abstract) tense
|
||||||
|
Ant ; -- (abstract) anteriority
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ fun
|
|||||||
ComparADeg : ADeg -> NP -> AP ; -- "older than John"
|
ComparADeg : ADeg -> NP -> AP ; -- "older than John"
|
||||||
SuperlNP : ADeg -> CN -> NP ; -- "the oldest man"
|
SuperlNP : ADeg -> CN -> NP ; -- "the oldest man"
|
||||||
|
|
||||||
---- AdjPart : V -> A ; -- "forgotten"
|
|
||||||
|
|
||||||
--!
|
--!
|
||||||
--3 Verbs and verb phrases
|
--3 Verbs and verb phrases
|
||||||
@@ -67,7 +66,8 @@ fun
|
|||||||
PredV : V -> VG ; -- "walk", "doesn't walk"
|
PredV : V -> VG ; -- "walk", "doesn't walk"
|
||||||
PredPassV : V -> VG ; -- "is seen", "is not seen"
|
PredPassV : V -> VG ; -- "is seen", "is not seen"
|
||||||
PredV2 : V2 -> NP -> VG ; -- "sees John", "doesn't see John"
|
PredV2 : V2 -> NP -> VG ; -- "sees John", "doesn't see John"
|
||||||
PredV3 : V3 -> NP -> NP -> VG ; -- "prefers wine to beer"
|
--- PredV3 : V3 -> NP -> NP -> VG ; -- "prefers wine to beer"
|
||||||
|
PredV3 : V3 -> NP -> V2 ; -- "prefers wine (to beer)"
|
||||||
PredVS : VS -> S -> VG ; -- "says that I run", "doesn't say..."
|
PredVS : VS -> S -> VG ; -- "says that I run", "doesn't say..."
|
||||||
PredVV : VV -> VG -> VG ; -- "can run", "can't run", "tries to run"
|
PredVV : VV -> VG -> VG ; -- "can run", "can't run", "tries to run"
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ fun
|
|||||||
PredCN : CN -> VG ; -- "is a man", "isn't a man"
|
PredCN : CN -> VG ; -- "is a man", "isn't a man"
|
||||||
VTrans : V2 -> V ; -- "loves"
|
VTrans : V2 -> V ; -- "loves"
|
||||||
|
|
||||||
PosVG,NegVG : VG -> VP ; --
|
--- PosVG,NegVG : VG -> VP ; --
|
||||||
|
|
||||||
PredVG : NP -> VG -> Cl ; -- preserves all pol/tense variation
|
PredVG : NP -> VG -> Cl ; -- preserves all pol/tense variation
|
||||||
|
|
||||||
@@ -99,17 +99,24 @@ fun
|
|||||||
--3 Sentences and relative clauses
|
--3 Sentences and relative clauses
|
||||||
--
|
--
|
||||||
|
|
||||||
PredVP : NP -> VP -> S ; -- "John walks"
|
--- PredVP : NP -> VP -> S ; -- "John walks"
|
||||||
PosSlashV2,NegSlashV2 : NP -> V2 -> Slash ; -- "John sees", "John doesn't see"
|
--- PosSlashV2,NegSlashV2 : NP -> V2 -> Slash ; -- "John sees", "John doesn't see"
|
||||||
OneVP : VP -> S ; -- "one walks"
|
SlashV2 : NP -> V2 -> Slash ; -- "John sees", "John doesn't see"
|
||||||
ThereNP : NP -> S ; -- "there is a bar","there are 86 bars"
|
--- OneVP : VP -> S ; -- "one walks"
|
||||||
|
OneVG : VG -> Cl ; -- "one walks"
|
||||||
|
--- ThereNP : NP -> S ; -- "there is a bar","there are 86 bars"
|
||||||
|
ExistCN : CN -> Cl ; -- "there is a bar"
|
||||||
|
ExistNumCN : Num -> CN -> Cl ; -- "there are (86) bars"
|
||||||
|
|
||||||
IdRP : RP ; -- "which"
|
IdRP : RP ; -- "which"
|
||||||
FunRP : N2 -> RP -> RP ; -- "the successor of which"
|
FunRP : N2 -> RP -> RP ; -- "the successor of which"
|
||||||
RelVP : RP -> VP -> RC ; -- "who walks", "who doesn't walk"
|
--- RelVP : RP -> VP -> RCl ; -- "who walks", "who doesn't walk"
|
||||||
RelSlash : RP -> Slash -> RC ; -- "that I wait for"/"for which I wait"
|
RelVG : RP -> VG -> RCl ; -- "who walks", "who doesn't walk"
|
||||||
ModRC : CN -> RC -> CN ; -- "man who walks"
|
RelSlash : RP -> Slash -> RCl ; -- "that I wait for"/"for which I wait"
|
||||||
RelSuch : S -> RC ; -- "such that it is even"
|
--- ModRC : CN -> RS -> CN ; -- "man who walks"
|
||||||
|
ModRS : CN -> RS -> CN ; -- "man who walks"
|
||||||
|
--- RelSuch : S -> RCl ; -- "such that it is even"
|
||||||
|
RelCl : Cl -> RCl ; -- "such that it is even"
|
||||||
|
|
||||||
--!
|
--!
|
||||||
--3 Questions and imperatives
|
--3 Questions and imperatives
|
||||||
@@ -121,16 +128,21 @@ fun
|
|||||||
NounIPOne, NounIPMany : CN -> IP ; -- "which car", "which cars"
|
NounIPOne, NounIPMany : CN -> IP ; -- "which car", "which cars"
|
||||||
---- NounIPHowMany : CN -> IP ; -- "how many cars"
|
---- NounIPHowMany : CN -> IP ; -- "how many cars"
|
||||||
|
|
||||||
QuestVP : NP -> VP -> Qu ; -- "does John walk"; "doesn't John walk"
|
QuestVG : NP -> VG -> QCl ; -- "does John walk"; "doesn't John walk"
|
||||||
IntVP : IP -> VP -> Qu ; -- "who walks"
|
--- IntVP : IP -> VP -> QCl ; -- "who walks"
|
||||||
IntSlash : IP -> Slash -> Qu ; -- "whom does John see"
|
IntVG : IP -> VG -> QCl ; -- "who walks"
|
||||||
QuestAdv : IAdv -> NP -> VP -> Qu ; -- "why do you walk"
|
IntSlash : IP -> Slash -> QCl ; -- "whom does John see"
|
||||||
IsThereNP : NP -> Qu ; -- "is there a bar", "are there (86) bars"
|
--- QuestAdv : IAdv -> NP -> VP -> QS ; -- "why do you walk"
|
||||||
|
QuestAdv : IAdv -> NP -> VG -> QCl ; -- "why do you walk"
|
||||||
|
--- IsThereNP : NP -> QS ; -- "is there a bar", "are there (86) bars"
|
||||||
|
ExistQCl : CN -> QCl ; -- "is there a bar",
|
||||||
|
ExistNumQCl : Num -> CN -> QCl ; -- "are there (86) bars"
|
||||||
|
|
||||||
ImperVP : VP -> Imp ; -- "be a man"
|
ImperVP : VP -> Imp ; -- "be a man"
|
||||||
|
|
||||||
|
----rename these ??
|
||||||
IndicPhrase : S -> Phr ; -- "I walk."
|
IndicPhrase : S -> Phr ; -- "I walk."
|
||||||
QuestPhrase : Qu -> Phr ; -- "Do I walk?"
|
QuestPhrase : QS -> Phr ; -- "Do I walk?"
|
||||||
ImperOne, ImperMany : Imp -> Phr ; -- "Be a man!", "Be men!"
|
ImperOne, ImperMany : Imp -> Phr ; -- "Be a man!", "Be men!"
|
||||||
|
|
||||||
PrepS : PP -> AdS ; -- "in Sweden, (there are bears)"
|
PrepS : PP -> AdS ; -- "in Sweden, (there are bears)"
|
||||||
@@ -173,7 +185,8 @@ fun
|
|||||||
|
|
||||||
SubjS : Subj -> S -> S -> S ; -- "if 2 is odd, 3 is even"
|
SubjS : Subj -> S -> S -> S ; -- "if 2 is odd, 3 is even"
|
||||||
SubjImper : Subj -> S -> Imp -> Imp ; -- "if it is hot, use a glove!"
|
SubjImper : Subj -> S -> Imp -> Imp ; -- "if it is hot, use a glove!"
|
||||||
SubjQu : Subj -> S -> Qu -> Qu ; -- "if you are new, who are you?"
|
--- SubjQu : Subj -> S -> QS -> QS ; -- "if you are new, who are you?"
|
||||||
|
SubjQS : Subj -> S -> QS -> QS ; -- "if you are new, who are you?"
|
||||||
SubjVP : VP -> Subj -> S -> VP ; -- "(a man who) sings when he runs"
|
SubjVP : VP -> Subj -> S -> VP ; -- "(a man who) sings when he runs"
|
||||||
|
|
||||||
--!
|
--!
|
||||||
@@ -195,5 +208,44 @@ fun
|
|||||||
OnePhr : Phr -> Text ;
|
OnePhr : Phr -> Text ;
|
||||||
ConsPhr : Phr -> Text -> Text ;
|
ConsPhr : Phr -> Text -> Text ;
|
||||||
|
|
||||||
|
--- next
|
||||||
|
|
||||||
|
PredVV2 : VV -> V2 -> V2 ; -- (which song do you) want to play
|
||||||
|
AdjPart : V -> A ; -- forgotten
|
||||||
|
ReflV2 : V2 -> VG ;
|
||||||
|
|
||||||
|
-- In these predications, the last argument gets its agreement
|
||||||
|
-- features from the second, and cannot hence be made to produce
|
||||||
|
-- $V3A$/$V3S$.
|
||||||
|
|
||||||
|
PredV3A : V3A -> NP -> AP -> VG ;
|
||||||
|
PredV3VSubj : V3VSubj -> NP -> VG -> VG ;
|
||||||
|
|
||||||
|
--- In these three it would be possible, but hardly useful...
|
||||||
|
|
||||||
|
PredV3VObj : V3VObj -> NP -> VG -> VG ;
|
||||||
|
PredV3S : V3S -> NP -> S -> VG ;
|
||||||
|
PredV3Q : V3Q -> NP -> QS -> VG ;
|
||||||
|
|
||||||
|
|
||||||
|
PredVQ : VQ -> QS -> VG ;
|
||||||
|
PredVA : VA -> AP -> VG ;
|
||||||
|
|
||||||
|
UseCl : TP -> Cl -> S ;
|
||||||
|
UseVG : TP -> VG -> VP ;
|
||||||
|
UseRCl : TP -> RCl -> RS ;
|
||||||
|
UseQCl : TP -> QCl -> QS ;
|
||||||
|
|
||||||
|
PosTP : Tense -> Ant -> TP ;
|
||||||
|
NegTP : Tense -> Ant -> TP ;
|
||||||
|
|
||||||
|
TPresent : Tense ;
|
||||||
|
TPast : Tense ;
|
||||||
|
TFuture : Tense ;
|
||||||
|
TConditional : Tense ;
|
||||||
|
|
||||||
|
ASimul : Ant ;
|
||||||
|
AAnter : Ant ;
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -14,5 +14,16 @@ fun
|
|||||||
Mother, Uncle : N2 ;
|
Mother, Uncle : N2 ;
|
||||||
Connection : N3 ;
|
Connection : N3 ;
|
||||||
Well, Always : Adv ;
|
Well, Always : Adv ;
|
||||||
John, Mary : PN ;
|
John, Mary : PN ;
|
||||||
|
|
||||||
|
AlreadyAdv, NowAdv : Adv ; -- already, now
|
||||||
|
Paint : V3A ;
|
||||||
|
Green : ADeg ;
|
||||||
|
Beg : V3VObj ;
|
||||||
|
Promise : VV ;
|
||||||
|
Promise2 : V3VSubj ;
|
||||||
|
Wonder : VQ ;
|
||||||
|
Ask : V3Q ;
|
||||||
|
Tell : V3S ;
|
||||||
|
Look : VA ;
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -23,9 +23,11 @@ concrete StructuralDan of Structural =
|
|||||||
ThisNP = regNameNounPhrase ["det her"] NNeutr ;
|
ThisNP = regNameNounPhrase ["det her"] NNeutr ;
|
||||||
ThatNP = regNameNounPhrase ["det der"] NNeutr ;
|
ThatNP = regNameNounPhrase ["det der"] NNeutr ;
|
||||||
TheseNumNP n =
|
TheseNumNP n =
|
||||||
{s = \\c => ["de her"] ++ n.s ! npCase c ; g = Neutr ; n = Pl} ;
|
{s = \\c => ["de her"] ++ n.s ! npCase c ; g = Neutr ; n = Pl ; p
|
||||||
|
= P3} ;
|
||||||
ThoseNumNP n =
|
ThoseNumNP n =
|
||||||
{s = \\c => ["de der"] ++ n.s ! npCase c ; g = Neutr ; n = Pl} ;
|
{s = \\c => ["de der"] ++ n.s ! npCase c ; g = Neutr ; n = Pl ; p
|
||||||
|
= P3} ;
|
||||||
|
|
||||||
EveryDet = varjeDet ;
|
EveryDet = varjeDet ;
|
||||||
AllMassDet = mkDeterminerSgGender2 "all" "alt" IndefP ;
|
AllMassDet = mkDeterminerSgGender2 "all" "alt" IndefP ;
|
||||||
@@ -74,7 +76,7 @@ concrete StructuralDan of Structural =
|
|||||||
ThereforeAdv = ss "derfor" ;
|
ThereforeAdv = ss "derfor" ;
|
||||||
|
|
||||||
EverybodyNP = let alla = table {Nom => "alle" ; Gen => "alles"} in
|
EverybodyNP = let alla = table {Nom => "alle" ; Gen => "alles"} in
|
||||||
{s = \\c => alla ! npCase c ; g = Utr ; n = Pl} ;
|
{s = \\c => alla ! npCase c ; g = Utr ; n = Pl ; p = P3} ;
|
||||||
SomebodyNP = nameNounPhrase (mkProperName "nogen" NUtr) ;
|
SomebodyNP = nameNounPhrase (mkProperName "nogen" NUtr) ;
|
||||||
NobodyNP = nameNounPhrase (mkProperName "ingen" NUtr) ;
|
NobodyNP = nameNounPhrase (mkProperName "ingen" NUtr) ;
|
||||||
EverythingNP = nameNounPhrase (mkProperName "alt" NNeutr) ;
|
EverythingNP = nameNounPhrase (mkProperName "alt" NNeutr) ;
|
||||||
|
|||||||
@@ -112,4 +112,15 @@ instance SyntaxDan of SyntaxScand = TypesDan **
|
|||||||
mkDeterminerSgGender3 : Str -> Str -> Str -> SpeciesP -> Determiner = \en,_,ett ->
|
mkDeterminerSgGender3 : Str -> Str -> Str -> SpeciesP -> Determiner = \en,_,ett ->
|
||||||
mkDeterminerSgGender (table {Utr => en ; Neutr => ett}) ;
|
mkDeterminerSgGender (table {Utr => en ; Neutr => ett}) ;
|
||||||
|
|
||||||
|
adjPastPart : Verb -> Adjective = \verb -> {
|
||||||
|
s = \\af,c => verb.s1 ++ verb.s ! VI (PtPret c) ---- af
|
||||||
|
} ;
|
||||||
|
|
||||||
|
reflPron : Number -> Person -> Str = \n,p -> case <n,p> of {
|
||||||
|
<Sg,P1> => "mig" ;
|
||||||
|
<Sg,P2> => "mig" ;
|
||||||
|
<Pl,P1> => "os" ;
|
||||||
|
<Pl,P2> => "seg" ; --- ? dere ?
|
||||||
|
_ => "seg"
|
||||||
|
} ;
|
||||||
}
|
}
|
||||||
@@ -23,9 +23,11 @@ concrete StructuralNor of Structural =
|
|||||||
ThisNP = regNameNounPhrase ["dette"] NNeutr ;
|
ThisNP = regNameNounPhrase ["dette"] NNeutr ;
|
||||||
ThatNP = regNameNounPhrase ["det"] NNeutr ;
|
ThatNP = regNameNounPhrase ["det"] NNeutr ;
|
||||||
TheseNumNP n =
|
TheseNumNP n =
|
||||||
{s = \\c => ["disse"] ++ n.s ! npCase c ; g = Neutr ; n = Pl} ;
|
{s = \\c => ["disse"] ++ n.s ! npCase c ; g = Neutr ; n = Pl ; p =
|
||||||
|
P3} ;
|
||||||
ThoseNumNP n =
|
ThoseNumNP n =
|
||||||
{s = \\c => ["de der"] ++ n.s ! npCase c ; g = Neutr ; n = Pl} ;
|
{s = \\c => ["de der"] ++ n.s ! npCase c ; g = Neutr ; n = Pl ; p
|
||||||
|
= P3} ;
|
||||||
|
|
||||||
EveryDet = varjeDet ;
|
EveryDet = varjeDet ;
|
||||||
AllMassDet = mkDeterminerSgGender2 "all" "alt" IndefP ;
|
AllMassDet = mkDeterminerSgGender2 "all" "alt" IndefP ;
|
||||||
@@ -74,7 +76,8 @@ concrete StructuralNor of Structural =
|
|||||||
ThereforeAdv = ss "derfor" ;
|
ThereforeAdv = ss "derfor" ;
|
||||||
|
|
||||||
EverybodyNP = let alla = table {Nom => "alle" ; Gen => "alles"} in
|
EverybodyNP = let alla = table {Nom => "alle" ; Gen => "alles"} in
|
||||||
{s = \\c => alla ! npCase c ; g = Utr Masc ; n = Pl} ;
|
{s = \\c => alla ! npCase c ; g = Utr Masc ; n = Pl
|
||||||
|
; p = P3} ;
|
||||||
SomebodyNP = nameNounPhrase (mkProperName "noen" (NUtr Masc)) ;
|
SomebodyNP = nameNounPhrase (mkProperName "noen" (NUtr Masc)) ;
|
||||||
NobodyNP = nameNounPhrase (mkProperName "ingen" (NUtr Masc)) ;
|
NobodyNP = nameNounPhrase (mkProperName "ingen" (NUtr Masc)) ;
|
||||||
EverythingNP = nameNounPhrase (mkProperName "alt" NNeutr) ;
|
EverythingNP = nameNounPhrase (mkProperName "alt" NNeutr) ;
|
||||||
|
|||||||
@@ -112,4 +112,16 @@ instance SyntaxNor of SyntaxScand = TypesNor **
|
|||||||
mkDeterminerSgGender3 : Str -> Str -> Str -> SpeciesP -> Determiner = \en,ei,ett ->
|
mkDeterminerSgGender3 : Str -> Str -> Str -> SpeciesP -> Determiner = \en,ei,ett ->
|
||||||
mkDeterminerSgGender (table {Utr Masc => en ; Utr NoMasc => ei ; Neutr => ett}) ;
|
mkDeterminerSgGender (table {Utr Masc => en ; Utr NoMasc => ei ; Neutr => ett}) ;
|
||||||
|
|
||||||
|
adjPastPart : Verb -> Adjective = \verb -> {
|
||||||
|
s = \\af,c => verb.s1 ++ verb.s ! VI (PtPret c) ---- af
|
||||||
|
} ;
|
||||||
|
|
||||||
|
reflPron : Number -> Person -> Str = \n,p -> case <n,p> of {
|
||||||
|
<Sg,P1> => "meg" ;
|
||||||
|
<Sg,P2> => "meg" ;
|
||||||
|
<Pl,P1> => "oss" ;
|
||||||
|
<Pl,P2> => "jer" ;
|
||||||
|
_ => "seg"
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
158
lib/resource/oldabstract/Categories.gf
Normal file
158
lib/resource/oldabstract/Categories.gf
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
--1 Abstract Syntax Categories for Multilingual Resource Grammar
|
||||||
|
--
|
||||||
|
-- Aarne Ranta 2002 -- 2004
|
||||||
|
--
|
||||||
|
-- Although concrete syntax differs a lot between different languages,
|
||||||
|
-- many structures can be treated as common, on the level
|
||||||
|
-- of abstraction that GF provides.
|
||||||
|
-- What we will present in the following is a linguistically oriented abstract
|
||||||
|
-- syntax that has been successfully defined for the following languages:
|
||||||
|
--
|
||||||
|
--* $Eng$lish
|
||||||
|
--* $Fin$nish
|
||||||
|
--* $Fre$nch
|
||||||
|
--* $Ger$man
|
||||||
|
--* $Ita$lian
|
||||||
|
--* $Rus$sian
|
||||||
|
--* $Swe$dish
|
||||||
|
--
|
||||||
|
-- The three-letter prefixes are used in file names all over the resource
|
||||||
|
-- grammar library; we refer to them commonly as $X$ below.
|
||||||
|
--!
|
||||||
|
-- The grammar has been applied to define language
|
||||||
|
-- fragments on technical or near-to-technical domains: database queries,
|
||||||
|
-- video recorder dialogue systems, software specifications, and a
|
||||||
|
-- health-related phrase book. Each new application helped to identify some
|
||||||
|
-- missing structures in the resource and suggested some additions, but the
|
||||||
|
-- number of required additions was usually small.
|
||||||
|
--
|
||||||
|
-- To use the resource in applications, you need the following
|
||||||
|
-- $cat$ and $fun$ rules in $oper$ form, completed by taking the
|
||||||
|
-- $lincat$ and $lin$ judgements of a particular language. This is done
|
||||||
|
-- by using, instead of this module, the $reuse$ module which has the name
|
||||||
|
-- $ResourceX$. It is located in the subdirectory
|
||||||
|
-- $lib/resource/lang$ where $lang$ is the full name of the language.
|
||||||
|
|
||||||
|
|
||||||
|
abstract Categories = PredefAbs ** {
|
||||||
|
--!
|
||||||
|
--2 Categories
|
||||||
|
--
|
||||||
|
-- The categories of this resource grammar are mostly 'standard' categories
|
||||||
|
-- of linguistics. Their is no claim that they correspond to semantic categories
|
||||||
|
-- definable in type theory: to define such correspondences is the business
|
||||||
|
-- of applications grammars. In general, the correspondence between linguistic
|
||||||
|
-- and semantic categories is many-to-many.
|
||||||
|
--
|
||||||
|
-- Categories that may look special are $A2$, $N2$, and $V2$. They are all
|
||||||
|
-- instances of endowing another category with a complement, which can be either
|
||||||
|
-- a direct object (whose case may vary) or a prepositional phrase. Prepositional
|
||||||
|
-- phrases that are not complements belong to the category
|
||||||
|
-- $Adv$ of adverbs.
|
||||||
|
--
|
||||||
|
-- In each group below, some categories are *lexical* in the sense of only
|
||||||
|
-- containing atomic elements. These elements are not necessarily expressed by
|
||||||
|
-- one word in all languages; the essential thing is that they have no
|
||||||
|
-- constituents. Thus they have no productions in this part of the
|
||||||
|
-- resource grammar. The $ParadigmsX$ grammars provide ways of defining
|
||||||
|
-- lexical elements.
|
||||||
|
--
|
||||||
|
-- Lexical categories are listed before other categories
|
||||||
|
-- in each group and divided by an empty line.
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Nouns and noun phrases
|
||||||
|
--
|
||||||
|
|
||||||
|
cat
|
||||||
|
N ; -- simple common noun, e.g. "car"
|
||||||
|
CN ; -- common noun phrase, e.g. "red car", "car that John owns"
|
||||||
|
N2 ; -- function word, e.g. "mother (of)"
|
||||||
|
N3 ; -- two-place function, e.g. "flight (from) (to)"
|
||||||
|
|
||||||
|
PN ; -- proper name, e.g. "John", "New York"
|
||||||
|
NP ; -- noun phrase, e.g. "John", "all cars", "you"
|
||||||
|
Det ; -- determiner, e.g. "every", "all"
|
||||||
|
Num ; -- numeral, e.g. "three", "879"
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Adjectives and adjectival phrases
|
||||||
|
--
|
||||||
|
|
||||||
|
A ; -- one-place adjective, e.g. "even"
|
||||||
|
A2 ; -- two-place adjective, e.g. "divisible (by)"
|
||||||
|
ADeg ; -- degree adjective, e.g. "big/bigger/biggest"
|
||||||
|
|
||||||
|
AP ; -- adjective phrase, e.g. "divisible by two", "bigger than John"
|
||||||
|
|
||||||
|
-- The difference between $A$ and $ADeg$ is that the former has no
|
||||||
|
-- comparison forms.
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Verbs and verb phrases
|
||||||
|
--
|
||||||
|
|
||||||
|
V ; -- one-place verb, e.g. "walk"
|
||||||
|
V2 ; -- two-place verb, e.g. "love", "wait (for)", "switch on"
|
||||||
|
V3 ; -- three-place verb, e.g. "give", "prefer (stg) (to stg)"
|
||||||
|
VS ; -- sentence-compl. verb, e.g. "say", "prove"
|
||||||
|
VV ; -- verb-compl. verb, e.g. "can", "want"
|
||||||
|
|
||||||
|
VG ; -- verbal group, e.g. "switch the light on"
|
||||||
|
VP ; -- verb phrase, e.g. "switch the light on", "don't run"
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Adverbs and prepositions/cases
|
||||||
|
--
|
||||||
|
|
||||||
|
Adv ; -- adverbial e.g. "now", "in the house"
|
||||||
|
AdA ; -- ad-adjective e.g. "very"
|
||||||
|
AdS ; -- sentence adverbial e.g. "therefore", "otherwise"
|
||||||
|
PP ; -- prepositional phrase e.g. "in London"
|
||||||
|
Prep ; -- pre/postposition, case e.g. "after", Adessive
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Sentences and relative clauses
|
||||||
|
--
|
||||||
|
-- This group has no lexical categories.
|
||||||
|
|
||||||
|
S ; -- sentence (fixed tense) e.g. "John walks", "John walked"
|
||||||
|
Cl ; -- clause (variable tense) e.g. "John walks"/"John walked"
|
||||||
|
Slash ; -- sentence without NP, e.g. "John waits for (...)"
|
||||||
|
RP ; -- relative pronoun, e.g. "which", "the mother of whom"
|
||||||
|
RC ; -- relative clause, e.g. "who walks", "that I wait for"
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Questions and imperatives
|
||||||
|
--
|
||||||
|
-- This group has no lexical categories.
|
||||||
|
|
||||||
|
IP ; -- interrogative pronoun, e.g. "who", "whose mother", "which yellow car"
|
||||||
|
IAdv ; -- interrogative adverb., e.g. "when", "why"
|
||||||
|
Qu ; -- question, e.g. "who walks"
|
||||||
|
Imp ; -- imperative, e.g. "walk!"
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Coordination and subordination
|
||||||
|
--
|
||||||
|
|
||||||
|
Conj ; -- conjunction, e.g. "and"
|
||||||
|
ConjD ; -- distributed conj. e.g. "both - and"
|
||||||
|
Subj ; -- subjunction, e.g. "if", "when"
|
||||||
|
|
||||||
|
ListS ; -- list of sentences
|
||||||
|
ListAP ; -- list of adjectival phrases
|
||||||
|
ListNP ; -- list of noun phrases
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Complete utterances
|
||||||
|
--
|
||||||
|
-- This group has no lexical categories.
|
||||||
|
|
||||||
|
Phr ; -- full phrase, e.g. "John walks.","Who walks?", "Wait for me!"
|
||||||
|
Text ; -- sequence of phrases e.g. "One is odd. Therefore, two is even."
|
||||||
|
|
||||||
|
---- next
|
||||||
|
V3A ; -- paint the house red
|
||||||
|
V3V ; -- ask John to come
|
||||||
|
}
|
||||||
199
lib/resource/oldabstract/Rules.gf
Normal file
199
lib/resource/oldabstract/Rules.gf
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
--!
|
||||||
|
--2 Rules
|
||||||
|
--
|
||||||
|
-- This set of rules is minimal, in the sense of defining the simplest combinations
|
||||||
|
-- of categories and not having redundant rules.
|
||||||
|
-- When the resource grammar is used as a library, it will often be useful to
|
||||||
|
-- access it through an intermediate library that defines more rules as
|
||||||
|
-- 'macros' for combinations of the ones below.
|
||||||
|
|
||||||
|
abstract Rules = Categories ** {
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Nouns and noun phrases
|
||||||
|
--
|
||||||
|
|
||||||
|
fun
|
||||||
|
UseN : N -> CN ; -- "car"
|
||||||
|
UsePN : PN -> NP ; -- "John"
|
||||||
|
|
||||||
|
SymbPN : String -> PN ; -- "x"
|
||||||
|
SymbCN : CN -> String -> CN ; -- "number x"
|
||||||
|
IntCN : CN -> Int -> CN ; -- "number 53"
|
||||||
|
|
||||||
|
IndefOneNP : CN -> NP ; -- "a car", "cars"
|
||||||
|
IndefNumNP : Num -> CN -> NP ; -- "houses", "86 houses"
|
||||||
|
DefOneNP : CN -> NP ; -- "the car"
|
||||||
|
DefNumNP : Num -> CN -> NP ; -- "the cars", "the 86 cars"
|
||||||
|
|
||||||
|
DetNP : Det -> CN -> NP ; -- "every car"
|
||||||
|
MassNP : CN -> NP ; -- "wine"
|
||||||
|
|
||||||
|
AppN2 : N2 -> NP -> CN ; -- "successor of zero"
|
||||||
|
AppN3 : N3 -> NP -> N2 ; -- "flight from Paris"
|
||||||
|
UseN2 : N2 -> CN ; -- "successor"
|
||||||
|
|
||||||
|
ModAP : AP -> CN -> CN ; -- "red car"
|
||||||
|
CNthatS : CN -> S -> CN ; -- "idea that the Earth is flat"
|
||||||
|
|
||||||
|
ModGenOne : NP -> CN -> NP ; -- "John's car"
|
||||||
|
ModGenNum : Num -> NP -> CN -> NP ; -- "John's cars", "John's 86 cars"
|
||||||
|
|
||||||
|
UseInt : Int -> Num ; -- "32" --- assumes i > 1
|
||||||
|
NoNum : Num ; -- no numeral modifier
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Adjectives and adjectival phrases
|
||||||
|
--
|
||||||
|
|
||||||
|
UseA : A -> AP ; -- "red"
|
||||||
|
ComplA2 : A2 -> NP -> AP ; -- "divisible by two"
|
||||||
|
|
||||||
|
PositADeg : ADeg -> AP ; -- "old"
|
||||||
|
ComparADeg : ADeg -> NP -> AP ; -- "older than John"
|
||||||
|
SuperlNP : ADeg -> CN -> NP ; -- "the oldest man"
|
||||||
|
|
||||||
|
---- AdjPart : V -> A ; -- "forgotten"
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Verbs and verb phrases
|
||||||
|
--
|
||||||
|
-- The principal way of forming sentences ($S$) is by combining a noun phrase
|
||||||
|
-- with a verb phrase (the $PredVP$ rule below). In addition to this, verb
|
||||||
|
-- phrases have uses in relative clauses and questions. Verb phrases already
|
||||||
|
-- have (or have not) a negation, but they are formed from verbal groups
|
||||||
|
-- ($VG$), which have both positive and negative forms.
|
||||||
|
|
||||||
|
PredV : V -> VG ; -- "walk", "doesn't walk"
|
||||||
|
PredPassV : V -> VG ; -- "is seen", "is not seen"
|
||||||
|
PredV2 : V2 -> NP -> VG ; -- "sees John", "doesn't see John"
|
||||||
|
PredV3 : V3 -> NP -> NP -> VG ; -- "prefers wine to beer"
|
||||||
|
PredVS : VS -> S -> VG ; -- "says that I run", "doesn't say..."
|
||||||
|
PredVV : VV -> VG -> VG ; -- "can run", "can't run", "tries to run"
|
||||||
|
|
||||||
|
PredNP : NP -> VG ; -- "is John", "is not John"
|
||||||
|
PredPP : PP -> VG ; -- "is in France", "is not in France"
|
||||||
|
PredAP : AP -> VG ; -- "is old", "isn't old"
|
||||||
|
PredSuperl : ADeg -> VG ; -- "is the oldest"
|
||||||
|
PredCN : CN -> VG ; -- "is a man", "isn't a man"
|
||||||
|
VTrans : V2 -> V ; -- "loves"
|
||||||
|
|
||||||
|
PosVG,NegVG : VG -> VP ; --
|
||||||
|
|
||||||
|
PredVG : NP -> VG -> Cl ; -- preserves all pol/tense variation
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Adverbs
|
||||||
|
--
|
||||||
|
-- Here is how complex adverbs can be formed and used.
|
||||||
|
|
||||||
|
AdjAdv : AP -> Adv ; -- "freely", "more consciously than you"
|
||||||
|
AdvPP : PP -> Adv ; -- "in London", "after the war"
|
||||||
|
PrepNP : Prep -> NP -> PP ; -- "in London", "after the war"
|
||||||
|
|
||||||
|
AdvVP : VP -> Adv -> VP ; -- "always walks", "walks in the park"
|
||||||
|
AdvCN : CN -> PP -> CN ; -- "house in London"
|
||||||
|
AdvAP : AdA -> AP -> AP ; -- "very good"
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Sentences and relative clauses
|
||||||
|
--
|
||||||
|
|
||||||
|
PredVP : NP -> VP -> S ; -- "John walks"
|
||||||
|
PosSlashV2,NegSlashV2 : NP -> V2 -> Slash ; -- "John sees", "John doesn't see"
|
||||||
|
OneVP : VP -> S ; -- "one walks"
|
||||||
|
ThereNP : NP -> S ; -- "there is a bar","there are 86 bars"
|
||||||
|
|
||||||
|
IdRP : RP ; -- "which"
|
||||||
|
FunRP : N2 -> RP -> RP ; -- "the successor of which"
|
||||||
|
RelVP : RP -> VP -> RC ; -- "who walks", "who doesn't walk"
|
||||||
|
RelSlash : RP -> Slash -> RC ; -- "that I wait for"/"for which I wait"
|
||||||
|
ModRC : CN -> RC -> CN ; -- "man who walks"
|
||||||
|
RelSuch : S -> RC ; -- "such that it is even"
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Questions and imperatives
|
||||||
|
--
|
||||||
|
|
||||||
|
WhoOne, WhoMany : IP ; -- "who (is)", "who (are)"
|
||||||
|
WhatOne, WhatMany : IP ; -- "what (is)", "what (are)"
|
||||||
|
FunIP : N2 -> IP -> IP ; -- "the mother of whom"
|
||||||
|
NounIPOne, NounIPMany : CN -> IP ; -- "which car", "which cars"
|
||||||
|
---- NounIPHowMany : CN -> IP ; -- "how many cars"
|
||||||
|
|
||||||
|
QuestVP : NP -> VP -> Qu ; -- "does John walk"; "doesn't John walk"
|
||||||
|
IntVP : IP -> VP -> Qu ; -- "who walks"
|
||||||
|
IntSlash : IP -> Slash -> Qu ; -- "whom does John see"
|
||||||
|
QuestAdv : IAdv -> NP -> VP -> Qu ; -- "why do you walk"
|
||||||
|
IsThereNP : NP -> Qu ; -- "is there a bar", "are there (86) bars"
|
||||||
|
|
||||||
|
ImperVP : VP -> Imp ; -- "be a man"
|
||||||
|
|
||||||
|
IndicPhrase : S -> Phr ; -- "I walk."
|
||||||
|
QuestPhrase : Qu -> Phr ; -- "Do I walk?"
|
||||||
|
ImperOne, ImperMany : Imp -> Phr ; -- "Be a man!", "Be men!"
|
||||||
|
|
||||||
|
PrepS : PP -> AdS ; -- "in Sweden, (there are bears)"
|
||||||
|
AdvS : AdS -> S -> Phr ; -- "Therefore, 2 is prime."
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Coordination
|
||||||
|
--
|
||||||
|
-- We consider "n"-ary coordination, with "n" > 1. To this end, we have introduced
|
||||||
|
-- a *list category* $ListX$ for each category $X$ whose expressions we want to
|
||||||
|
-- conjoin. Each list category has two constructors, the base case being $TwoX$.
|
||||||
|
|
||||||
|
-- We have not defined coordination of all possible categories here,
|
||||||
|
-- since it can be tricky in many languages. For instance, $VP$ coordination
|
||||||
|
-- is linguistically problematic in German because $VP$ is a discontinuous
|
||||||
|
-- category.
|
||||||
|
|
||||||
|
ConjS : Conj -> ListS -> S ; -- "John walks and Mary runs"
|
||||||
|
ConjAP : Conj -> ListAP -> AP ; -- "even and prime"
|
||||||
|
ConjNP : Conj -> ListNP -> NP ; -- "John or Mary"
|
||||||
|
|
||||||
|
ConjDS : ConjD -> ListS -> S ; -- "either John walks or Mary runs"
|
||||||
|
ConjDAP : ConjD -> ListAP -> AP ; -- "both even and prime"
|
||||||
|
ConjDNP : ConjD -> ListNP -> NP ; -- "either John or Mary"
|
||||||
|
|
||||||
|
TwoS : S -> S -> ListS ;
|
||||||
|
ConsS : ListS -> S -> ListS ;
|
||||||
|
|
||||||
|
TwoAP : AP -> AP -> ListAP ;
|
||||||
|
ConsAP : ListAP -> AP -> ListAP ;
|
||||||
|
|
||||||
|
TwoNP : NP -> NP -> ListNP ;
|
||||||
|
ConsNP : ListNP -> NP -> ListNP ;
|
||||||
|
|
||||||
|
--!
|
||||||
|
--3 Subordination
|
||||||
|
--
|
||||||
|
-- Subjunctions are different from conjunctions, but form
|
||||||
|
-- a uniform category among themselves.
|
||||||
|
|
||||||
|
SubjS : Subj -> S -> S -> S ; -- "if 2 is odd, 3 is even"
|
||||||
|
SubjImper : Subj -> S -> Imp -> Imp ; -- "if it is hot, use a glove!"
|
||||||
|
SubjQu : Subj -> S -> Qu -> Qu ; -- "if you are new, who are you?"
|
||||||
|
SubjVP : VP -> Subj -> S -> VP ; -- "(a man who) sings when he runs"
|
||||||
|
|
||||||
|
--!
|
||||||
|
--2 One-word utterances
|
||||||
|
--
|
||||||
|
-- These are, more generally, *one-phrase utterances*. The list below
|
||||||
|
-- is very incomplete.
|
||||||
|
|
||||||
|
PhrNP : NP -> Phr ; -- "Some man.", "John."
|
||||||
|
PhrOneCN, PhrManyCN : CN -> Phr ; -- "A car.", "Cars."
|
||||||
|
PhrIP : IAdv -> Phr ; -- "Who?"
|
||||||
|
PhrIAdv : IAdv -> Phr ; -- "Why?"
|
||||||
|
|
||||||
|
--!
|
||||||
|
--2 Text formation
|
||||||
|
--
|
||||||
|
-- A text is a sequence of phrases. It is defined like a non-empty list.
|
||||||
|
|
||||||
|
OnePhr : Phr -> Text ;
|
||||||
|
ConsPhr : Phr -> Text -> Text ;
|
||||||
|
|
||||||
|
} ;
|
||||||
|
|
||||||
18
lib/resource/oldabstract/TestResource.gf
Normal file
18
lib/resource/oldabstract/TestResource.gf
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
abstract TestResource = Rules, Structural ** {
|
||||||
|
|
||||||
|
-- a random sample of lexicon to test resource grammar with
|
||||||
|
|
||||||
|
fun
|
||||||
|
Big, Happy, Small, Old, Young : ADeg ;
|
||||||
|
American, Finnish : A ;
|
||||||
|
Married : A2 ;
|
||||||
|
Man, Woman, Car, House, Light, Bar, Bottle, Wine, Level : N ;
|
||||||
|
Walk, Run : V ;
|
||||||
|
Send, Wait, Love, Drink, SwitchOn, SwitchOff : V2 ;
|
||||||
|
Give, Prefer : V3 ;
|
||||||
|
Say, Prove : VS ;
|
||||||
|
Mother, Uncle : N2 ;
|
||||||
|
Connection : N3 ;
|
||||||
|
Well, Always : Adv ;
|
||||||
|
John, Mary : PN ;
|
||||||
|
} ;
|
||||||
@@ -12,7 +12,7 @@ lincat
|
|||||||
N = CommNoun ;
|
N = CommNoun ;
|
||||||
-- = {s : Number => Species => Case => Str ; g : NounGender} ;
|
-- = {s : Number => Species => Case => Str ; g : NounGender} ;
|
||||||
NP = NounPhrase ;
|
NP = NounPhrase ;
|
||||||
-- = {s : NPForm => Str ; g : Gender ; n : Number} ;
|
-- = {s : NPForm => Str ; g : Gender ; n : Number ; p : Person} ;
|
||||||
PN = {s : Case => Str ; g : NounGender} ;
|
PN = {s : Case => Str ; g : NounGender} ;
|
||||||
Det = {s : NounGender => Str ; n : Number ; b : SpeciesP} ;
|
Det = {s : NounGender => Str ; n : Number ; b : SpeciesP} ;
|
||||||
N2 = Function ;
|
N2 = Function ;
|
||||||
@@ -29,30 +29,44 @@ lincat
|
|||||||
|
|
||||||
V = Verb ;
|
V = Verb ;
|
||||||
-- = {s : VerbForm => Str ; s1 : Str} ;
|
-- = {s : VerbForm => Str ; s1 : Str} ;
|
||||||
VG = {s : SForm => Str ; s2 : Bool => Str ; s3 : SForm => Gender => Number => Str} ;
|
VG = {s : SForm => Str ; s2 : Bool => Str ;
|
||||||
VP = {s : SForm => Str ; s2 : Str ; s3 : SForm => Gender => Number => Str} ;
|
s3 : SForm => Gender => Number => Person => Str} ;
|
||||||
|
VP = {s : Str ; s2 : Str ; s3 : Gender => Number => Person => Str} ;
|
||||||
V2 = TransVerb ;
|
V2 = TransVerb ;
|
||||||
-- = Verb ** {s2 : Preposition} ;
|
-- = Verb ** {s2 : Preposition} ;
|
||||||
V3 = TransVerb ** {s3 : Preposition} ;
|
V3 = TransVerb ** {s3 : Preposition} ;
|
||||||
VS = Verb ;
|
|
||||||
VV = Verb ** {isAux : Bool} ;
|
|
||||||
V3A = DitransAdjVerb ;
|
|
||||||
V3V = DitransVerbVerb ;
|
|
||||||
|
|
||||||
|
VS = Verb ;
|
||||||
|
VQ = Verb ;
|
||||||
|
VV = Verb ** {isAux : Bool} ;
|
||||||
|
VA = Verb ;
|
||||||
|
|
||||||
|
V3S = TransVerb ;
|
||||||
|
V3Q = TransVerb ;
|
||||||
|
V3VObj = DitransVerbVerb ;
|
||||||
|
V3VSubj = DitransVerbVerb ;
|
||||||
|
V3A = DitransAdjVerb ;
|
||||||
|
|
||||||
|
TP = {s : Str ; b : Bool ; t : Tense ; a : Anteriority} ; --- the Str field is dummy
|
||||||
|
Tense = {s : Str ; t : Tense} ;
|
||||||
|
Ant = {s : Str ; a : Anteriority} ;
|
||||||
|
|
||||||
|
|
||||||
Adv = Adverb ;
|
Adv = Adverb ;
|
||||||
-- = {s : Str ; isPost : Bool} ;
|
-- = {s : Str ; isPost : Bool} ;
|
||||||
PP = Adverb ;
|
PP = Adverb ;
|
||||||
|
|
||||||
S = Sentence ;
|
S = Sentence ;
|
||||||
-- = {s : Order => Str} ;
|
-- = {s : Order => Str} ;
|
||||||
Cl = Clause ;
|
Cl = Clause ;
|
||||||
-- = {s : Bool => SForm => Order => Str} ;
|
-- = {s : Bool => SForm => Order => Str} ;
|
||||||
Slash = Sentence ** {s2 : Preposition} ;
|
Slash = Clause ** {s2 : Preposition} ;
|
||||||
RP = {s : RelCase => GenNum => Str ; g : RelGender} ;
|
RP = {s : RelCase => GenNum => Str ; g : RelGender} ;
|
||||||
RC = {s : GenNum => Str} ;
|
RS = {s : GenNum => Person => Str} ;
|
||||||
|
RCl = {s : Bool => SForm => GenNum => Person => Str} ;
|
||||||
IP = NounPhrase ;
|
IP = NounPhrase ;
|
||||||
Qu = {s : QuestForm => Str} ;
|
QS = {s : QuestForm => Str} ;
|
||||||
|
QCl = {s : Bool => SForm => QuestForm => Str} ;
|
||||||
Imp = {s : Number => Str} ;
|
Imp = {s : Number => Str} ;
|
||||||
|
|
||||||
Phr = {s : Str} ;
|
Phr = {s : Str} ;
|
||||||
@@ -62,5 +76,5 @@ lincat
|
|||||||
|
|
||||||
ListS = {s1,s2 : Order => Str} ;
|
ListS = {s1,s2 : Order => Str} ;
|
||||||
ListAP = {s1,s2 : AdjFormPos => Case => Str ; p : Bool} ;
|
ListAP = {s1,s2 : AdjFormPos => Case => Str ; p : Bool} ;
|
||||||
ListNP = {s1,s2 : NPForm => Str ; g : Gender ; n : Number} ;
|
ListNP = {s1,s2 : NPForm => Str ; g : Gender ; n : Number ; p : Person} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,10 +41,27 @@ lin
|
|||||||
|
|
||||||
CNthatS = nounThatSentence ;
|
CNthatS = nounThatSentence ;
|
||||||
|
|
||||||
PredVP = predVerbPhrase ;
|
PredVV2 = transVerbVerb ;
|
||||||
|
AdjPart = adjPastPart ;
|
||||||
|
|
||||||
PosVG = predVerbGroup True ;
|
PredV3A = complDitransAdjVerb ;
|
||||||
NegVG = predVerbGroup False ;
|
PredV3VSubj = complDitransVerbVerb False ;
|
||||||
|
PredV3VObj = complDitransVerbVerb True ;
|
||||||
|
PredV3S = complDitransSentVerb ;
|
||||||
|
PredV3Q = complDitransQuestVerb ;
|
||||||
|
PredVA = complAdjVerb ;
|
||||||
|
|
||||||
|
UseCl tp cl = {s = \\o => tp.s ++ cl.s ! tp.b ! ClFinite tp.t tp.a o} ;
|
||||||
|
UseVG tp = predVerbGroup tp.b tp.t tp.a ;
|
||||||
|
|
||||||
|
PosTP t a = {s = t.s ++ a.s ; b = True ; t = t.t ; a = a.a} ;
|
||||||
|
NegTP t a = {s = t.s ++ a.s ; b = False ; t = t.t ; a = a.a} ;
|
||||||
|
TPresent = {s = [] ; t = Present} ;
|
||||||
|
TPast = {s = [] ; t = Past} ;
|
||||||
|
TFuture = {s = [] ; t = Future} ;
|
||||||
|
TConditional = {s = [] ; t = Condit} ;
|
||||||
|
ASimul = {s = [] ; a = Simul} ;
|
||||||
|
AAnter = {s = [] ; a = Anter} ;
|
||||||
|
|
||||||
PredVG = predVerbGroupClause ;
|
PredVG = predVerbGroupClause ;
|
||||||
|
|
||||||
@@ -55,9 +72,12 @@ lin
|
|||||||
PredV2 = complTransVerb ;
|
PredV2 = complTransVerb ;
|
||||||
PredV3 = complDitransVerb ;
|
PredV3 = complDitransVerb ;
|
||||||
PredPassV = passVerb ;
|
PredPassV = passVerb ;
|
||||||
|
ReflV2 = reflTransVerb ;
|
||||||
|
|
||||||
PredNP = predNounPhrase ;
|
PredNP = predNounPhrase ;
|
||||||
PredPP = predAdverb ;
|
PredPP = predAdverb ;
|
||||||
PredVS = complSentVerb ;
|
PredVS = complSentVerb ;
|
||||||
|
PredVQ = complQuestVerb ;
|
||||||
PredVV = complVerbVerb ;
|
PredVV = complVerbVerb ;
|
||||||
VTrans = transAsVerb ;
|
VTrans = transAsVerb ;
|
||||||
|
|
||||||
@@ -68,20 +88,25 @@ lin
|
|||||||
AdvCN = advCommNounPhrase ;
|
AdvCN = advCommNounPhrase ;
|
||||||
AdvAP = advAdjPhrase ;
|
AdvAP = advAdjPhrase ;
|
||||||
|
|
||||||
ThereNP A = predVerbPhrase npDet
|
ExistCN A = predVerbGroupClause npDet
|
||||||
(predVerbGroup True
|
(complTransVerb (mkDirectVerb (deponentVerb verbFinnas))
|
||||||
(complTransVerb (mkDirectVerb (deponentVerb verbFinnas)) A)) ;
|
(indefNounPhrase singular A)) ;
|
||||||
|
ExistNumCN nu A = predVerbGroupClause npDet
|
||||||
|
(complTransVerb (mkDirectVerb (deponentVerb verbFinnas))
|
||||||
|
(indefNounPhraseNum plural nu A)) ;
|
||||||
|
|
||||||
PosSlashV2 = slashTransVerb True ;
|
SlashV2 = slashTransVerb ;
|
||||||
NegSlashV2 = slashTransVerb False ;
|
OneVG = predVerbGroupClause npMan ;
|
||||||
OneVP = predVerbPhrase npMan ;
|
|
||||||
|
|
||||||
IdRP = identRelPron ;
|
IdRP = identRelPron ;
|
||||||
FunRP = funRelPron ;
|
FunRP = funRelPron ;
|
||||||
RelVP = relVerbPhrase ;
|
RelVG = relVerbGroup ;
|
||||||
RelSlash = relSlash ;
|
RelSlash = relSlash ;
|
||||||
ModRC = modRelClause ;
|
ModRS = modRelClause ;
|
||||||
RelSuch = relSuch ;
|
RelCl = relSuch ;
|
||||||
|
|
||||||
|
UseRCl tp cl =
|
||||||
|
{s = \\gn,p => tp.s ++ cl.s ! tp.b ! VFinite tp.t tp.a ! gn ! p} ;
|
||||||
|
|
||||||
WhoOne = intPronWho singular ;
|
WhoOne = intPronWho singular ;
|
||||||
WhoMany = intPronWho plural ;
|
WhoMany = intPronWho plural ;
|
||||||
@@ -91,13 +116,21 @@ lin
|
|||||||
NounIPOne = nounIntPron singular ;
|
NounIPOne = nounIntPron singular ;
|
||||||
NounIPMany = nounIntPron plural ;
|
NounIPMany = nounIntPron plural ;
|
||||||
|
|
||||||
QuestVP = questVerbPhrase ;
|
QuestVG = questVerbPhrase ;
|
||||||
IntVP = intVerbPhrase ;
|
IntVG = intVerbPhrase ;
|
||||||
IntSlash = intSlash ;
|
IntSlash = intSlash ;
|
||||||
QuestAdv = questAdverbial ;
|
QuestAdv = questAdverbial ;
|
||||||
IsThereNP A = questVerbPhrase npDet
|
|
||||||
(predVerbGroup True
|
ExistQCl A = questVerbPhrase npDet
|
||||||
(complTransVerb (mkDirectVerb (deponentVerb verbFinnas)) A)) ;
|
(complTransVerb (mkDirectVerb (deponentVerb verbFinnas))
|
||||||
|
(indefNounPhrase singular A)) ;
|
||||||
|
ExistNumQCl nu A = questVerbPhrase npDet
|
||||||
|
(complTransVerb (mkDirectVerb (deponentVerb verbFinnas))
|
||||||
|
(indefNounPhraseNum plural nu A)) ;
|
||||||
|
|
||||||
|
|
||||||
|
UseQCl tp cl = {s = \\q => tp.s ++ cl.s ! tp.b ! VFinite tp.t tp.a ! q} ;
|
||||||
|
|
||||||
|
|
||||||
ImperVP = imperVerbPhrase ;
|
ImperVP = imperVerbPhrase ;
|
||||||
|
|
||||||
@@ -126,7 +159,7 @@ lin
|
|||||||
|
|
||||||
SubjS = subjunctSentence ;
|
SubjS = subjunctSentence ;
|
||||||
SubjImper = subjunctImperative ;
|
SubjImper = subjunctImperative ;
|
||||||
SubjQu = subjunctQuestion ;
|
SubjQS = subjunctQuestion ;
|
||||||
SubjVP = subjunctVerbPhrase ;
|
SubjVP = subjunctVerbPhrase ;
|
||||||
|
|
||||||
PhrNP = useNounPhrase ;
|
PhrNP = useNounPhrase ;
|
||||||
|
|||||||
@@ -73,7 +73,9 @@ oper
|
|||||||
npCase : NPForm -> Case = \c -> case c of {PGen _ => Gen ; _ => Nom} ;
|
npCase : NPForm -> Case = \c -> case c of {PGen _ => Gen ; _ => Nom} ;
|
||||||
mkNPForm : Case -> NPForm = \c -> case c of {Gen => PGen APl ; _ => PNom} ;
|
mkNPForm : Case -> NPForm = \c -> case c of {Gen => PGen APl ; _ => PNom} ;
|
||||||
|
|
||||||
NounPhrase : Type = {s : NPForm => Str ; g : Gender ; n : Number} ;
|
NounPhrase : Type = {
|
||||||
|
s : NPForm => Str ; g : Gender ; n : Number ; p : Person
|
||||||
|
} ;
|
||||||
|
|
||||||
-- Proper names are a simple kind of noun phrases. However, we want to
|
-- Proper names are a simple kind of noun phrases. However, we want to
|
||||||
-- anticipate the rule that proper names can be modified by
|
-- anticipate the rule that proper names can be modified by
|
||||||
@@ -84,14 +86,14 @@ oper
|
|||||||
mkProperName : Str -> NounGender -> ProperName = \john,g ->
|
mkProperName : Str -> NounGender -> ProperName = \john,g ->
|
||||||
{s = table {Nom => john ; Gen => john + "s"} ; g = g} ;
|
{s = table {Nom => john ; Gen => john + "s"} ; g = g} ;
|
||||||
|
|
||||||
nameNounPhrase : ProperName -> NounPhrase =
|
nameNounPhrase : ProperName -> NounPhrase = \john ->
|
||||||
\john -> {s = table {c => john.s ! npCase c} ; g = genNoun john.g ; n = Sg} ;
|
{s = table {c => john.s ! npCase c} ; g = genNoun john.g ; n = Sg ; p = P3} ;
|
||||||
|
|
||||||
regNameNounPhrase : Str -> NounGender -> NounPhrase = \john,g ->
|
regNameNounPhrase : Str -> NounGender -> NounPhrase = \john,g ->
|
||||||
nameNounPhrase (mkProperName john g) ;
|
nameNounPhrase (mkProperName john g) ;
|
||||||
|
|
||||||
pronNounPhrase : ProPN -> NounPhrase = \jag ->
|
pronNounPhrase : ProPN -> NounPhrase = \jag ->
|
||||||
{s = jag.s ; g = jag.h1 ; n = jag.h2} ;
|
{s = jag.s ; g = jag.h1 ; n = jag.h2 ; p = jag.h3} ;
|
||||||
|
|
||||||
-- The following construction has to be refined for genitive forms:
|
-- The following construction has to be refined for genitive forms:
|
||||||
-- "vi tre", "oss tre" are OK, but "vår tres" is not.
|
-- "vi tre", "oss tre" are OK, but "vår tres" is not.
|
||||||
@@ -127,7 +129,7 @@ oper
|
|||||||
|
|
||||||
detNounPhrase : Determiner -> CommNounPhrase -> NounPhrase = \en, man ->
|
detNounPhrase : Determiner -> CommNounPhrase -> NounPhrase = \en, man ->
|
||||||
{s = table {c => en.s ! man.g ++ man.s ! en.n ! en.b ! npCase c} ;
|
{s = table {c => en.s ! man.g ++ man.s ! en.n ! en.b ! npCase c} ;
|
||||||
g = genNoun man.g ; n = en.n} ;
|
g = genNoun man.g ; n = en.n ; p = P3} ;
|
||||||
|
|
||||||
-- The following macros are sufficient to define most determiners.
|
-- The following macros are sufficient to define most determiners.
|
||||||
-- All $SpeciesP$ values come into question:
|
-- All $SpeciesP$ values come into question:
|
||||||
@@ -199,7 +201,8 @@ oper
|
|||||||
vin.s ! Pl ! DefP Indef ! npCase c
|
vin.s ! Pl ! DefP Indef ! npCase c
|
||||||
} ;
|
} ;
|
||||||
g = genNoun vin.g ;
|
g = genNoun vin.g ;
|
||||||
n = n
|
n = n ;
|
||||||
|
p = P3
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- *Bare plural noun phrases* like "män", "goda vänner", are built without a
|
-- *Bare plural noun phrases* like "män", "goda vänner", are built without a
|
||||||
@@ -210,7 +213,8 @@ oper
|
|||||||
plurDetNum : Numeral -> CommNounPhrase -> NounPhrase = \num,cn ->
|
plurDetNum : Numeral -> CommNounPhrase -> NounPhrase = \num,cn ->
|
||||||
{s = \\c => num.s ! Nom ++ cn.s ! Pl ! IndefP ! npCase c ;
|
{s = \\c => num.s ! Nom ++ cn.s ! Pl ! IndefP ! npCase c ;
|
||||||
g = genNoun cn.g ;
|
g = genNoun cn.g ;
|
||||||
n = Pl
|
n = Pl ;
|
||||||
|
p = P3
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Definite phrases in Swedish are special, since determiner may be absent
|
-- Definite phrases in Swedish are special, since determiner may be absent
|
||||||
@@ -338,7 +342,8 @@ oper
|
|||||||
yngst.s ! AF (Super SupWeak) Nom ++
|
yngst.s ! AF (Super SupWeak) Nom ++
|
||||||
man.s ! Sg ! DefP superlSpecies ! npCase c ;
|
man.s ! Sg ! DefP superlSpecies ! npCase c ;
|
||||||
g = genNoun man.g ;
|
g = genNoun man.g ;
|
||||||
n = Sg
|
n = Sg ;
|
||||||
|
p = P3
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- In Danish, however, "den yngste mand" - therefore a parametric species.
|
-- In Danish, however, "den yngste mand" - therefore a parametric species.
|
||||||
@@ -468,22 +473,16 @@ oper
|
|||||||
-- verb phrases.
|
-- verb phrases.
|
||||||
|
|
||||||
param
|
param
|
||||||
Tense = Present | Past ;
|
Tense = Present | Past | Future | Condit ;
|
||||||
Anteriority = Simul | Anter ;
|
Anteriority = Simul | Anter ;
|
||||||
SForm =
|
SForm =
|
||||||
VIndic Tense Anteriority
|
VFinite Tense Anteriority
|
||||||
| VFut Anteriority
|
|
||||||
| VCondit Anteriority
|
|
||||||
| VImperat
|
| VImperat
|
||||||
| VInfinit Anteriority ;
|
| VInfinit Anteriority ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
verbSForm : Verbum -> Voice -> SForm -> {fin,inf : Str} = \se,vo,sf ->
|
verbSForm : Verbum -> Voice -> SForm -> {fin,inf : Str} = \se,vo,sf ->
|
||||||
let
|
let
|
||||||
tense : Tense -> Voice -> VFin = \t,v -> case t of {
|
|
||||||
Present => Pres Ind v ;
|
|
||||||
Past => Pret Ind v
|
|
||||||
} ;
|
|
||||||
simple : VerbForm -> {fin,inf : Str} = \v -> {
|
simple : VerbForm -> {fin,inf : Str} = \v -> {
|
||||||
fin = se.s ! v ;
|
fin = se.s ! v ;
|
||||||
inf = []
|
inf = []
|
||||||
@@ -497,23 +496,24 @@ oper
|
|||||||
hasett : Voice -> Str = \v -> auxHa ++ sett v
|
hasett : Voice -> Str = \v -> auxHa ++ sett v
|
||||||
|
|
||||||
in case sf of {
|
in case sf of {
|
||||||
VIndic t Simul => simple (VF (tense t vo)) ;
|
VFinite Present Simul => simple (VF (Pres Ind vo)) ;
|
||||||
VIndic Present Anter => compound auxHar (sett vo) ;
|
VFinite Present Anter => compound auxHar (sett vo) ;
|
||||||
VIndic Past Anter => compound auxHade (sett vo) ;
|
VFinite Past Simul => simple (VF (Pret Ind vo)) ;
|
||||||
VFut Simul => compound auxSka (see vo) ;
|
VFinite Past Anter => compound auxHade (sett vo) ;
|
||||||
VFut Anter => compound auxSka (hasett vo) ;
|
VFinite Future Simul => compound auxSka (see vo) ;
|
||||||
VCondit Simul => compound auxSkulle (see vo) ;
|
VFinite Future Anter => compound auxSka (hasett vo) ;
|
||||||
VCondit Anter => compound auxSkulle (hasett vo) ;
|
VFinite Condit Simul => compound auxSkulle (see vo) ;
|
||||||
|
VFinite Condit Anter => compound auxSkulle (hasett vo) ;
|
||||||
VImperat => simple (VF Imper) ; --- no passive
|
VImperat => simple (VF Imper) ; --- no passive
|
||||||
VInfinit Simul => simple (VI (Inf vo)) ;
|
VInfinit Simul => simple (VI (Inf vo)) ;
|
||||||
VInfinit Anter => compound auxHa (sett vo)
|
VInfinit Anter => compound auxHa (sett vo)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
useVerb : Verb -> (Gender => Number => Str) -> VerbGroup = \verb,arg ->
|
useVerb : Verb -> (Gender => Number => Person => Str) -> VerbGroup = \verb,arg ->
|
||||||
let aer = verbSForm verb Act in {
|
let aer = verbSForm verb Act in {
|
||||||
s = \\sf => (aer sf).fin ;
|
s = \\sf => (aer sf).fin ;
|
||||||
s2 = negation ;
|
s2 = negation ;
|
||||||
s3 = \\sf,g,n => (aer sf).inf ++ arg ! g ! n
|
s3 = \\sf,g,n,p => (aer sf).inf ++ arg ! g ! n ! p
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Verb phrases are discontinuous: the parts of a verb phrase are
|
-- Verb phrases are discontinuous: the parts of a verb phrase are
|
||||||
@@ -522,28 +522,30 @@ oper
|
|||||||
-- to account for word order variations. No particle needs to be retained.
|
-- to account for word order variations. No particle needs to be retained.
|
||||||
|
|
||||||
VerbPhrase : Type = {
|
VerbPhrase : Type = {
|
||||||
s : SForm => Str ;
|
s : Str ;
|
||||||
s2 : Str ;
|
s2 : Str ;
|
||||||
s3 : SForm => Gender => Number => Str
|
s3 : Gender => Number => Person => Str
|
||||||
} ;
|
} ;
|
||||||
VerbGroup : Type = {
|
VerbGroup : Type = {
|
||||||
s : SForm => Str ;
|
s : SForm => Str ;
|
||||||
s2 : Bool => Str ;
|
s2 : Bool => Str ;
|
||||||
s3 : SForm => Gender => Number => Str
|
s3 : SForm => Gender => Number => Person => Str
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
predVerbGroup : Bool -> VerbGroup -> VerbPhrase = \b,vg -> {
|
predVerbGroup : Bool -> Tense -> Anteriority -> VerbGroup -> VerbPhrase = \b,t,a,vg -> {
|
||||||
s = vg.s ;
|
s = vg.s ! VFinite t a ;
|
||||||
s2 = vg.s2 ! b ;
|
s2 = vg.s2 ! b ;
|
||||||
s3 = vg.s3
|
s3 = vg.s3 ! VFinite t a
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
predVerbGroupTrue = predVerbGroup True Present Simul ; ---- temporary
|
||||||
|
|
||||||
-- A simple verb can be made into a verb phrase with an empty complement.
|
-- 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.
|
-- 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
|
-- N.B. negation is *not* a function applicable to a verb phrase, since
|
||||||
-- double negations with "inte" are not grammatical.
|
-- double negations with "inte" are not grammatical.
|
||||||
|
|
||||||
predVerb : Verb -> VerbGroup = \se -> useVerb se (\\_,_ => se.s1) ;
|
predVerb : Verb -> VerbGroup = \se -> useVerb se (\\_,_,_ => se.s1) ;
|
||||||
|
|
||||||
negation : Bool => Str = \\b => if_then_Str b [] negInte ;
|
negation : Bool => Str = \\b => if_then_Str b [] negInte ;
|
||||||
|
|
||||||
@@ -552,23 +554,23 @@ oper
|
|||||||
-- The third rule is overgenerating: "är varje man" has to be ruled out
|
-- The third rule is overgenerating: "är varje man" has to be ruled out
|
||||||
-- on semantic grounds.
|
-- on semantic grounds.
|
||||||
|
|
||||||
vara : (Gender => Number => Str) -> VerbGroup =
|
vara : (Gender => Number => Person => Str) -> VerbGroup =
|
||||||
useVerb (verbVara ** {s1 = []}) ;
|
useVerb (verbVara ** {s1 = []}) ;
|
||||||
|
|
||||||
predAdjective : Adjective -> VerbGroup = \arg ->
|
predAdjective : Adjective -> VerbGroup = \arg ->
|
||||||
vara (\\g,n => arg.s ! predFormAdj g n ! Nom) ;
|
vara (\\g,n,_ => arg.s ! predFormAdj g n ! Nom) ;
|
||||||
|
|
||||||
predFormAdj : Gender -> Number -> AdjFormPos = \g,n ->
|
predFormAdj : Gender -> Number -> AdjFormPos = \g,n ->
|
||||||
mkAdjForm Indef n (gen2nounGen g) ;
|
mkAdjForm Indef n (gen2nounGen g) ;
|
||||||
|
|
||||||
predCommNoun : CommNounPhrase -> VerbGroup = \man ->
|
predCommNoun : CommNounPhrase -> VerbGroup = \man ->
|
||||||
vara (\\_,n => indefNoun n man) ;
|
vara (\\_,n,_ => indefNoun n man) ;
|
||||||
|
|
||||||
predNounPhrase : NounPhrase -> VerbGroup = \john ->
|
predNounPhrase : NounPhrase -> VerbGroup = \john ->
|
||||||
vara (\\_,_ => john.s ! PNom) ;
|
vara (\\_,_,_ => john.s ! PNom) ;
|
||||||
|
|
||||||
predAdverb : Adverb -> VerbGroup = \ute ->
|
predAdverb : Adverb -> VerbGroup = \ute ->
|
||||||
vara (\\_,_ => ute.s) ;
|
vara (\\_,_,_ => ute.s) ;
|
||||||
|
|
||||||
--3 Transitive verbs
|
--3 Transitive verbs
|
||||||
--
|
--
|
||||||
@@ -596,7 +598,7 @@ oper
|
|||||||
-- The rule for using transitive verbs is the complementization rule:
|
-- The rule for using transitive verbs is the complementization rule:
|
||||||
|
|
||||||
complTransVerb : TransVerb -> NounPhrase -> VerbGroup = \se,dig ->
|
complTransVerb : TransVerb -> NounPhrase -> VerbGroup = \se,dig ->
|
||||||
useVerb se (\\_,_ => se.s1 ++ se.s2 ++ dig.s ! PAcc) ;
|
useVerb se (\\_,_,_ => se.s1 ++ se.s2 ++ dig.s ! PAcc) ;
|
||||||
|
|
||||||
-- Transitive verbs with accusative objects can be used passively.
|
-- Transitive verbs with accusative objects can be used passively.
|
||||||
-- The function does not check that the verb is transitive.
|
-- The function does not check that the verb is transitive.
|
||||||
@@ -608,7 +610,7 @@ oper
|
|||||||
let ses = verbSForm se Pass in {
|
let ses = verbSForm se Pass in {
|
||||||
s = \\sf => (ses sf).fin ;
|
s = \\sf => (ses sf).fin ;
|
||||||
s2 = negation ;
|
s2 = negation ;
|
||||||
s3 = \\sf,g,n => (ses sf).inf ++ se.s1
|
s3 = \\sf,g,n,_ => (ses sf).inf ++ se.s1
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Transitive verbs can be used elliptically as verbs. The semantics
|
-- Transitive verbs can be used elliptically as verbs. The semantics
|
||||||
@@ -618,6 +620,11 @@ oper
|
|||||||
transAsVerb : TransVerb -> Verb = \love ->
|
transAsVerb : TransVerb -> Verb = \love ->
|
||||||
love ;
|
love ;
|
||||||
|
|
||||||
|
reflTransVerb : TransVerb -> VerbGroup = \se ->
|
||||||
|
useVerb se (\\_,n,p => se.s1 ++ se.s2 ++ reflPron n p) ;
|
||||||
|
|
||||||
|
reflPron : Number -> Person -> Str ;
|
||||||
|
|
||||||
-- *Ditransitive verbs* are verbs with three argument places.
|
-- *Ditransitive verbs* are verbs with three argument places.
|
||||||
-- We treat so far only the rule in which the ditransitive
|
-- We treat so far only the rule in which the ditransitive
|
||||||
-- verb takes both complements to form a verb phrase.
|
-- verb takes both complements to form a verb phrase.
|
||||||
@@ -628,10 +635,15 @@ oper
|
|||||||
v ** {s2 = p1 ; s3 = p2} ;
|
v ** {s2 = p1 ; s3 = p2} ;
|
||||||
|
|
||||||
complDitransVerb :
|
complDitransVerb :
|
||||||
DitransVerb -> NounPhrase -> NounPhrase -> VerbGroup = \ge,dig,vin ->
|
DitransVerb -> NounPhrase -> TransVerb = \ge,dig ->
|
||||||
useVerb
|
{s = ge.s ;
|
||||||
ge
|
s1 = ge.s1 ++ ge.s2 ++ dig.s ! PAcc ;
|
||||||
(\\_,_ => ge.s1 ++ ge.s2 ++ dig.s ! PAcc ++ ge.s3 ++ vin.s ! PAcc) ;
|
s2 = ge.s3
|
||||||
|
} ;
|
||||||
|
|
||||||
|
--- useVerb
|
||||||
|
--- ge
|
||||||
|
--- (\\_,_ => ge.s1 ++ ge.s2 ++ dig.s ! PAcc ++ ge.s3 ++ vin.s ! PAcc) ;
|
||||||
|
|
||||||
-- Adjective-complement ditransitive verbs.
|
-- Adjective-complement ditransitive verbs.
|
||||||
|
|
||||||
@@ -641,11 +653,17 @@ oper
|
|||||||
v ** {s2 = p1} ;
|
v ** {s2 = p1} ;
|
||||||
|
|
||||||
complDitransAdjVerb :
|
complDitransAdjVerb :
|
||||||
DitransVerb -> NounPhrase -> AdjPhrase -> VerbGroup = \gor,dig,sur ->
|
DitransAdjVerb -> NounPhrase -> AdjPhrase -> VerbGroup = \gor,dig,sur ->
|
||||||
useVerb
|
useVerb
|
||||||
gor
|
gor
|
||||||
(\\_,_ => gor.s1 ++ gor.s2 ++ dig.s ! PAcc ++
|
(\\_,_,_ => gor.s1 ++ gor.s2 ++ dig.s ! PAcc ++
|
||||||
sur.s ! predFormAdj dig.g dig.n ! Nom) ;
|
sur.s ! predFormAdj dig.g dig.n ! Nom) ;
|
||||||
|
|
||||||
|
complAdjVerb :
|
||||||
|
Verb -> AdjPhrase -> VerbGroup = \seut,sur ->
|
||||||
|
useVerb
|
||||||
|
seut
|
||||||
|
(\\g,n,_ => sur.s ! predFormAdj g n ! Nom ++ seut.s1) ;
|
||||||
|
|
||||||
--2 Adverbs
|
--2 Adverbs
|
||||||
--
|
--
|
||||||
@@ -667,7 +685,7 @@ oper
|
|||||||
--- this unfortunately generates VP#2 ::= VP#2
|
--- this unfortunately generates VP#2 ::= VP#2
|
||||||
s = spelar.s ;
|
s = spelar.s ;
|
||||||
s2 = (if_then_else Str postp [] bra.s) ++ spelar.s2 ;
|
s2 = (if_then_else Str postp [] bra.s) ++ spelar.s2 ;
|
||||||
s3 = \\sf,g,n => spelar.s3 ! sf ! g ! n ++ (if_then_else Str postp bra.s [])
|
s3 = \\g,n,p => spelar.s3 ! g ! n ! p ++ (if_then_else Str postp bra.s [])
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
advAdjPhrase : SS -> AdjPhrase -> AdjPhrase = \mycket, dyr ->
|
advAdjPhrase : SS -> AdjPhrase -> AdjPhrase = \mycket, dyr ->
|
||||||
@@ -709,13 +727,13 @@ oper
|
|||||||
-- This is the traditional $S -> NP VP$ rule. It takes care of both
|
-- This is the traditional $S -> NP VP$ rule. It takes care of both
|
||||||
-- word order and agreement.
|
-- word order and agreement.
|
||||||
|
|
||||||
|
----- obsolete
|
||||||
predVerbPhrase : NounPhrase -> VerbPhrase -> Sentence =
|
predVerbPhrase : NounPhrase -> VerbPhrase -> Sentence =
|
||||||
\Jag, serdiginte ->
|
\Jag, serdiginte ->
|
||||||
let {
|
let {
|
||||||
jag = Jag.s ! PNom ;
|
jag = Jag.s ! PNom ;
|
||||||
t = VIndic Present Simul ; ---- to be made parameter of S
|
ser = serdiginte.s ;
|
||||||
ser = serdiginte.s ! t ;
|
dig = serdiginte.s3 ! Jag.g ! Jag.n ! Jag.p ;
|
||||||
dig = serdiginte.s3 ! t ! Jag.g ! Jag.n ;
|
|
||||||
inte = serdiginte.s2
|
inte = serdiginte.s2
|
||||||
} in
|
} in
|
||||||
{s = table {
|
{s = table {
|
||||||
@@ -727,32 +745,32 @@ oper
|
|||||||
|
|
||||||
param
|
param
|
||||||
ClForm =
|
ClForm =
|
||||||
ClIndic Tense Anteriority Order
|
ClFinite Tense Anteriority Order
|
||||||
| ClFut Anteriority Order
|
| ClInfinite Anteriority -- "naked infinitive" clauses
|
||||||
| ClCondit Anteriority Order
|
|
||||||
| ClInfinit Anteriority -- "naked infinitive" clauses
|
|
||||||
;
|
;
|
||||||
|
|
||||||
ClTense = ClPresent | ClPast | ClFuture | ClPerfect ;
|
oper
|
||||||
|
cl2s : ClForm -> {o : Order ; sf : SForm} = \c -> case c of {
|
||||||
oper cl2s : ClForm -> {o : Order ; sf : SForm} = \c -> case c of {
|
ClFinite t a o => {o = o ; sf = VFinite t a} ;
|
||||||
ClIndic t a o => {o = o ; sf = VIndic t a} ;
|
ClInfinite a => {o = Sub ; sf = VInfinit a} -- "jag såg John inte hälsa"
|
||||||
ClFut a o => {o = o ; sf = VFut a} ;
|
} ;
|
||||||
ClCondit a o => {o = o ; sf = VCondit a} ;
|
s2cl : SForm -> Order -> ClForm = \s,o -> case s of {
|
||||||
ClInfinit a => {o = Sub ; sf = VInfinit a} -- "jag såg John inte hälsa"
|
VFinite t a => ClFinite t a o ;
|
||||||
} ;
|
VInfinit a => ClInfinite a ;
|
||||||
|
_ => ClInfinite Simul ---- ??
|
||||||
|
} ;
|
||||||
|
|
||||||
Clause = {s : Bool => ClForm => Str} ;
|
Clause = {s : Bool => ClForm => Str} ;
|
||||||
|
|
||||||
predVerbGroupClause : NounPhrase -> VerbGroup -> Clause =
|
predVerbGroupClause : NounPhrase -> VerbGroup -> Clause =
|
||||||
\Jag, serdiginte -> {
|
\Jag, serdiginte -> {
|
||||||
s = \\b,c => let {
|
s = \\b,c => let {
|
||||||
jag = Jag.s ! (case c of {ClInfinit _ => PAcc ; _ => PNom}) ;
|
jag = Jag.s ! (case c of {ClInfinite _ => PAcc ; _ => PNom}) ;
|
||||||
osf = cl2s c ;
|
osf = cl2s c ;
|
||||||
t = osf.sf ;
|
t = osf.sf ;
|
||||||
o = osf.o ;
|
o = osf.o ;
|
||||||
ser = serdiginte.s ! t ;
|
ser = serdiginte.s ! t ;
|
||||||
dig = serdiginte.s3 ! t ! Jag.g ! Jag.n ;
|
dig = serdiginte.s3 ! t ! Jag.g ! Jag.n ! Jag.p ;
|
||||||
inte = serdiginte.s2 ! b
|
inte = serdiginte.s2 ! b
|
||||||
} in
|
} in
|
||||||
case o of {
|
case o of {
|
||||||
@@ -763,16 +781,6 @@ oper cl2s : ClForm -> {o : Order ; sf : SForm} = \c -> case c of {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
clause2sentence : Bool -> ClTense -> Clause -> Sentence = \b,t,cl ->
|
|
||||||
{s = \\o => cl.s ! b ! case t of {
|
|
||||||
ClPresent => ClIndic Present Simul o ;
|
|
||||||
ClPast => ClIndic Past Simul o ;
|
|
||||||
ClFuture => ClFut Simul o ;
|
|
||||||
ClPerfect => ClIndic Present Anter o
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
--3 Sentence-complement verbs
|
--3 Sentence-complement verbs
|
||||||
--
|
--
|
||||||
-- Sentence-complement verbs take sentences as complements.
|
-- Sentence-complement verbs take sentences as complements.
|
||||||
@@ -780,7 +788,20 @@ oper cl2s : ClForm -> {o : Order ; sf : SForm} = \c -> case c of {
|
|||||||
SentenceVerb : Type = Verb ;
|
SentenceVerb : Type = Verb ;
|
||||||
|
|
||||||
complSentVerb : SentenceVerb -> Sentence -> VerbGroup = \se,duler ->
|
complSentVerb : SentenceVerb -> Sentence -> VerbGroup = \se,duler ->
|
||||||
useVerb se (\\_,_ => se.s1 ++ optStr infinAtt ++ duler.s ! Main) ;
|
useVerb se (\\_,_,_ => se.s1 ++ optStr infinAtt ++ duler.s ! Main) ;
|
||||||
|
|
||||||
|
complQuestVerb : SentenceVerb -> QuestionSent -> VerbGroup = \se,omduler ->
|
||||||
|
useVerb se (\\_,_,_ => se.s1 ++ omduler.s ! IndirQ) ;
|
||||||
|
|
||||||
|
complDitransSentVerb : TransVerb -> NounPhrase -> Sentence -> VerbGroup =
|
||||||
|
\sa,honom,duler ->
|
||||||
|
useVerb sa
|
||||||
|
(\\_,_,_ => sa.s1 ++ sa.s2 ++ honom.s ! PAcc ++ optStr infinAtt ++ duler.s ! Main) ;
|
||||||
|
|
||||||
|
complDitransQuestVerb : TransVerb -> NounPhrase -> QuestionSent -> VerbGroup =
|
||||||
|
\sa,honom,omduler ->
|
||||||
|
useVerb sa
|
||||||
|
(\\_,_,_ => sa.s1 ++ sa.s2 ++ honom.s ! PAcc ++ omduler.s ! IndirQ) ;
|
||||||
|
|
||||||
--3 Verb-complement verbs
|
--3 Verb-complement verbs
|
||||||
--
|
--
|
||||||
@@ -793,11 +814,11 @@ oper cl2s : ClForm -> {o : Order ; sf : SForm} = \c -> case c of {
|
|||||||
|
|
||||||
complVerbVerb : VerbVerb -> VerbGroup -> VerbGroup = \vilja, simma ->
|
complVerbVerb : VerbVerb -> VerbGroup -> VerbGroup = \vilja, simma ->
|
||||||
useVerb vilja
|
useVerb vilja
|
||||||
(\\g,n =>
|
(\\g,n,p =>
|
||||||
vilja.s1 ++
|
vilja.s1 ++
|
||||||
if_then_Str vilja.isAux [] infinAtt ++
|
if_then_Str vilja.isAux [] infinAtt ++
|
||||||
simma.s ! VInfinit Simul ++ simma.s2 ! True ++ ---- Anter!
|
simma.s ! VInfinit Simul ++ simma.s2 ! True ++ ---- Anter!
|
||||||
simma.s3 ! VInfinit Simul ! g ! n) ;
|
simma.s3 ! VInfinit Simul ! g ! n ! p) ;
|
||||||
|
|
||||||
transVerbVerb : VerbVerb -> TransVerb -> TransVerb = \vilja,hitta ->
|
transVerbVerb : VerbVerb -> TransVerb -> TransVerb = \vilja,hitta ->
|
||||||
{s = vilja.s ;
|
{s = vilja.s ;
|
||||||
@@ -806,16 +827,20 @@ oper cl2s : ClForm -> {o : Order ; sf : SForm} = \c -> case c of {
|
|||||||
s2 = hitta.s2
|
s2 = hitta.s2
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Notice agreement to object rather than subject:
|
-- Notice agreement to object vs. subject:
|
||||||
|
|
||||||
DitransVerbVerb = TransVerb ** {part : Str} ;
|
DitransVerbVerb = TransVerb ** {s3 : Str} ;
|
||||||
|
|
||||||
complDitransVerbVerb :
|
complDitransVerbVerb :
|
||||||
DitransVerbVerb -> NounPhrase -> VerbGroup -> VerbGroup = \be,dig,simma ->
|
Bool -> DitransVerbVerb -> NounPhrase -> VerbGroup -> VerbGroup =
|
||||||
|
\obj,be,dig,simma ->
|
||||||
useVerb be
|
useVerb be
|
||||||
(\\g,n => be.s1 ++ be.s2 ++ dig.s ! PAcc ++ be.part ++
|
(\\g,n,p => be.s1 ++ be.s2 ++ dig.s ! PAcc ++ be.s3 ++
|
||||||
simma.s ! VInfinit Simul ++ simma.s2 ! True ++ ---- Anter!
|
simma.s ! VInfinit Simul ++ simma.s2 ! True ++ ---- Anter!
|
||||||
simma.s3 ! VInfinit Simul ! dig.g ! dig.n) ;
|
if_then_Str obj
|
||||||
|
(simma.s3 ! VInfinit Simul ! dig.g ! dig.n ! dig.p)
|
||||||
|
(simma.s3 ! VInfinit Simul ! g ! n ! p)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
--2 Sentences missing noun phrases
|
--2 Sentences missing noun phrases
|
||||||
@@ -828,24 +853,12 @@ oper cl2s : ClForm -> {o : Order ; sf : SForm} = \c -> case c of {
|
|||||||
-- Notice that the slash category has the same relation to sentences as
|
-- 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*.
|
-- transitive verbs have to verbs: it's like a *sentence taking a complement*.
|
||||||
|
|
||||||
SentenceSlashNounPhrase : Type = Sentence ** {s2 : Preposition} ;
|
ClauseSlashNounPhrase : Type = Clause ** {s2 : Preposition} ;
|
||||||
|
|
||||||
slashTransVerb : Bool -> NounPhrase -> TransVerb -> SentenceSlashNounPhrase =
|
|
||||||
\b, Jag, se ->
|
|
||||||
let {
|
|
||||||
jag = Jag.s ! PNom ;
|
|
||||||
ser = se.s ! VF (Pres Ind Act) ; ---- other tenses
|
|
||||||
inte = negation ! b ++ se.s1
|
|
||||||
} in
|
|
||||||
{s = table {
|
|
||||||
Main => jag ++ ser ++ inte ;
|
|
||||||
Inv => ser ++ jag ++ inte ;
|
|
||||||
Sub => jag ++ inte ++ ser
|
|
||||||
} ;
|
|
||||||
s2 = se.s2
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
|
slashTransVerb : NounPhrase -> TransVerb -> ClauseSlashNounPhrase =
|
||||||
|
\jag, se ->
|
||||||
|
predVerbGroupClause jag (useVerb se (\\_,_,_ => se.s1)) ** {s2 = se.s2} ;
|
||||||
|
|
||||||
--2 Relative pronouns and relative clauses
|
--2 Relative pronouns and relative clauses
|
||||||
--
|
--
|
||||||
-- Relative pronouns can be nominative, accusative, or genitive, and
|
-- Relative pronouns can be nominative, accusative, or genitive, and
|
||||||
@@ -904,20 +917,21 @@ oper
|
|||||||
-- slash expressions ("som jag ser"). The latter has moreover the variation
|
-- 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").
|
-- as for the place of the preposition ("som jag talar om" - "om vilken jag talar").
|
||||||
|
|
||||||
RelClause : Type = {s : GenNum => Str} ;
|
RelClause : Type = {s : Bool => SForm => GenNum => Person => Str} ;
|
||||||
|
RelSent : Type = {s : GenNum => Person => Str} ;
|
||||||
|
|
||||||
relVerbPhrase : RelPron -> VerbPhrase -> RelClause = \som,sover ->
|
relVerbGroup : RelPron -> VerbGroup -> RelClause = \som,sover ->
|
||||||
{s = \\gn =>
|
{s = \\b,sf,gn,p =>
|
||||||
som.s ! RNom ! gn ++ sover.s2 ++ sover.s ! VIndic Present Simul
|
som.s ! RNom ! gn ++ sover.s2 ! b ++ sover.s ! sf ++
|
||||||
---- Past and Anter !
|
sover.s3 ! sf ! mkGenderRel som.g (genGN gn) ! numGN gn ! p
|
||||||
++
|
|
||||||
sover.s3 ! VIndic Present Simul ! mkGenderRel som.g (genGN gn) ! numGN gn
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
relSlash : RelPron -> SentenceSlashNounPhrase -> RelClause = \som,jagTalar ->
|
relSlash : RelPron -> ClauseSlashNounPhrase -> RelClause = \som,jagTalar ->
|
||||||
{s = \\gn =>
|
{s = \\b,sf,gn,p =>
|
||||||
let {jagtalar = jagTalar.s ! Sub ; om = jagTalar.s2} in
|
let
|
||||||
variants {
|
jagtalar = jagTalar.s ! b ! s2cl sf Sub ;
|
||||||
|
om = jagTalar.s2
|
||||||
|
in variants {
|
||||||
som.s ! RAcc ! gn ++ jagtalar ++ om ;
|
som.s ! RAcc ! gn ++ jagtalar ++ om ;
|
||||||
om ++ som.s ! RPrep ! gn ++ jagtalar
|
om ++ som.s ! RPrep ! gn ++ jagtalar
|
||||||
}
|
}
|
||||||
@@ -926,15 +940,16 @@ oper
|
|||||||
-- A 'degenerate' relative clause is the one often used in mathematics, e.g.
|
-- A 'degenerate' relative clause is the one often used in mathematics, e.g.
|
||||||
-- "tal x sådant att x är primt".
|
-- "tal x sådant att x är primt".
|
||||||
|
|
||||||
relSuch : Sentence -> RelClause = \A ->
|
relSuch : Clause -> RelClause = \A ->
|
||||||
{s = \\g => pronSådan ! g ++ infinAtt ++ A.s ! Sub} ;
|
{s = \\b,sf,g,p => pronSådan ! g ++ infinAtt ++ A.s ! b ! s2cl sf Sub} ;
|
||||||
|
|
||||||
-- The main use of relative clauses is to modify common nouns.
|
-- 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
|
-- The result is a common noun, out of which noun phrases can be formed
|
||||||
-- by determiners.
|
-- by determiners.
|
||||||
|
|
||||||
modRelClause : CommNounPhrase -> RelClause -> CommNounPhrase = \man,somsover ->
|
modRelClause : CommNounPhrase -> RelSent -> CommNounPhrase = \man,somsover ->
|
||||||
{s = \\n,b,c => man.s ! n ! b ! c ++ somsover.s ! gNum (genNoun man.g) n ;
|
{s = \\n,b,c =>
|
||||||
|
man.s ! n ! b ! c ++ somsover.s ! gNum (genNoun man.g) n ! P3 ;
|
||||||
g = man.g ;
|
g = man.g ;
|
||||||
p = False
|
p = False
|
||||||
} ;
|
} ;
|
||||||
@@ -943,13 +958,14 @@ oper
|
|||||||
-- construction "den man som sover" in this way, but only "mannen som sover".
|
-- construction "den man som sover" in this way, but only "mannen som sover".
|
||||||
-- Thus we need an extra rule:
|
-- Thus we need an extra rule:
|
||||||
|
|
||||||
detRelClause : Number -> CommNounPhrase -> RelClause -> NounPhrase =
|
detRelClause : Number -> CommNounPhrase -> RelSent -> NounPhrase =
|
||||||
\n,man,somsover ->
|
\n,man,somsover ->
|
||||||
{s = \\c => let {gn = gNum (genNoun man.g) n} in
|
{s = \\c => let {gn = gNum (genNoun man.g) n} in
|
||||||
artDef ! True ! gn ++
|
artDef ! True ! gn ++
|
||||||
man.s ! n ! DefP Indef ! npCase c ++ somsover.s ! gn ;
|
man.s ! n ! DefP Indef ! npCase c ++ somsover.s ! gn ! P3;
|
||||||
g = genNoun man.g ;
|
g = genNoun man.g ;
|
||||||
n = n
|
n = n ;
|
||||||
|
p = P3
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
@@ -979,7 +995,8 @@ oper
|
|||||||
_ => pronVem
|
_ => pronVem
|
||||||
} ;
|
} ;
|
||||||
g = utrum ;
|
g = utrum ;
|
||||||
n = num
|
n = num ;
|
||||||
|
p = P3
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
intPronWhat : Number -> IntPron = \num -> {
|
intPronWhat : Number -> IntPron = \num -> {
|
||||||
@@ -988,7 +1005,8 @@ oper
|
|||||||
_ => pronVad
|
_ => pronVad
|
||||||
} ;
|
} ;
|
||||||
n = num ;
|
n = num ;
|
||||||
g = Neutr
|
g = Neutr ;
|
||||||
|
p = P3
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--2 Utterances
|
--2 Utterances
|
||||||
@@ -1006,7 +1024,7 @@ oper
|
|||||||
Utterance = SS ;
|
Utterance = SS ;
|
||||||
|
|
||||||
indicUtt : Sentence -> Utterance = \x -> postfixSS "." (defaultSentence x) ;
|
indicUtt : Sentence -> Utterance = \x -> postfixSS "." (defaultSentence x) ;
|
||||||
interrogUtt : Question -> Utterance = \x -> postfixSS "?" (defaultQuestion x) ;
|
interrogUtt : {s : QuestForm => Str} -> Utterance = \x -> postfixSS "?" (defaultQuestion x) ;
|
||||||
|
|
||||||
|
|
||||||
--2 Questions
|
--2 Questions
|
||||||
@@ -1018,7 +1036,8 @@ param
|
|||||||
QuestForm = DirQ | IndirQ ;
|
QuestForm = DirQ | IndirQ ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
Question = SS1 QuestForm ;
|
Question = {s : Bool => SForm => QuestForm => Str} ;
|
||||||
|
QuestionSent = {s : QuestForm => Str} ;
|
||||||
|
|
||||||
--3 Yes-no questions
|
--3 Yes-no questions
|
||||||
--
|
--
|
||||||
@@ -1028,16 +1047,19 @@ oper
|
|||||||
-- rule, $questVerbPhrase'$. The only difference is if "om" appears
|
-- rule, $questVerbPhrase'$. The only difference is if "om" appears
|
||||||
-- in the indirect form.
|
-- in the indirect form.
|
||||||
|
|
||||||
questVerbPhrase : NounPhrase -> VerbPhrase -> Question =
|
questVerbPhrase : NounPhrase -> VerbGroup -> Question =
|
||||||
questVerbPhrase' False ;
|
questVerbPhrase' False ;
|
||||||
|
|
||||||
questVerbPhrase' : Bool -> NounPhrase -> VerbPhrase -> Question =
|
questVerbPhrase' : Bool -> NounPhrase -> VerbGroup -> Question =
|
||||||
\adv,du,sover ->
|
\adv,du,sover ->
|
||||||
let {dusover = (predVerbPhrase du sover).s} in
|
{s = \\b,sf =>
|
||||||
{s = table {
|
let
|
||||||
DirQ => dusover ! Inv ;
|
dusover : Order => Str = \\o => (predVerbGroupClause du sover).s ! b ! s2cl sf o
|
||||||
IndirQ => (if_then_else Str adv [] conjOm) ++ dusover ! Sub
|
in
|
||||||
}
|
table {
|
||||||
|
DirQ => dusover ! Inv ;
|
||||||
|
IndirQ => (if_then_else Str adv [] conjOm) ++ dusover ! Sub
|
||||||
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--3 Wh-questions
|
--3 Wh-questions
|
||||||
@@ -1045,29 +1067,35 @@ oper
|
|||||||
-- Wh-questions are of two kinds: ones that are like $NP - VP$ sentences,
|
-- Wh-questions are of two kinds: ones that are like $NP - VP$ sentences,
|
||||||
-- others that are line $S/NP - NP$ sentences.
|
-- others that are line $S/NP - NP$ sentences.
|
||||||
|
|
||||||
intVerbPhrase : IntPron -> VerbPhrase -> Question = \vem,sover ->
|
intVerbPhrase : IntPron -> VerbGroup -> Question = \vem,sover ->
|
||||||
let {vemsom : NounPhrase =
|
let
|
||||||
{s = \\c => vem.s ! c ++ "som" ; g = vem.g ; n = vem.n}
|
vemsom : NounPhrase =
|
||||||
} in
|
{s = \\c => vem.s ! c ++ "som" ; g = vem.g ; n = vem.n ; p = P3}
|
||||||
{s = table {
|
in
|
||||||
DirQ => (predVerbPhrase vem sover).s ! Main ;
|
{s = \\b,sf =>
|
||||||
IndirQ => (predVerbPhrase vemsom sover).s ! Sub
|
table {
|
||||||
}
|
DirQ => (predVerbGroupClause vem sover).s ! b ! s2cl sf Main ;
|
||||||
|
IndirQ => (predVerbGroupClause vemsom sover).s ! b ! s2cl sf Sub
|
||||||
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
intSlash : IntPron -> SentenceSlashNounPhrase -> Question = \Vem, jagTalar ->
|
intSlash : IntPron -> ClauseSlashNounPhrase -> Question = \Vem, jagTalar ->
|
||||||
let {
|
let
|
||||||
vem = Vem.s ! PAcc ;
|
vem = Vem.s ! PAcc ;
|
||||||
jagtalar = jagTalar.s ! Sub ;
|
|
||||||
talarjag = jagTalar.s ! Inv ;
|
|
||||||
om = jagTalar.s2
|
om = jagTalar.s2
|
||||||
} in
|
in
|
||||||
{s = table {
|
{s = \\b,sf =>
|
||||||
DirQ => variants {
|
let
|
||||||
|
cf = s2cl sf ;
|
||||||
|
talarjag = jagTalar.s ! b ! cf Inv ;
|
||||||
|
jagtalar = jagTalar.s ! b ! cf Sub
|
||||||
|
in
|
||||||
|
table {
|
||||||
|
DirQ => variants {
|
||||||
vem ++ talarjag ++ om ;
|
vem ++ talarjag ++ om ;
|
||||||
om ++ vem ++ talarjag
|
om ++ vem ++ talarjag
|
||||||
} ;
|
} ;
|
||||||
IndirQ => variants {
|
IndirQ => variants {
|
||||||
vem ++ jagtalar ++ om ;
|
vem ++ jagtalar ++ om ;
|
||||||
om ++ vem ++ jagtalar
|
om ++ vem ++ jagtalar
|
||||||
}
|
}
|
||||||
@@ -1091,10 +1119,9 @@ oper
|
|||||||
-- A question adverbial can be applied to anything, and whether this makes
|
-- A question adverbial can be applied to anything, and whether this makes
|
||||||
-- sense is a semantic question.
|
-- sense is a semantic question.
|
||||||
|
|
||||||
questAdverbial : IntAdverb -> NounPhrase -> VerbPhrase -> Question =
|
questAdverbial : IntAdverb -> NounPhrase -> VerbGroup -> Question =
|
||||||
\hur, du, mår ->
|
\hur, du, mår ->
|
||||||
{s = \\q => hur.s ++ (questVerbPhrase' True du mår).s ! q} ;
|
{s = \\b,sf,q => hur.s ++ (questVerbPhrase' True du mår).s ! b ! sf ! q} ;
|
||||||
|
|
||||||
|
|
||||||
--2 Imperatives
|
--2 Imperatives
|
||||||
--
|
--
|
||||||
@@ -1103,7 +1130,7 @@ oper
|
|||||||
Imperative = SS1 Number ;
|
Imperative = SS1 Number ;
|
||||||
|
|
||||||
imperVerbPhrase : VerbPhrase -> Imperative = \titta ->
|
imperVerbPhrase : VerbPhrase -> Imperative = \titta ->
|
||||||
{s = \\n => titta.s ! VImperat ++ titta.s2 ++ titta.s3 ! VImperat ! utrum ! n} ;
|
{s = \\n => titta.s ++ titta.s2 ++ titta.s3 ! utrum ! n ! P2} ;
|
||||||
|
|
||||||
imperUtterance : Number -> Imperative -> Utterance = \n,I ->
|
imperUtterance : Number -> Imperative -> Utterance = \n,I ->
|
||||||
ss (I.s ! n ++ "!") ;
|
ss (I.s ! n ++ "!") ;
|
||||||
@@ -1198,23 +1225,26 @@ oper
|
|||||||
-- or plural if any of the components is, depending on the conjunction.
|
-- or plural if any of the components is, depending on the conjunction.
|
||||||
-- The gender is neuter if any of the components is.
|
-- The gender is neuter if any of the components is.
|
||||||
|
|
||||||
ListNounPhrase : Type = {s1,s2 : NPForm => Str ; g : Gender ; n : Number} ;
|
ListNounPhrase : Type = {s1,s2 : NPForm => Str ; g : Gender ; n : Number ; p : Person} ;
|
||||||
|
|
||||||
twoNounPhrase : (_,_ : NounPhrase) -> ListNounPhrase = \x,y ->
|
twoNounPhrase : (_,_ : NounPhrase) -> ListNounPhrase = \x,y ->
|
||||||
CO.twoTable NPForm x y ** {n = conjNumber x.n y.n ; g = conjGender x.g y.g} ;
|
CO.twoTable NPForm x y **
|
||||||
|
{n = conjNumber x.n y.n ; g = conjGender x.g y.g ; p = conjPerson x.p y.p} ;
|
||||||
|
|
||||||
consNounPhrase : ListNounPhrase -> NounPhrase -> ListNounPhrase = \xs,x ->
|
consNounPhrase : ListNounPhrase -> NounPhrase -> ListNounPhrase = \xs,x ->
|
||||||
CO.consTable NPForm CO.comma xs x **
|
CO.consTable NPForm CO.comma xs x **
|
||||||
{n = conjNumber xs.n x.n ; g = conjGender xs.g x.g} ;
|
{n = conjNumber xs.n x.n ; g = conjGender xs.g x.g ; p = conjPerson xs.p x.p} ;
|
||||||
|
|
||||||
conjunctNounPhrase : Conjunction -> ListNounPhrase -> NounPhrase = \c,xs ->
|
conjunctNounPhrase : Conjunction -> ListNounPhrase -> NounPhrase = \c,xs ->
|
||||||
CO.conjunctTable NPForm c xs ** {n = conjNumber c.n xs.n ; g = xs.g} ;
|
CO.conjunctTable NPForm c xs **
|
||||||
|
{n = conjNumber c.n xs.n ; g = xs.g ; p = xs.p} ;
|
||||||
|
|
||||||
conjunctDistrNounPhrase : ConjunctionDistr -> ListNounPhrase -> NounPhrase =
|
conjunctDistrNounPhrase : ConjunctionDistr -> ListNounPhrase -> NounPhrase =
|
||||||
\c,xs ->
|
\c,xs ->
|
||||||
CO.conjunctDistrTable NPForm c xs ** {n = conjNumber c.n xs.n ; g = xs.g} ;
|
CO.conjunctDistrTable NPForm c xs **
|
||||||
|
{n = conjNumber c.n xs.n ; g = xs.g ; p = xs.p} ;
|
||||||
|
|
||||||
-- We hve to define a calculus of numbers of genders. For numbers,
|
-- We have to define a calculus of numbers of genders. For numbers,
|
||||||
-- it is like the conjunction with $Pl$ corresponding to $False$. For genders,
|
-- it is like the conjunction with $Pl$ corresponding to $False$. For genders,
|
||||||
-- $Neutr$ corresponds to $False$.
|
-- $Neutr$ corresponds to $False$.
|
||||||
|
|
||||||
@@ -1223,6 +1253,14 @@ oper
|
|||||||
_ => Pl
|
_ => Pl
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
conjPerson : Person -> Person -> Person = \m,n -> case <m,n> of {
|
||||||
|
<P3,P3> => P3 ;
|
||||||
|
<P3,P2> => P2 ;
|
||||||
|
<P2,P3> => P2 ;
|
||||||
|
<P2,P2> => P2 ;
|
||||||
|
_ => P1
|
||||||
|
} ;
|
||||||
|
|
||||||
conjGender : Gender -> Gender -> Gender ;
|
conjGender : Gender -> Gender -> Gender ;
|
||||||
|
|
||||||
|
|
||||||
@@ -1251,7 +1289,7 @@ oper
|
|||||||
\if, A, B ->
|
\if, A, B ->
|
||||||
{s = \\n => subjunctVariants if A (B.s ! n)} ;
|
{s = \\n => subjunctVariants if A (B.s ! n)} ;
|
||||||
|
|
||||||
subjunctQuestion : Subjunction -> Sentence -> Question -> Question = \if, A, B ->
|
subjunctQuestion : Subjunction -> Sentence -> QuestionSent -> QuestionSent = \if, A, B ->
|
||||||
{s = \\q => subjunctVariants if A (B.s ! q)} ;
|
{s = \\q => subjunctVariants if A (B.s ! q)} ;
|
||||||
|
|
||||||
subjunctVariants : Subjunction -> Sentence -> Str -> Str = \if,A,B ->
|
subjunctVariants : Subjunction -> Sentence -> Str -> Str = \if,A,B ->
|
||||||
@@ -1280,7 +1318,7 @@ oper
|
|||||||
defaultNounPhrase : NounPhrase -> SS = \john ->
|
defaultNounPhrase : NounPhrase -> SS = \john ->
|
||||||
ss (john.s ! PNom) ;
|
ss (john.s ! PNom) ;
|
||||||
|
|
||||||
defaultQuestion : Question -> SS = \whoareyou ->
|
defaultQuestion : {s : QuestForm => Str} -> SS = \whoareyou ->
|
||||||
ss (whoareyou.s ! DirQ) ;
|
ss (whoareyou.s ! DirQ) ;
|
||||||
|
|
||||||
defaultSentence : Sentence -> Utterance = \x -> ss (x.s ! Main) ;
|
defaultSentence : Sentence -> Utterance = \x -> ss (x.s ! Main) ;
|
||||||
|
|||||||
@@ -17,15 +17,16 @@ concrete StructuralSwe of Structural =
|
|||||||
TheyNP = pronNounPhrase de_38 ;
|
TheyNP = pronNounPhrase de_38 ;
|
||||||
TheyFemNP = pronNounPhrase de_38 ;
|
TheyFemNP = pronNounPhrase de_38 ;
|
||||||
|
|
||||||
YouNP = let {ni = pronNounPhrase ni_37 } in {s = ni.s ; g = ni.g ; n = Sg} ;
|
YouNP = let {ni = pronNounPhrase ni_37 } in {
|
||||||
|
s = ni.s ; g = ni.g ; n = Sg ; p = P2} ; ---- gives wrong refl
|
||||||
|
|
||||||
ItNP = pronNounPhrase det_40 ; ----
|
ItNP = pronNounPhrase det_40 ; ----
|
||||||
ThisNP = regNameNounPhrase ["det här"] NNeutr ;
|
ThisNP = regNameNounPhrase ["det här"] NNeutr ;
|
||||||
ThatNP = regNameNounPhrase ["det där"] NNeutr ;
|
ThatNP = regNameNounPhrase ["det där"] NNeutr ;
|
||||||
TheseNumNP n =
|
TheseNumNP n =
|
||||||
{s = \\c => ["de här"] ++ n.s ! npCase c ; g = Neutr ; n = Pl} ;
|
{s = \\c => ["de här"] ++ n.s ! npCase c ; g = Neutr ; n = Pl ; p = P3} ;
|
||||||
ThoseNumNP n =
|
ThoseNumNP n =
|
||||||
{s = \\c => ["de där"] ++ n.s ! npCase c ; g = Neutr ; n = Pl} ;
|
{s = \\c => ["de där"] ++ n.s ! npCase c ; g = Neutr ; n = Pl ; p = P3} ;
|
||||||
|
|
||||||
EveryDet = varjeDet ;
|
EveryDet = varjeDet ;
|
||||||
AllMassDet = mkDeterminerSgGender2 "all" "allt" IndefP ;
|
AllMassDet = mkDeterminerSgGender2 "all" "allt" IndefP ;
|
||||||
@@ -74,7 +75,7 @@ concrete StructuralSwe of Structural =
|
|||||||
ThereforeAdv = ss "därför" ;
|
ThereforeAdv = ss "därför" ;
|
||||||
|
|
||||||
EverybodyNP = let alla = table {Nom => "alla" ; Gen => "allas"} in
|
EverybodyNP = let alla = table {Nom => "alla" ; Gen => "allas"} in
|
||||||
{s = \\c => alla ! npCase c ; g = Utr ; n = Pl} ;
|
{s = \\c => alla ! npCase c ; g = Utr ; n = Pl ; p = P3} ;
|
||||||
SomebodyNP = nameNounPhrase (mkProperName "någon" (NUtr Masc)) ;
|
SomebodyNP = nameNounPhrase (mkProperName "någon" (NUtr Masc)) ;
|
||||||
NobodyNP = nameNounPhrase (mkProperName "ingen" (NUtr Masc)) ;
|
NobodyNP = nameNounPhrase (mkProperName "ingen" (NUtr Masc)) ;
|
||||||
EverythingNP = nameNounPhrase (mkProperName "allting" NNeutr) ;
|
EverythingNP = nameNounPhrase (mkProperName "allting" NNeutr) ;
|
||||||
|
|||||||
@@ -121,4 +121,12 @@ instance SyntaxSwe of SyntaxScand = TypesSwe **
|
|||||||
adjPastPart : Verb -> Adjective = \verb -> {
|
adjPastPart : Verb -> Adjective = \verb -> {
|
||||||
s = \\af,c => verb.s1 ++ verb.s ! VI (PtPret af c) --- på slagen
|
s = \\af,c => verb.s1 ++ verb.s ! VI (PtPret af c) --- på slagen
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
reflPron : Number -> Person -> Str = \n,p -> case <n,p> of {
|
||||||
|
<Sg,P1> => "mig" ;
|
||||||
|
<Sg,P2> => "mig" ;
|
||||||
|
<Pl,P1> => "oss" ;
|
||||||
|
<Pl,P2> => "er" ;
|
||||||
|
_ => "sig"
|
||||||
|
} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
--# -path=.:../scandinavian:../abstract:../../prelude
|
--# -path=.:../scandinavian:../abstract:../../prelude
|
||||||
|
|
||||||
concrete TestResourceSwe of TestResource = RulesSwe, StructuralSwe ** open MorphoSwe, SyntaxSwe in {
|
concrete TestResourceSwe of TestResource = RulesSwe, StructuralSwe **
|
||||||
|
open Prelude, MorphoSwe, SyntaxSwe in {
|
||||||
|
|
||||||
flags startcat=Phr ; lexer=text ; unlexer=text ;
|
flags startcat=Phr ; lexer=text ; unlexer=text ;
|
||||||
|
|
||||||
@@ -48,4 +49,18 @@ lin
|
|||||||
|
|
||||||
John = mkProperName "Johan" (NUtr Masc) ;
|
John = mkProperName "Johan" (NUtr Masc) ;
|
||||||
Mary = mkProperName "Maria" (NUtr NoMasc) ;
|
Mary = mkProperName "Maria" (NUtr NoMasc) ;
|
||||||
|
|
||||||
|
--- next
|
||||||
|
AlreadyAdv = advPre "redan" ;
|
||||||
|
NowAdv = advPre "now" ;
|
||||||
|
|
||||||
|
Paint = extTransVerb (vNopart (vTala "mål")) [] ;
|
||||||
|
Green = aFin "grön" ;
|
||||||
|
Beg = extTransVerb (mkVerbPart "be" "ber" "be" "bad" "bett" "bedd" []) [] ** {s3 = "att"} ;
|
||||||
|
Promise = extTransVerb (vNopart (vTala "lov")) [] ** {isAux = False} ;
|
||||||
|
Promise2 = extTransVerb (vNopart (vTala "lov")) [] ** {s3 = "att"} ;
|
||||||
|
Wonder = extTransVerb (vNopart (vTala "undr")) [] ;
|
||||||
|
Ask = extTransVerb (vNopart (vTala "fråg")) [] ;
|
||||||
|
Tell = extTransVerb (vNopart (vTala "berätt")) [] ;
|
||||||
|
Look = extTransVerb (mkVerbPart "se" "ser" "se" "såg" "sett" "sedd" "ut") [] ;
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
48
lib/resource/swedish/sag-missing.txt
Normal file
48
lib/resource/swedish/sag-missing.txt
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
+ vi lovade Per att följa med
|
||||||
|
|
||||||
|
- att meditera ägnar han nästan allsin tid nuförtiden
|
||||||
|
|
||||||
|
+ hon har vunnit stora priser igen
|
||||||
|
|
||||||
|
? han blev anklagad för att ha förfalskat en namnteckning
|
||||||
|
|
||||||
|
+ de undrar om det blit något biobesök ikväll
|
||||||
|
|
||||||
|
+ vi kan nog gissa varifrån föroreningarna kommer
|
||||||
|
|
||||||
|
+ hon har inte meddelat mig hur hon tänker göra
|
||||||
|
|
||||||
|
- jag såg nog vad/så/vilka fina rosor du hade
|
||||||
|
|
||||||
|
- jag läser vilka böcker han än skriver
|
||||||
|
|
||||||
|
- han kan skaffa dig vad för slags bil du än vill ha
|
||||||
|
|
||||||
|
- de tycker om när det är mörkt
|
||||||
|
|
||||||
|
- jag avskyr när han röker här inne
|
||||||
|
|
||||||
|
- (?) vi skulle uppskatta om du kom
|
||||||
|
|
||||||
|
- sedan sa hon stillsamt: när kommer du tillbaka
|
||||||
|
|
||||||
|
+ de ansåg oss ha svikit överenskommelsen
|
||||||
|
|
||||||
|
+ vi såg dem försvinna
|
||||||
|
|
||||||
|
+ han lät oss inte dansa
|
||||||
|
|
||||||
|
? det gick honom väl
|
||||||
|
|
||||||
|
? det hände mig något hemskt
|
||||||
|
|
||||||
|
- han hittade en bräda och sågade itu
|
||||||
|
|
||||||
|
- jag köpte en pizza och åt på lunchen
|
||||||
|
|
||||||
|
- jag ska strax betala er (vad jag är skyldig) "bitransitiva med bara ett objekt"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user