(Som) Add State in the inflection table of CN, to pick right conjunction

This commit is contained in:
Inari Listenmaa
2019-08-14 11:18:07 +02:00
parent fa9c3ac4b5
commit 3abae675c7
2 changed files with 25 additions and 15 deletions

View File

@@ -42,7 +42,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
in dt.pref -- if det is numeral in dt.pref -- if det is numeral
++ cn.s ! nfc.nf ++ cn.s ! nfc.nf
++ dt.s -- non-numeral det ++ dt.s -- non-numeral det
++ cn.mod ! num ! c ++ cn.mod ! det.st ! num ! c
} ; } ;
-- : PN -> NP ; -- : PN -> NP ;
@@ -90,8 +90,8 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
-- MassNP : CN -> NP ; -- MassNP : CN -> NP ;
MassNP cn = useN cn ** { MassNP cn = useN cn ** {
s = table { Nom => cn.s ! NomSg ++ cn.mod ! Sg ! Nom ; s = table { Nom => cn.s ! NomSg ++ cn.mod ! Indefinite ! Sg ! Nom ;
c => cn.s ! Indef Sg ++ cn.mod ! Sg ! c } c => cn.s ! Indef Sg ++ cn.mod ! Indefinite ! Sg ! c }
} ; } ;
@@ -224,19 +224,20 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
-- : AP -> CN -> CN -- : AP -> CN -> CN
AdjCN ap cn = cn ** { AdjCN ap cn = cn ** {
s = table { NomSg => cn.s ! Indef Sg ; -- When an adjective is added, noun loses case marker. s = table { NomSg => cn.s ! Indef Sg ; -- When an adjective is added, noun loses case marker.
x => cn.s ! x } ; x => cn.s ! x } ;
mod = let conj = if_then_Str cn.hasMod "oo" [] in mod = \\st,n,c =>
\\n,c => cn.mod ! n ! Abs -- If there was something before, it is now in Abs cn.mod ! st ! n ! Abs -- If there was something before, it is now in Abs
++ conj -- If the sentence is already modified, any new modifier needs to be introduced with conjunction ++ andConj st cn.hasMod -- If the sentence is already modified, any new modifier needs to be introduced with conjunction
++ ap.s ! AF n c ; ++ ap.s ! AF n c ;
hasMod = True hasMod = True
} ; } ;
-- : CN -> RS -> CN ; -- : CN -> RS -> CN ;
RelCN cn rs = cn ** { RelCN cn rs = cn ** {
mod = let conj = if_then_Str cn.hasMod "ee" [] in mod = \\st,n,c => --what to do with subject case if there's both adj and RS?
\\n,c => cn.mod ! n ! c ++ conj ++ rs.s ! gender cn ! c ; cn.mod ! st ! n ! Abs
++ andConj st cn.hasMod
++ rs.s ! gender cn ! c ;
hasMod = True ; hasMod = True ;
} ; } ;
@@ -286,4 +287,12 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
-- : Det -> DAP ; -- this (or that) -- : Det -> DAP ; -- this (or that)
DetDAP det = det ; DetDAP det = det ;
-} -}
oper
andConj : State -> Bool -> Str = \st,hasMod ->
case <st,hasMod> of {
<Indefinite,True> => "oo" ;
<Definite,True> => "ee" ;
_ => []
} ;
} }

View File

@@ -13,13 +13,14 @@ oper
Noun3 : Type = Noun ; Noun3 : Type = Noun ;
CNoun : Type = Noun ** { CNoun : Type = Noun ** {
mod : Number => Case => Str ; mod : State -- for conjunctions: oo for indef, ee for def
=> Number => Case => Str ;
hasMod : Bool ; hasMod : Bool ;
isPoss : Bool -- to prevent impossible forms in ComplN2 with Ns that have short possessive, e.g. "father" 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 -> cn2str : Number -> Case -> CNoun -> Str = \n,c,cn ->
cn.s ! Indef n ++ cn.mod ! n ! c ; cn.s ! Indef n ++ cn.mod ! Indefinite ! n ! c ;
PNoun : Type = {s : Str ; a : Agreement} ; PNoun : Type = {s : Str ; a : Agreement} ;
@@ -154,7 +155,7 @@ oper
False => np.s} ; False => np.s} ;
useN : Noun -> CNoun ** BaseNP = \n -> n ** useN : Noun -> CNoun ** BaseNP = \n -> n **
{ mod = \\_,_ => [] ; hasMod = False ; { mod = \\_,_,_ => [] ; hasMod = False ;
a = Sg3 (gender n) ; isPron,isPoss = False ; a = Sg3 (gender n) ; isPron,isPoss = False ;
empty = [] ; st = Indefinite empty = [] ; st = Indefinite
} ; } ;
@@ -896,7 +897,7 @@ oper
wo = wordOrder [] [] {p1,p2=[]} (vp'.comp ! pagr2agr vp.obj2.a) inf vp' ; wo = wordOrder [] [] {p1,p2=[]} (vp'.comp ! pagr2agr vp.obj2.a) inf vp' ;
in wo.beforeSTM ++ wo.afterSTM ; in wo.beforeSTM ++ wo.afterSTM ;
linCN : CNoun -> Str = \cn -> cn.s ! NomSg ++ cn.mod ! Sg ! Abs ; linCN : CNoun -> Str = \cn -> cn.s ! Indef Sg ++ cn.mod ! Indefinite ! Sg ! Abs ;
linAdv : Adverb -> Str = \adv -> linAdv : Adverb -> Str = \adv ->
adv.berri adv.berri
++ adv.sii ++ adv.sii