1
0
forked from GitHub/gf-rgl

generalize DAP

This commit is contained in:
Krasimir Angelov
2018-06-26 18:09:11 +02:00
parent a730a3194b
commit 0df8c34e1d
14 changed files with 123 additions and 64 deletions

View File

@@ -22,15 +22,37 @@ resource MorphoBul = ResBul ** open
oper
--2 Determiners
mkDeterminerSg = overload {
mkDeterminerSg : Str -> Str -> Str -> {s : Bool => AGender => Role => Str; nn : NNumber; spec : Species; p : Polarity} = \vseki,vsiaka,vsiako ->
{s = \\_,g,_ => table AGender [vseki;vseki;vsiaka;vsiako] ! g; nn = NNum Sg; spec = Indef; p = Pos} ;
mkDeterminerSg : Str -> Str -> Str -> Str -> Str -> Str -> {s : Bool => AGender => Role => Str; nn : NNumber; spec : Species; p : Polarity} = \vseki,vsiaka,vsiako,vseki',vsiaka',vsiako' ->
{s = \\sp,g,_ => case sp of {
True => table AGender [vseki; vseki; vsiaka; vsiako ] ! g;
False => table AGender [vseki';vseki';vsiaka';vsiako'] ! g
};
nn = NNum Sg;
spec = Indef;
p = Pos
} ;
} ;
mkDeterminerPl = overload {
mkDeterminerPl : Str -> {s : Bool => AGender => Role => Str ; nn : NNumber ; spec : Species; p : Polarity} = \vsicki ->
{s = \\_,_,_ => vsicki; nn = NNum Pl; spec = Indef; p = Pos} ;
mkDeterminerPl : Str -> Str -> Str -> Str -> {s : Bool => AGender => Role => Str ; nn : NNumber ; spec : Species; p : Polarity} = \i_dvamata,i_dvata,i_dvete,i_dvete_neut ->
{s = \\_,g,_ => table AGender [i_dvamata;i_dvata;i_dvete;i_dvete_neut] ! g; nn = NNum Pl; spec = Indef; p = Pos} ;
mkDeterminerPl : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> {s : Bool => AGender => Role => Str ; nn : NNumber ; spec : Species; p : Polarity} = \i_dvamata,i_dvata,i_dvete,i_dvete_neut,i_dvamata',i_dvata',i_dvete',i_dvete_neut' ->
{s = \\sp,g,_ => case sp of {
True => table AGender [i_dvamata; i_dvata; i_dvete; i_dvete_neut ] ! g;
False => table AGender [i_dvamata';i_dvata';i_dvete';i_dvete_neut'] ! g
};
nn = NNum Pl;
spec = Indef;
p = Pos
} ;
} ;
mkQuant = overload {
mkQuant : Str -> Str -> Str -> Str -> {s : Bool => AForm => Str; nonEmpty : Bool; spec : Species; p : Polarity} = \tozi,tazi,towa,tezi ->
{ s = \\_ => table {
ASg Masc _ => tozi ;
@@ -44,6 +66,29 @@ oper
p = Pos
} ;
mkQuant : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> {s : Bool => AForm => Str; nonEmpty : Bool; spec : Species; p : Polarity} = \tozi,tazi,towa,tezi,tozi',tazi',towa',tezi' ->
{ s = table {
True => table {
ASg Masc _ => tozi ;
ASgMascDefNom => tozi ;
ASg Fem _ => tazi ;
ASg Neut _ => towa ;
APl _ => tezi
} ;
False => table {
ASg Masc _ => tozi' ;
ASgMascDefNom => tozi' ;
ASg Fem _ => tazi' ;
ASg Neut _ => towa' ;
APl _ => tezi'
}
} ;
nonEmpty = True ;
spec = Indef ;
p = Pos
} ;
} ;
--2 Verbs
mkVerb : (_,_,_,_,_,_,_,_,_,_:Str) -> VTable =

View File

@@ -236,9 +236,5 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in {
spec = dap.spec;
p = dap.p
} ;
DetDAP det = {s = \\sp,g,role => det.s ! sp ! g ! role;
nn = det.nn;
spec = det.spec;
p = det.p
} ;
DetDAP det = det ;
}

View File

@@ -70,13 +70,12 @@ concrete CatEng of Cat = CommonX - [Pol,SC] ** open ResEng, Prelude in {
-- sp Nom | Poss. pron. (subj.) | mine
-- sp Gen | Poss. pron. (obj.) | mine's
Pron = {s : NPCase => Str ; sp : Case => Str ; a : Agr} ;
Det = {s : Str ; sp : NPCase => Str ; n : Number ; hasNum : Bool} ;
DAP, Det = {s : Str ; sp : Gender => Bool => NPCase => Str ; n : Number ; hasNum : Bool} ;
Predet = {s : Str} ;
Ord = { s : Case => Str } ;
Num = {s : Case => Str ; n : Number ; hasCard : Bool} ;
Card = {s : Case => Str ; n : Number} ;
Quant = {s : Bool => Number => Str ; sp : Bool => Number => NPCase => Str} ;
DAP = {s : Str ; n : Number} ;
Quant = {s : Bool => Number => Str ; sp : Gender => Bool => Number => NPCase => Str} ;
-- Numeral

View File

@@ -26,7 +26,7 @@ concrete ConjunctionEng of Conjunction =
ConjCN co ns = conjunctDistrTable2 Number Case co ns ** {g = Neutr} ; --- gender?
ConjDet c xs = let cxs = (conjunctDistrSS c xs).s in {s = cxs ; sp = \\_ => cxs ++ "one" ; hasNum = False ; n = xs.n} ;
ConjDet c xs = let cxs = (conjunctDistrSS c xs).s in {s = cxs ; sp = \\_,_,_ => cxs ++ "one" ; hasNum = False ; n = xs.n} ;
-- These fun's are generated from the list cat's.

View File

@@ -19159,7 +19159,7 @@ lin everlasting_N = mkN "everlasting" ;
lin everlastingness_N = mkN "everlastingness" ;
lin evermore_Adv = mkAdv "evermore";
lin eversion_N = mkN "eversion" ;
lin every_Det = mkDeterminerSpec singular "every" "everyone" False ;
lin every_Det = mkDeterminerSpec singular "every" "everyone" "everything" False ;
lin everybody_NP = mkNP "everybody" "everybody" "everybody's" singular P3 human;
lin everyday_A = compoundA (mkA "everyday");
lin everyman_N = mkN "everyman" ;

View File

@@ -10,7 +10,7 @@ concrete ExtendEng of Extend =
MkVPS2, ConjVPS2, ComplVPS2, MkVPI2, ConjVPI2, ComplVPI2,
Base_nr_RNP, Base_rn_RNP, Base_rr_RNP, ByVP, CompBareCN,
CompIQuant, CompQS, CompS, CompVP, ComplBareVS, ComplGenVV, ComplSlashPartLast, ComplVPSVV, CompoundAP,
CompoundN, ConjRNP, ConjVPS, ConsVPS, Cons_nr_RNP, Cons_rr_RNP, DetNPFem, EmbedPresPart, EmptyRelSlash,
CompoundN, ConjRNP, ConjVPS, ConsVPS, Cons_nr_RNP, Cons_rr_RNP, DetNPMasc, DetNPFem, EmbedPresPart, EmptyRelSlash,
ExistsNP, ExistCN, ExistMassCN, ExistPluralCN,
FocusAP, FocusAdV, FocusAdv, FocusObj, GenIP, GenModIP, GenModNP, GenNP, GenRP,
GerundAdv, GerundCN, GerundNP, IAdvAdv, ICompAP, InOrderToVP, MkVPS, NominalizeVPSlashNP,
@@ -30,7 +30,7 @@ concrete ExtendEng of Extend =
ParadigmsEng in {
lin
GenNP np = {s = \\_,_ => np.s ! npGen ; sp = \\_,_,_ => np.s ! npGen} ;
GenNP np = {s = \\_,_ => np.s ! npGen ; sp = \\_,_,_,_ => np.s ! npGen} ;
GenIP ip = {s = \\_ => ip.s ! NCase Gen} ;
GenRP nu cn = {
s = \\c => "whose" ++ nu.s ! Nom ++
@@ -59,12 +59,12 @@ concrete ExtendEng of Extend =
} ;
DetNPMasc det = {
s = det.sp ;
s = det.sp ! Masc ! False ;
a = agrgP3 det.n Masc
} ;
DetNPFem det = {
s = det.sp ;
s = det.sp ! Fem ! False ;
a = agrgP3 det.n Fem
} ;

View File

@@ -2,7 +2,7 @@ concrete ExtraEng of ExtraEngAbs = CatEng **
open ResEng, Coordination, Prelude, MorphoEng, ParadigmsEng in {
lin
GenNP np = {s = \\_,_ => np.s ! npGen ; sp = \\_,_,_ => np.s ! npGen} ;
GenNP np = {s = \\_,_ => np.s ! npGen ; sp = \\_,_,_,_ => np.s ! npGen} ;
GenIP ip = {s = \\_ => ip.s ! NCase Gen} ;
GenRP nu cn = {
s = \\c => "whose" ++ nu.s ! Nom ++

View File

@@ -17,12 +17,12 @@ resource MorphoEng = open Prelude, (Predef=Predef), ResEng in {
oper
mkDeterminer : Number -> Str ->
{s : Str ; sp : NPCase => Str; n : Number ; hasNum : Bool} = \n,s -> mkDeterminerSpec n s s False ; --- was True!?
{s : Str ; sp : Gender => Bool => NPCase => Str; n : Number ; hasNum : Bool} = \n,s -> mkDeterminerSpec n s s s False ; --- was True!?
mkDeterminerSpec : Number -> Str -> Str -> Bool ->
{s : Str ; sp : NPCase => Str; n : Number ; hasNum : Bool} = \n,s,sp,hasNum ->
mkDeterminerSpec : Number -> Str -> Str -> Str -> Bool ->
{s : Str ; sp : Gender => Bool => NPCase => Str; n : Number ; hasNum : Bool} = \n,s,sp1,sp2,hasNum ->
{s = s;
sp = \\c => regGenitiveS sp ! npcase2case c ;
sp = \\g,hasAdj,c => regGenitiveS (case g of {Masc=>sp1; Fem=>sp1; Neutr=>sp2}) ! npcase2case c ;
n = n ;
hasNum = hasNum ; --- doesn't matter when s = sp
} ;

View File

@@ -38,8 +38,8 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in {
DetQuant quant num = {
s = quant.s ! num.hasCard ! num.n ++ num.s ! Nom;
sp = \\c => case num.hasCard of {
False => quant.sp ! num.hasCard ! num.n ! c ++ num.s ! Nom ;
sp = \\g,hasAdj,c => case num.hasCard of {
False => quant.sp ! g ! (orB hasAdj num.hasCard) ! num.n ! c ++ num.s ! Nom ;
True => quant.s ! num.hasCard ! num.n ++ num.s ! npcase2case c
} ;
n = num.n ;
@@ -48,25 +48,27 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in {
DetQuantOrd quant num ord = {
s = quant.s ! num.hasCard ! num.n ++ num.s ! Nom ++ ord.s ! Nom;
sp = \\c => quant.s ! num.hasCard ! num.n ++ num.s ! Nom ++ ord.s ! npcase2case c ;
sp = \\g,_,c => quant.s ! num.hasCard ! num.n ++ num.s ! Nom ++ ord.s ! npcase2case c ;
n = num.n ;
hasNum = True
} ;
DetNP det = {
-- s = case det.hasNum of {True => \\_ => det.s ; _ => \\c => det.sp ! c} ;
s = det.sp ;
s = det.sp ! Neutr ! False ;
a = agrP3 det.n
} ;
PossPron p = {
s = \\_,_ => p.s ! NCase Gen ;
sp = \\_,_,c => p.sp ! npcase2case c
sp = \\_,hasAdj,_,c => case hasAdj of {
True => p.s ! NCase Gen ;
False => p.sp ! npcase2case c
}
} ;
NumSg = {s = \\c => []; n = Sg ; hasCard = False} ;
NumPl = {s = \\c => []; n = Pl ; hasCard = False} ;
---b NoOrd = {s = []} ;
NumCard n = n ** {hasCard = True} ;
@@ -84,8 +86,8 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in {
DefArt = {
s = \\hasCard,n => artDef ;
sp = \\hasCard,n => case <n,hasCard> of {
<Sg,False> => table { NCase Gen => "its"; _ => "it" } ;
sp = \\g,hasCard,n => case <n,hasCard> of {
<Sg,False> => table { NCase Gen => table Gender ["its"; "his"; "her"] ! g; _ => table Gender ["it"; "he"; "she"] ! g } ;
<Pl,False> => table { NCase Nom => "they"; NPAcc => "them"; _ => "theirs" } ;
_ => \\c => artDef
}
@@ -96,7 +98,7 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in {
<Sg,False> => artIndef ;
_ => []
} ;
sp = \\hasCard,n => case <n,hasCard> of {
sp = \\g,hasCard,n => case <n,hasCard> of {
<Sg,False> => table {NCase Gen => "one's"; _ => "one" };
<Pl,False> => table {NCase Gen => "ones'"; _ => "ones" } ;
_ => \\c => []
@@ -150,15 +152,20 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in {
PartNP cn np = {s = \\n,c => cn.s ! n ! c ++ "of" ++ np.s ! NPAcc ; g = cn.g} ;
CountNP det np = {
s = \\c => det.sp ! c ++ "of" ++ np.s ! NPAcc ;
s = \\c => det.sp ! Neutr ! False ! c ++ "of" ++ np.s ! NPAcc ;
a = agrP3 det.n
} ;
AdjDAP det ap = {
s = det.s ++ ap.s ! agrgP3 det.n Masc ; --- post-ap's ? "this larger than life (movie)"
n = det.n ;
AdjDAP dap ap = {
s = dap.s ++ ap.s ! agrgP3 dap.n Masc ; --- post-ap's ? "this larger than life (movie)"
sp = \\g,_,c => case c of {
NCase Gen => dap.sp ! g ! True ! NCase Nom ++ ap.s ! agrgP3 dap.n g ++ BIND ++ "'s" ;
c => dap.sp ! g ! True ! c ++ ap.s ! agrgP3 dap.n g
} ;
n = dap.n ;
hasNum = dap.hasNum
} ;
DetDAP d = d ; -- forgetting sp and hasNumber
DetDAP d = d ;
}

View File

@@ -434,15 +434,16 @@ mkInterj : Str -> Interj
nounPN n = lin PN {s = n.s ! singular ; g = n.g} ;
mkQuant = overload {
mkQuant : (this, these : Str) -> Quant = \sg,pl -> mkQuantifier sg pl sg pl;
mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant = mkQuantifier;
mkQuant : (this, these : Str) -> Quant = \sg,pl -> mkQuantifier sg pl sg pl sg pl;
mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant = \sg,pl,sg',pl' -> mkQuantifier sg pl sg' pl' sg' pl';
} ;
mkQuantifier : Str -> Str -> Str -> Str -> Quant =
\sg,pl,sg',pl' -> lin Quant {
mkQuantifier : Str -> Str -> Str -> Str -> Str -> Str -> Quant =
\sg,pl,sg1',pl1',sg2',pl2' -> lin Quant {
s = \\_ => table { Sg => sg ; Pl => pl } ;
sp = \\_ => table {
Sg => \\c => regGenitiveS sg' ! npcase2case c ; Pl => \\c => regGenitiveS pl' ! npcase2case c}
sp = \\g,_ => table {
Sg => \\c => regGenitiveS (case g of {Masc=>sg1'; Fem=>sg1'; Neutr=>sg2'}) ! npcase2case c ;
Pl => \\c => regGenitiveS (case g of {Masc=>pl1'; Fem=>pl1'; Neutr=>pl2'}) ! npcase2case c}
} ;
mkOrd : Str -> Ord = \x -> lin Ord { s = regGenitiveS x};

View File

@@ -54,7 +54,7 @@ concrete StructuralEng of Structural = CatEng **
during_Prep = mkPrep "during" ;
either7or_DConj = mkConj "either" "or" singular ;
everybody_NP = regNP "everybody" singular ;
every_Det = mkDeterminerSpec singular "every" "everyone" False ;
every_Det = mkDeterminerSpec singular "every" "everyone" "everything" False ;
everything_NP = regNP "everything" singular ;
everywhere_Adv = mkAdv "everywhere" ;
few_Det = mkDeterminer plural "few" ;

View File

@@ -75,13 +75,12 @@ incomplete concrete CatScand of Cat =
CN = {s : Number => DetSpecies => Case => Str ; g : NGender ; isMod : Bool} ;
NP = {s : NPForm => Str ; a : Agr ; isPron : Bool} ;
Pron = {s : NPForm => Str ; a : Agr} ;
Det = {s,sp : Bool => NGender => Str ; n : Number ; det : DetSpecies} ;
Det,DAP = {s,sp : Bool => NGender => Str ; n : Number ; det : DetSpecies} ;
Quant = {s,sp : Number => Bool => Bool => NGender => Str ; det : DetSpecies} ;
Predet = {s : Gender => Number => Str ; p : Str ; a : PredetAgr} ;
Num = {s : NGender => Str ; isDet : Bool ; n : Number} ;
Card = {s : NGender => Str ; n : Number} ;
Ord = {s : Str} ;
DAP = {s : Bool => NGender => Str ; n : Number ; det : DetSpecies} ;
-- Numeral

View File

@@ -254,11 +254,11 @@ incomplete concrete NounScand of Noun =
} ;
AdjDAP det ap = {
s = \\b,g => det.s ! b ! g ++ ap.s ! agrAdj (gennum (ngen2gen g) det.n) det.det ;
s,sp = \\b,g => det.s ! b ! g ++ ap.s ! agrAdj (gennum (ngen2gen g) det.n) det.det ;
n = det.n ;
det= det.det ;
} ;
DetDAP d = d ; -- forgetting sp
DetDAP d = d ;
}

View File

@@ -29,6 +29,18 @@ oper
det = DIndef
} ;
mkQuantSpec : Str -> Str -> Str -> Str -> Str -> Str -> Quant = \naagon,naagot,naagra,naagon',naagot',naagra' ->
lin Quant {s = table {
Sg => \\_,_ => table {Utr => naagon ; Neutr => naagot} ;
Pl => \\_,_,_ => naagra
} ;
sp= table {
Sg => \\_,_ => table {Utr => naagon' ; Neutr => naagot'} ;
Pl => \\_,_,_ => naagra'
} ;
det = DIndef
} ;
mkDet = overload {
mkDet : Str -> Det
= \s -> lin Det {s,sp = \\_,_ => s ; n = P.singular ; det = DDef Indef} ;