mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-22 11:19:32 -06:00
260 lines
8.6 KiB
Plaintext
260 lines
8.6 KiB
Plaintext
--# -path=.:../abstract:../common:../../prelude
|
|
concrete UrduHindi of UrduHindiAbs = open ResUrdHin, Prelude in {
|
|
flags coding=utf8 ; optimize=all;
|
|
|
|
lincat
|
|
N = {s : NounForm => Str; h1: Gender} ;
|
|
PN = {s : ProperNounForm => Str; h1: Gender} ;
|
|
Adj = {s : AdjForm => Str} ;
|
|
Adj1 = {s : AdjForm1 => Str} ;
|
|
AdjD = {s : AdjDegForm => Str} ;
|
|
Verb_Aux = {s : Verb_AuxForm => Str} ;
|
|
Verb = {s : VerbForm => Str} ;
|
|
Verb1 = {s : VerbForm1 => Str} ;
|
|
Verb2 = {s : VerbForm2 => Str} ;
|
|
Verb3 = {s : VerbForm3 => Str} ;
|
|
RelPron3 = {s : RelPronForm3 => Str} ;
|
|
RelPron2 = {s : RelPronForm2 => Str} ;
|
|
RelPron1 = {s : RelPronForm1 => Str} ;
|
|
RelPron = {s : RelPronForm => Str} ;
|
|
IndefPron2 = {s : IndefPronForm2 => Str} ;
|
|
IndefPron1 = {s : IndefPronForm1 => Str} ;
|
|
IndefPron = {s : IndefPronForm => Str} ;
|
|
InterPron3 = {s : InterrPronForm3 => Str} ;
|
|
InterPron2 = {s : InterrPronForm2 => Str} ;
|
|
InterPron1 = {s : InterrPronForm1 => Str} ;
|
|
InterPron = {s : InterrPronForm => Str} ;
|
|
RefPron = {s : RefPronForm => Str} ;
|
|
PersPron = {s : PersPronForm => Str} ;
|
|
PossPron = {s : PossPronForm => Str} ;
|
|
DemPron = {s : DemPronForm => Str; h1 : Person} ;
|
|
PossPostPos = {s : PossivePostPForm => Str} ;
|
|
Num = { s : NumeralForm => Str ; h1 : Number };
|
|
Adv, Conj, Neg, Quest, Intjunc, PostP, Part = SS ;
|
|
|
|
NP = {s : Case => Str ; n : Number ; p : Person ; g : Gender } ;
|
|
CN = {s : Number => Case => Str ; g : Gender} ;
|
|
VP = {s : Tense_Aux => Person => Number => Gender=> Str} ;
|
|
S = {s: Str};
|
|
|
|
lin
|
|
--VP
|
|
--UseV : Verb_Aux -> VP;
|
|
UseV va = { s = \\t,p,n,g => va.s ! VA t p n g };
|
|
|
|
|
|
--UseVVAux : Verb -> Verb_Aux -> VP;
|
|
UseVVAux v va =
|
|
{ s = \\t,p,n,g => v.s ! Inf ++ va.s ! VA t p n g
|
|
};
|
|
|
|
|
|
--UseN x = x;
|
|
UseN x =
|
|
{ s = \\n,c => x.s ! NF n c ;
|
|
g = x.h1
|
|
} ;
|
|
|
|
DetN_Pers1 pron cn =
|
|
{ s = \\n,c => pron.s ! PossF n Pers1 cn.g ++ cn.s ! n ! c ;
|
|
g = cn.g
|
|
} ;
|
|
DetN_Pers2Casual pron cn =
|
|
{ s = \\n,c => pron.s ! PossF n Pers2_Casual cn.g ++ cn.s ! n ! c ;
|
|
g = cn.g
|
|
} ;
|
|
DetN_Pers2Familiar pron cn =
|
|
{ s = \\n,c => pron.s ! PossF n Pers2_Familiar cn.g ++ cn.s ! n ! c ;
|
|
g = cn.g
|
|
} ;
|
|
DetN_Pers2Respect pron cn =
|
|
{ s = \\n,c => pron.s ! PossF n Pers2_Respect cn.g ++ cn.s ! n ! c ;
|
|
g = cn.g
|
|
} ;
|
|
DetN_Pers3Near pron cn =
|
|
{ s = \\n,c => pron.s ! PossF n Pers3_Near cn.g ++ cn.s ! n ! c ;
|
|
g = cn.g
|
|
} ;
|
|
DetN_Pers3Distant pron cn =
|
|
{ s = \\n,c => pron.s ! PossF n Pers3_Distant cn.g ++ cn.s ! n ! c ;
|
|
g = cn.g
|
|
} ;
|
|
|
|
|
|
--DetCN3 : CN -> NP;
|
|
DetCN3Sg cn =
|
|
{ s = \\c => case c of {
|
|
Nom => cn.s ! Sg ! Nom ;
|
|
Obl => cn.s ! Sg ! Obl ;
|
|
Voc => []
|
|
};
|
|
n = Sg;
|
|
p = Pers3_Near ; --does not mean any thing
|
|
g = cn.g
|
|
} ;
|
|
DetCN3Pl cn =
|
|
{ s = \\c => case c of {
|
|
Nom => cn.s ! Pl ! Nom ;
|
|
Obl => cn.s ! Pl ! Obl ;
|
|
Voc => []
|
|
};
|
|
n = Pl ;
|
|
p = Pers3_Near ; --does not mean any thing
|
|
g = cn.g
|
|
} ;
|
|
|
|
DetCN num cn =
|
|
{ s = \\c => case c of {
|
|
Nom => num.s ! NumeralF ++ cn.s ! num.h1 ! Nom ;
|
|
Obl => num.s ! NumeralF ++ cn.s ! num.h1 ! Obl ;
|
|
Voc => []
|
|
};
|
|
n = num.h1;
|
|
p = Pers3_Near ;
|
|
g = cn.g
|
|
} ;
|
|
|
|
DetCN1Sg wo cn =
|
|
{ s = \\c => case c of {
|
|
Nom => wo.s ! DPF Sg Nom ++ cn.s ! Sg ! Nom ;
|
|
Obl => [] ;
|
|
Voc => []
|
|
|
|
};
|
|
n = Sg;
|
|
p = wo.h1 ;
|
|
g = cn.g
|
|
} ;
|
|
|
|
DetCN1Pl wo cn =
|
|
{ s = \\c => case c of {
|
|
Nom => wo.s ! DPF Pl Nom ++ cn.s ! Pl ! Nom ;
|
|
Obl => [] ;
|
|
Voc => []
|
|
};
|
|
n = Pl;
|
|
p = wo.h1 ;
|
|
g = cn.g
|
|
} ;
|
|
-- wh ayk ktab
|
|
DetCN2 wo num cn =
|
|
{ s = \\c => case c of {
|
|
Nom => wo.s ! DPF num.h1 Nom ++ num.s ! NumeralF ++ cn.s ! num.h1 ! Nom ;
|
|
Obl => wo.s ! DPF num.h1 Obl ++ num.s ! NumeralF ++ cn.s ! num.h1 ! Obl ;
|
|
Voc => []
|
|
};
|
|
n = num.h1;
|
|
p = wo.h1 ;
|
|
g = cn.g
|
|
} ;
|
|
|
|
UsePN pn =
|
|
{ s = \\c => pn.s ! PNF c ;
|
|
n = Sg ;
|
|
p = Pers3_Near ; --could be Pers3_distant, does not really matter
|
|
g = pn.h1
|
|
} ;
|
|
UsePN1 wo pn =
|
|
{ s = \\c => wo.s ! DPF Sg Nom ++ pn.s ! PNF c ;
|
|
n = Sg ;
|
|
p = wo.h1 ;
|
|
g = pn.h1
|
|
} ;
|
|
|
|
|
|
--UsePron : PersPron -> NP
|
|
UsePronSgP1M pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers1 c ; n = Sg ; p = Pers1 ; g = Masc };
|
|
UsePronSgP1F pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers1 c ; n = Sg ; p = Pers1 ; g = Fem };
|
|
UsePronPlP1M pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers1 c ; n = Pl ; p = Pers1 ; g = Masc };
|
|
UsePronPlP1F pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers1 c ; n = Pl ; p = Pers1 ; g = Fem };
|
|
UsePronSgP2CM pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers2_Casual c ; n = Sg ; p = Pers2_Casual ; g = Masc };
|
|
UsePronSgP2CF pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers2_Casual c ; n = Sg ; p = Pers2_Casual ; g = Fem };
|
|
UsePronPlP2CM pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers2_Casual c ; n = Pl ; p = Pers2_Casual ; g = Masc };
|
|
UsePronPlP2CF pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers2_Casual c ; n = Pl ; p = Pers2_Casual ; g = Fem };
|
|
UsePronSgP2FM pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers2_Familiar c ; n = Sg ; p = Pers2_Familiar ; g = Masc };
|
|
UsePronSgP2FF pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers2_Familiar c ; n = Sg ; p = Pers2_Familiar ; g = Fem };
|
|
UsePronPlP2FM pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers2_Familiar c ; n = Pl ; p = Pers2_Familiar ; g = Masc };
|
|
UsePronPlP2FF pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers2_Familiar c ; n = Pl ; p = Pers2_Familiar ; g = Fem };
|
|
UsePronSgP2RM pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers2_Respect c ; n = Sg ; p = Pers2_Respect ; g = Masc };
|
|
UsePronSgP2RF pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers2_Respect c ; n = Sg ; p = Pers2_Respect ; g = Fem };
|
|
UsePronPlP2RM pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers2_Respect c ; n = Pl ; p = Pers2_Respect ; g = Masc };
|
|
UsePronPlP2RF pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers2_Respect c ; n = Pl ; p = Pers2_Respect ; g = Fem };
|
|
UsePronSgP3NM pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers3_Near c ; n = Sg ; p = Pers3_Near ; g = Masc };
|
|
UsePronSgP3NF pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers3_Near c ; n = Sg ; p = Pers3_Near ; g = Fem };
|
|
UsePronPlP3NM pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers3_Near c ; n = Pl ; p = Pers3_Near ; g = Masc };
|
|
UsePronPlP3NF pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers3_Near c ; n = Pl ; p = Pers3_Near ; g = Fem };
|
|
UsePronSgP3DM pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers3_Distant c ; n = Sg ; p = Pers3_Distant ; g = Masc };
|
|
UsePronSgP3DF pp =
|
|
{ s = \\c => pp.s ! PPF Sg Pers3_Distant c ; n = Sg ; p = Pers3_Distant ; g = Fem };
|
|
UsePronPlP3DM pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers3_Distant c ; n = Pl ; p = Pers3_Distant ; g = Masc };
|
|
UsePronPlP3DF pp =
|
|
{ s = \\c => pp.s ! PPF Pl Pers3_Distant c ; n = Pl ; p = Pers3_Distant ; g = Fem };
|
|
|
|
|
|
UsePastS np va = { s = np.s ! Nom ++ va.s ! Past ! np.p ! np.n ! np.g } ;
|
|
UsePresS np va = { s = np.s ! Nom ++ va.s ! Present ! np.p ! np.n ! np.g } ;
|
|
UseFutS np va = { s = np.s ! Nom ++ va.s ! Future ! np.p ! np.n ! np.g } ;
|
|
|
|
UseNPSg np cn = {
|
|
s = \\c => np.s ! Obl ++ "کو" ++ cn.s ! Sg ! c ;
|
|
n = Sg;
|
|
p = Pers3_Near ;
|
|
g = cn.g
|
|
};
|
|
|
|
UseNPPl np cn = {
|
|
s = \\c => np.s ! Obl ++ "کو" ++ cn.s ! Pl ! c ;
|
|
n = Pl;
|
|
p = Pers3_Near ;
|
|
g = cn.g
|
|
};
|
|
|
|
UsePronVVAuxPast np vp = {
|
|
s = np.s ! Obl ++ "کو" ++ vp.s ! Past ! np.p ! np.n ! np.g
|
|
};
|
|
UsePronVVAuxPres np vp = {
|
|
s = np.s ! Obl ++ "کو" ++ vp.s ! Present ! np.p ! np.n ! np.g
|
|
};
|
|
UsePronVVAuxFut np vp = {
|
|
s = np.s ! Obl ++ "کو" ++ vp.s ! Future ! np.p ! np.n ! np.g
|
|
};
|
|
|
|
UseSPast np vp = {
|
|
s = np.s ! Nom ++ vp.s ! Past ! np.p ! np.n ! np.g
|
|
};
|
|
|
|
--Present
|
|
UseSPres np vp = {
|
|
s = np.s ! Nom ++ vp.s ! Present ! np.p ! np.n ! np.g
|
|
};
|
|
|
|
--Future
|
|
UseSFut np vp = {
|
|
s = np.s ! Nom ++ vp.s ! Future ! np.p ! np.n ! np.g
|
|
};
|
|
|
|
UseS s1 conj s2 = {s = s1.s ++ conj.s ++ s2.s};
|
|
}
|