mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-22 11:19:32 -06:00
163 lines
4.9 KiB
Plaintext
163 lines
4.9 KiB
Plaintext
--1 Topological structure of Scandinavian sentences.
|
|
--
|
|
-- This is an alternative, more 'native' analysis than $Clause$ and
|
|
-- $Verbphrase$, due to Diderichsen.
|
|
--
|
|
-- Sources:
|
|
-- N. Jörgensen & J. Svensson, "Nusvensk grammatik" (Gleerups, 2001);
|
|
-- R. Zola Christensen, "Dansk grammatik for svenskere"
|
|
-- (Studentlitteratur 1999).
|
|
|
|
incomplete concrete SatsScand of Sats = CategoriesScand **
|
|
open Prelude, SyntaxScand in {
|
|
|
|
flags optimize=parametrize ;
|
|
|
|
-- The analysis is based on the notions of fundament, nexus, and
|
|
-- content ("innehåll") fields. Nexus and content are both divided into
|
|
-- two subfields - a verb, a noun phrase, and an adverbial.
|
|
-- In addition, there is a field for an extraposed sentence.
|
|
-- Each of these subfields can in a main clause be 'moved' to the
|
|
-- sentence-initial fundament position.
|
|
|
|
lincat
|
|
Sats = {
|
|
s1 : SForm => Str ; -- V1 har
|
|
s2 : Str ; -- N1 jag
|
|
s3 : Bool => Str ; -- A1 inte
|
|
s4 : SForm => Str ; -- V2 sett
|
|
s5 : Str ; -- N2 dig
|
|
s6 : Str ; -- A2 idag
|
|
s7 : Str ; -- S att... (extraposed sentence)
|
|
e3,e4,e5,e6,e7 : Bool -- indicate if the field exists
|
|
} ;
|
|
|
|
-- Thus the fundament is not a part of the $Sats$, but it is only
|
|
-- created when the $Sats$ is used as a $Main$ clause.
|
|
-- In an $Inv$erted clause, no fundament is created.
|
|
-- In a $Sub$ordinate clause, the order is rigid as well.
|
|
|
|
lin
|
|
ClSats sats = {s = \\b,cf =>
|
|
let
|
|
osf = cl2s cf ;
|
|
har = sats.s1 ! osf.sf ;
|
|
jag = sats.s2 ;
|
|
inte = sats.s3 ! b ;
|
|
sagt = sats.s4 ! osf.sf ;
|
|
dig = sats.s5 ;
|
|
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
|
|
}
|
|
} ;
|
|
|
|
-- The following rules show how the fields are filled in a
|
|
-- predication, with different subcategorization patterns.
|
|
|
|
SatsV = mkSats ;
|
|
|
|
SatsV2 subj verb obj =
|
|
mkSatsObject subj verb (verb.s2 ++ obj.s ! PAcc) ;
|
|
|
|
SatsV3 subj verb obj1 obj2 =
|
|
mkSatsObject subj verb (verb.s2 ++ obj1.s ! PAcc ++ verb.s3 ++ obj2.s ! PAcc) ;
|
|
|
|
SatsReflV2 subj verb =
|
|
mkSatsObject subj verb (verb.s2 ++ reflPron subj.n subj.p) ;
|
|
|
|
SatsVS subj verb sent =
|
|
insertExtrapos (mkSats subj verb) (optStr infinAtt ++ sent.s ! Sub) ;
|
|
|
|
SatsVQ subj verb quest =
|
|
insertExtrapos (mkSats subj verb) (quest.s ! IndirQ) ;
|
|
|
|
SatsV2S subj verb obj sent =
|
|
insertExtrapos
|
|
(mkSatsObject subj verb (verb.s2 ++ obj.s ! PAcc))
|
|
(optStr infinAtt ++ sent.s ! Sub) ;
|
|
|
|
SatsV2Q subj verb obj quest =
|
|
insertExtrapos
|
|
(mkSatsObject subj verb (verb.s2 ++ obj.s ! PAcc))
|
|
(quest.s ! IndirQ) ;
|
|
|
|
SatsAP subj adj =
|
|
mkSatsCopula subj (adj.s ! predFormAdj subj.g subj.n ! Nom) ;
|
|
|
|
SatsCN subj cn =
|
|
mkSatsCopula subj (indefNoun subj.n cn) ;
|
|
|
|
SatsNP subj np =
|
|
mkSatsCopula subj (np.s ! PNom) ;
|
|
|
|
SatsAdv subj adv =
|
|
mkSatsCopula subj adv.s ;
|
|
|
|
-- No problem to insert a verb-complement verb:
|
|
---- (another rule needed for complement in perfect: "jag vill ha gått")
|
|
|
|
VVSats sats vv =
|
|
let
|
|
harvelat = verbSForm vv Act
|
|
in
|
|
{s1 = \\sf => (harvelat sf).fin ;
|
|
s2 = sats.s2 ;
|
|
s3 = sats.s3 ;
|
|
s4 = \\sf => (harvelat sf).inf ++ sats.s4 ! VInfinit Simul ;
|
|
s5 = sats.s5 ;
|
|
s6 = sats.s6 ;
|
|
s7 = sats.s7 ;
|
|
e3 = sats.e3 ;
|
|
e4 = True ;
|
|
e5 = sats.e5 ;
|
|
e6 = sats.e6 ;
|
|
e7 = sats.e7
|
|
} ;
|
|
|
|
-- This is where sentence adverbials are inserted.
|
|
|
|
AdVSats sats adv = {
|
|
s1 = sats.s1 ;
|
|
s2 = sats.s2 ;
|
|
s3 = \\b => sats.s3 ! b ++ adv.s ;
|
|
s4 = sats.s4 ;
|
|
s5 = sats.s5 ;
|
|
s6 = sats.s6 ;
|
|
s7 = sats.s7 ;
|
|
e3 = True ;
|
|
e4 = sats.e4 ;
|
|
e5 = sats.e5 ;
|
|
e6 = sats.e6 ;
|
|
e7 = sats.e7
|
|
} ;
|
|
|
|
-- This is where other adverbials ('TSR') are inserted. There is an
|
|
-- operation for this, since this place is used for many more things
|
|
-- than the sentence adverbial place
|
|
|
|
AdvSats sats adv = insertAdverb sats adv.s ;
|
|
|
|
-- with proper means in GF, this would become even nicer:
|
|
|
|
--- AdVSats sats adv = sats ** {s3 = sats.s3 ++ adv.s ; e3 = True} ;
|
|
|
|
}
|