1
0
forked from GitHub/gf-rgl
Files
gf-rgl/src/bantu/NounBantu.gf
2018-11-29 16:47:13 +03:00

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} ;
}