From 0259b6d6a453d9aac10b6ca8682306ceb6db502f Mon Sep 17 00:00:00 2001 From: aarne Date: Fri, 4 Mar 2005 15:56:48 +0000 Subject: [PATCH] topological model in Scand main branch --- lib/resource/abstract/Clause.gf | 2 +- lib/resource/abstract/ClauseI.gf | 2 +- lib/resource/doc/ScanMod.gif | Bin 0 -> 18702 bytes lib/resource/english/ClauseEng.gf | 1 + lib/resource/english/SyntaxEng.gf | 8 +- lib/resource/english/VerbphraseEng.gf | 1 + lib/resource/french/CountryFre.gf | 2 +- lib/resource/french/TimeFre.gf | 2 +- lib/resource/romance/RulesRomance.gf | 6 +- lib/resource/scandinavian/CategoriesScand.gf | 4 +- lib/resource/scandinavian/ClauseScand.gf | 1 + lib/resource/scandinavian/SyntaxScand.gf | 200 ++++++++++++++----- lib/resource/scandinavian/VerbphraseScand.gf | 1 + lib/resource/swedish/BasicSwe.gf | 2 +- 14 files changed, 165 insertions(+), 67 deletions(-) create mode 100644 lib/resource/doc/ScanMod.gif diff --git a/lib/resource/abstract/Clause.gf b/lib/resource/abstract/Clause.gf index 0b1d30a35..32d0c686b 100644 --- a/lib/resource/abstract/Clause.gf +++ b/lib/resource/abstract/Clause.gf @@ -14,7 +14,7 @@ fun SPredV : NP -> V -> Cl ; -- "John walks" SPredPassV : NP -> V -> Cl ; -- "John is seen" SPredV2 : NP -> V2 -> NP -> Cl ; -- "John sees Mary" - SPredV3 : NP -> V2 -> NP -> NP -> Cl ; -- "John tells Mary everything" + SPredV3 : NP -> V3 -> NP -> NP -> Cl ; -- "John tells Mary everything" SPredReflV2 : NP -> V2 -> Cl ; -- "John loves himself" SPredVS : NP -> VS -> S -> Cl ; -- "John says that Mary runs" SPredVV : NP -> VV -> VPI -> Cl ; -- "John must walk" diff --git a/lib/resource/abstract/ClauseI.gf b/lib/resource/abstract/ClauseI.gf index 43266f7fc..77ab0a852 100644 --- a/lib/resource/abstract/ClauseI.gf +++ b/lib/resource/abstract/ClauseI.gf @@ -9,7 +9,7 @@ incomplete concrete ClauseI of Clause = open Rules, Verbphrase in { SPredV np v = PredVP np (UseV v) ; SPredPassV np v = PredVP np (UsePassV v) ; SPredV2 np v x = PredVP np (ComplV2 v x) ; ----- SPredV3 np v x y = PredVP np (ComplV3 v x y) ; + SPredV3 np v x y = PredVP np (ComplV3 v x y) ; SPredReflV2 np v = PredVP np (ComplReflV2 v) ; SPredVS np v x = PredVP np (ComplVS v x) ; SPredVV np v x = PredVP np (ComplVV v x) ; diff --git a/lib/resource/doc/ScanMod.gif b/lib/resource/doc/ScanMod.gif new file mode 100644 index 0000000000000000000000000000000000000000..279ece6655de95e24392f0707fd3f94c4b4d5418 GIT binary patch literal 18702 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 a`yYS)WxN0Ve`Yo=J|QtFxh_Q&25SJm4JE(; literal 0 HcmV?d00001 diff --git a/lib/resource/english/ClauseEng.gf b/lib/resource/english/ClauseEng.gf index 563c04c53..b7b2701f4 100644 --- a/lib/resource/english/ClauseEng.gf +++ b/lib/resource/english/ClauseEng.gf @@ -11,6 +11,7 @@ concrete ClauseEng of Clause = CategoriesEng ** SPredPassV np v = predBeGroup np (passVerb v) ; SPredV2 np v x = predVerbClause np v (complTransVerb v x) ; SPredReflV2 np v = predVerbClause np v (reflTransVerb v) ; + SPredV3 np v x y = predVerbClause np v (complDitransVerb v x y) ; SPredVS np v x = predVerbClause np v (complSentVerb v x) ; SPredVV np v x = predVerbClause np (aux2verb v) (complVerbVerb v x) ; SPredVQ np v x = predVerbClause np v (complQuestVerb v x) ; diff --git a/lib/resource/english/SyntaxEng.gf b/lib/resource/english/SyntaxEng.gf index 56ad49226..14d7e5082 100644 --- a/lib/resource/english/SyntaxEng.gf +++ b/lib/resource/english/SyntaxEng.gf @@ -557,11 +557,9 @@ oper v ** {s3 = p1 ; s4 = p2} ; complDitransVerb : - DitransVerb -> NounPhrase -> TransVerb = \ge,dig -> - {s = ge.s ; - s1 = ge.s1 ++ ge.s3 ++ dig.s ! AccP ; - s3 = ge.s4 - } ; + DitransVerb -> NounPhrase -> NounPhrase -> Complement = \give,her,beer -> + mkComp give + (\\_ => give.s3 ++ her.s ! AccP ++ give.s4 ++ beer.s ! AccP) ; complDitransAdjVerb : TransVerb -> NounPhrase -> AdjPhrase -> Complement = \gor,dig,sur -> diff --git a/lib/resource/english/VerbphraseEng.gf b/lib/resource/english/VerbphraseEng.gf index 6ab72f5fd..d3847948a 100644 --- a/lib/resource/english/VerbphraseEng.gf +++ b/lib/resource/english/VerbphraseEng.gf @@ -27,6 +27,7 @@ concrete VerbphraseEng of Verbphrase = CategoriesEng ** UsePassV v = predClauseBeGroup (passVerb v) ; ComplV2 v x = predClauseGroup v (complTransVerb v x) ; ComplReflV2 v = predClauseGroup v (reflTransVerb v) ; + ComplV3 v x y = predClauseGroup v (complDitransVerb v x y) ; ComplVS v x = predClauseGroup v (complSentVerb v x) ; ComplVV v x = predClauseGroup (aux2verb v) (complVerbVerb v x) ; ComplVQ v x = predClauseGroup v (complQuestVerb v x) ; diff --git a/lib/resource/french/CountryFre.gf b/lib/resource/french/CountryFre.gf index a716ee88c..e3fea1b03 100644 --- a/lib/resource/french/CountryFre.gf +++ b/lib/resource/french/CountryFre.gf @@ -1,4 +1,4 @@ -concrete CountryFre of Country = open ResourceFre, ParadigmsFre in { +concrete CountryFre of Country = open CategoriesFre, ParadigmsFre in { lincat Country = PN ; diff --git a/lib/resource/french/TimeFre.gf b/lib/resource/french/TimeFre.gf index a8d349bd6..97c195f99 100644 --- a/lib/resource/french/TimeFre.gf +++ b/lib/resource/french/TimeFre.gf @@ -1,5 +1,5 @@ concrete TimeFre of Time = NumeralsFre ** - open Prelude, MorphoFre, ResourceFre, ParadigmsFre in { + open Prelude, MorphoFre, CategoriesFre, ParadigmsFre in { lincat Date = SS ; diff --git a/lib/resource/romance/RulesRomance.gf b/lib/resource/romance/RulesRomance.gf index 08ee06b2f..efbc346ef 100644 --- a/lib/resource/romance/RulesRomance.gf +++ b/lib/resource/romance/RulesRomance.gf @@ -85,7 +85,7 @@ lin -- Adverbs. AdjAdv a = {s = a.s ! AA} ; ----- AdvVP = adVerbPhrase ; + AdvVP = adVerbPhrase ; AdvPP p = p ; PrepNP = prepNounPhrase ; @@ -172,8 +172,8 @@ lin OneNP = nounPhraseOn ; - ExistCN A = existNounPhrase (indefNounPhrase Sg A) ; +----- ExistCN A = existNounPhrase (indefNounPhrase Sg A) ; - ExistNumCN nu A = existNounPhrase (indefNounPhraseNum nu A) ; +----- ExistNumCN nu A = existNounPhrase (indefNounPhraseNum nu A) ; } diff --git a/lib/resource/scandinavian/CategoriesScand.gf b/lib/resource/scandinavian/CategoriesScand.gf index 3e9b6ff36..77f2bebec 100644 --- a/lib/resource/scandinavian/CategoriesScand.gf +++ b/lib/resource/scandinavian/CategoriesScand.gf @@ -34,9 +34,7 @@ lincat V = Verb ; -- = {s : VerbForm => Str ; s1 : Str} ; - VP = {s : SForm => Str ; - s2 : Bool => Str ; -- negation and adverbs like "alltid" - s3 : SForm => Gender => Number => Person => Str} ; + VP = VerbGroup ; VPI = {s : VIForm => Gender => Number => Person => Str} ; V2 = TransVerb ; -- = Verb ** {s2 : Preposition} ; diff --git a/lib/resource/scandinavian/ClauseScand.gf b/lib/resource/scandinavian/ClauseScand.gf index 6000c418f..fad26f724 100644 --- a/lib/resource/scandinavian/ClauseScand.gf +++ b/lib/resource/scandinavian/ClauseScand.gf @@ -10,6 +10,7 @@ incomplete concrete ClauseScand of Clause = CategoriesScand ** SPredPassV np v = predVerbGroupClause np (passVerb v) ; SPredV2 np v x = predVerbGroupClause np (complTransVerb v x) ; SPredReflV2 np v = predVerbGroupClause np (reflTransVerb v) ; + SPredV3 np v x y = predVerbGroupClause np (complDitransVerb v x y) ; SPredVS np v x = predVerbGroupClause np (complSentVerb v x) ; SPredVV np v x = predVerbGroupClause np (complVerbVerb v x) ; SPredVQ np v x = predVerbGroupClause np (complQuestVerb v x) ; diff --git a/lib/resource/scandinavian/SyntaxScand.gf b/lib/resource/scandinavian/SyntaxScand.gf index a090e2759..0dd61e7c8 100644 --- a/lib/resource/scandinavian/SyntaxScand.gf +++ b/lib/resource/scandinavian/SyntaxScand.gf @@ -530,12 +530,8 @@ oper VInfinit Anter => compound [] (auxHa ++ sett vo) } ; - useVerb : Verb -> (Gender => Number => Person => Str) -> VerbGroup = \verb,arg -> - let aer = verbSForm verb Act in { - s = \\sf => (aer sf).fin ; - s2 = negation ; - s3 = \\sf,g,n,p => (aer sf).inf ++ arg ! g ! n ! p - } ; + useVerb : Verb -> (Gender => Number => Person => Str) -> VerbGroup = + mkVerbGroupObject ; -- Verb phrases are discontinuous: the parts of a verb phrase are -- (s) an inflected verb, (s2) verb adverbials (such as negation), and @@ -549,40 +545,119 @@ oper s : VIForm => Gender => Number => Person => Str } ; - VerbGroup : Type = { - s : SForm => Str ; - s2 : Bool => Str ; - s3 : SForm => Gender => Number => Person => Str - } ; +------------------------- - predVerbGroup : Bool -> {s : Str ; a : Anteriority} -> VerbGroup -> VerbPhrase = \b,ant,vg -> + VerbGroup : Type = { +-- s : SForm => Str ; +-- s2 : Bool => Str ; +-- s3 : SForm => Gender => Number => Person => Str + + s1 : SForm => Str ; -- V1 har + s3 : Bool => Str ; -- A1 inte + s4 : SForm => Str ; -- V2 sagt + s5 : Gender => Number => Person => Str ; -- N2 dig + s6 : Str ; -- A2 idag + s7 : Str ; -- S extraposition + e3,e4,e5,e6,e7 : Bool -- indicate if the field exists + } ; + + predVerb : Verb -> VerbGroup = \verb -> + let + harsovit = verbSForm verb Act + in + {s1 = \\sf => (harsovit sf).fin ; + s3 = negation ; + s4 = \\sf => (harsovit sf).inf ++ verb.s1 ; + s5 = \\_,_,_ => [] ; + s6, s7 = [] ; + e3,e4,e5,e6,e7 = False + } ; + + insertObjectVP : VerbGroup -> (Gender => Number => Person => Str) -> VerbGroup = + \sats, obj -> + {s1 = sats.s1 ; + s3 = sats.s3 ; + s4 = sats.s4 ; + s5 = \\g,n,p => sats.s5 ! g ! n ! p ++ obj ! g ! n ! p ; + s6 = sats.s6 ; + s7 = sats.s7 ; + e3 = sats.e3 ; + e4 = sats.e4 ; + e5 = True ; + e6 = sats.e6 ; + e7 = sats.e7 + } ; + + insertAdverbVP : VerbGroup -> Str -> VerbGroup = \sats, adv -> + {s1 = sats.s1 ; + s3 = sats.s3 ; + s4 = sats.s4 ; + s6 = sats.s6 ++ adv ; + s5 = sats.s5 ; + s7 = sats.s7 ; + e3 = sats.e3 ; + e4 = sats.e4 ; + e6 = True ; + e5 = sats.e5 ; + e7 = sats.e7 + } ; + + insertExtraposVP : VerbGroup -> Str -> VerbGroup = \sats, exts -> + {s1 = sats.s1 ; + s3 = sats.s3 ; + s4 = sats.s4 ; + s6 = sats.s6 ; + s5 = sats.s5 ; + s7 = sats.s7 ++ exts ; + e3 = sats.e3 ; + e4 = sats.e4 ; + e7 = True ; + e5 = sats.e5 ; + e6 = sats.e6 + } ; + + mkVerbGroupObject : Verb -> (Gender => Number => Person => Str) -> VerbGroup = + \verb,obj -> + insertObjectVP (predVerb verb) obj ; + + mkVerbGroupCopula : (Gender => Number => Person => Str) -> VerbGroup = + \obj -> + mkVerbGroupObject (verbVara ** {s1 = []}) obj ; + +----------------------- + + + + predVerbGroup : Bool -> {s : Str ; a : Anteriority} -> VerbGroup -> VerbPhrase = + \b,ant,vg -> let - vgs = vg.s ; - vgs3 = vg.s3 ; + vgs = vg.s1 ; + vgs3 : SForm => Gender => Number => Person => Str = \\sf,g,n,p => + vg.s4 ! sf ++ vg.s5 ! g ! n ! p ++ vg.s6 ++ vg.s7 ; a = ant.a ; in {s = table { VIInfinit => \\g,n,p => - vg.s ! VInfinit a ++ ant.s ++ vg.s2 ! b ++ vg.s3 ! VInfinit a ! g ! n ! p ; + vgs ! VInfinit a ++ ant.s ++ vg.s3 ! b ++ vgs3 ! VInfinit a ! g ! n ! p ; VIImperat bo => \\g,n,p => - vg.s ! VImperat ++ ant.s ++ vg.s2 ! bo ++ vg.s3 ! VImperat ! g ! n ! p + vgs ! VImperat ++ ant.s ++ vg.s3 ! bo ++ vgs3 ! VImperat ! g ! n ! p } ---- bo shadows b } ; predVerbGroupI : Bool -> {s : Str ; a : Anteriority} -> VerbGroup -> VerbPhrase = + predVerbGroup ; +{- ---- \b,ant,vg -> let vp = predVerbGroup b ant vg in {s = \\i,g,n,p => vp.s ! i ! g ! n ! p } ; - +-} -- A simple verb can be made into a verb phrase with an empty complement. -- There are two versions, depending on if we want to negate the verb. -- N.B. negation is *not* a function applicable to a verb phrase, since -- double negations with "inte" are not grammatical. - predVerb : Verb -> VerbGroup = \se -> useVerb se (\\_,_,_ => se.s1) ; - negation : Bool => Str = \\b => if_then_Str b [] negInte ; predVerb0 : Verb -> Clause = \regna -> @@ -651,7 +726,7 @@ oper -- The rule for using transitive verbs is the complementization rule: complTransVerb : TransVerb -> NounPhrase -> VerbGroup = \se,dig -> - useVerb se (\\_,_,_ => se.s1 ++ {-strPrep-} se.s2 ++ dig.s ! PAcc) ; + useVerb se (\\_,_,_ => {-strPrep-} se.s2 ++ dig.s ! PAcc) ; -- Transitive verbs with accusative objects can be used passively. -- The function does not check that the verb is transitive. @@ -659,11 +734,16 @@ oper -- The syntax is the same as for active verbs, with the choice of the -- "s" passive form. - passVerb : Verb -> VerbGroup = \se -> - let ses = verbSForm se Pass in { - s = \\sf => (ses sf).fin ; - s2 = negation ; - s3 = \\sf,g,n,_ => (ses sf).inf ++ se.s1 + passVerb : Verb -> VerbGroup = \verb -> + let + harsovit = verbSForm verb Pass + in + {s1 = \\sf => (harsovit sf).fin ; + s3 = negation ; + s4 = \\sf => (harsovit sf).inf ++ verb.s1 ; + s5 = \\_,_,_ => [] ; + s6, s7 = [] ; + e3,e4,e5,e6,e7 = False } ; -- Transitive verbs can be used elliptically as verbs. The semantics @@ -688,15 +768,10 @@ oper v ** {s2 = p1 ; s3 = p2} ; complDitransVerb : - DitransVerb -> NounPhrase -> TransVerb = \ge,dig -> - {s = ge.s ; - s1 = ge.s1 ++ {-strPrep-} ge.s2 ++ dig.s ! PAcc ; - s2 = ge.s3 - } ; - ---- useVerb ---- ge ---- (\\_,_ => ge.s1 ++ ge.s2 ++ dig.s ! PAcc ++ ge.s3 ++ vin.s ! PAcc) ; + DitransVerb -> NounPhrase -> NounPhrase -> VerbGroup = \ge,dig,vin -> + useVerb + ge + (\\_,_,_ => ge.s1 ++ ge.s2 ++ dig.s ! PAcc ++ ge.s3 ++ vin.s ! PAcc) ; -- Adjective-complement ditransitive verbs. @@ -733,12 +808,16 @@ oper advPost : Str -> Adverb = ss ; adVerbPhrase : VerbGroup -> Adverb -> VerbGroup = \spelar, ofta -> + insertAdverbVP spelar ofta.s ; + ----- sentence adv! +{- ----- { --- this unfortunately generates VP#2 ::= VP#2 s = spelar.s ; s2 = \\b => ofta.s ++ spelar.s2 ! b ; ---- the essential use of s2 s3 = \\sf,g,n,p => spelar.s3 ! sf ! g ! n ! p } ; +-} advVerbPhrase : VerbPhrase -> Adverb -> VerbPhrase = \sing, well -> { @@ -813,23 +892,38 @@ oper \np,vp,a -> predVerbGroupClause np (adVerbPhrase vp a) ; predVerbGroupClause : NounPhrase -> VerbGroup -> Clause = - \Jag, serdiginte -> { - s = \\b,c => let { - jag = Jag.s ! (case c of {ClInfinite _ => PAcc ; _ => PNom}) ; - osf = cl2s c ; - t = osf.sf ; - o = osf.o ; - ser = serdiginte.s ! t ; - dig = serdiginte.s3 ! t ! Jag.g ! Jag.n ! Jag.p ; - inte = serdiginte.s2 ! b - } in - case o of { - Main => jag ++ ser ++ inte ++ dig ; - Inv => ser ++ jag ++ inte ++ dig ; - Sub => jag ++ inte ++ ser ++ dig - } + \subj,sats -> {s = \\b,cf => + let + osf = cl2s cf ; + har = sats.s1 ! osf.sf ; + jag = subj.s ! PNom ; + inte = sats.s3 ! b ; + sagt = sats.s4 ! osf.sf ; + dig = sats.s5 ! subj.g ! subj.n ! subj.p ; + idag = sats.s6 ; + exts = sats.s7 + in case osf.o of { + Main => variants { + jag ++ har ++ inte ++ sagt ++ dig ++ idag ++ exts ; + onlyIf (orB sats.e3 (notB b)) + (inte ++ har ++ jag ++ sagt ++ dig ++ idag ++ exts) ; + onlyIf (orB sats.e4 (isCompoundClForm cf)) + (sagt ++ har ++ jag ++ inte ++ dig ++ idag ++ exts) ; + onlyIf sats.e5 + (dig ++ har ++ jag ++ inte ++ sagt ++ idag ++ exts) ; + onlyIf sats.e6 + (idag ++ har ++ jag ++ inte ++ sagt ++ dig ++ exts) ; + onlyIf sats.e7 + (exts ++ har ++ jag ++ inte ++ sagt ++ dig ++ idag) + } ; + Inv => + har ++ jag ++ inte ++ sagt ++ dig ++ idag ++ exts ; + Sub => + jag ++ inte ++ har ++ sagt ++ dig ++ idag ++ exts + } } ; + --3 For $Sats$, the native topological structure. Sats = { @@ -1079,8 +1173,12 @@ oper relVerbPhrase : RelPron -> VerbGroup -> RelClause = \som,sover -> {s = \\b,sf,gn,p => - som.s ! RNom ! gn ++ sover.s2 ! b ++ sover.s ! sf ++ - sover.s3 ! sf ! mkGenderRel som.g (genGN gn) ! numGN gn ! p + som.s ! RNom ! gn ++ + sover.s3 ! b ++ + sover.s1 ! sf ++ + sover.s4 ! sf ++ + sover.s5 ! mkGenderRel som.g (genGN gn) ! numGN gn ! p ++ + sover.s6 ++ sover.s7 } ; relSlash : RelPron -> ClauseSlashNounPhrase -> RelClause = \som,jagTalar -> diff --git a/lib/resource/scandinavian/VerbphraseScand.gf b/lib/resource/scandinavian/VerbphraseScand.gf index c71f6f898..28420fef2 100644 --- a/lib/resource/scandinavian/VerbphraseScand.gf +++ b/lib/resource/scandinavian/VerbphraseScand.gf @@ -26,6 +26,7 @@ incomplete concrete VerbphraseScand of Verbphrase = CategoriesScand ** UseV = predVerb ; UsePassV = passVerb ; ComplV2 = complTransVerb ; + ComplV3 = complDitransVerb ; ComplReflV2 = reflTransVerb ; ComplVS = complSentVerb ; ComplVV = complVerbVerb ; diff --git a/lib/resource/swedish/BasicSwe.gf b/lib/resource/swedish/BasicSwe.gf index d428e4db2..1761e933b 100644 --- a/lib/resource/swedish/BasicSwe.gf +++ b/lib/resource/swedish/BasicSwe.gf @@ -154,7 +154,7 @@ lin sea_N = mkN "sjö" "sjön" "sjöar" "sjöarna" ; seek_V2 = dirV2 (mk2V "söka" "söker") ; see_V2 = dirV2 (mkV "se" "ser" "se" "såg" "sett" "sedd") ; - sell_V3 = dirV3 (irregV "sälja" "sålde" "sålt") "to" ; + sell_V3 = dirV3 (irregV "sälja" "sålde" "sålt") "till" ; send_V3 = dirV3 (regV "skicka") "till" ; sheep_N = mk2N "får" "får" ; ship_N = regN "skepp" neutrum ;