mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-14 07:19:31 -06:00
New things in english and german resources.
This commit is contained in:
@@ -58,7 +58,8 @@ cat
|
||||
|
||||
V ; -- one-place verb, e.g. "walk"
|
||||
TV ; -- two-place verb, e.g. "love", "wait (for)", "switch on"
|
||||
VS ; -- sentence-compl. verb e.g. "say", "prove"
|
||||
V3 ; -- three-place verb, e.g. "give", "prefer (stg) (to stg)"
|
||||
VS ; -- sentence-compl. verb, e.g. "say", "prove"
|
||||
VP ; -- verb phrase, e.g. "switch the light on"
|
||||
|
||||
--3 Adverbials
|
||||
@@ -144,6 +145,8 @@ fun
|
||||
PosPassV, NegPassV : V -> VP ; -- "is seen", "is not seen"
|
||||
PosNP, NegNP : NP -> VP ; -- "is John", "is not John"
|
||||
PosVS, NegVS : VS -> S -> VP ; -- "says that I run", "doesn't say..."
|
||||
PosV3, NegV3 : V3 -> NP -> NP -> VP ; -- "prefers wine to beer"
|
||||
VTrans : TV -> V ; -- "loves"
|
||||
|
||||
--3 Adverbials
|
||||
--
|
||||
|
||||
@@ -3,10 +3,13 @@ abstract TestAbs = ResAbs ** {
|
||||
-- a random sample of lexicon to test resource grammar with
|
||||
|
||||
fun
|
||||
Big, Small, Old, Young : AdjDeg ;
|
||||
Big, Small, Old, Young : AdjDeg ;
|
||||
American, Finnish : Adj1 ;
|
||||
Married : Adj2 ;
|
||||
Man, Woman, Car, House, Light : N ;
|
||||
Walk, Run : V ;
|
||||
Send, Wait, Love, SwitchOn, SwitchOff : TV ;
|
||||
Give, Prefer : V3 ;
|
||||
Say, Prove : VS ;
|
||||
Mother, Uncle : Fun ;
|
||||
Connection : Fun2 ;
|
||||
|
||||
@@ -51,6 +51,7 @@ oper
|
||||
pronYouSg = mkPronoun "you" "you" "your" "yours" Sg P2 ; -- verb form still OK
|
||||
pronHe = mkPronoun "he" "him" "his" "his" Sg P3 ;
|
||||
pronShe = mkPronoun "she" "her" "her" "hers" Sg P3 ;
|
||||
pronIt = mkPronoun "it" "it" "its" "it" Sg P3 ;
|
||||
|
||||
pronWe = mkPronoun "we" "us" "our" "ours" Pl P1 ;
|
||||
pronYouPl = mkPronoun "you" "you" "your" "yours" Pl P2 ;
|
||||
@@ -111,29 +112,45 @@ oper
|
||||
|
||||
--3 Verbs
|
||||
--
|
||||
-- Except for "be", the worst case needs two forms.
|
||||
-- Except for "be", the worst case needs four forms.
|
||||
|
||||
mkVerbP3 : (_,_: Str) -> VerbP3 = \goes,go ->
|
||||
{s = table {InfImp => go ; Indic P3 => goes ; Indic _ => go}} ;
|
||||
mkVerbP3 : (_,_,_,_: Str) -> VerbP3 = \go,goes,went,gone ->
|
||||
{s = table {
|
||||
InfImp => go ;
|
||||
Indic P3 => goes ;
|
||||
Indic _ => go ;
|
||||
Past _ => went ;
|
||||
PPart => gone
|
||||
}
|
||||
} ;
|
||||
|
||||
mkVerb : (_,_,_ : Str) -> VerbP3 = \ring,rang,rung ->
|
||||
mkVerbP3 ring (ring + "s") rang rung ;
|
||||
|
||||
regVerbP3 : Str -> VerbP3 = \walk ->
|
||||
mkVerbP3 (walk + "s") walk ;
|
||||
mkVerb walk (walk + "ed") (walk + "ed") ;
|
||||
|
||||
verbP3s : Str -> VerbP3 = \kiss ->
|
||||
mkVerbP3 (kiss + "es") kiss ;
|
||||
mkVerbP3 kiss (kiss + "es") (kiss + "ed") (kiss + "ed") ;
|
||||
|
||||
verbP3y : Str -> VerbP3 = \fl ->
|
||||
mkVerbP3 (fl + "ies") (fl + "y") ;
|
||||
verbP3e : Str -> VerbP3 = \love ->
|
||||
mkVerbP3 love (love + "s") (love + "d") (love + "d") ;
|
||||
|
||||
verbP3Have = mkVerbP3 "has" "have" ;
|
||||
verbP3y : Str -> VerbP3 = \cr ->
|
||||
mkVerbP3 (cr + "y") (cr + "ies") (cr + "ied") (cr + "ied") ;
|
||||
|
||||
verbP3Do = verbP3s "do" ;
|
||||
verbP3Have = mkVerbP3 "have" "has" "had" "had" ;
|
||||
|
||||
verbP3Do = mkVerbP3 "do" "does" "did" "done" ;
|
||||
|
||||
verbBe : VerbP3 = {s = table {
|
||||
InfImp => "be" ;
|
||||
Indic P1 => "am" ;
|
||||
Indic P2 => "are" ;
|
||||
Indic P3 => "is"
|
||||
Indic P3 => "is" ;
|
||||
Past Sg => "was" ;
|
||||
Past Pl => "were" ;
|
||||
PPart => "been"
|
||||
}} ;
|
||||
|
||||
verbPart : VerbP3 -> Particle -> Verb = \v,p ->
|
||||
|
||||
@@ -103,11 +103,11 @@ oper
|
||||
|
||||
--2 Verbs
|
||||
--
|
||||
-- The fragment only has present tense so far, but in all persons.
|
||||
-- Except for "be", the worst case needs two forms: the infinitive and
|
||||
-- the third person singular.
|
||||
-- The fragment now has all verb forms, except the gerund/present participle.
|
||||
-- Except for "be", the worst case needs four forms: the infinitive and
|
||||
-- the third person singular present, the past indicative, and the past participle.
|
||||
|
||||
mkV : (go, goes : Str) -> V ;
|
||||
mkV : (go, goes, went, gone : Str) -> V ;
|
||||
|
||||
vReg : (walk : Str) -> V ; -- walk, walks
|
||||
vKiss : (kiss : Str) -> V ; -- kiss, kisses
|
||||
@@ -126,7 +126,7 @@ oper
|
||||
|
||||
-- Verbs with a particle.
|
||||
|
||||
vPart : (go, goes, up : Str) -> V ;
|
||||
vPart : (go, goes, went, gone, up : Str) -> V ;
|
||||
vPartReg : (get, up : Str) -> V ;
|
||||
|
||||
-- Two-place verbs, and the special case with direct object.
|
||||
@@ -197,10 +197,11 @@ oper
|
||||
aRidiculous = adjDegrLong ;
|
||||
apReg = \s -> AdjP1 (mkAdj1 s) ;
|
||||
|
||||
mkV = \go,goes -> verbNoPart (mkVerbP3 goes go) ;
|
||||
vReg = \run -> mkV run (run + "s") ;
|
||||
vKiss = \kiss -> mkV kiss (kiss + "es") ;
|
||||
vFly = \fly -> mkV fly (Predef.tk 1 fly + "ies") ;
|
||||
mkV = \go,goes,went,gone -> verbNoPart (mkVerbP3 go goes went gone) ;
|
||||
vReg = \walk -> mkV walk (walk + "s") (walk + "ed") (walk + "ed") ;
|
||||
vKiss = \kiss -> mkV kiss (kiss + "es") (kiss + "ed") (kiss + "ed") ;
|
||||
vFly = \cry -> let {cr = Predef.tk 1 cry} in
|
||||
mkV cry (cr + "ies") (cr + "ied") (cr + "ied") ;
|
||||
vGo = vKiss ;
|
||||
|
||||
vGen = \fly -> let {
|
||||
@@ -213,14 +214,14 @@ oper
|
||||
eqy "z" vKiss (
|
||||
vReg))) fly ;
|
||||
|
||||
vPart = \go, goes, up -> verbPart (mkVerbP3 goes go) up ;
|
||||
vPart = \go, goes, went, gone, up -> verbPart (mkVerbP3 go goes went gone) up ;
|
||||
vPartReg = \get, up -> verbPart (regVerbP3 get) up ;
|
||||
|
||||
mkTV = \v,p -> v ** {s3 = p} ;
|
||||
tvPartReg = \get, along, with -> mkTV (vPartReg get along) with ;
|
||||
|
||||
vBe = verbBe ;
|
||||
vHave = mkV "have" "has" ;
|
||||
vHave = verbP3Have ;
|
||||
|
||||
tvGen = \s,p -> mkTV (vGen s) p ;
|
||||
tvDir = \v -> mkTV v [] ;
|
||||
|
||||
@@ -31,7 +31,9 @@ lincat
|
||||
NP = {s : NPForm => Str ; n : Number ; p : Person} ;
|
||||
PN = {s : Case => Str} ;
|
||||
Det = {s : Str ; n : Number} ;
|
||||
Fun = CommNounPhrase ** {s2 : Preposition} ;
|
||||
Fun = Function ;
|
||||
-- = CommNounPhrase ** {s2 : Preposition} ;
|
||||
Fun2 = Function ** {s3 : Preposition} ;
|
||||
|
||||
Adj1 = Adjective ;
|
||||
-- = {s : Str}
|
||||
@@ -42,7 +44,9 @@ lincat
|
||||
V = Verb ;
|
||||
-- = {s : VForm => Str ; s1 : Particle}
|
||||
VP = {s : VForm => Str ; s2 : Number => Str ; isAux : Bool} ;
|
||||
TV = Verb ** {s3 : Preposition} ;
|
||||
TV = TransVerb ;
|
||||
-- = Verb ** {s3 : Preposition} ;
|
||||
V3 = TransVerb ** {s4 : Preposition} ;
|
||||
VS = Verb ;
|
||||
|
||||
AdV = {s : Str ; isPost : Bool} ;
|
||||
@@ -56,6 +60,7 @@ lincat
|
||||
Qu = {s : QuestForm => Str} ;
|
||||
Imp = {s : Number => Str} ;
|
||||
Phr = {s : Str} ;
|
||||
Text = {s : Str} ;
|
||||
|
||||
Conj = {s : Str ; n : Number} ;
|
||||
ConjD = {s1 : Str ; s2 : Str ; n : Number} ;
|
||||
@@ -74,6 +79,7 @@ lin
|
||||
UsePN = nameNounPhrase ;
|
||||
UseFun = funAsCommNounPhrase ;
|
||||
AppFun = appFunComm ;
|
||||
AppFun2 = appFun2 ;
|
||||
AdjP1 = adj2adjPhrase ;
|
||||
ComplAdj = complAdj ;
|
||||
PositAdjP = positAdjPhrase ;
|
||||
@@ -86,6 +92,8 @@ lin
|
||||
DefOneNP = defNounPhrase singular ;
|
||||
DefManyNP = defNounPhrase plural ;
|
||||
|
||||
CNthatS = nounThatSentence ;
|
||||
|
||||
PredVP = predVerbPhrase ;
|
||||
PosV = predVerb True ;
|
||||
NegV = predVerb False ;
|
||||
@@ -95,18 +103,24 @@ lin
|
||||
NegCN = predCommNoun False ;
|
||||
PosTV = complTransVerb True ;
|
||||
NegTV = complTransVerb False ;
|
||||
PosV3 = complDitransVerb True ;
|
||||
NegV3 = complDitransVerb False ;
|
||||
PosPassV = passVerb True ;
|
||||
NegPassV = passVerb False ;
|
||||
PosNP = predNounPhrase True ;
|
||||
NegNP = predNounPhrase False ;
|
||||
PosVS = complSentVerb True ;
|
||||
NegVS = complSentVerb False ;
|
||||
|
||||
VTrans = transAsVerb ;
|
||||
|
||||
AdvVP = adVerbPhrase ;
|
||||
LocNP = locativeNounPhrase ;
|
||||
AdvCN = advCommNounPhrase ;
|
||||
AdvAP = advAdjPhrase ;
|
||||
|
||||
PosSlashTV = slashTransVerb True ;
|
||||
NegSlashTV = slashTransVerb False ;
|
||||
OneVP = predVerbPhrase (nameNounPhrase (nameReg "one")) ;
|
||||
|
||||
IdRP = identRelPron ;
|
||||
FunRP = funRelPron ;
|
||||
@@ -135,6 +149,8 @@ lin
|
||||
ImperOne = imperUtterance singular ;
|
||||
ImperMany = imperUtterance plural ;
|
||||
|
||||
AdvS = advSentence ;
|
||||
|
||||
lin
|
||||
TwoS = twoSentence ;
|
||||
ConsS = consSentence ;
|
||||
@@ -161,12 +177,14 @@ lin
|
||||
PhrIP ip = ip ;
|
||||
PhrIAdv ia = ia ;
|
||||
|
||||
OnePhr p = p ;
|
||||
ConsPhr = cc2 ;
|
||||
|
||||
lin
|
||||
INP = pronI ;
|
||||
ThouNP = pronYouSg ;
|
||||
HeNP = pronHe ;
|
||||
SheNP = pronShe ;
|
||||
ItNP = pronIt ;
|
||||
WeNP = pronWe ;
|
||||
YeNP = pronYouPl ;
|
||||
YouNP = pronYouSg ;
|
||||
@@ -192,4 +210,10 @@ lin
|
||||
|
||||
PhrYes = ss "Yes." ;
|
||||
PhrNo = ss "No." ;
|
||||
|
||||
VeryAdv = ss "very" ;
|
||||
TooAdv = ss "too" ;
|
||||
OtherwiseAdv = ss "otherwise" ;
|
||||
ThereforeAdv = ss "therefore" ;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -115,6 +115,14 @@ oper
|
||||
n = Pl
|
||||
} ;
|
||||
|
||||
-- Constructions like "the idea that two is even" are formed at the
|
||||
-- first place as common nouns, so that one can also have "a suggestion that...".
|
||||
|
||||
nounThatSentence : CommNounPhrase -> Sentence -> CommNounPhrase = \idea,x ->
|
||||
{s = \\n,c => idea.s ! n ! c ++ "that" ++ x.s ;
|
||||
g = idea.g
|
||||
} ;
|
||||
|
||||
|
||||
--2 Adjectives
|
||||
--
|
||||
@@ -128,6 +136,7 @@ oper
|
||||
simpleAdjPhrase : Str -> AdjPhrase = \French ->
|
||||
adj2adjPhrase (simpleAdj French) ;
|
||||
|
||||
|
||||
--3 Comparison adjectives
|
||||
--
|
||||
-- Each of the comparison forms has a characteristic use:
|
||||
@@ -205,7 +214,7 @@ oper
|
||||
|
||||
appFunComm : Function -> NounPhrase -> CommNounPhrase = \mother,john ->
|
||||
{s = \\n => table {
|
||||
Gen => nonExist ;
|
||||
Gen => nonExist ; --- ?
|
||||
_ => mother.s ! n ! Nom ++ mother.s2 ++ john.s ! GenSP
|
||||
} ;
|
||||
g = mother.g
|
||||
@@ -226,7 +235,7 @@ oper
|
||||
variants {
|
||||
defNounPhrase nf (appFunComm mother john) ;
|
||||
npGenDet nf john mother
|
||||
} ;
|
||||
} ;
|
||||
|
||||
-- The commonest case is functions with the preposition "of".
|
||||
|
||||
@@ -236,6 +245,17 @@ oper
|
||||
funOfReg : Str -> Gender -> Function = \mother,g ->
|
||||
funOf (nounReg mother ** {g = g}) ;
|
||||
|
||||
-- Two-place functions add one argument place.
|
||||
|
||||
Function2 = Function ** {s3 : Preposition} ;
|
||||
|
||||
-- There application starts by filling the first place.
|
||||
|
||||
appFun2 : Function2 -> NounPhrase -> Function = \train, paris ->
|
||||
{s = \\n,c => train.s ! n ! c ++ train.s2 ++ paris.s ! AccP ;
|
||||
g = train.g ;
|
||||
s2 = train.s3
|
||||
} ;
|
||||
|
||||
|
||||
--2 Verbs
|
||||
@@ -350,6 +370,46 @@ oper
|
||||
mkTransVerbDir : VerbP3 -> TransVerb = \love ->
|
||||
mkTransVerbPart love [] ;
|
||||
|
||||
-- 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 "he is swum", etc.
|
||||
-- The syntax is the same as for adjectival predication.
|
||||
|
||||
passVerb : Bool -> Verb -> VerbPhrase = \b,love ->
|
||||
predAdjective b (adj2adjPhrase (ss (love.s ! PPart))) ;
|
||||
|
||||
-- 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 ** {s4 : Preposition} ;
|
||||
|
||||
mkDitransVerb : Verb -> Preposition -> Preposition -> DitransVerb = \v,p1,p2 ->
|
||||
v ** {s3 = p1 ; s4 = p2} ;
|
||||
|
||||
complDitransVerb :
|
||||
Bool -> DitransVerb -> NounPhrase -> NounPhrase -> VerbPhrase =
|
||||
\b,give,you,beer ->
|
||||
let {
|
||||
youbeer = give.s1 ++ give.s3 ++ you.s ! AccP ++ give.s4 ++ beer.s ! AccP
|
||||
} in
|
||||
if_then_else VerbPhrase b
|
||||
{s = give.s ;
|
||||
s2 = \\_ => youbeer ;
|
||||
isAux = False
|
||||
}
|
||||
{s = \\v => contractNot (verbP3Do.s ! v) ;
|
||||
s2 = \\_ => give.s ! InfImp ++ youbeer ;
|
||||
isAux = True
|
||||
} ;
|
||||
|
||||
|
||||
--2 Adverbials
|
||||
--
|
||||
@@ -373,6 +433,11 @@ oper
|
||||
isAux = sings.isAux
|
||||
} ;
|
||||
|
||||
advAdjPhrase : Adverb -> AdjPhrase -> AdjPhrase = \very, good ->
|
||||
{s = very.s ++ good.s ;
|
||||
p = good.p
|
||||
} ;
|
||||
|
||||
-- Adverbials are typically generated by prefixing prepositions.
|
||||
-- The rule for creating locative noun phrases by the preposition "in"
|
||||
-- is a little shaky, since other prepositions may be preferred ("on", "at").
|
||||
@@ -680,6 +745,14 @@ oper
|
||||
imperUtterance : Number -> Imperative -> Utterance = \n,I ->
|
||||
ss (I.s ! n ++ "!") ;
|
||||
|
||||
--2 Sentence adverbials
|
||||
--
|
||||
-- This class covers adverbials such as "otherwise", "therefore", which are prefixed
|
||||
-- to a sentence to form a phrase.
|
||||
|
||||
advSentence : Adverb -> Sentence -> Utterance = \hence,itiseven ->
|
||||
ss (hence.s ++ itiseven.s ++ ".") ;
|
||||
|
||||
|
||||
--2 Coordination
|
||||
--
|
||||
|
||||
@@ -9,20 +9,27 @@ lin
|
||||
Small = adjDegrReg "small" ;
|
||||
Old = adjDegrReg "old" ;
|
||||
Young = adjDegrReg "young" ;
|
||||
American = simpleAdj "American" ;
|
||||
Finnish = simpleAdj "Finnish" ;
|
||||
Married = simpleAdj "married" ** {s2 = "to"} ;
|
||||
Man = cnHum (mkNoun "man" "men" "man's" "men's") ;
|
||||
Woman = cnHum (mkNoun "woman" "women" "woman's" "women's") ;
|
||||
Car = cnNoHum (nounReg "car") ;
|
||||
House = cnNoHum (nounReg "house") ;
|
||||
Light = cnNoHum (nounReg "light") ;
|
||||
Walk = verbNoPart (regVerbP3 "walk") ;
|
||||
Run = verbNoPart (regVerbP3 "run") ;
|
||||
Say = verbNoPart (regVerbP3 "say") ;
|
||||
Run = verbNoPart (mkVerb "run" "ran" "run") ;
|
||||
Say = verbNoPart (mkVerb "say" "said" "said") ;
|
||||
Prove = verbNoPart (regVerbP3 "prove") ;
|
||||
Send = mkTransVerbDir (regVerbP3 "send") ;
|
||||
Love = mkTransVerbDir (regVerbP3 "love") ;
|
||||
Wait = mkTransVerb (regVerbP3 "wait") "for" ;
|
||||
Send = mkTransVerbDir (verbNoPart (mkVerb "send" "sent" "sent")) ;
|
||||
Love = mkTransVerbDir (verbNoPart (verbP3e "love")) ;
|
||||
Wait = mkTransVerb (verbNoPart (regVerbP3 "wait")) "for" ;
|
||||
Give = mkDitransVerb (verbNoPart (mkVerb "give" "gave" "given")) [] [] ;
|
||||
Prefer = mkDitransVerb
|
||||
(verbNoPart (mkVerb "prefer" "preferred" "preferred")) [] "to" ;
|
||||
Mother = funOfReg "mother" Hum ;
|
||||
Uncle = funOfReg "uncle" Hum ;
|
||||
Connection = cnNoHum (nounReg "connection") ** {s2 = "from" ; s3 = "to"} ;
|
||||
|
||||
Always = advPre "always" ;
|
||||
Well = advPost "well" ;
|
||||
|
||||
@@ -55,12 +55,12 @@ oper
|
||||
|
||||
--3 Verbs
|
||||
--
|
||||
-- We limit the grammar so far to verbs in infinitive-imperative or present tense.
|
||||
-- We treat the full conjugation now.
|
||||
-- The present tense is made to depend on person, which correspond to forms
|
||||
-- in the singular; plural forms are uniformly equal to the 2nd person singular.
|
||||
|
||||
param
|
||||
VForm = InfImp | Indic Person ;
|
||||
VForm = InfImp | Indic Person | Past Number | PPart ;
|
||||
|
||||
oper
|
||||
VerbP3 : Type = SS1 VForm ;
|
||||
|
||||
@@ -396,4 +396,3 @@ oper
|
||||
-}
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
@@ -190,6 +190,11 @@ oper
|
||||
tvDir : V -> TV ; -- umbringen
|
||||
tvDirReg : Str -> TV ; -- lieben
|
||||
|
||||
-- Three-place verbs require two prepositions and cases.
|
||||
|
||||
mkV3 : V -> Str -> Case -> Str -> Case -> TV ; -- geben,[],dative,[],accusative
|
||||
|
||||
|
||||
--2 Adverbials
|
||||
--
|
||||
-- Adverbials for modifying verbs, adjectives, and sentences can be formed
|
||||
@@ -292,6 +297,7 @@ oper
|
||||
tvReg = \hören, zu, dat -> mkTV (vReg hören) zu dat ;
|
||||
tvDir = \v -> mkTV v [] accusative ;
|
||||
tvDirReg = \v -> tvReg v [] accusative ;
|
||||
mkV3 = mkDitransVerb ;
|
||||
|
||||
mkAdV = ss ;
|
||||
mkPP = prepPhrase ;
|
||||
|
||||
@@ -13,16 +13,17 @@ resource Predication = open Deutsch in {
|
||||
-- We first define a set of predication patterns.
|
||||
|
||||
oper
|
||||
predV1 : V -> NP -> S ; -- one-place verb: "John walks"
|
||||
predV2 : TV -> NP -> NP -> S ; -- two-place verb: "John loves Mary"
|
||||
predVColl : V -> NP -> NP -> S ; -- collective verb: "John and Mary fight"
|
||||
predA1 : Adj1 -> NP -> S ; -- one-place adjective: "John is old"
|
||||
predA2 : Adj2 -> NP -> NP -> S ; -- two-place adj: "John is married to Mary"
|
||||
predV1 : V -> NP -> S ; -- one-place verb: "John walks"
|
||||
predV2 : TV -> NP -> NP -> S ; -- two-place verb: "John loves Mary"
|
||||
predV3 : TV -> NP -> NP -> NP -> S ; -- three-place verb: "John gives Mary beer"
|
||||
predVColl : V -> NP -> NP -> S ; -- collective verb: "John and Mary fight"
|
||||
predA1 : Adj1 -> NP -> S ; -- one-place adjective: "John is old"
|
||||
predA2 : Adj2 -> NP -> NP -> S ; -- two-place adj: "John is married to Mary"
|
||||
predAComp : AdjDeg -> NP -> NP -> S ; -- compar adj: "John is older than Mary"
|
||||
predAColl : Adj1 -> NP -> NP -> S ; -- collective adj: "John and Mary are married"
|
||||
predN1 : N -> NP -> S ; -- one-place noun: "John is a man"
|
||||
predN2 : Fun -> NP -> NP -> S ; -- two-place noun: "John is a lover of Mary"
|
||||
predNColl : N -> NP -> NP -> S ; -- collective noun: "John and Mary are lovers"
|
||||
predAColl : Adj1 -> NP -> NP -> S ; -- collect adj: "John and Mary are married"
|
||||
predN1 : N -> NP -> S ; -- one-place noun: "John is a man"
|
||||
predN2 : Fun -> NP -> NP -> S ; -- two-place noun: "John is a lover of Mary"
|
||||
predNColl : N -> NP -> NP -> S ; -- collect noun: "John and Mary are lovers"
|
||||
|
||||
-- Individual-valued function applications.
|
||||
|
||||
@@ -42,9 +43,13 @@ oper
|
||||
|
||||
-- Logical connectives on two sentences.
|
||||
|
||||
conjS : S -> S -> S ;
|
||||
disjS : S -> S -> S ;
|
||||
implS : S -> S -> S ;
|
||||
conjS : S -> S -> S ; -- A and B
|
||||
disjS : S -> S -> S ; -- A or B
|
||||
implS : S -> S -> S ; -- if A, B
|
||||
|
||||
-- A variant of implication.
|
||||
|
||||
ifThenS : S -> S -> S ; -- if A, then B
|
||||
|
||||
-- As an auxiliary, we need two-place conjunction of names ("John and Mary"),
|
||||
-- used in collective predication.
|
||||
@@ -80,6 +85,8 @@ oper
|
||||
disjS = \A, B -> ConjS OrConj (TwoS A B) ;
|
||||
implS = \A, B -> SubjS IfSubj A B ;
|
||||
|
||||
ifThenS = \A,B -> SubjS IfSubj A {s = \\o => "then" ++ B.s ! o} ; --- not in Res
|
||||
|
||||
constrTyp1 = \F, A -> AppFun F (IndefManyNP A) ;
|
||||
|
||||
conjNP = \x, y -> ConjNP AndConj (TwoNP x y) ;
|
||||
|
||||
@@ -46,7 +46,9 @@ lincat
|
||||
V = Verb ;
|
||||
-- = {s : VForm => Str ; s2 : Particle} ;
|
||||
VP = Verb ** {s3 : Number => Str} ;
|
||||
TV = Verb ** {s3 : Preposition ; c : Case} ;
|
||||
TV = TransVerb ;
|
||||
-- = Verb ** {s3 : Preposition ; c : Case} ;
|
||||
V3 = TransVerb ** {s4 : Preposition ; c2 : Case} ;
|
||||
VS = Verb ;
|
||||
AdV = {s : Str} ;
|
||||
|
||||
@@ -110,6 +112,9 @@ lin
|
||||
NegNP = predNounPhrase False ;
|
||||
PosVS = complSentVerb True ;
|
||||
NegVS = complSentVerb False ;
|
||||
PosV3 = complDitransVerb True ;
|
||||
NegV3 = complDitransVerb False ;
|
||||
VTrans = transAsVerb ;
|
||||
|
||||
AdvVP = adVerbPhrase ;
|
||||
LocNP = locativeNounPhrase ;
|
||||
|
||||
@@ -29,7 +29,6 @@ oper
|
||||
n2n = noun2CommNounPhrase ;
|
||||
|
||||
|
||||
|
||||
--2 Noun phrases
|
||||
--
|
||||
-- The worst case is pronouns, which have inflection in the possessive
|
||||
@@ -70,6 +69,26 @@ oper
|
||||
mkProperName : Str -> ProperName = \horst ->
|
||||
{s = table {Gen => horst + "s" ; _ => horst}} ;
|
||||
|
||||
--2 Mass nouns
|
||||
--
|
||||
-- Mass nouns are morphologically similar to nouns, but they have one special
|
||||
-- rule of noun phrase formation, using the bare singular (in German).
|
||||
-- Example: "Bier ist gut".
|
||||
-- They can also be coerced to common nouns: "ein Mexikanisches Bier".
|
||||
|
||||
MassNounPhrase : Type = CommNounPhrase ;
|
||||
|
||||
massNounPhrase : MassNounPhrase -> NounPhrase = \bier -> {
|
||||
s = \\c => let {nc = caseNP c} in
|
||||
bier.s ! adjfCas Strong nc ! Sg ! nc ;
|
||||
p = P3 ;
|
||||
n = Sg ;
|
||||
pro = False
|
||||
} ;
|
||||
|
||||
massCommNoun : MassNounPhrase -> CommNounPhrase = \x -> x ;
|
||||
|
||||
|
||||
--2 Determiners
|
||||
--
|
||||
-- Determiners are inflected according to the nouns they determine.
|
||||
@@ -77,14 +96,15 @@ oper
|
||||
|
||||
Determiner : Type = {s : Gender => Case => Str ; n : Number ; a : Adjf} ;
|
||||
|
||||
detNounPhrase : Determiner -> CommNounPhrase -> NounPhrase = \ein, mann ->
|
||||
{s = \\c => let {nc = caseNP c} in
|
||||
detNounPhrase : Determiner -> CommNounPhrase -> NounPhrase = \ein, mann -> {
|
||||
s = \\c => let {nc = caseNP c} in
|
||||
ein.s ! mann.g ! nc ++ mann.s ! adjfCas ein.a nc ! ein.n ! nc ;
|
||||
p = P3 ;
|
||||
n = ein.n ;
|
||||
pro = False
|
||||
} ;
|
||||
|
||||
|
||||
-- The adjectival form after a determiner depends both on the inferent form
|
||||
-- and on the case ("ein alter Mann" but "einem alten Mann").
|
||||
|
||||
@@ -400,6 +420,40 @@ oper
|
||||
s3 = \\_ => negation b ++ lieben.s ! VPart APred
|
||||
} ;
|
||||
|
||||
-- Transitive verb can be used elliptically as a verb. The semantics
|
||||
-- is left to applications. The definition is trivial, due to record
|
||||
-- subtyping.
|
||||
|
||||
transAsVerb : TransVerb -> Verb = \lieben ->
|
||||
lieben ;
|
||||
|
||||
-- *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 ** {s4 : Preposition ; c2 : Case} ;
|
||||
|
||||
mkDitransVerb :
|
||||
Verb -> Preposition -> Case -> Preposition -> Case -> DitransVerb =
|
||||
\v,p1,c1,p2,c2 -> v ** {s3 = p1 ; c = c1 ; s4 = p2 ; c2 = c2} ;
|
||||
|
||||
complDitransVerb :
|
||||
Bool -> DitransVerb -> NounPhrase -> NounPhrase -> VerbPhrase =
|
||||
\b,geben,dir,bier ->
|
||||
let {
|
||||
zudir = geben.s3 ++ dir.s ! NPCase geben.c ;
|
||||
dasbier = geben.s4 ++ bier.s ! NPCase geben.c2 ;
|
||||
nicht = negation b
|
||||
} in
|
||||
{s = geben.s ;
|
||||
s2 = geben.s2 ;
|
||||
s3 = \\_ => variants {
|
||||
nicht ++ zudir ++ dasbier ;
|
||||
zudir ++ nicht ++ dasbier ;
|
||||
zudir ++ dasbier ++ nicht
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
--2 Adverbials
|
||||
--
|
||||
@@ -699,7 +753,7 @@ oper
|
||||
|
||||
--2 Sentence adverbials
|
||||
--
|
||||
-- This class covers adverbials such as "sonst", "folgelich", which are prefixed
|
||||
-- This class covers adverbials such as "sonst", "deshalb", which are prefixed
|
||||
-- to a sentence to form a phrase; the sentence gets inverted word order.
|
||||
|
||||
advSentence : Adverb -> Sentence -> Utterance = \sonst,ist1gerade ->
|
||||
|
||||
@@ -9,6 +9,9 @@ lin
|
||||
Small = adjCompReg "klein" ;
|
||||
Old = adjCompReg3 "alt" "älter" "ältest";
|
||||
Young = adjCompReg3 "jung" "jünger" "jüngst";
|
||||
American = adjReg "Amerikanisch" ;
|
||||
Finnish = adjReg "Finnisch" ;
|
||||
Married = adjReg "verheiratet" ** {s2 = "mit" ; c = Dat} ;
|
||||
Man = declN2u "Mann" "Männer" ;
|
||||
Woman = declN1 "Frau" ;
|
||||
Car = declNs "Auto" ;
|
||||
@@ -20,7 +23,11 @@ lin
|
||||
Prove = mkVerbSimple (regVerb "beweisen") ;
|
||||
Send = mkTransVerb (mkVerbSimple (verbLaufen "senden" "sendet" "gesandt")) [] Acc;
|
||||
Love = mkTransVerb (mkVerbSimple (regVerb "lieben")) [] Acc ;
|
||||
Wait = mkTransVerb (mkVerbSimple (verbWarten "warten")) "auf" Acc ;
|
||||
Wait = mkTransVerb (mkVerbSimple (verbWarten "warten")) "auf" Acc ;
|
||||
Give = mkDitransVerb
|
||||
(mkVerbSimple (verbLaufen "geben" "gibt" "gegeben")) [] Dat [] Acc ;
|
||||
Prefer = mkDitransVerb
|
||||
(mkVerb (verbLaufen "ziehen" "zieht" "gezogen") "vor") [] Acc "vor" Dat ;
|
||||
Mother = mkFunC (n2n (declN2uF "Mutter" "Mütter")) "von" Dat ;
|
||||
Uncle = mkFunC (n2n (declN2i "Onkel")) "von" Dat ;
|
||||
Connection = mkFunC (n2n (declN1 "Verbindung")) "von" Dat **
|
||||
|
||||
Reference in New Issue
Block a user