1
0
forked from GitHub/gf-rgl

(Som) Make relational nouns into Prep w/ possPrep

This commit is contained in:
Inari Listenmaa
2019-08-27 12:32:42 +02:00
parent db8356aa49
commit bcb4812f10
6 changed files with 74 additions and 34 deletions

View File

@@ -11,7 +11,22 @@ lin
-- ComparAdvAdjS : CAdv -> A -> S -> Adv ; -- more warmly than he runs
-- : Prep -> NP -> Adv ;
PrepNP prep np = prep ** {s = [] ; np = nplite np} ;
PrepNP prep np = prep ** {
s = [] ;
np = case prep.c2 of { -- isPoss of {
NoPrep => nplite emptyNP ; -- TODO check
_ => nplite np } ;
dhex = case prep.c2 of {
NoPrep => [] ;
_ => prep.dhex ! Sg3 Masc } ;
miscAdv = case prep.c2 of {
NoPrep => np.s ! Abs ++ prep.dhex ! np.a ;
_ => [] }
} ;
--ResSom.Prep ** {c2 : Preposition ; berri, sii, dhex : Str} ;
-- Adverbs can be modified by 'adadjectives', just like adjectives.

View File

@@ -84,7 +84,10 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
-- Constructed in StructuralSom.
Conj = {s2 : State => Str ; s1 : Str ; n : Number } ;
Subj = SS ;
Prep = ResSom.Prep ** {c2 : Preposition ; berri, sii, dhex : Str} ;
Prep = ResSom.Prep ** {
c2 : Preposition ;
berri, sii, miscAdv : Str ;
dhex : Agreement => Str } ;
@@ -121,6 +124,6 @@ linref
-- Cl = linCl ;
VP = linVP VInf ;
CN = linCN ;
Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ;
Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ! Sg3 Masc ;
S = \s -> linBaseCl (s.s ! False) ;
}

View File

@@ -64,13 +64,14 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
True => glue predet.s det ;
False => predet.s
} ;
in np ** {s = \\c =>
in np ** {
s = \\c =>
case <np.isPron,predet.isPoss> of {
<True,True> => np.empty ++ predetS ;
_ => np.s ! c ++ predetS}
_ => np.s ! c ++ predetS} ;
isPron = False ; -- NP it loses its pronoun status when Predet is added
} ;
-- A noun phrase can also be postmodified by the past participle of a
-- verb, by an adverb, or by a relative clause

View File

@@ -1,4 +1,4 @@
resource ParadigmsSom = open CatSom, ResSom, ParamSom, Prelude in {
resource ParadigmsSom = open CatSom, ResSom, ParamSom, NounSom, Prelude in {
oper
@@ -104,17 +104,19 @@ oper
mkPrep = overload {
mkPrep : Str -> CatSom.Prep = \s ->
lin Prep ((ResSom.mkPrep s s s s s s) ** {
c2=noPrep ; sii,dhex,berri=[]}) ;
emptyPrep ** (ResSom.mkPrep s s s s s s) ; -- ** {
-- c2=noPrep ; sii,berri=[] ; dhex = \\_=> [] ; isPoss=False}) ;
mkPrep : (x1,_,_,_,_,x6 : Str) -> CatSom.Prep = \a,b,c,d,e,f ->
lin Prep ((ResSom.mkPrep a b c d e f) ** {
c2=noPrep ; sii,dhex,berri=[]}) ;
emptyPrep ** (ResSom.mkPrep a b c d e f) ; --
-- c2=noPrep ; sii,berri=[] ; dhex = \\_=> [] ; isPoss=False}) ;
mkPrep : Preposition -> CatSom.Prep = \p ->
lin Prep ((prep p) ** {sii,dhex,berri=[]}) ;
emptyPrep ** (prep p) ; -- ** {sii,berri=[] ; dhex = \\_=> [] ; isPoss=False}) ;
mkPrep : CatSom.Prep -> (x1,x2,x3 : Str) -> CatSom.Prep = \p,s,t,u ->
p ** {berri = s ; sii = t ; dhex = u} ;
p ** {berri = s ; sii = t ; dhex = \\_ => u} ;
} ;
possPrep : N -> CatSom.Prep ; -- Nouns like dhex that are used with possessive suffix to form adverbials
-- mkConj : (_,_ : Str) -> Number -> Conj = \s1,s2,num ->
-- lin Conj { s = s1 ; s2 = s2 } ;
@@ -125,7 +127,7 @@ oper
berri = s ;
c2 = noPrep ;
np = {s = [] ; a = P3_Prep} ;
sii,dhex = []
sii,dhex,miscAdv = []
} ;
mkAdV : Str -> AdV = \s -> lin AdV {s = s} ;
@@ -216,6 +218,22 @@ oper
mkV3 : (sug : Str) -> (_,_ : Preposition) -> V3 = \s,p,q -> lin V3 (regV s ** {c2 = p ; c3 = q}) ;
mkV3 : V -> (_,_ : Preposition) -> V2 = \v,p,q -> lin V3 (v ** {c2 = p ; c3 = q}) ;
} ;
possPrep : N -> CatSom.Prep = \dhex -> emptyPrep ** {
dhex = \\agr =>
let qnt = PossPron (pronTable ! agr) ;
num = getNum agr ;
art = gda2da dhex.gda ! Sg ;
det = qnt.s ! art ! Abs ; -- this includes BIND
in dhex.s ! Def Sg ++ det
} ;
emptyPrep : CatSom.Prep = lin Prep {
sii,berri,miscAdv = [] ;
dhex = \\_ => [] ;
s = \\_ => [] ;
c2 = noPrep ;
} ;
--------------------------------------------------------------------------------
}

View File

@@ -672,7 +672,8 @@ oper
BaseAdv : Type = {
sii, -- sii, soo, wala, kada go inside VP.
dhex, -- dhex, hoos, koor, dul, … go inside VP.
berri : Str -- e.g. "tomorrow"; goes before VP.
berri, -- AdV, e.g. "tomorrow"; goes before VP.
miscAdv : Str -- dump for any other kind of adverbial.
} ;
Adverb : Type = BaseAdv ** {
@@ -690,8 +691,7 @@ oper
obj2 : NPLite ; -- {s : Str ; a : PrepAgr}
secObj : Str ; -- if two overt pronoun objects
vComp : Str ; -- VV complement
miscAdv : Str ; -- dump for any other kind of adverb, that isn't
} ; -- in a closed class of particles or made with PrepNP.
} ;
VPSlash : Type = VerbPhrase ;
@@ -772,13 +772,14 @@ oper
_ => vp ** adv''
}
} where {
adv' : {sii,dhex,berri : Str} = { -- adv.np done with insertComp
adv' : {sii,dhex,berri,miscAdv : Str} = { -- adv.np done with insertComp
sii = vp.sii ++ adv.sii ;
dhex = vp.dhex ++ adv.dhex ;
berri = vp.berri ++ adv.berri } ;
berri = vp.berri ++ adv.berri ;
miscAdv = vp.miscAdv ++ adv.miscAdv} ;
adv'' : {sii,dhex,berri,miscAdv : Str} -- adv.np inserted into miscAdv
= adv' ** {dhex = (prepTable ! adv.c2).s ! adv.np.a ++ adv.dhex ;
miscAdv = adv.np.s}
miscAdv = adv.miscAdv ++ adv.np.s}
} ;
--------------------------------------------------------------------------------
-- Sentences etc.
@@ -936,7 +937,8 @@ oper
++ adv.sii
++ (prepTable ! adv.c2).s ! adv.np.a
++ adv.dhex
++ adv.np.s ;
++ adv.np.s
++ adv.miscAdv ;
linBaseCl : BaseCl -> Str = \b -> b.beforeSTM ++ b.stm ++ b.afterSTM ;
}

View File

@@ -55,11 +55,10 @@ lin or_Conj = {s2 = \\_ => "ama" ; s1 = [] ; n = Sg} ; -- mise with interrogativ
--lin how8many_IDet = R.indefDet "" pl ;
lin all_Predet = {s = "giddi" ; isPoss = True ; da = M GA} ;
--lin not_Predet = { s = "" } ;
--lin only_Predet = { s = "" } ;
lin most_Predet = {s = "badi" ; isPoss = True ; da = F DA} ;
{-
lin not_Predet = { s = "" } ;
lin only_Predet = { s = "" } ;
lin most_Predet = { s = "" } ;
lin every_Det = R.defDet [] pl **
{ s = mkVow } ;
lin few_Det = R.indefDet "" pl ;
@@ -67,12 +66,12 @@ lin many_Det = R.indefDet "" pl ;
lin much_Det = R.indefDet "" sg ;
-}
lin somePl_Det = {
sp = \\_,_ => "qaar" ;
isPoss, isNum = False ;
st = Definite ; -- NB. Indefinite means actually only IndefArt.
n = Pl ;
s = \\x,_ => BIND ++ defStems ! x ++ BIND ++ "a qaarkood" ;
shortPoss = \\x => BIND ++ defStems ! x ++ BIND ++ "a qaarkood" ;
sp = \\_,_ => "qaarkood" ;
isPoss, isNum = False ;
n = Pl ;
st = Definite -- NB. Indefinite is really only reserved for IndefArt NumSg.
} ;
lin someSg_Det = somePl_Det ** {
@@ -82,8 +81,7 @@ lin someSg_Det = somePl_Det ** {
F x => \\_ => BIND ++ defStems ! F x ++ BIND ++ "a qaarkeed" } ;
shortPoss = table {
M x => BIND ++ defStems ! M x ++ BIND ++ "a qaarkiis" ;
F x => BIND ++ defStems ! F x ++ BIND ++ "a qaarkeed" } ;
sp = \\g,c => case g of {Fem => "qaarkeed" ; _ => "qaarkiis"}
F x => BIND ++ defStems ! F x ++ BIND ++ "a qaarkeed" }
} ;
@@ -115,7 +113,7 @@ lin above_Prep = mkPrep (mkPrep ka) [] [] "dul" ;
-- lin after_Prep = mkPrep "" ;
-- lin before_Prep = mkPrep "" ;
-- lin behind_Prep = mkPrep "" ;
-- lin between_Prep = mkPrep "" ;
lin between_Prep = possPrep dhex_N ;
-- lin by8agent_Prep = mkPrep ;
-- lin by8means_Prep = mkPrep ;
-- lin during_Prep = mkPrep ;
@@ -188,4 +186,7 @@ lin want_VV = mkV "" ;
lin please_Voc = ss "" ;
-}
oper
dhex_N : N = let dhex : N = mkN "dhex" in dhex ** {gda = FM DA HA} ;
}