Files
gf-core/examples/urduhindi/UrduHindi.gf
2007-02-14 14:29:15 +00:00

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