mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-10 13:29:32 -06:00
reflexive possessives in Fin and Ger ; in Fin, it also makes a difference in the recognized strings, because it always involves pro-drop unlike ordinary possessives
This commit is contained in:
@@ -270,4 +270,27 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
|
||||
h = Back ; ---- TODO should be ap.h, which does not exist
|
||||
} ;
|
||||
|
||||
lincat
|
||||
RNP = {s : Agr => NPForm => Str ; isPron : Bool} ;
|
||||
lin
|
||||
ReflRNP vps rnp = insertObjPre False
|
||||
(\fin,b,agr -> appCompl fin b vps.c2
|
||||
{s = \\npf => rnp.s ! agr ! npf ; a = agr ; isPron = rnp.isPron})
|
||||
vps ;
|
||||
|
||||
ReflPoss num cn = {
|
||||
s = \\agr, npf =>
|
||||
let
|
||||
quant : NounFin.Quant = lin Quant { -- possessive pronoun with suffix only
|
||||
s2 : Harmony => Str = \\harm => possSuffixGen harm agr ;
|
||||
s1,sp = \\_,_ => [] ; isNum,isNeg = False ; isPoss,isDef = True
|
||||
} ;
|
||||
det = NounFin.DetQuant quant num
|
||||
in
|
||||
(NounFin.DetCN det cn).s ! npf ;
|
||||
isPron = False
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,9 @@ abstract ExtraFinAbs = Extra [
|
||||
PassVPSlash, PassAgentVPSlash,
|
||||
VPI,ListVPI,BaseVPI,ConsVPI,MkVPI,ComplVPIVV,ConjVPI,
|
||||
VPS,ListVPS,BaseVPS,ConsVPS,ConjVPS,MkVPS,PredVPS,ConjVPS,Tense,Temp,Pol,S,
|
||||
VV,VP,Conj,NP,Quant,IAdv,IComp,ICompAP,IAdvAdv,Adv,AP, Pron, RP, ProDrop, AdjAsCN] ** {
|
||||
VV,VP,Conj,NP,Quant,IAdv,IComp,ICompAP,IAdvAdv,Adv,AP, Pron, RP, ProDrop, AdjAsCN,
|
||||
RNP,ReflRNP,ReflPoss
|
||||
] ** {
|
||||
flags coding=utf8 ;
|
||||
|
||||
fun
|
||||
|
||||
@@ -149,6 +149,14 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
|
||||
|
||||
ConjVPS = conjunctDistrTable2 Order Agr ;
|
||||
|
||||
lincat
|
||||
RNP = {s : Agr => Case => Str} ;
|
||||
lin
|
||||
ReflRNP vps rnp =
|
||||
insertObj (\\a => appPrep vps.c2
|
||||
(\\k => usePrepC k (\c -> rnp.s ! a ! c))) vps ;
|
||||
|
||||
ReflPoss num cn = {s = \\a,c => num.s ! cn.g ! c ++ possPron a num.n cn.g c ++ cn.s ! adjfCase Strong c ! num.n ! c} ;
|
||||
|
||||
-- implementation of some of the relevant Foc rules from Extra
|
||||
|
||||
|
||||
@@ -3,7 +3,9 @@ abstract ExtraGerAbs = Extra [
|
||||
VPS,ListVPS,BaseVPS,ConsVPS,ConjVPS,MkVPS,PredVPS,EmptyRelSlash,
|
||||
VPSlash, PassVPSlash, PassAgentVPSlash, CompIQuant, PastPartAP, PastPartAgentAP,
|
||||
Temp,Tense,Pol,S,NP,VV,VP,Conj,IAdv,IQuant,IComp,ICompAP,IAdvAdv,Adv,AP,
|
||||
Foc,FocObj,FocAdv,FocAP,UseFoc] ** {
|
||||
Foc,FocObj,FocAdv,FocAP,UseFoc,
|
||||
RNP,ReflRNP,ReflPoss
|
||||
] ** {
|
||||
flags coding=utf8;
|
||||
|
||||
cat
|
||||
@@ -23,4 +25,5 @@ abstract ExtraGerAbs = Extra [
|
||||
VPass : V -> FClause ; -- (es) wird getanzt
|
||||
AdvFor : Adv -> FClause -> FClause ; -- es wird heute gelacht - addition of adverbs
|
||||
FtoCl : FClause -> Cl ; -- embedding FClause within the RGL, to allow generation of S, Utt, etc.
|
||||
|
||||
}
|
||||
|
||||
@@ -780,6 +780,38 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
Ag _ Pl P3 => caselist "sie" "sich" "sich" "ihrer"
|
||||
} ;
|
||||
|
||||
possPron : Agr -> Number -> Gender -> Case -> Str = \a,n,g,c -> case <a,n,g> of {
|
||||
<Ag _ Sg P1,Sg,Masc> => caselist "mein" "meinen" "meinem" "meines" ! c ;
|
||||
<Ag _ Sg P1,Sg,Fem> => caselist "meine" "meine" "meiner" "meiner" ! c ;
|
||||
<Ag _ Sg P1,Sg,Neutr> => caselist "mein" "mein" "meinem" "meines" ! c ;
|
||||
<Ag _ Sg P1,Pl,_> => caselist "meine" "meine" "meinen" "meiner" ! c ;
|
||||
<Ag _ Sg P2,Sg,Masc> => caselist "dein" "deinen" "deinem" "deines" ! c ;
|
||||
<Ag _ Sg P2,Sg,Fem> => caselist "deine" "deine" "deiner" "deiner" ! c ;
|
||||
<Ag _ Sg P2,Sg,Neutr> => caselist "dein" "dein" "deinem" "deines" ! c ;
|
||||
<Ag _ Sg P2,Pl,_> => caselist "deine" "deine" "deinen" "deiner" ! c ;
|
||||
|
||||
<Ag (Masc|Neutr) Sg P3,Sg,Masc> => caselist "sein" "seinen" "seinem" "seines" ! c ;
|
||||
<Ag (Masc|Neutr) Sg P3,Sg,Fem> => caselist "seine" "seine" "seiner" "seiner" ! c ;
|
||||
<Ag (Masc|Neutr) Sg P3,Sg,Neutr> => caselist "sein" "sein" "seinem" "seines" ! c ;
|
||||
<Ag (Masc|Neutr) Sg P3,Pl,_> => caselist "seine" "seine" "seinen" "seiner" ! c ;
|
||||
|
||||
<Ag _ _ P3,Sg,Masc> => caselist "ihr" "ihren" "ihrem" "ihres" ! c ;
|
||||
<Ag _ _ P3,Sg,Fem> => caselist "ihre" "ihre" "ihrer" "ihrer" ! c ;
|
||||
<Ag _ _ P3,Sg,Neutr> => caselist "ihr" "ihr" "ihrem" "ihres" ! c ;
|
||||
<Ag _ _ P3,Pl,_> => caselist "ihre" "ihre" "ihren" "ihrer" ! c ;
|
||||
|
||||
<Ag _ Pl P1,Sg,Masc> => caselist "unser" "unseren" "unserem" "unseres" ! c ;
|
||||
<Ag _ Pl P1,Sg,Fem> => caselist "unsere" "unsere" "unserer" "unserer" ! c ;
|
||||
<Ag _ Pl P1,Sg,Neutr> => caselist "unser" "unser" "unserem" "unseres" ! c ;
|
||||
<Ag _ Pl P1,Pl,_> => caselist "unsere" "unsere" "unseren" "unserer" ! c ;
|
||||
|
||||
<Ag _ Pl P2,Sg,Masc> => caselist "euer" "euren" "eurem" "eures" ! c ;
|
||||
<Ag _ Pl P2,Sg,Fem> => caselist "eure" "eure" "eurer" "eurer" ! c ;
|
||||
<Ag _ Pl P2,Sg,Neutr> => caselist "euer" "euer" "eurem" "eures" ! c ;
|
||||
<Ag _ Pl P2,Pl,_> => caselist "eure" "eure" "euren" "eurer" ! c
|
||||
|
||||
} ;
|
||||
|
||||
conjThat : Str = "dass" ;
|
||||
|
||||
conjThan : Str = "als" ;
|
||||
|
||||
Reference in New Issue
Block a user