forked from GitHub/gf-rgl
175 lines
5.0 KiB
Plaintext
175 lines
5.0 KiB
Plaintext
incomplete concrete NounBantu of Noun =
|
|
-- HL: Structural added for part_Prep, possess_Prep; contains Cat
|
|
CatBantu ** open Structural, ResBantu, Prelude in {
|
|
|
|
flags optimize=all_subs ; coding = utf8 ;
|
|
|
|
lin
|
|
-- Det -> CN -> NP
|
|
-- e.g. 'the man'
|
|
|
|
DetCN det cn =let g = cn.g ; n = det.n in {
|
|
s = \\c => det.s!Sub ++ cn.s ! det.n !npcase2case c ++ det.s!Obj g ++ cn.s2!det.n;
|
|
a =Ag cn.g det.n P3 ;
|
|
} ;
|
|
|
|
|
|
-- PN -> NP
|
|
-- e.g. 'John'
|
|
UsePN pn = {s = \\c => pn.s !npcase2case c ; a = Ag pn.g Sg P3 } ;
|
|
-- Pron -> NP
|
|
-- e.g. 'he'
|
|
UsePron pron = let agr = verbAgr pron.a;
|
|
n=agr.n; g=agr.g
|
|
in {s = table {
|
|
NCase c => pron.s!Pers ;
|
|
|
|
NPoss => pron.s!Poss n g };
|
|
|
|
a = Ag agr.g agr.n agr.p;
|
|
} ;
|
|
-- Predet -> NP -> NP
|
|
-- e.g. 'only the man'
|
|
|
|
PredetNP pred np =
|
|
let agr = predetAgr np.a in {
|
|
s = \\c => np.s ! NCase Nom ++ pred.s ! agr.g ;
|
|
a =Ag agr.g Pl P3 ;
|
|
} ;
|
|
|
|
{-} PPartNP np v2 = {
|
|
s = \\c => np.s ! c ++ v2.s ! VPPart ;
|
|
a = np.a
|
|
} ;
|
|
-}
|
|
RelNP np rs = {
|
|
s = \\c => np.s ! NCase Nom ++ frontComma ++ rs.s ! np.a ++ finalComma ;
|
|
a = np.a
|
|
} ;
|
|
-- NP -> Adv -> NP
|
|
-- e.g. 'Paris today'
|
|
AdvNP np adv = {
|
|
s = \\c => np.s ! NCase Nom ++ adv.s ;
|
|
a = np.a
|
|
} ;
|
|
|
|
ExtAdvNP np adv = {
|
|
s = \\c => np.s ! NCase Nom ++ embedInCommas adv.s ;
|
|
a = np.a
|
|
} ;
|
|
|
|
DetQuant quant num = { s = table{ Sub => [];
|
|
Obj g=>quant.s ! num.n! g ++ num.s !g };
|
|
n = num.n } ;
|
|
|
|
DetQuantOrd quant num ord ={ s = table{ Sub => [];
|
|
Obj g=>quant.s ! num.n! g ++ num.s! g ++ ord.s ! g };
|
|
n = num.n } ;
|
|
DetNP det = { s = \\c => det.s!Obj G1 ;
|
|
a = agrP3 G1 det.n } ;
|
|
|
|
PossPron pron = { s = \\n,g => pron.s!Poss n g } ;
|
|
|
|
NumSg = {s = \\_ => []; n = Sg };--; hasCard = False} ;
|
|
NumPl = {s = \\_ => []; n = Pl };--; hasCard = False} ;
|
|
--b NoOrd = {s = []} ;
|
|
|
|
NumCard n = n ;--** {hasCard = True} ;
|
|
|
|
NumDigits n = {s = n.s ! NCard ; n = n.n} ;
|
|
OrdDigits n = { s = n.s ! NOrd} ;
|
|
|
|
NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ;
|
|
OrdNumeral numeral = {s = numeral.s ! NOrd} ;
|
|
|
|
AdNum adn num = {s = \\g => adn.s ++ num.s!g ; n = num.n} ;
|
|
|
|
OrdSuperl a ={s = \\g => a.s! AAdj g Sg ++ superVery} ;-- find how to include plular
|
|
|
|
OrdNumeralSuperl n a = {s = \\g => n.s ! NOrd !g ++ a.s !AAdj g Sg } ;--what PL
|
|
-- DefArt = { s = \\n,g => []} ; --what PL
|
|
IndefArt, DefArt = { s = \\n,g =>[] } ;
|
|
--IndefArt = {s = \\ n,g => artIndef } ;
|
|
|
|
-- CN -> NP
|
|
MassNP cn = let g = cn.g ; n = Sg | Pl in {
|
|
s = \\c => cn.s ! n! npcase2case c;
|
|
a = Ag g n P3 ;
|
|
} ;
|
|
UseN n = { s = n.s ; s2 = \\_ => [] ; g = n.g} ; --n
|
|
UseN2 n = { s = n.s ; s2 = \\_ => [] ; g = n.g} ;--n ;
|
|
UseN3 n = { s = n.s ; s2 = \\_ => [] ; g = n.g} ; --n ;
|
|
|
|
Use2N3 f = {
|
|
s = \\n,c => f.s ! n ! Nom ;
|
|
s2 = \\_ => [] ;
|
|
g = f.g ;
|
|
c2 = f.c2
|
|
} ;
|
|
|
|
Use3N3 f = {
|
|
s = \\n,c => f.s ! n ! Nom ;
|
|
s2 = \\_ => [] ;
|
|
g = f.g ;
|
|
c2 = f.c3
|
|
} ;
|
|
|
|
ComplN2 n2 np = {s = \\n,c => n2.s ! n ! Nom ++ n2.c2.s!n!n2.g ++ np.s ! NCase Nom ;
|
|
s2 = \\_ => [] ;
|
|
g = n2.g
|
|
};
|
|
ComplN3 n3 np = {
|
|
s = \\n,c => n3.s ! n ! Nom ++ n3.c2.s!n!n3.g ++ np.s ! NCase Nom;
|
|
g = n3.g ;
|
|
c2 = n3.c3
|
|
} ;
|
|
|
|
AdjCN ap cn = {s = cn.s ; g = cn.g;
|
|
s2 = \\n =>cn.s2! n ++ ap.s ! cn.g ! n} ;
|
|
|
|
RelCN cn rs = {
|
|
s = \\n,c => cn.s ! n ! Nom ++ rs.s ! Ag cn.g n P3 ; s2 =\\n => []; --another persons
|
|
g = cn.g
|
|
} ;
|
|
-- AP -> CN -> CN
|
|
-- e.g. 'big house'
|
|
AdvCN cn ad = {s = \\n,c => cn.s ! n ! Nom ++ ad.s ;s2 =\\n => []; g = cn.g} ;
|
|
|
|
SentCN cn sc = {s = \\n,c => cn.s ! n ! Nom ++ sc.s ; s2 =\\n => []; g = cn.g} ;
|
|
|
|
-- ApposCN cn np = {s = \\n,c => cn.s ! n ! Nom ++ np.s ! NCase Nom ; s2 =\\n => []; g = cn.g} ;
|
|
|
|
-- PossNP : CN -> NP -> CN
|
|
-- e.g. 'house of Paris', 'house of mine'
|
|
PossNP cn np =let agr = detAgr np.a in
|
|
|
|
{s = \\n,c => cn.s ! n ! Nom ++ possess_Prep.s! n!cn.g ++ np.s ! NPoss;
|
|
s2 =\\n => []; g = cn.g} ;
|
|
-- PartNP : CN -> NP -> CN
|
|
-- e.g. 'glass of wine'
|
|
PartNP cn np = {s = \\n,c => cn.s ! n ! Nom ++ part_Prep.s! n!cn.g ++ np.s ! NCase Nom ; s2 =\\n => []; g = cn.g} ;
|
|
|
|
|
|
-- CountNP : Det -> NP -> NP
|
|
-- e.g. 'three of them', 'some of the boys'
|
|
CountNP det np = let agr = verbAgr np.a
|
|
in {
|
|
s = \\c => det.s!Obj agr.g ++ part_Prep.s!agr.n!agr.g ++ np.s!c ;--NPAcc was removed
|
|
a = Ag agr.g agr.n agr.p
|
|
} ;
|
|
|
|
|
|
AdjDAP det ap = { s = table{ Sub => [] ;
|
|
Obj g =>det.s!Obj g ++ ap.s!g !det.n};
|
|
n = det.n };
|
|
|
|
DetDAP d = { s=d.s; n=d.n };
|
|
|
|
|
|
-- ApposCN cn np = let agr = complAgr np.a in
|
|
-- {s = \\n,c => np.s ! NCase Nom --++ possess_Prep.s!n!agr.g
|
|
-- ++ cn.s !n ! Nom ; s2 =\\n => ""; g = cn.g} ;
|
|
|
|
|
|
}
|