(Pes) Fix bug in DetQuant: "a one N"

This commit is contained in:
Inari Listenmaa
2019-03-20 16:01:55 +01:00
parent 8452076636
commit 24ff11c63d
3 changed files with 24 additions and 12 deletions

View File

@@ -10,7 +10,7 @@ concrete ExtendPes of Extend =
lin lin
-- NP -> Quant ; -- this man's -- NP -> Quant ; -- this man's
GenNP np = np ** { GenNP np = makeQuant [] [] ** np ** {
mod = Ezafe ; -- the possessed will get Ezafe mod = Ezafe ; -- the possessed will get Ezafe
s = \\num,cmpd => np2str np -- possesser is unmarked; https://sites.la.utexas.edu/persian_online_resources/language-specific-grammar/ezfe/ s = \\num,cmpd => np2str np -- possesser is unmarked; https://sites.la.utexas.edu/persian_online_resources/language-specific-grammar/ezfe/
} ; } ;

View File

@@ -119,7 +119,7 @@ oper
--Determiners --Determiners
-------------------- --------------------
BaseQuant : Type = { BaseQuant : Type = {
mod : Mod } ; mod : Mod} ;
Determiner : Type = BaseQuant ** { Determiner : Type = BaseQuant ** {
s : Str ; s : Str ;
@@ -129,7 +129,8 @@ oper
} ; } ;
Quant : Type = BaseQuant ** { Quant : Type = BaseQuant ** {
s : Number => CmpdStatus => Str} ; s : Number => CmpdStatus => Str ;
isDef : Bool } ;
makeDet : Str -> Number -> Bool -> Determiner = \str,n,b -> { makeDet : Str -> Number -> Bool -> Determiner = \str,n,b -> {
s,sp = str; s,sp = str;
@@ -141,6 +142,7 @@ oper
makeQuant : Str -> Str -> Quant = \sg,pl -> { makeQuant : Str -> Str -> Quant = \sg,pl -> {
s = table {Sg => \\_ => sg ; Pl => \\_ => pl} ; s = table {Sg => \\_ => sg ; Pl => \\_ => pl} ;
mod = Bare ; mod = Bare ;
isDef = True
}; };
--------------------------- ---------------------------
-- Adjectives -- Adjectives

View File

@@ -41,17 +41,27 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
s = \\ez => np.s ! Ezafe ++ adv.s s = \\ez => np.s ! Ezafe ++ adv.s
} ; } ;
DetQuantOrd quant num ord = { DetQuantOrd quant num ord =
s = quant.s ! num.n ! NotCmpd ++ num.s ++ ord.s ; let cs : CmpdStatus => Str = case <num.isNum,num.n,quant.isDef> of {
sp = quant.s ! num.n ! IsCmpd ++ num.s ++ ord.s ; -- only matters for PossPron <True,Sg,False> => \\_ => num.s ++ ord.s ;
_ => \\c => quant.s ! num.n ! c ++ num.s ++ ord.s} ;
in {
s = cs ! NotCmpd ;
sp = cs ! IsCmpd ; -- only matters for PossPron
isNum = orB num.isNum ord.isNum ; isNum = orB num.isNum ord.isNum ;
mod = quant.mod ; mod = quant.mod ;
n = num.n n = num.n
} ; } ;
DetQuant quant num = { DetQuant quant num =
s = quant.s ! num.n ! NotCmpd ++ num.s ; let cs : CmpdStatus => Str = case <num.isNum,num.n,quant.isDef> of {
sp = quant.s ! num.n ! IsCmpd ++ num.s ; -- only matters for PossPron <True,Sg,False> => \\_ => num.s ;
_ => \\c => quant.s ! num.n ! c ++ num.s } ;
in {
s = cs ! NotCmpd ;
sp = cs ! IsCmpd ; -- only matters for PossPron
isNum = num.isNum; isNum = num.isNum;
mod = quant.mod ; mod = quant.mod ;
n = num.n n = num.n
@@ -65,7 +75,7 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
relpron = Ance -- TODO check if this works for all Dets relpron = Ance -- TODO check if this works for all Dets
} ; } ;
PossPron p = { PossPron p = DefArt ** {
s = \\_ => table { s = \\_ => table {
NotCmpd => BIND ++ p.ps ; NotCmpd => BIND ++ p.ps ;
IsCmpd => p.s } ; -- is a compound IsCmpd => p.s } ; -- is a compound
@@ -87,8 +97,8 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
OrdSuperl a = {s = a.s ! Bare ++ taryn; n = Sg ; isNum=False ; isPre = True} ; -- check the form of adjective OrdSuperl a = {s = a.s ! Bare ++ taryn; n = Sg ; isNum=False ; isPre = True} ; -- check the form of adjective
DefArt = {s = \\_,_ => [] ; mod = Bare} ; DefArt = makeQuant [] [] ;
IndefArt = {s = table {Sg => \\_ => IndefArticle ; Pl => \\_ => []} ; mod = Bare} ; IndefArt = makeQuant IndefArticle [] ** {isDef = False} ;
MassNP cn = emptyNP ** cn ** { MassNP cn = emptyNP ** cn ** {
s = \\m => cn.s ! Sg ! m ++ cn.compl ! Sg ; s = \\m => cn.s ! Sg ! m ++ cn.compl ! Sg ;