diff --git a/lib/resource/abstract/Categories.gf b/lib/resource/abstract/Categories.gf index a1071c093..653e1b2a2 100644 --- a/lib/resource/abstract/Categories.gf +++ b/lib/resource/abstract/Categories.gf @@ -154,22 +154,25 @@ cat ---- next - V3A ; -- paint the house red - V3VSubj ; -- promise John to come - V3VObj ; -- ask John to come - V3S ; -- tell John that it is raining + V2A ; -- paint the house red + V2V ; -- promise John to come / ask John to come + V2S ; -- tell John that it is raining VQ ; -- ask who comes - V3Q ; -- ask John who comes + V2Q ; -- ask John who comes VA ; -- look yellow V0 ; -- (it) rains AS ; -- (it is) important that he comes + A2S ; -- (it is) important for me that he comes AV ; -- difficult to play + A2V ; -- difficult for him to play -- NB: it is difficult to play the sonata -- vs. it (the sonata) is difficult to play +--- also: John is easy (for you) to please vs. John is eager to please + QS ; -- question with fixed tense and polarity RS ; -- relative clause with fixed tense and polarity diff --git a/lib/resource/abstract/Rules.gf b/lib/resource/abstract/Rules.gf index 60c8ae626..c6532ed98 100644 --- a/lib/resource/abstract/Rules.gf +++ b/lib/resource/abstract/Rules.gf @@ -216,21 +216,33 @@ fun -- In these predications, the last argument gets its agreement -- features from the second, and cannot hence be made to produce --- $V3A$/$V3S$. +-- $V2A$/$V2S$. - PredV3A : V3A -> NP -> AP -> VG ; - PredV3VSubj : V3VSubj -> NP -> VG -> VG ; + PredV2A : V2A -> NP -> AP -> VG ; + PredSubjV2V : V2V -> 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 ; + PredObjV2V : V2V -> NP -> VG -> VG ; + PredV2S : V2S -> NP -> S -> VG ; + PredV2Q : V2Q -> NP -> QS -> VG ; + PredAS : AS -> S -> Cl ; + PredA2S : A2S -> NP -> AS ; + PredAV : AV -> VG -> VG ; + PredSubjA2V : A2V -> NP -> VG -> VG ; + PredObjA2V : A2V -> NP -> VG -> VG ; + PredV0 : V0 -> Cl ; PredVQ : VQ -> QS -> VG ; PredVA : VA -> AP -> VG ; + UseV2V : V2V -> VV ; + UseV2S : V2S -> VS ; + UseV2Q : V2Q -> VQ ; + UseA2S : A2S -> AS ; + UseA2V : A2V -> AV ; + UseCl : TP -> Cl -> S ; UseVG : TP -> VG -> VP ; UseRCl : TP -> RCl -> RS ; diff --git a/lib/resource/abstract/TestResource.gf b/lib/resource/abstract/TestResource.gf index fdddd4902..d05a500c6 100644 --- a/lib/resource/abstract/TestResource.gf +++ b/lib/resource/abstract/TestResource.gf @@ -17,13 +17,17 @@ fun John, Mary : PN ; AlreadyAdv, NowAdv : Adv ; -- already, now - Paint : V3A ; + Paint : V2A ; Green : ADeg ; - Beg : V3VObj ; - Promise : VV ; - Promise2 : V3VSubj ; + Beg : V2V ; + Promise : V2V ; + Try : VV ; Wonder : VQ ; - Ask : V3Q ; - Tell : V3S ; + Ask : V2Q ; + Tell : V2S ; Look : VA ; + Important : A2S ; + Probable : AS ; + Easy : A2V ; + } ; diff --git a/lib/resource/danish/StructuralDan.gf b/lib/resource/danish/StructuralDan.gf index 9c2036a73..f91927fad 100644 --- a/lib/resource/danish/StructuralDan.gf +++ b/lib/resource/danish/StructuralDan.gf @@ -83,10 +83,10 @@ concrete StructuralDan of Structural = SomethingNP = nameNounPhrase (mkProperName "noget" NNeutr) ; NothingNP = nameNounPhrase (mkProperName "intet" NNeutr) ; - CanVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; isAux = True} ; - CanKnowVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; isAux = True} ; - MustVV = mkVerb "måtte" "må" "mås" "måtte" "måttet" "må" ** {s1 = [] ; isAux = True} ; ---- ? - WantVV = mkVerb "ville" "vil" nonExist "ville" "villet" nonExist ** {s1 = [] ; isAux = True} ; --- + CanVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; s3 = []} ; + CanKnowVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; s3 = []} ; + MustVV = mkVerb "måtte" "må" "mås" "måtte" "måttet" "må" ** {s1 = [] ; s3 = []} ; ---- ? + WantVV = mkVerb "ville" "vil" nonExist "ville" "villet" nonExist ** {s1 = [] ; s3 = []} ; --- EverywhereNP = advPost "overalt" ; SomewhereNP = advPost ["et eller andet sted"] ; ---- ? diff --git a/lib/resource/danish/TestResourceDan.gf b/lib/resource/danish/TestResourceDan.gf index bc6a532d8..94a756a89 100644 --- a/lib/resource/danish/TestResourceDan.gf +++ b/lib/resource/danish/TestResourceDan.gf @@ -57,8 +57,7 @@ lin Green = mkAdjective "grøn" "grønt" "grøne" "grønnere" "grønnest" ; Beg = extTransVerb (mkVerb "bede" "beder" "bedes" "bad" "bedt" "bed") [] ** {s3 = "at"} ; - Promise = extTransVerb (vNopart (vSpis "lov")) [] ** {isAux = False} ; - Promise2 = extTransVerb (vNopart (vSpis "lov")) [] ** {s3 = "att"} ; + Promise = extTransVerb (vNopart (vSpis "lov")) [] ** {s3 = "att"} ; Wonder = extTransVerb (vNopart (vHusk "undr")) [] ; Ask = extTransVerb (mkVerb "spørge" "spørger""spørges""spurgte""spurgt""spørg") [] ; Tell = extTransVerb (mkVerb "fortælle" "fortæller" "fortælles" @@ -66,4 +65,10 @@ lin Look = extTransVerb (mkVerb "se" "ser" "ses" "så" "set" "sedd") [] ; ---- ut + + Try = extTransVerb (vNopart (vSpis "forsøg")) [] ** {s3 = "att"} ; + Important = extAdjective (aAbstrakt "viktig") ** {s2 = "for"} ; + Probable = extAdjective (aAbstrakt "sandsynlig") ; + Easy = extAdjective (aRod "let") ** {s2 = "for"} ; + } ; diff --git a/lib/resource/norwegian/StructuralNor.gf b/lib/resource/norwegian/StructuralNor.gf index b239aa364..50e4911c4 100644 --- a/lib/resource/norwegian/StructuralNor.gf +++ b/lib/resource/norwegian/StructuralNor.gf @@ -84,10 +84,10 @@ concrete StructuralNor of Structural = SomethingNP = nameNounPhrase (mkProperName "noe" NNeutr) ; NothingNP = nameNounPhrase (mkProperName "intet" NNeutr) ; - CanVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; isAux = True} ; - CanKnowVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; isAux = True} ; - MustVV = mkVerb "måtte" "må" "mås" "måtte" "måttet" "mått" ** {s1 = [] ; isAux = True} ; ---- ? - WantVV = mkVerb "ville" "vil" nonExist "ville" "villet" "vill" ** {s1 = [] ; isAux = True} ; --- + CanVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; s3 = []} ; + CanKnowVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; s3 = []} ; + MustVV = mkVerb "måtte" "må" "mås" "måtte" "måttet" "mått" ** {s1 = [] ; s3 = []} ; ---- ? + WantVV = mkVerb "ville" "vil" nonExist "ville" "villet" "vill" ** {s1 = [] ; s3 = []} ; --- EverywhereNP = advPost "overalt" ; SomewhereNP = advPost ["et eller annet sted"] ; ---- ? diff --git a/lib/resource/norwegian/TestResourceNor.gf b/lib/resource/norwegian/TestResourceNor.gf index dc49a283e..ac165b5f8 100644 --- a/lib/resource/norwegian/TestResourceNor.gf +++ b/lib/resource/norwegian/TestResourceNor.gf @@ -56,8 +56,7 @@ lin Green = mkAdjective "grønn" "grønt" "grøne" "grønnere" "grønnest" ; Beg = extTransVerb (mkVerb "be" "ber" "bes" "bad" "bedt" "be") [] ** {s3 = "at"} ; - Promise = extTransVerb (vNopart (vSpis "lov")) [] ** {isAux = False} ; - Promise2 = extTransVerb (vNopart (vSpis "lov")) [] ** {s3 = "att"} ; + Promise = extTransVerb (vNopart (vSpis "lov")) [] ** {s3 = "att"} ; Wonder = extTransVerb (vNopart (vHusk "undr")) [] ; Ask = extTransVerb (mkVerb "spørre" "spør""spørs""spurde""spurt""spør") [] ; Tell = extTransVerb (mkVerb "fortelle" "forteller" "fortelles" @@ -65,5 +64,10 @@ lin Look = extTransVerb (mkVerb "se" "ser" "ses" "så" "sett" "sedd") [] ; ---- ut + Try = extTransVerb (vNopart (vSpis "forsøk")) [] ** {s3 = "att"} ; + Important = extAdjective (aAbstrakt "viktig") ** {s2 = "for"} ; + Probable = extAdjective (aAbstrakt "sannsynlig") ; + Easy = extAdjective (aRod "grei") ** {s2 = "for"} ; + } ; diff --git a/lib/resource/scandinavian/CategoriesScand.gf b/lib/resource/scandinavian/CategoriesScand.gf index 32a92a862..1247fcb48 100644 --- a/lib/resource/scandinavian/CategoriesScand.gf +++ b/lib/resource/scandinavian/CategoriesScand.gf @@ -26,6 +26,10 @@ lincat A2 = Adjective ** {s2 : Preposition} ; ADeg = {s : AdjForm => Str} ; AP = Adjective ** {p : IsPostfixAdj} ; + AS = Adjective ; --- "more difficult for him to come than..." + A2S = Adjective ** {s2 : Preposition} ; + AV = Adjective ; + A2V = Adjective ** {s2 : Preposition} ; V = Verb ; -- = {s : VerbForm => Str ; s1 : Str} ; @@ -38,14 +42,14 @@ lincat VS = Verb ; VQ = Verb ; - VV = Verb ** {isAux : Bool} ; + VV = Verb ** {s3 : Str} ; VA = Verb ; - V3S = TransVerb ; - V3Q = TransVerb ; - V3VObj = DitransVerbVerb ; - V3VSubj = DitransVerbVerb ; - V3A = DitransAdjVerb ; + V2S = TransVerb ; + V2Q = TransVerb ; + V2V = DitransVerbVerb ; + V2A = DitransAdjVerb ; + V0 = Verb ; TP = {s : Str ; b : Bool ; t : Tense ; a : Anteriority} ; --- the Str field is dummy Tense = {s : Str ; t : Tense} ; diff --git a/lib/resource/scandinavian/RulesScand.gf b/lib/resource/scandinavian/RulesScand.gf index 23f4ce716..57d5c8e87 100644 --- a/lib/resource/scandinavian/RulesScand.gf +++ b/lib/resource/scandinavian/RulesScand.gf @@ -41,15 +41,23 @@ lin CNthatS = nounThatSentence ; - PredVV2 = transVerbVerb ; - AdjPart = adjPastPart ; + PredVV2 = transVerbVerb ; + AdjPart = adjPastPart ; - PredV3A = complDitransAdjVerb ; - PredV3VSubj = complDitransVerbVerb False ; - PredV3VObj = complDitransVerbVerb True ; - PredV3S = complDitransSentVerb ; - PredV3Q = complDitransQuestVerb ; - PredVA = complAdjVerb ; + PredV2A = complDitransAdjVerb ; + PredSubjV2V = complDitransVerbVerb False ; + PredObjV2V = complDitransVerbVerb True ; + PredV2S = complDitransSentVerb ; + PredV2Q = complDitransQuestVerb ; + PredVA = complAdjVerb ; + + UseV2V x = x ; + UseV2S x = x ; + UseV2Q x = x ; + UseA2S x = x ; + UseA2V x = x ; + + 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 ; @@ -80,6 +88,13 @@ lin PredVQ = complQuestVerb ; PredVV = complVerbVerb ; VTrans = transAsVerb ; + PredV0 = predVerb0 ; + + PredAS = predAdjSent ; + PredA2S = predAdjSent2 ; + PredAV = complVerbAdj ; + PredSubjA2V = complVerbAdj2 False ; + PredObjA2V = complVerbAdj2 True ; AdjAdv a = advPost (a.s ! adverbForm ! Nom) ; AdvPP p = p ; diff --git a/lib/resource/scandinavian/SyntaxScand.gf b/lib/resource/scandinavian/SyntaxScand.gf index ed52ae71a..b3289793e 100644 --- a/lib/resource/scandinavian/SyntaxScand.gf +++ b/lib/resource/scandinavian/SyntaxScand.gf @@ -549,6 +549,10 @@ oper negation : Bool => Str = \\b => if_then_Str b [] negInte ; + predVerb0 : Verb -> Clause = \regna -> + predVerbGroupClause npDet (predVerb regna) ; + + -- Verb phrases can also be formed from adjectives ("är snäll"), -- common nouns ("är en man"), and noun phrases ("är den yngste mannen"). -- The third rule is overgenerating: "är varje man" has to be ruled out @@ -572,6 +576,16 @@ oper predAdverb : Adverb -> VerbGroup = \ute -> vara (\\_,_,_ => ute.s) ; + predAdjSent : Adjective -> Sentence -> Clause = \bra,hansover -> + predVerbGroupClause + npDet + (vara ( + \\g,n,_ => bra.s ! predFormAdj g n ! Nom ++ infinAtt ++ hansover.s ! Sub)) ; + + predAdjSent2 : AdjCompl -> NounPhrase -> Adjective = \bra,han -> + {s = \\af,c => bra.s ! af ! c ++ bra.s2 ++ han.s ! PAcc} ; + + --3 Transitive verbs -- -- Transitive verbs are verbs with a preposition for the complement, @@ -810,23 +824,31 @@ oper -- ("försöka"); this distinction cannot be done in the multilingual -- API and leads to some anomalies in Swedish, but less so than in English. - VerbVerb : Type = Verb ** {isAux : Bool} ; + VerbVerb : Type = Verb ** {s3 : Str} ; complVerbVerb : VerbVerb -> VerbGroup -> VerbGroup = \vilja, simma -> useVerb vilja (\\g,n,p => vilja.s1 ++ - if_then_Str vilja.isAux [] infinAtt ++ + vilja.s3 ++ simma.s ! VInfinit Simul ++ simma.s2 ! True ++ ---- Anter! simma.s3 ! VInfinit Simul ! g ! n ! p) ; transVerbVerb : VerbVerb -> TransVerb -> TransVerb = \vilja,hitta -> {s = vilja.s ; - s1 = vilja.s1 ++ if_then_Str vilja.isAux [] infinAtt ++ + s1 = vilja.s1 ++ vilja.s3 ++ hitta.s ! VI (Inf Act) ++ hitta.s1 ; ---- Anter! s2 = hitta.s2 } ; + complVerbAdj : Adjective -> VerbGroup -> VerbGroup = \grei, simma -> + vara + (\\g,n,p => + grei.s ! predFormAdj g n ! Nom ++ + infinAtt ++ + simma.s ! VInfinit Simul ++ simma.s2 ! True ++ ---- Anter! + simma.s3 ! VInfinit Simul ! g ! n ! p) ; + -- Notice agreement to object vs. subject: DitransVerbVerb = TransVerb ** {s3 : Str} ; @@ -842,6 +864,18 @@ oper (simma.s3 ! VInfinit Simul ! g ! n ! p) ) ; + complVerbAdj2 : + Bool -> AdjCompl -> NounPhrase -> VerbGroup -> VerbGroup = \obj,grei,dig,simma -> + vara + (\\g,n,p => + grei.s ! predFormAdj g n ! Nom ++ + grei.s2 ++ dig.s ! PAcc ++ + infinAtt ++ + simma.s ! VInfinit Simul ++ simma.s2 ! True ++ ---- Anter! + 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 -- diff --git a/lib/resource/swedish/StructuralSwe.gf b/lib/resource/swedish/StructuralSwe.gf index 70ba2f9b1..f19a9a933 100644 --- a/lib/resource/swedish/StructuralSwe.gf +++ b/lib/resource/swedish/StructuralSwe.gf @@ -82,10 +82,10 @@ concrete StructuralSwe of Structural = SomethingNP = nameNounPhrase (mkProperName "någonting" NNeutr) ; NothingNP = nameNounPhrase (mkProperName "ingenting" NNeutr) ; - CanVV = mkVerb "kunna" "kan" "kunn" "kunde" "kunnat" "kunnen" ** {isAux = True} ; - CanKnowVV = mkVerb "kunna" "kan" "kunn" "kunde" "kunnat" "kunnen" ** {isAux = True} ; - MustVV = mkVerb "få" "måste" "få" "fick" "måst" "måst" ** {isAux = True} ; --- - WantVV = mkVerb "vilja" "vill" "vilj" "ville" "velat" "velad" ** {isAux = True} ; --- + CanVV = mkVerb "kunna" "kan" "kunn" "kunde" "kunnat" "kunnen" ** {s3 = []} ; + CanKnowVV = mkVerb "kunna" "kan" "kunn" "kunde" "kunnat" "kunnen" ** {s3 = []} ; + MustVV = mkVerb "få" "måste" "få" "fick" "måst" "måst" ** {s3 = []} ; + WantVV = mkVerb "vilja" "vill" "vilj" "ville" "velat" "velad" ** {s3 = []} ; EverywhereNP = advPost "varstans" ; SomewhereNP = advPost "någonstans" ; diff --git a/lib/resource/swedish/TestResourceSwe.gf b/lib/resource/swedish/TestResourceSwe.gf index 75ab3f07a..732375ff2 100644 --- a/lib/resource/swedish/TestResourceSwe.gf +++ b/lib/resource/swedish/TestResourceSwe.gf @@ -57,10 +57,16 @@ lin 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"} ; + Promise = 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") [] ; + + Try = extTransVerb (vNopart (vLeka "försök")) [] ** {s3 = "att"} ; + Important = extAdjective (aFin "viktig") ** {s2 = "för"} ; + Probable = extAdjective (aFin "sannolik") ; + Easy = extAdjective (aAbstrakt "lätt") ** {s2 = "för"} ; + + } ;