forked from GitHub/gf-core
topological model in Scand main branch
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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) ;
|
||||
|
||||
BIN
lib/resource/doc/ScanMod.gif
Normal file
BIN
lib/resource/doc/ScanMod.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
@@ -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) ;
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
@@ -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) ;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
concrete CountryFre of Country = open ResourceFre, ParadigmsFre in {
|
||||
concrete CountryFre of Country = open CategoriesFre, ParadigmsFre in {
|
||||
|
||||
lincat
|
||||
Country = PN ;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
concrete TimeFre of Time = NumeralsFre **
|
||||
open Prelude, MorphoFre, ResourceFre, ParadigmsFre in {
|
||||
open Prelude, MorphoFre, CategoriesFre, ParadigmsFre in {
|
||||
|
||||
lincat
|
||||
Date = SS ;
|
||||
|
||||
@@ -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) ;
|
||||
|
||||
}
|
||||
|
||||
@@ -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} ;
|
||||
|
||||
@@ -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) ;
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
@@ -26,6 +26,7 @@ incomplete concrete VerbphraseScand of Verbphrase = CategoriesScand **
|
||||
UseV = predVerb ;
|
||||
UsePassV = passVerb ;
|
||||
ComplV2 = complTransVerb ;
|
||||
ComplV3 = complDitransVerb ;
|
||||
ComplReflV2 = reflTransVerb ;
|
||||
ComplVS = complSentVerb ;
|
||||
ComplVV = complVerbVerb ;
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
Reference in New Issue
Block a user