1
0
forked from GitHub/gf-rgl

(Som) Add CompCN+NP ; more rules for predicatives

This commit is contained in:
Inari Listenmaa
2019-06-28 14:01:40 +02:00
parent 682a0adac0
commit ef13412a66
5 changed files with 44 additions and 31 deletions

View File

@@ -361,7 +361,7 @@ lin speak_V2 = mkV2 "hadlo" ;
-- lin tail_N = mkN "" ;
-- lin talk_V3 = mkV3 "" ;
lin teach_V2 = mkV2 "bar" ku ;
-- lin teacher_N = mkN "" ;
lin teacher_N = mkN "macallin" ;
-- lin television_N = mkN "" ;
-- lin thick_A = mkA "" ;
-- lin thin_A = mkA "" ;

View File

@@ -213,6 +213,8 @@ param
| VRel -- "som är/har/…" TODO is this used in other verbs?
| VImp Number Polarity ;
PredType = NoPred | Copula | NoCopula ;
oper
if_then_Pol : Polarity -> Str -> Str -> Str = \p,t,f ->
case p of {Pos => t ; Neg => f } ;

View File

@@ -19,6 +19,9 @@ oper
isPoss : Bool -- to prevent impossible forms in ComplN2 with Ns that have short possessive, e.g. "father"
} ;
cn2str : Number -> Case -> CNoun -> Str = \n,c,cn ->
cn.s ! Indef n ++ cn.mod ! n ! c ;
PNoun : Type = {s : Str ; a : Agreement} ;
mkPNoun : Str -> Agreement -> PNoun = \str,agr -> {s = str ; a = agr} ;
@@ -611,11 +614,11 @@ oper
c2 : Preposition ; np : NounPhrase} ; -- So that adverbs can also contribute to preposition contraction
Complement : Type = {
comp : Agreement => {p1,p2 : Str} -- Agreement for AP complements
comp : Agreement => {p1,p2 : Str} ; -- Agreement for AP complements
pred : PredType ; -- to choose right sentence type marker and copula
} ;
VerbPhrase : Type = Verb ** Complement ** {
isPred : Bool ; -- to choose right sentence type marker
adv : Str ;
c2, c3 : Preposition ; -- can combine together and with object pronoun(s?)
obj2 : {s : Str ; a : AgreementPlus} ;
@@ -626,7 +629,7 @@ oper
useV : Verb -> VerbPhrase = \v -> v ** {
comp = \\_ => <[],[]> ;
isPred = False ;
pred = NoPred ;
adv = [] ;
c2,c3 = noPrep ;
obj2 = {s = [] ; a = Unassigned} ;
@@ -643,15 +646,11 @@ oper
} ;
complSlash : VPSlash -> VerbPhrase = \vps -> let np = vps.obj2 in vps ** {
comp = \\agr =>
case np.a of {
Unassigned => vps.comp ! agr ;
_ => {p1 = np.s ; -- if object is a noun, it will come before verb in the sentence.
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 = compl np.a vps ++ vps.secObj} -- object combines with the preposition of the verb.
-- secObj in case there was a ditransitive verb.
}
} ;
p2 = cmp.p2 ++ compl np.a vps ++ vps.secObj} -- object combines with the preposition of the verb.
} ; -- secObj in case there was a ditransitive verb.
compl : AgreementPlus -> VerbPhrase -> Str = \a,vp ->
let agr = case a of {IsPron x => x ; _ => Pl3} ;
@@ -686,7 +685,7 @@ oper
} ;
insertAdv : Adverb -> VerbPhrase -> VerbPhrase = \adv,vp ->
insertAdv : VerbPhrase -> Adverb -> VerbPhrase = \vp,adv ->
case adv.c2 of {
noPrep => vp ** {adv = adv.s} ; -- The adverb is not formed with PrepNP
prep => case <vp.c2,vp.obj2.a,vp.c3> of {
@@ -746,6 +745,6 @@ oper
-- linrefs
oper
linVP : VerbPhrase -> Str = \vp -> vp.s ! VInf ; ----
linCN : CNoun -> Str = \cn -> cn.s ! NomSg ;
linVP : VerbPhrase -> Str = \vp -> let obj = vp.comp ! Sg3 Masc in obj.p1 ++ obj.p2 ++ vp.s ! VInf ; ----
linCN : CNoun -> Str = \cn -> cn.s ! NomSg ++ cn.mod ! Sg ! Abs ;
}

View File

@@ -14,13 +14,17 @@ lin
_ => complSlash vps } ;
subj = case vps.c2 of {passive => impersNP ; _ => np} ;
in { s = \\t,a,p =>
let pred : {fin : Str ; inf : Str} = vf t a p subj.a vp ;
let predRaw : {fin : Str ; inf : Str} = vf t a p subj.a vp ;
pred : {fin : Str ; inf : Str} = case vp.pred of {
NoCopula => {fin,inf = []} ; -- if NoCopula, no overt verb
_ => predRaw
} ;
subjnoun : Str = if_then_Str np.isPron [] (subj.s ! Nom) ;
subjpron : Str = if_then_Str np.isPron (subj.s ! Nom) [] ;
obj : {p1,p2 : Str} = vp.comp ! subj.a ;
stm : Str =
case <p,vp.isPred,subj.a> of {
<Pos,True,Sg3 _|Impers> => "waa" ;
case <p,vp.pred,subj.a> of {
<Pos,Copula|NoCopula,Sg3 _|Impers> => "waa" ;
-- _ => stmarker ! np.a ! b } -- marker+pronoun contract
_ => case <np.isPron,p> of {
<True,Pos> => "waa" ++ subjpron ; -- to force some string from NP to show in the tree

View File

@@ -74,16 +74,13 @@ lin
ReflVP vps = ;
-}
-- : Comp -> VP ;
UseComp comp = UseCopula ** comp ** {
isPred = True
} ;
UseComp comp = UseCopula ** comp ;
-- : VP -> Adv -> VP ; -- sleep here
AdvVP vp adv = insertAdv adv vp ; ---- TODO: how about combining adverbs?
AdvVP = insertAdv ;
-- : VPSlash -> Adv -> VPSlash ; -- use (it) here
AdvVPSlash vps adv = insertAdv adv vps ;
AdvVPSlash = insertAdv ;
{-
-- : VP -> Adv -> VP ; -- sleep , even though ...
@@ -117,18 +114,29 @@ lin
-- : AP -> Comp ;
CompAP ap = {
comp = \\a => <[], ap.s ! AF (getNum a) Abs> ;
pred = Copula ;
} ;
{-
-- : CN -> Comp ;
CompCN cn = { } ;
CompCN cn = {
comp = \\a => <[], cn2str Sg Abs cn> ;
pred = NoCopula ;
} ;
-- NP -> Comp ;
CompNP np = { } ;
CompNP np = {
comp = \\a => <[], np.s ! Abs> ;
pred = NoCopula ;
} ;
-- : Adv -> Comp ;
CompAdv adv = { } ;
CompAdv adv = {
comp = \\a =>
<if_then_Str adv.np.isPron [] (adv.np.s ! Abs)
, adv.s ++ prepCombTable ! adv.np.a ! Single adv.c2> ;
pred = Copula ;
} ;
-}
-- : VP -- Copula alone;
UseCopula = useV copula ;