mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-27 08:58:55 -06:00
(Som) Use PrepCombination in VP instead of c2,c3 : Preposition
This commit is contained in:
@@ -202,28 +202,28 @@ param
|
||||
| Single Preposition ;
|
||||
|
||||
oper
|
||||
combine : (isPassive : Bool) -> Preposition -> Preposition -> PrepCombination = \isPass,p1,p2 ->
|
||||
let oneWay : Preposition => Preposition => PrepCombination =
|
||||
\\x,y => case <isPass,x,y> of {
|
||||
<True,NoPrep,NoPrep> => Passive ;
|
||||
<True,Ku,NoPrep> => Lagu ;
|
||||
<True,Ka,NoPrep> => Laga ;
|
||||
<True,U,NoPrep> => Loo ;
|
||||
<True,p,_> => Single p ; -- TODO all combinations
|
||||
<False,_,_> => case <x,y> of {
|
||||
<U,U|Ku> => Ugu ;
|
||||
<U,Ka> => Uga ;
|
||||
<U,La> => Ula ;
|
||||
<Ku|Ka,
|
||||
Ku|Ka> => Kaga ;
|
||||
<Ku,La> => Kula ;
|
||||
<Ka,La> => Kala ;
|
||||
<NoPrep,p> => Single p ;
|
||||
<p,NoPrep> => Single x ;
|
||||
<p,_> => Single x }} -- for trying both ways
|
||||
in case oneWay ! p2 ! p1 of {
|
||||
Single _ => oneWay ! p1 ! p2 ;
|
||||
z => z } ;
|
||||
combine : Preposition -> Preposition -> PrepCombination = \p1,p2 ->
|
||||
let oneWay : Preposition => Preposition => PrepCombination = \\x,y =>
|
||||
case <x,y> of {
|
||||
<U,U|Ku> => Ugu ;
|
||||
<U,Ka> => Uga ;
|
||||
<U,La> => Ula ;
|
||||
<Ku|Ka,
|
||||
Ku|Ka> => Kaga ;
|
||||
<Ku,La> => Kula ;
|
||||
<Ka,La> => Kala ;
|
||||
<NoPrep,p> => Single p ;
|
||||
<p,NoPrep> => Single x ;
|
||||
<p,_> => Single x } -- for trying both ways
|
||||
in case oneWay ! p2 ! p1 of {
|
||||
Single _ => oneWay ! p1 ! p2 ;
|
||||
z => z } ;
|
||||
|
||||
isPassive : {c2 : PrepCombination} -> Bool = \vp ->
|
||||
case vp.c2 of {
|
||||
Passive | Lagu | Laga | Loo | Lala => True ;
|
||||
_ => False
|
||||
} ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Verbs
|
||||
|
||||
@@ -660,9 +660,7 @@ oper
|
||||
} ;
|
||||
|
||||
VerbPhrase : Type = BaseVerb ** Complement ** BaseAdv ** {
|
||||
-- Prepositions can combine together and with object pronoun.
|
||||
isPassive : Bool ;
|
||||
c2,c3 : Preposition ; -- if c2 is Passive, the real preposition is in c3.
|
||||
c2 : PrepCombination ; -- Prepositions can combine together and with object pronoun.
|
||||
obj2 : NPLite ; -- {s : Str ; a : PrepAgr}
|
||||
secObj : Str ; -- if two overt pronoun objects
|
||||
vComp : Str ; -- VV complement
|
||||
@@ -675,32 +673,38 @@ oper
|
||||
comp = \\_ => <[],[]> ;
|
||||
pred = NoPred ;
|
||||
vComp,berri,miscAdv,refl = [] ;
|
||||
c2, c3 = NoPrep ;
|
||||
isPassive = False ;
|
||||
c2 = Single NoPrep ;
|
||||
obj2 = {s = [] ; a = P3_Prep} ;
|
||||
secObj = []
|
||||
} ;
|
||||
|
||||
useVc : Verb2 -> VPSlash = \v2 -> useV v2 ** {
|
||||
c2 = v2.c2
|
||||
c2 = Single v2.c2
|
||||
} ;
|
||||
|
||||
useVc3 : Verb3 -> VPSlash = \v3 -> useV v3 ** {
|
||||
c2 = combine v3.c2 v3.c3 ;
|
||||
} ;
|
||||
|
||||
passV2 : Verb2 -> VerbPhrase = \v2 -> passVP (useV v2) ;
|
||||
|
||||
passVP : VerbPhrase -> VerbPhrase = \vp -> vp ** {
|
||||
isPassive = True ;
|
||||
c2 = case vp.c2 of {
|
||||
Single NoPrep => Passive ;
|
||||
Single Ku => Lagu ;
|
||||
Single Ka => Laga ;
|
||||
Single U => Loo ;
|
||||
Single La => Lala ;
|
||||
_ => vp.c2 }
|
||||
} ;
|
||||
|
||||
complSlash : VPSlash -> VerbPhrase = \vps -> let np = vps.obj2 in vps ** {
|
||||
comp = \\agr => let cmp = vps.comp ! agr in
|
||||
{p1 = np.s ++ cmp.p1 ; -- if object is a noun, it will come before verb in the sentence.
|
||||
-- if object is a pronoun, np.s is empty.
|
||||
p2 = cmp.p2 ++ compl np.a vps} -- object combines with the preposition of the verb.
|
||||
p2 = cmp.p2 ++ prepCombTable ! np.a ! vps.c2} -- object combines with the preposition of the verb.
|
||||
} ;
|
||||
|
||||
compl : PrepAgr -> VerbPhrase -> Str = \agr,vp ->
|
||||
prepCombTable ! agr ! combine vp.isPassive vp.c2 vp.c3 ;
|
||||
|
||||
insertRefl : VPSlash -> VPSlash = \vps -> vps ** {
|
||||
obj2 = vps.obj2 ** {a = Reflexive_Prep} ;
|
||||
|
||||
@@ -733,10 +737,10 @@ oper
|
||||
insertAdv : VerbPhrase -> Adverb -> VerbPhrase = \vp,adv ->
|
||||
case adv.c2 of {
|
||||
NoPrep => vp ** adv'' ; -- the adverb is not formed with PrepNP, e.g. "tomorrow"
|
||||
_ => case <vp.c2,vp.c3> of {
|
||||
_ => case vp.c2 of {
|
||||
-- if free complement slots, introduce adv.np with insertComp
|
||||
<NoPrep,_> => insertCompAgrPlus (vp ** {c2 = adv.c2}) adv.np ** adv' ;
|
||||
<_,NoPrep> => insertCompAgrPlus (vp ** {c3 = adv.c2}) adv.np ** adv' ;
|
||||
Single NoPrep => insertCompAgrPlus (vp ** {c2 = Single adv.c2}) adv.np ** adv' ;
|
||||
Single p => insertCompAgrPlus (vp ** {c2 = combine p adv.c2}) adv.np ** adv' ;
|
||||
|
||||
-- if complement slots are full, just insert strings.
|
||||
_ => vp ** adv''
|
||||
@@ -786,8 +790,8 @@ oper
|
||||
subjpron : Str = if_then_Str np.isPron (subj.s ! Nom) np.empty ;
|
||||
obj : {p1,p2 : Str} =
|
||||
let o : {p1,p2 : Str} = vp.comp ! subj.a ;
|
||||
bind : Str = case <vp.isPassive,vp.obj2.a, vp.c2, vp.pred> of {
|
||||
<False,P3_Prep,NoPrep,NoPred> => [] ;
|
||||
bind : Str = case <isPassive vp,vp.obj2.a, vp.c2, vp.pred> of {
|
||||
<False,P3_Prep,Single NoPrep,NoPred> => [] ;
|
||||
_ => BIND } ;
|
||||
in case <cltyp,p> of {
|
||||
<Statement,Neg> => {p2 = [] ; p1 = o.p1 ++ o.p2 ++ bind} ;
|
||||
@@ -802,10 +806,10 @@ oper
|
||||
_ => stmarkerNoContr ! subj.a ! p }} ;
|
||||
in wordOrder subjnoun subjpron stm obj pred vp ;
|
||||
} where {
|
||||
vp = case vps.isPassive of {
|
||||
vp = case isPassive vps of {
|
||||
True => complSlash (insertComp vps np) ;
|
||||
_ => complSlash vps } ;
|
||||
subj = case vps.isPassive of {True => impersNP ; _ => np}
|
||||
subj = case isPassive vps of {True => impersNP ; _ => np}
|
||||
} ;
|
||||
|
||||
wordOrder : (sn,sp,stm : Str) -> {p1,p2 : Str} -> {fin,inf : Str} -> VerbPhrase -> BaseCl =
|
||||
|
||||
@@ -40,7 +40,7 @@ lin
|
||||
-- : V3 -> NP -> VPSlash ; -- give it (to her)
|
||||
-- : V3 -> NP -> VPSlash ; -- give (it) to her
|
||||
Slash2V3,
|
||||
Slash3V3 = \v3 -> insertComp (useVc v3) ;
|
||||
Slash3V3 = \v3 -> insertComp (useVc3 v3) ;
|
||||
{-
|
||||
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
|
||||
SlashV2V v2v vp = ;
|
||||
|
||||
Reference in New Issue
Block a user