Hindi and Urdu as refactored to Hindustani by Shafqat

This commit is contained in:
aarne
2010-11-24 13:20:31 +00:00
parent e37e6df775
commit fb678fcd6c
85 changed files with 4576 additions and 5032 deletions

View File

@@ -1,38 +1,3 @@
concrete AdjectiveUrd of Adjective = CatUrd ** open ResUrd, Prelude in {
concrete AdjectiveUrd of Adjective = CatUrd ** AdjectiveHindustani with
(ResHindustani = ResUrd) ;
lin
PositA a = a ;
UseComparA a = a;
ComparA a np = {
s = \\n,g,c,d => np.s ! NPC Obl ++ sE_Str ++ a.s ! n ! g ! c ! d ;
} ;
---- $SuperlA$ belongs to determiner syntax in $Noun$.
ComplA2 a np = {
s = \\n,g,c,d => np.s ! NPC Obl ++ a.c2 ++ a.s ! n ! g ! c ! d ;
} ;
ReflA2 a = {
s = \\n,g,c,d => a.s ! n ! g ! c ! d ++ RefPron ++ sE_Str ;
} ;
SentAP ap sc = {
s = \\n,g,c,d => ap.s ! n ! g ! c ! d ++ sc.s ;
} ;
AdAP ada ap = {
s = \\n,g,c,d => ada.s ++ ap.s ! n ! g ! c ! d ;
} ;
UseA2 a = a ;
CAdvAP cadv ap np = {
s = \\n,g,c,d => cadv.s ++ ap.s ! n ! g ! c ! d ++ cadv.p ++ np.s ! NPC Dir ;
};
AdjOrd ord = { s = \\_,_,_,_ => ord.s ; };
}

View File

@@ -1,20 +1,2 @@
concrete AdverbUrd of Adverb = CatUrd ** open ResUrd, Prelude in {
lin
PositAdvAdj a = {s = a.s ! Sg ! Masc ! Obl ! Posit} ;
ComparAdvAdj cadv a np = {
s = np.s ! NPObj ++ cadv.p ++ cadv.s ++ a.s ! Sg ! Masc ! Obl ! Posit;
} ;
ComparAdvAdjS cadv a s = {
s = cadv.p ++ cadv.s ++ a.s ! Sg ! Masc ! Obl ! Posit ++ s.s;
} ;
PrepNP prep np = {s = np.s ! NPObj ++ prep.s } ;
AdAdv ada adv = { s = ada.s ++ adv.s} ;
SubjS = cc2 ;
AdnCAdv cadv = {s = sE_Str ++ cadv.s} ;
}
concrete AdverbUrd of Adverb = CatUrd ** AdverbHindustani with
(ResHindustani = ResUrd) ;

View File

@@ -1,6 +1,6 @@
--# -path=.:../abstract:../common:../prelude
concrete AllUrd of AllUrdAbs =
LangUrd,
ExtraUrd
** {} ;
--# -path=.:../abstract:../common:../prelude:../hindustani
concrete AllUrd of AllUrdAbs =
LangUrd,
ExtraUrd
** {} ;

View File

@@ -1,4 +1,4 @@
abstract AllUrdAbs =
Lang,
ExtraUrdAbs
** {} ;
abstract AllUrdAbs =
Lang,
ExtraUrdAbs
** {} ;

View File

@@ -1,85 +1,2 @@
concrete CatUrd of Cat = CommonX ** open ResUrd, Prelude in {
flags optimize=all_subs ;
lincat
------ Tensed/Untensed
S = {s : Str} ;
QS = {s : QForm => Str} ;
RS = {s : Agr => Str ; c : Case} ; -- c for it clefts
SSlash = {s : Str ; c2 : ResUrd.Compl} ;
---- Sentence
Cl = ResUrd.Clause ;
ClSlash = {
s : ResUrd.VPHTense => Polarity => Order => Str ;
c2 : ResUrd.Compl
} ;
Imp = {s : CPolarity => ImpForm => Str} ;
---- Question
QCl = {s : ResUrd.VPHTense => Polarity => QForm => Str} ;
IP = {s: Case => Str ; g : Gender ; n : Number};
IDet = {s :Gender => Str ; n : Number} ;
IQuant = {s : Number => Str} ;
IComp = {s : Str} ;
---- Relative
RCl = {
s : ResUrd.VPHTense => Polarity => Order => Agr => Str ;
c : Case
} ;
RP = {s: Number => Case => Str ; a:RAgr};
---- Verb
VP = ResUrd.VPH ;
VPSlash = ResUrd.VPHSlash ;
Comp = {s : Agr => Str} ;
---- Adjective
AP = ResUrd.Adjective ;
---- Noun
CN = ResUrd.Noun ;
NP = ResUrd.NP ;
Pron = {s : Case => Str ; ps : Str ; a : Agr};
Det = ResUrd.Determiner ;
Predet = {s : Str} ;
Num = {s : Str ; n : Number} ;
Card = {s : Str; n : Number} ;
Ord = {s : Str; n : Number} ;
Quant = {s:Number => Gender => Case => Str ; a:Agr};
---- Numeral
Numeral = {s : CardOrd => Str ; n : Number} ;
Digits = {s : CardOrd => Str ; n : Number } ;
---- Structural
Conj = {s1,s2 : Str ; n : Number} ;
-----b Conj = {s : Str ; n : Number} ;
-----b DConj = {s1,s2 : Str ; n : Number} ;
Subj = {s : Str} ;
Prep = ResUrd.Preposition;
---- Open lexical classes, e.g. Lexicon
V, VS, VQ, VA = ResUrd.Verb ; -- = {s : VForm => Str} ;
V2, V2A, V2Q, V2S = ResUrd.Verb ** {c2 : Compl} ;
V3 = ResUrd.Verb ** {c2, c3 : Str} ;
VV = ResUrd.Verb ** { isAux : Bool} ;
V2V = ResUrd.Verb ** {c1 : Str ; c2 : Str ; isAux : Bool} ;
A = ResUrd.Adjective ; --- {s : Gender => Number => Case => Str} ;
A2 = {s : Number => Gender => Case => Degree => Str ; c2 : Str} ;
N = {s : Number => Case => Str ; g : Gender} ;
N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str ; c3 : Str } ;
N3 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str ; c3 : Str ; c4 : Str} ;
PN = {s : Case => Str ; g : Gender} ;
}
concrete CatUrd of Cat = CommonX - [Adv,AdN] ** CatHindustani with
(ResHindustani = ResUrd) ;

View File

@@ -1,43 +1,2 @@
--concrete ConjunctionUrd of Conjunction =
-- CatUrdu ** open ResUrdu, Coordination, Prelude in {
concrete ConjunctionUrd of Conjunction =
CatUrd ** open ResUrd, Coordination, Prelude in {
flags optimize=all_subs ;
lin
ConjS = conjunctDistrSS ;
ConjAdv = conjunctDistrSS ;
ConjNP conj ss = conjunctDistrTable NPCase conj ss ** {
a = conjAgr (agrP3 Masc conj.n) ss.a
} ;
ConjAP conj ss = conjunctDistrTable4 Number Gender Case Degree conj ss ;
ConjRS conj rs = conjunctDistrTable Agr conj rs ** { c = rs.c};
---- These fun's are generated from the list cat's.
BaseS = twoSS ;
ConsS = consrSS comma ;
BaseAdv = twoSS ;
ConsAdv = consrSS comma ;
BaseNP x y = twoTable NPCase x y ** {a = conjAgr x.a y.a} ;
BaseRS x y = twoTable Agr x y ** {c = x.c};
ConsNP xs x = consrTable NPCase comma xs x ** {a = conjAgr xs.a x.a} ;
ConsRS xs x = consrTable Agr comma xs x ** { c = xs.c};
BaseAP x y = twoTable4 Number Gender Case Degree x y ; -- ** {isPre = andB x.isPre y.isPre} ;
ConsAP xs x = consrTable4 Number Gender Case Degree comma xs x ;-- ** {isPre = andB xs.isPre x.isPre} ;
lincat
[S] = {s1,s2 : Str} ;
[Adv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : NPCase => Str ; a : Agr} ;
[AP] = {s1,s2 : Number => Gender => Case => Degree => Str} ;
[RS] = {s1,s2 : Agr => Str ; c : Case};
}
concrete ConjunctionUrd of Conjunction = CatUrd ** ConjunctionHindustani with
(ResHindustani = ResUrd) ;

View File

@@ -1,11 +1,19 @@
concrete ExtraUrd of ExtraUrdAbs = CatUrd **
open ResUrd, Coordination, Prelude, MorphoUrd, ParadigmsUrd in {
open ResUrd, Coordination, Prelude, MorphoUrd, ParadigmsUrd,CommonHindustani in {
flags coding = utf8 ;
lin
GenNP np = {s = \\_,_,_ => np.s ! NPC Obl ++ ka_Str ; a = np.a} ;
GenNP np = {s = \\_,_,_ => np.s ! NPC Obl ++ "كا" ; a = np.a} ;
each_Det = mkDet hr_kwy_Str hr_kwy_Str hr_kwy_Str hr_kwy_Str Sg ;
have_V = mkV rakh6na_Str ;
each_Det = mkDet "ہر كوی" "ہر كوی" "ہر كوی" "ہر كوی" Sg ;
have_V = mkV اكh-نا";
IAdvAdv adv = {s = "كتنی" ++ adv.s ! Masc} ;
ICompAP ap = {s = "كتنے" ++ ap.s ! Sg ! Masc ! Dir ! Posit} ;
cost_V = mkV "قیمت" ;
-- added for causitives
make_CV = mkVerb "نoتہiنگ" ** {c2 = "" };
-- for VP conjunction
}

View File

@@ -5,4 +5,5 @@ abstract ExtraUrdAbs = Extra ** {
each_Det : Det ;
have_V : V;
cost_V : V;
}

View File

@@ -1,4 +1,4 @@
--# -path=.:../abstract:../common:../prelude
--# -path=.:../abstract:../common:../prelude:c:/gf_unicoded/hindustani
concrete GrammarUrd of Grammar =
NounUrd,
@@ -11,9 +11,9 @@
RelativeUrd,
ConjunctionUrd,
PhraseUrd,
TextX,
TextX - [Adv,AdN],
StructuralUrd,
TenseX,
TenseX - [Adv,AdN],
IdiomUrd
** {

View File

@@ -1,10 +1,10 @@
concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd in {
concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd,ParamX,CommonHindustani in {
flags optimize=all_subs ;
flags coding = utf8;
lin
ImpersCl vp = mkSClause [] (agrP3 Masc Sg) vp ;
ImpersCl vp = mkSClause " " (agrP3 Masc Sg) vp ;
GenericCl vp = mkSClause "كوی" (agrP3 Masc Sg) vp ;
CleftNP np rs =
@@ -12,7 +12,7 @@ concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd in {
in
{s = \\t,p,o => cl.s ! t ! p ! o ++ rs.s ! np.a };
CleftAdv ad ss = { s = \\t,b,o => ad.s ++ ss.s};
CleftAdv ad ss = { s = \\t,b,o => ad.s ! Masc ++ ss.s};
ExistNP np =
mkSClause "وہاں" (agrP3 (fromAgr np.a).g (fromAgr np.a).n)
@@ -27,7 +27,8 @@ concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd in {
}
};
ProgrVP vp = insertObj (\\a => vp.obj.s ++ vp.ad ++ vp.comp ! a ++ (vp.s ! VPStem).inf ++ raha (fromAgr a).g (fromAgr a).n ) (predAux auxBe) ;
-- ProgrVP vp = insertObj (\\a => vp.obj.s ++ vp.ad ++ vp.comp ! a ++ (vp.s ! VPStem).inf ++ raha (fromAgr a).g (fromAgr a).n ) (predAux auxBe) ;
ProgrVP vp = (predProg vp) ;
ImpPl1 vp = {s = "آو" ++ infVP True vp (agrP1 Masc Pl)} ;

View File

@@ -1,4 +1,4 @@
--# -path=.:../abstract:../common:../prelude
--# -path=.:../abstract:../common:../hindustani
concrete LangUrd of Lang =
GrammarUrd,

View File

@@ -35,7 +35,7 @@ concrete LexiconUrd of Lexicon = CatUrd **
bread_N = mkN "روتی" ;
break_V2 = mkV2 (mkV "توڑنا") ;
broad_A = mkA "كھلا" ;
brother_N2 = mkN2 (mkN "بھای") (mkPrep "كا") "كے" ; --not correct
brother_N2 = mkN2 (mkN "بھای") (mkPrep "كا" "كا") "كے" ; --not correct
brown_A = mkA "نسواری" ;
butter_N = mkN "مكھن" ;
buy_V2 = mkV2 (mkV "خریدنا");
@@ -62,7 +62,7 @@ concrete LexiconUrd of Lexicon = CatUrd **
cow_N = mkN "گاے" feminine ;
die_V = mkV "مرنا" ;
dirty_A = mkA "گندا" ;
distance_N3 = mkN3 (mkN "فاصلہ") (mkPrep "كا") "كے" "سے" ;
distance_N3 = mkN3 (mkN "فاصلہ") (mkPrep "كا" "كا") "كے" "سے" ;
doctor_N = mkN "معالج" ;
dog_N = mkN "كتا" ;
door_N = mkN "دروزہ" ;
@@ -72,16 +72,16 @@ concrete LexiconUrd of Lexicon = CatUrd **
empty_A = mkA "خالی" ;
enemy_N = mkN "دشمن" ;
factory_N = mkN "كارخانہ" ;
father_N2 = mkN2 (mkN "ابا") (mkPrep "كا") "كے" ;
father_N2 = mkN2 (mkN "ابا") (mkPrep "كا" "كا") "كے" ;
fear_VS = mkV "درنا";
find_V2 = mkV2 (mkV "پانا") ;
fish_N = mkN "مچھلی" ;
floor_N = mkN "فرش" ;
forget_V2 = mkV2 (mkV "بھولنا") ;
fridge_N = mkN "فریگ" ;
friend_N = mkN "دوست" masculine ;
-- friend_N = mkN "دوست" masculine ;
fruit_N = mkN "پھل" ;
-- fun_AV = mkAV (regA "فuن") ;
-- fun_AV = mkAV (regA "f?ن") ;
garden_N = mkN "باغ" ;
girl_N = mkN "لڑكی" ;
glove_N = mkN "دستانہ" ;
@@ -92,7 +92,7 @@ concrete LexiconUrd of Lexicon = CatUrd **
harbour_N = mkCmpdNoun "بندر" (mkN "گاہ") ;
hate_V2 = mkV2 (compoundV "نفرت" do_V2) ;
hat_N = mkN "توپی" ;
-- have_V2 = dirV2 (mk5V "ہاvع" "ہاس" "ہاد" "ہاد" "ہاviنگ") ;
-- have_V2 = dirV2 (mk5V "ہa?ع" "ہاس" "ہاد" "ہاد" "ہa??نگ") ;
hear_V2 = mkV2 (mkV "سننا") ;
hill_N = mkN "پہاڑی" ;
hope_VS = (compoundV "امید" do_V2);
@@ -119,11 +119,11 @@ concrete LexiconUrd of Lexicon = CatUrd **
love_N = mkN "محبت" ;
love_V2 = mkV2 (compoundV "پیار" do_V2) "كو";
man_N = mkN "آدمی" ; -- not correct according to rules should be discussed
married_A2 = mkA "شادی كرنا" "سے" ;
married_A2 = mkA "شادy?كرنا" "سے" ;
meat_N = mkN "گوشت" ;
milk_N = mkN "دودھ" ;
moon_N = mkN "چاند" ;
mother_N2 = mkN2 (mkN "ماں") (mkPrep "كی") "كے"; -- not covered need to be discussed
mother_N2 = mkN2 (mkN "ماں") (mkPrep "كی" "كی") "كے"; -- not covered need to be discussed
mountain_N = mkN "پہاڑی" ;
music_N = mkN "موسیقی" ;
narrow_A = mkA "باریك" ;
@@ -142,7 +142,7 @@ concrete LexiconUrd of Lexicon = CatUrd **
play_V2 = mkV2 (mkV "كھیلنا") ;
policeman_N = mkCmpdNoun "پولیس" (mkN "والا") ;
priest_N = (mkN "پیغمبر") ;
-- probable_AS = mkAS (regA "پرoبابلع") ;
-- probable_AS = mkAS (regA "پr?بابلع") ;
queen_N = mkN "شہزادی" ;
radio_N = mkN "ریڈیو" ;
rain_V0 = compoundV "بارش" (mkV "ہونا" ) ;
@@ -150,9 +150,9 @@ concrete LexiconUrd of Lexicon = CatUrd **
red_A = mkA "لال" ;
religion_N = mkN "مزہب" ;
restaurant_N = mkN "ہوٹل" ;
river_N = mkN "دریا" masculine ;
-- river_N = mkN "دریا" masculine ;
rock_N = mkN "چٹان" ;
roof_N = mkN "چھت" masculine ;
-- roof_N = mkN "چھت" masculine ;
rubber_N = mkN "ربڑ" ;
run_V = mkV "دوڑنا" ;
say_VS = mkV "كہنا" ;
@@ -186,16 +186,16 @@ concrete LexiconUrd of Lexicon = CatUrd **
switch8off_V2 = mkV2 (mkV "چلانا") ;
switch8on_V2 = mkV2 (compoundV "بند" do_V2) ;
table_N = mkN "میز" feminine ;
talk_V3 = mkV3 (mkV "بولنا") "سے" "كے بارے معں";
teacher_N = mkN "iستاد" ;
talk_V3 = mkV3 (mkV "بولنا") "سے" "كE?بارE?معں";
teacher_N = mkN "?ستاد" ;
teach_V2 = mkV2 (mkV "پڑھنا") ;
television_N = mkN "تعلیویزن" ;
thick_A = mkA "موٹا" ;
thin_A = mkA "پتلا" ;
train_N = mkN "گاڑی" ;
travel_V = (compoundV "سفر" do_V2) ;
tree_N = mkN "درخت" masculine ;
-- ---- trousers_N = mkN "ترouسعرس" ;
-- tree_N = mkN "درخت" masculine ;
-- ---- trousers_N = mkN "تr??سعرس" ;
ugly_A = mkA "بدصورت" ;
understand_V2 = mkV2 (mkV "سمجھنا") ;
university_N = mkN "یونیورسٹی" ;
@@ -218,7 +218,7 @@ concrete LexiconUrd of Lexicon = CatUrd **
young_A = mkA "جوان" ;
do_V2 = mkV2 (mkV "كرنا") ;
now_Adv = mkAdv "اب" ;
already_Adv = mkAdv "پہلے ہی" ;
already_Adv = mkAdv "پہلE?ہی" ;
song_N = mkN "گانا" ;
add_V3 = mkV3 (compoundV "اضافہ" do_V2) "" "" ;
number_N = mkN "ہندسہ" ;
@@ -231,7 +231,7 @@ concrete LexiconUrd of Lexicon = CatUrd **
far_Adv = mkAdv "دور" ;
correct_A = mkA "صیہ" ;
dry_A = mkA "خشك" ;
dull_A = mkA "نالiك" ;
dull_A = mkA "ناl?ك" ;
full_A = mkA "مكمل" ;
heavy_A = mkA "بھاری" ;
near_A = mkA "قریب" ;
@@ -266,7 +266,7 @@ concrete LexiconUrd of Lexicon = CatUrd **
foot_N = mkN "پاوں" ; -- not properly covered need to be discussed
forest_N = mkN "نجگل" ;
grass_N = mkN "گھس" feminine ;
guts_N = mkN "گuت" ; -- FIXME: no singular
guts_N = mkN "g?ت" ; -- FIXME: no singular
hair_N = mkN "بال" ;
hand_N = mkN "ہاتھ" ;
head_N = mkN "سر" ;
@@ -299,7 +299,7 @@ concrete LexiconUrd of Lexicon = CatUrd **
stick_N = mkN "چھڑی" ;
tail_N = mkN "دم" ;
tongue_N = mkN "زبان" feminine ;
tooth_N = mkN "دانت" masculine;
-- tooth_N = mkN "دانت" masculine;
wife_N = mkN "بیوی" ;
wind_N = mkN "آندھی" ;
wing_N = mkN "پر" ;
@@ -344,7 +344,7 @@ concrete LexiconUrd of Lexicon = CatUrd **
rub_V2 = mkV2 (mkV "رگڑنا") ;
scratch_V2 = mkV2 (mkV "كھرچنا") "كو" ;
split_V2 = mkV2 (mkV "بانتا") "كو" ;
-- squeeze_V2 = dirV2 (regV "سقuععزع") ;
-- squeeze_V2 = dirV2 (regV "سq?ععزع") ;
-- stab_V2 = dirV2 (regDuplV "ستاب") ;
suck_V2 = mkV2 (mkV "چوسنا") ;
throw_V2 = mkV2 (mkV "پھینكنا") ;
@@ -352,19 +352,19 @@ concrete LexiconUrd of Lexicon = CatUrd **
wash_V2 = mkV2 (mkV "دھونا") ;
wipe_V2 = mkV2 (compoundV "صاف" (mkV "كرنا" ));
---- other_A = regA "oتہعر" ;
---- other_A = regA "?تہعر" ;
grammar_N = mkN "گردان" ;
language_N = mkN "زبان" feminine ;
rule_N = mkN "اصول" ;
---- added 4/6/2007
john_PN = mkPN "جoن" ;
john_PN = mkPN "جان" ;
question_N = mkN "سوال" ;
-- ready_A = regA "رعادی" ;
reason_N = mkN "وجہ" feminine ;
today_Adv = mkAdv "آج" ;
uncertain_A = mkA ["غیر یقینی"] ;
uncertain_A = mkA ["غیریقینی"] ;
}

View File

@@ -1,5 +0,0 @@
all: transliterate
transliterate:
gf <transliterateUrdu.gfs

View File

@@ -8,7 +8,7 @@
---- syntax. To build a lexicon, it is better to use $ParadigmsUrd$, which
---- gives a higher-level access to this module.
--
resource MorphoUrd = ResUrd ** open Prelude,Predef in {
resource MorphoUrd = ResUrd ** open CommonHindustani,Prelude,Predef,ParamX in {
flags optimize=all ;
coding = utf8;
@@ -42,6 +42,7 @@ oper
_ + "ی" => mkN03 (s);
_ + ("اں"|"وں") => mkN04 (s);
_ + "ؤ" => mkN12 (s);
_ + "ت" => mkN10 s ;
_ => regNoun2 (s)
};
regNoun2 : Str -> Noun;
@@ -195,7 +196,11 @@ oper
-- Proposition
makePrep : Str -> Preposition = \str -> {s = str};
makePrep : Str -> Str -> Preposition = \s1,s2 -> {s =
table {
Masc => s1;
Fem => s2
}; } ** { lock_Prep = <>};
----2 Pronouns
PronForm = {s:Pronoun => Str};

View File

@@ -1,119 +1,2 @@
concrete NounUrd of Noun = CatUrd ** open ResUrd, Prelude in {
flags optimize=all_subs ;
lin
DetCN det cn = {
s = \\c => detcn2NP det cn c det.n ;
a = agrP3 cn.g det.n
} ;
UsePN pn = {s = \\c => toNP pn.s c ; a = agrP3 pn.g Sg} ;
UsePron p = {s = \\c => np2pronCase p.s c ; a = p.a} ;
PredetNP pred np = {
s = \\c => pred.s ++ np.s ! c ;
a = np.a
} ;
PPartNP np v2 = {
s = \\c => v2.s ! VF Imperf Pers1 Sg Fem ++ np.s ! c ;
a = np.a
} ;
RelNP np rs = {
s = \\c => np.s ! c ++ comma_Str ++ rs.s ! np.a ;
a = np.a
} ;
AdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ;
a = np.a
} ;
DetQuantOrd quant num ord = {
-- s = \\ c => detquant2det quant.s num.s c ++ ord.s ;
s = \\n,g => quant.s!n!g!Dir ++ num.s ++ ord.s;
n = num.n
} ;
DetQuant quant num = {
-- s = \\c => detquant2det quant.s num.s c;
s = \\n,g => quant.s!n!g!Dir ++ num.s;
n = num.n
} ;
DetNP det = {
s = \\c => det2NP det c ; ---- case
a = agrP3 Masc Sg
} ;
PossPron p = {s = \\_,_,_ => p.ps ; a = p.a} ;
NumSg = {s = []; n = Sg} ;
NumPl = {s = []; n = Pl} ;
NumCard n = n ** {hasCard = True} ;
NumDigits n = {s = n.s ! NCard ; n = n.n} ;
OrdDigits n = {s = n.s ! NOrd; n = n.n} ;
NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ;
OrdNumeral numeral = {s = numeral.s ! NOrd ; n = numeral.n} ;
AdNum adn num = {s = adn.s ++ num.s ; n = num.n} ;
OrdSuperl a = {s = a.s ! Sg ! Masc ! Dir ! Superl ; n = Sg} ;
DefArt = {s = \\_,_,_ => [] ; a = defaultAgr} ;
IndefArt = {s = \\_,_,_ => [] ; a =defaultAgr } ;
MassNP cn = {s = \\c => toNP (cn.s ! Sg) c ; a = agrP3 cn.g Sg} ;
UseN n = n ;
UseN2 n = { s = n.s ; g = n.g };
Use2N3 f = {
s = f.s;
g = f.g ;
c2 = f.c2;
c3 = f.c3
} ;
Use3N3 f = {
s = f.s ;
g = f.g ;
c2 = f.c2;
c3 = f.c3
} ;
ComplN2 f x = {s = \\n,c => case c of {
Dir => x.s ! NPC c ++ f.c2 ++ f.s ! n ! c ;
Obl => x.s ! NPC c ++ f.c3 ++ f.s ! n ! c ;
ResUrd.Voc => x.s ! NPC c ++ f.c3 ++ f.s ! n ! c
};
g = f.g;
};
ComplN3 f x = {
s = \\n,c => x.s ! NPObj ++ f.c4 ++ f.s ! n ! Dir ;
g = f.g ;
c2 = f.c2;
c3 = f.c3
} ;
AdjCN ap cn = {
s = \\n,c => ap.s ! n ! cn.g ! c ! Posit ++ cn.s ! n ! c ;
g = cn.g
} ;
RelCN cn rs = {
s = \\n,c => cn.s ! n ! c ++ rs.s ! agrP3 cn.g n ;
g = cn.g
} ;
AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ; g = cn.g} ;
SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g} ;
ApposCN cn np = {s = \\n,c => cn.s ! n ! Dir ++ np.s ! NPC c ; g = cn.g} ;
}
concrete NounUrd of Noun = CatUrd ** NounHindustani with
(ResHindustani = ResUrd) ;

View File

@@ -1,127 +1,118 @@
concrete NumeralUrd of Numeral = CatUrd ** open ResUrd in {
-- By Harald Hammarström
-- Modification for Urdu Shafqat Virk
flags coding=utf8 ;
--- still old Devanagari coding
param DForm = unit | ten ;
param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;
param Size = sing | less100 | more100 ;
oper LinDigit = {s : DForm => Str ; size : DSize ; n : Number} ;
lincat Dig = { s:Str ; n : Number};
lincat Digit = LinDigit ;
lincat Sub10 = {s : DForm => Str ; size : DSize ; n : Number} ;
lincat Sub100 = {s : Str ; size : Size ; n : Number} ;
lincat Sub1000 = {s : Str ; s2 : Str ; size : Size ; n : Number } ;
lincat Sub1000000 = { s : Str ; n : Number } ;
lin num x0 =
{s = table {
NCard => x0.s ;
NOrd => x0.s ++ "واں" -- need to use mkOrd which will make irregular ordinals but it gives path error
};
n = x0.n
} ;
oper mkOrd : Str -> Str =
\s -> case s of {
"عك" => "پہلا";
"دo" => "دوسرا";
"تi:ن" => "تعسرا";
"چa:ر" => "چوتھا";
("چحاہ"|"چحا"|"چحاi") => "چھٹا";
_ => s ++ "واں"
};
-- {s = \\_ => x0.s ; n = x0.n} ;
oper mkNum : Str -> Str -> DSize -> LinDigit =
\do -> \bis -> \sz ->
{s = table {unit => do ; ten => bis } ;
size = sz ; n = Pl} ;
lin n2 = mkNum "دو" "بیس" r2 ;
lin n3 = mkNum "تین" "تیس" r3 ;
lin n4 = mkNum "چار" "چالیس" r4 ;
lin n5 = mkNum "پانچ" "پچاس" r5 ;
lin n6 = mkNum "چھ" "ساتھ" r6 ;
lin n7 = mkNum "سات" "ستر" r7;
lin n8 = mkNum "آتھ" "اسی" r8;
lin n9 = mkNum "نو" "نوے" r9 ;
oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table {
sg => a1 + "اہ" ;
r2 => a2 + "i:س" ;
r3 => a3 + "تi:س" ;
r4 => a4 + "a:لi:س" ;
r5 => a5 + "ان" ;
r6 => a6 + "ساٹح" ;
r7 => a7 + "ہاتتار" ;
r8 => a8 + "a:سi:" ;
r9 => a9 + "a:ناvع"
} ;
oper rows : DSize => DSize => Str = table {
sg => mkR "گیارہ" "iكك" "iكات" "عكت" "iكیاو" "iك" "iك" "iكی" "iكی" ;
r2 => mkR "بارہ" "بای" "بات" "بای" "باو" "با" "با" "بای" "ب" ;
r3 => mkR "تیر" "تی" "تین" "تنت" "ترپ" "تری" "ت" "تر" "تر" ;
r4 => mkR "چود" "چوب" "چون" "چوا" "چوو" "چون" "چوہ" "چور" "چور" ;
r5 => mkR "پند" "پچی" "پین" "پنتا" "پچپ" "پین" "پہ" "پچ" "پچ" ;
r6 => mkR "سول" "چھب" "چھت" "چھی" "چھپ" "چھیا" "چھ" "چھی" "چھی" ;
r7 => mkR "ستر" "ستا" "سین" "سنت" "ستاو" "ستا" "سر" "ست" "ستا" ;
r8 => mkR "اتھار" "اتھای" "اڑ" "اڑت" "اتھاو" "اڑ" "اتھ" "اتھ" "اتھ" ;
r9 => table {sg => "انیس" ; r2 => "انتیس" ; r3 => "انتالیس" ;
r4 => "انچاس" ; r5 => "انستھ" ; r6 => "انہتر" ;
r7 => "اناسی" ;
r8 => "انانوے" ; r9 => "ننانوے" }
} ;
oper ss : Str -> {s : Str} = \s -> {s = s} ;
lin pot01 = {s = table {unit => "ایك" ; _ => "دuممی" } ; size = sg ; n = Sg} ;
lin pot0 d = d ;
lin pot110 = {s = "داس" ; size = less100 ; n = Pl} ;
lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ;
lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ;
lin pot0as1 n = {s = n.s ! unit ; size = table {sg => sing ; _ => less100} ! n.size ; n = n.n } ;
lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ;
lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ;
lin pot1as2 n = {s = n.s ; s2 = "دuممی" ; size = n.size ; n = n.n} ;
lin pot2 d = {s = (mksau (d.s ! unit) d.size) ;
s2 = d.s ! unit ++ "لاكھ" ; size = more100 ; n = d.n} ;
lin pot2plus d e =
{s = (mksau (d.s ! unit) d.size) ++ e.s ;
s2 = (d.s ! unit) ++ "لاكھ" ++ (mkhazar e.s e.size) ;
size = more100 ; n = d.n} ;
lin pot2as3 n = {s = n.s ; n = n.n} ;
lin pot3 n = {s = table { sing => ekhazar ;
less100 => n.s ++ "ہزار" ;
more100 => n.s2 } ! n.size ; n = n.n} ;
lin pot3plus n m =
{s = table {sing => ekhazar ;
less100 => n.s ++ "ہزار" ;
more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ;
lin D_0 = { s = "0" ; n = Sg};
lin D_1 = { s = "1" ; n = Sg};
lin D_2 = { s = "2" ; n = Pl};
lin D_3 = { s = "3" ; n = Pl};
lin D_4 = { s = "4" ; n = Pl};
lin D_5 = { s = "5" ; n = Pl};
lin D_6 = { s = "6" ; n = Pl};
lin D_7 = { s = "7" ; n = Pl};
lin D_8 = { s = "8" ; n = Pl};
lin D_9 = { s = "9" ; n = Pl};
lin IDig d = { s = \\_ => d.s ; n = d.n} ;
lin IIDig d dg = { s = \\df => dg.s ! df ++ d.s ; n = Pl }; -- need to use + rather than ++, but gives error need to discuss
oper ekhazar : Str = variants {"ہزار" ; "ایك" ++ "ہزار"} ;
oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {sing => ekhazar ; _ => s ++ "ہزار"} ! sz ;
oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "سو" ; _ => s ++ "سو"} ! sz ;
}
concrete NumeralUrd of Numeral = CatUrd ** open ResUrd,CommonHindustani,ParamX, Prelude in {
-- By Harald Hammarström
-- Modification for Urdu Shafqat Virk
-- still old Devanagari coding
flags coding=utf8 ;
param DForm = unit | ten ;
param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;
param Size = singl | less100 | more100 ;
oper LinDigit = {s : DForm => Str ; size : DSize ; n : Number} ;
lincat Dig = { s:Str ; n : Number};
lincat Digit = LinDigit ;
lincat Sub10 = {s : DForm => Str ; size : DSize ; n : Number} ;
lincat Sub100 = {s : Str ; size : Size ; n : Number} ;
lincat Sub1000 = {s : Str ; s2 : Str ; size : Size ; n : Number } ;
lincat Sub1000000 = { s : Str ; n : Number } ;
lin num x0 =
{s = table {
NCard => x0.s ;
NOrd => x0.s ++ "واں" -- need to use mkOrd x0.s but it gives linking error
};
n = x0.n
} ;
oper mkNum : Str -> Str -> DSize -> LinDigit =
\do -> \bis -> \sz ->
{s = table {unit => do ; ten => bis } ;
size = sz ; n = Pl} ;
lin n2 = mkNum "دو" "بیس" r2 ;
lin n3 = mkNum "تین" "تیس" r3 ;
lin n4 = mkNum "چار" "چالیس" r4 ;
lin n5 = mkNum "پانچ" "پچاس" r5 ;
lin n6 = mkNum "چھ" "ساتھ" r6 ;
lin n7 = mkNum "سات" "ستر" r7;
lin n8 = mkNum "آتھ" "اسی" r8;
lin n9 = mkNum "نو" "نوے" r9 ;
oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table {
sg => a1 + "اہ" ;
r2 => a2 + "یس" ;
r3 => a3 + "تیس" ;
r4 => a4 + "الیس" ;
r5 => a5 + "ن" ;
r6 => a6 + "ساٹھ" ;
r7 => a7 + "ہتر" ;
r8 => a8 + "اسی" ;
r9 => a9 + "انوے"
} ;
oper rows : DSize => DSize => Str = table {
sg => mkR "گیارہ" "اك" "اكت" "اكت" "اكیاو" "اك" "اك" "اكی" "اكی" ;
r2 => mkR "بارہ" "بای" "بات" "بای" "باو" "با" "با" "بای" "ب" ;
r3 => mkR "تیر" "تی" "تین" "تنت" "ترپ" "تری" "ت" "تر" "تر" ;
r4 => mkR "چود" "چوب" "چون" "چوا" "چوو" "چون" "چوہ" "چور" "چور" ;
r5 => mkR "پند" "پچی" "پین" "پنتا" "پچپ" "پین" "پہ" "پچ" "پچ" ;
r6 => mkR "سول" "چھب" "چھت" "چھی" "چھپ" "چھیا" "چھ" "چھی" "چھی" ;
r7 => mkR "ستر" "ستا" "سین" "سنت" "ستاو" "ستا" "سر" "ست" "ستا" ;
r8 => mkR "اتھار" "اتھای" "اڑ" "اڑت" "اتھاو" "اڑ" "اتھ" "اتھ" "اتھ" ;
r9 => table {sg => "انیس" ; r2 => "انتیس" ; r3 => "انتالیس" ;
r4 => "انچاس" ; r5 => "انستھ" ; r6 => "انہتر" ;
r7 => "اناسی" ;
r8 => "انانوے" ; r9 => "ننانوے" }
} ;
oper ss : Str -> {s : Str} = \s -> {s = s} ;
lin pot01 = {s = table {unit => "ایك" ; _ => "دمی" } ; size = sg ; n = Sg} ;
lin pot0 d = d ;
lin pot110 = {s = "داس" ; size = less100 ; n = Pl} ;
lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ;
lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ;
lin pot0as1 n = {s = n.s ! unit ; size = table {sg => singl ; _ => less100} ! n.size ; n = n.n } ;
lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ;
lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ;
lin pot1as2 n = {s = n.s ; s2 = "دمی" ; size = n.size ; n = n.n} ;
lin pot2 d = {s = (mksau (d.s ! unit) d.size) ;
s2 = d.s ! unit ++ "لاكھ" ; size = more100 ; n = d.n} ;
lin pot2plus d e =
{s = (mksau (d.s ! unit) d.size) ++ e.s ;
s2 = (d.s ! unit) ++ "لاكھ" ++ (mkhazar e.s e.size) ;
size = more100 ; n = d.n} ;
lin pot2as3 n = {s = n.s ; n = n.n} ;
lin pot3 n = {s = table { singl => ekhazar ;
less100 => n.s ++ "ہزار" ;
more100 => n.s2 } ! n.size ; n = n.n} ;
lin pot3plus n m =
{s = table {singl => ekhazar ;
less100 => n.s ++ "ہزار" ;
more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ;
lin D_0 = { s = "۰" ; n = Sg};
lin D_1 = { s = "۱" ; n = Sg};
lin D_2 = { s = "۲" ; n = Pl};
lin D_3 = { s = "۳" ; n = Pl};
lin D_4 = { s = "۴" ; n = Pl};
lin D_5 = { s = "۵" ; n = Pl};
lin D_6 = { s = "۶" ; n = Pl};
lin D_7 = { s = "۷" ; n = Pl};
lin D_8 = { s = "۸" ; n = Pl};
lin D_9 = { s = "۹" ; n = Pl};
lin IDig d = { s = \\_ => d.s ; n = d.n} ;
lin IIDig d dg = { s = \\df => Prelude.glue (dg.s ! df) d.s ; n = Pl };
oper ekhazar : Str = variants {"ہزار" ; "ایك" ++ "ہزار"} ;
oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {singl => ekhazar ; _ => s ++ "ہزار"} ! sz ;
oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "سو" ; _ => s ++ "سو"} ! sz ;
}

View File

@@ -6,7 +6,9 @@ resource ParadigmsUrd = open
Predef,
Prelude,
MorphoUrd,
CatUrd
CatUrd,
CommonHindustani,
ParamX
in {
--2 Parameters
@@ -33,10 +35,10 @@ oper
= \sd,so,sv,pd,po,pv,g -> mkNoun sd so sv pd po pv g ** {lock_N = <>} ;
} ;
mkN2 : N -> Prep -> Str -> N2;
mkN2 = \n,p,c -> n ** {lock_N2 = <> ; c2 = p.s ; c3 = c } ;
mkN2 = \n,p,c -> n ** {lock_N2 = <> ; c2 = p.s ! n.g ; c3 = c } ;
mkN3 : N -> Prep -> Str -> Str-> N3 ;
mkN3 = \n,p,q,r -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q ; c4 = r} ;
mkN3 = \n,p,q,r -> n ** {lock_N3 = <> ; c2 = p.s ! n.g ; c3 = q ; c4 = r} ;
-- Compound Nouns
@@ -51,6 +53,8 @@ oper
mkDet : Str -> Str -> Str -> Str -> Number -> Det = \s1,s2,s3,s4,nb -> let dt = makeDet s1 s2 s3 s4 nb in {s = dt.s ; n = nb ; lock_Det = <>};
mkIP : (x1,x2,x3:Str) -> Number -> Gender -> IP = \s1,s2,s3,n,g -> let p = mkIntPronForm s1 s2 s3 in { s = p.s ; n = n ; g = g ; lock_IP = <>};
-- AdN
mkAdN : Str -> AdN = \s -> {s = s ; p = False ; lock_AdN = <>} ;
--2 Adjectives
mkA = overload {
@@ -59,6 +63,8 @@ oper
mkA : Str -> Str -> A2
= \a,c -> let n = regAdjective a in {s = n.s; c2 = c} ** {lock_A2 = <>} ;
} ;
mkA2 : A -> Str -> A2 ;
mkA2 a str = a ** {c2=str ; lock_A2 = <>} ;
--2 Verbs
@@ -73,11 +79,14 @@ oper
mkV2 : V -> Str -> V2
= \v,p -> v ** {c2 = {s = p ; c = VTrans} ; lock_V2 = <>} ;
} ;
dirV2 : V -> V2 = \v -> v ** {c2 = {s = [] ; c = VTrans} ; lock_V2 = <>} ;
mkV3 : V -> Str -> Str -> V3;
mkV3 v p q = v ** { c2 = p ; c3 = q ; lock_V3 = <>} ;
mkV2V : V -> Str -> Str -> Bool -> V2V ;
mkV2V v s1 s2 b = v ** {isAux = b ; c1 = s1 ; c2 = s2 ; lock_V2V = <>} ;
dirdirV3 : V -> V3 ;
dirdirV3 v = v ** { c2 = [] ; c3 = [] ; lock_V3 = <>} ;
-- compund verbs
compoundV = overload {
@@ -87,12 +96,24 @@ oper
----2 Adverbs
mkAdv : Str -> Adv = \str -> {s = str ; lock_Adv = <>};
mkAdv : Str -> Adv = \str -> {s = \\_ => str ; lock_Adv = <>};
----2 Prepositions
mkPrep : Str -> Prep ;
mkPrep str = lin Prep (makePrep str) ;
mkPrep : Str -> Str -> Prep ;
mkPrep s1 s2 = makePrep s1 s2 ** {lock_Prep = <>};
--3 Determiners and quantifiers
-- mkQuant : overload {
-- mkQuant : Pron -> Quant ;
-- mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant ;
-- } ;
-- mkQuant = overload {
-- mkQuant : Pron -> Quant = \p -> {s = \\_,_,c => p.s!c ;a = p.a ; lock_Quant = <>};
-- mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant = mkQuantifier;
-- } ;
--2 Conjunctions
mkConj : overload {
@@ -112,15 +133,22 @@ oper
lin Conj (sd2 x y ** {n = n}) ;
-- mkV0 : V -> V0 ;
-- mkVS : V -> VS ;
mkVS : V -> VS;
mkVS v = v ;
-- mkV2S : V -> Prep -> V2S ;
mkVV : V -> VV = \v -> lin VV (v ** {isAux = False});
mkAdA : Str -> AdA ;
-- mkAdv x = lin Adv (ss x) ;
-- mkAdV x = lin AdV (ss x) ;
mkAdA x = lin AdA (ss x) ;
-- mkAdN x = lin AdN (ss x) ;
-- mkV2V : V -> Prep -> Prep -> V2V ;
-- mkVA : V -> VA ;
-- mkV2A : V -> Prep -> V2A ;
-- mkVQ : V -> VQ ;
mkVQ : V -> VQ ;
mkVQ v = v ;
-- mkV2Q : V -> Prep -> V2Q ;
--
-- mkAS : A -> AS ;

View File

@@ -1,27 +1,2 @@
concrete PhraseUrd of Phrase = CatUrd ** open Prelude, ResUrd in {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttQS qs = {s = qs.s ! QDir} ;
UttImpSg pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg False} ;
UttImpPl pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Pl False} ;
UttImpPol pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg True} ;
UttIP ip = {s = ip.s ! Dir} ; --- Acc also
UttIAdv iadv = iadv ;
UttNP np = {s = np.s ! NPC Dir} ;
UttVP vp = {s = infVP False vp (agrP3 Masc Sg)} ;
UttAdv adv = adv ;
UttCN cn = {s = cn.s ! Sg ! Dir};
UttCard n = n ;
UttAP ap = {s = ap.s ! Sg ! Masc ! Dir ! Posit} ;
NoPConj = {s = []} ;
PConjConj conj = {s = conj.s2} ; ---
NoVoc = {s = []} ;
VocNP np = {s = np.s ! NPC Dir} ;
}
concrete PhraseUrd of Phrase = CatUrd ** PhraseHindustani with
(ResHindustani = ResUrd) ;

View File

@@ -1,75 +1,2 @@
concrete QuestionUrd of Question = CatUrd ** open ResUrd, Prelude in {
flags optimize=all_subs ;
lin
QuestCl cl = {
s = \\t,p,qf => case qf of {
QDir => cl.s ! t ! p ! OQuest;
QIndir => agr_Str ++ cl.s ! t! p ! ODir
}
};
QuestVP qp vp =
let cl = mkSClause [] (Ag qp.g qp.n Pers3_Near) vp;
qp1 = qp.s ! Dir;
qp2 = qp.s ! Obl ++ nE_Str
in { s = \\t,p,o => case t of {
VPImpPast => qp2 ++ cl.s ! t ! p ! ODir;
_ => qp1 ++ cl.s ! t ! p ! ODir
}
};
QuestSlash ip slash =
let ip1 = ip.s ! Dir;
ip2 = ip.s ! Obl ++ nE_Str
in {
s = \\t,p,o => case t of {
VPImpPast => ip2 ++ slash.s ! t ! p ! ODir;
_ => ip1 ++ slash.s ! t ! p ! ODir
}
};
QuestIAdv iadv cl = {
s = \\t,p,_ => iadv.s ++ cl.s ! t ! p ! ODir;
};
QuestIComp icomp np =
let cl = mkSClause (np.s ! NPC Dir ++ icomp.s) np.a (predAux auxBe);
in {
s = \\t,p,qf => case qf of {
QDir => cl.s ! t ! p ! ODir;
QIndir => cl.s ! t! p ! ODir
}
};
PrepIP p ip = {s = ip.s ! ResUrd. Voc ++ p.s } ;
AdvIP ip adv = {
s = \\c => adv.s ++ ip.s ! c ;
n = ip.n;
g = ip.g;
} ;
IdetCN idet cn = {
s = \\c => idet.s ! cn.g ++ cn.s ! idet.n ! c ;
g = cn.g;
n = idet.n;
} ;
IdetIP idet = {
s = \\_ => idet.s ! Masc ;
n = idet.n;
g = Masc;
} ;
IdetQuant iqant num = {
s = \\g => iqant.s ! num.n ++ num.s ;
n = num.n
} ;
AdvIAdv i a = {s = i.s ++ a.s} ;
CompIAdv a = a ;
CompIP p = ss (p.s ! Dir) ;
}
concrete QuestionUrd of Question = CatUrd ** QuestionHindustani with
(ResHindustani = ResUrd) ;

View File

@@ -1,17 +1,10 @@
Urdu resource grammar in GF
(c) Shafqat Virk 2010 under GNU LGPL
Sources: files in ./transliterated/ convert to files with the same names in ./
**Don't hand-edit** the generated files, but the ones in ./transliterated/
To convert the edited files, do 'make' in this directory.
Principles: all files containing string literals are in ./transliterated/
**Don't put string literals** in other files. Add string opers to transliterated/ResUrd.gf
instead (to the end of the file).
Purpose: the files without strings will work as such for Hindi as well.
Some of the sources are transliterated, in
./src
../hindustani
Before compilation, do
gf -s <translit.gfs
to get unicode.

View File

@@ -1,66 +1,2 @@
concrete RelativeUrd of Relative = CatUrd ** open ResUrd in {
flags optimize=all_subs ;
lin
RelCl cl = {
s = \\t,p,o,agr => case <t,giveNumber agr> of {
<VPImpPast,Sg> => js_Str ++ cl.s ! t ! p ! o ;
<VPImpPast,Pl> => jn_Str ++ cl.s ! t ! p ! o ;
<_,_> => jw_Str ++ cl.s ! t ! p ! o
};
c = Dir
} ;
-- {-
RelVP rp vp = {
s = \\t,p,o,ag =>
let
agr = case rp.a of {
RNoAg => ag ;
RAg a => a
} ;
cl = mkSClause (rp.s ! (giveNumber agr) ! Dir) agr vp;
-- cl = case t of {
-- VPImpPast => mkSClause (rp.s ! (giveNumber agr) ! Obl) agr vp;
-- _ => mkSClause (rp.s ! (giveNumber agr) ! Dir) agr vp
-- };
in
cl.s ! t ! p ! ODir ;
c = Dir
} ;
--
--
RelSlash rp slash = {
s = \\t,p,o,agr => rp.s ! (giveNumber agr) ! Dir ++ slash.c2.s ++ slash.s ! t ! p ! o ;--case t of {
-- VPImpPast => rp.s ! (giveNumber agr) Obl ++ slash.c2.s ++ slash.s ! t ! p ! o ;
-- _ => rp.s ! (giveNumber agr) Dir ++ slash.c2.s ++ slash.s ! t ! p ! o
-- };
c = Dir
} ;
-- -}
FunRP p np rp = {
s = \\n,c => rp.s ! n ! c ++ np.s ! NPC c ++ p.s ;
a = RAg np.a
} ;
IdRP = {
s = table {
Sg => table {
ResUrd.Dir => jw_Str ;
ResUrd.Obl => js_Str ;
ResUrd.Voc => js_Str
};
Pl => table {
ResUrd.Dir => jw_Str ;
ResUrd.Obl => jn_Str ;
ResUrd.Voc => jn_Str
}
};
a = RNoAg
} ;
}
concrete RelativeUrd of Relative = CatUrd ** RelativeHindustani with
(ResHindustani = ResUrd) ;

View File

@@ -1,641 +1,2 @@
--# -path=.:../abstract:../common:../../prelude
--
--1 Urdu auxiliary operations.
--
-- This module contains operations that are needed to make the
-- resource syntax work.
resource ResUrd = ParamX ** open Prelude,Predef in {
flags optimize=all ;
coding = utf8;
param
Case = Dir | Obl | Voc ;
Gender = Masc | Fem ;
VTense = Subj | Perf | Imperf;
UPerson = Pers1
| Pers2_Casual
| Pers2_Familiar
| Pers2_Respect
| Pers3_Near
| Pers3_Distant;
Order = ODir | OQuest ;
--2 For $Relative$
RAgr = RNoAg | RAg Agr ;
RCase = RC Number Case ;
-- for Numerial
CardOrd = NCard | NOrd ;
-----------------------------------------
-- Urd Pronouns
-----------------------------------------
Pronoun = P Number Gender Case UPerson;
PersPronForm = PPF Number UPerson Case;
-------------------------------------------
--Verbs
-------------------------------------------
VerbForm = VF VTense UPerson Number Gender
| Inf
| Root
| Inf_Obl
| Inf_Fem;
oper
Noun = {s : Number => Case => Str ; g : Gender} ;
Verb = {s : VerbForm => Str} ;
Preposition = {s : Str};
DemPronForm = {s : Number => Gender => Case => Str};
PossPronForm = {s : Number => Gender => Case => Str};
Determiner = {s : Number => Gender => Str ; n : Number};
-- a useful oper
eq : Str -> Str -> Bool = \s1,s2-> (pbool2bool (eqStr s1 s2)) ;
-----------------------------------------------
-- Urd Adjectives
-----------------------------------------------
Adjective = { s: Number => Gender => Case => Degree => Str };
mkAdjective : (x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36:Str) -> Adjective =
\y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21,y22,y23,y24,y25,y26,y27,y28,y29,y30,y31,y32,y33,y34,y35,y36 -> {
s = table {
Sg => table {
Masc => table {
Dir => table {
Posit => y1 ;
Compar => y2 ;
Superl => y3
};
Obl => table {
Posit => y4 ;
Compar => y5 ;
Superl => y6
};
Voc => table {
Posit => y7 ;
Compar => y8 ;
Superl => y9
}
};
Fem => table {
Dir => table {
Posit => y10 ;
Compar => y11 ;
Superl => y12
};
Obl => table {
Posit => y13 ;
Compar => y14 ;
Superl => y15
};
Voc => table {
Posit => y16 ;
Compar => y17 ;
Superl => y18
}
}
};
Pl => table {
Masc => table {
Dir => table {
Posit => y19 ;
Compar => y20 ;
Superl => y21
};
Obl => table {
Posit => y22 ;
Compar => y23 ;
Superl => y24
};
Voc => table {
Posit => y25 ;
Compar => y26 ;
Superl => y27
}
};
Fem => table {
Dir => table {
Posit => y28 ;
Compar => y29 ;
Superl => y30
};
Obl => table {
Posit => y31 ;
Compar => y32 ;
Superl => y33
};
Voc => table {
Posit => y34 ;
Compar => y35 ;
Superl => y36
}
}
}
}
};
regAdjective : Str -> Adjective;
regAdjective x = case x of {
acch + ("ا"|"اں") => mkAdjective x ("بہت" ++ x) ("ساب سے" ++ x) (acch + "ے") ("بہت" ++ acch + "ے") ("ساب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("ساب سے" ++ acch + "ے")
(acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی")
(acch +"ے") ("بہت" ++ acch + "ے") ("ساب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("ساب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("ساب سے" ++ acch + "ے")
(acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("ساب سے" ++ acch + "ی");
_ => mkAdjective x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
};
RefPron : Str;
RefPron = "خود";
----------------------------------------------------------
-- Grammar part
----------------------------------------------------------
param
Agr = Ag Gender Number UPerson ;
NPCase = NPC Case | NPObj | NPErg ;
oper
np2pronCase : (Case => Str) -> NPCase -> Str = \ppf,npc -> case npc of {
NPC c => ppf ! c;
NPObj => ppf ! Dir ;
NPErg => ppf ! Obl ++ "نع"
} ;
toNP : ( Case => Str) -> NPCase -> Str = \pn, npc -> case npc of {
NPC c => pn ! c ;
NPObj => pn ! Dir ;
NPErg => pn ! Obl ++ "نع"
} ;
detcn2NP : (Determiner) -> Noun -> NPCase -> Number -> Str = \dt,cn,npc,nn -> case npc of {
NPC c => dt.s ! Sg ! Masc ++ cn.s ! nn ! Dir ;
NPObj => dt.s ! Sg ! Masc ++ cn.s ! nn ! Dir ;
NPErg => dt.s ! Sg ! Masc ++ cn.s ! nn ! Obl ++ "نع"
} ;
det2NP : (Determiner) -> NPCase -> Str = \dt,npc -> case npc of {
NPC c => dt.s ! Sg ! Masc ;
NPObj => dt.s ! Sg ! Masc ;
NPErg => dt.s ! Sg ! Masc ++ "نع"
} ;
------------------------------------------
-- Agreement transformations
-----------------------------------------
toAgr : Number -> UPerson -> Gender -> Agr = \n,p,g ->
Ag g n p;
fromAgr : Agr -> {n : Number ; p : UPerson ; g : Gender} = \a -> case a of {
Ag g n p => {n = n ; p = p ; g = g}
} ;
conjAgr : Agr -> Agr -> Agr = \a0,b0 ->
let a = fromAgr a0 ; b = fromAgr b0
in
toAgr
(conjNumber a.n b.n)
b.p a.g;
giveNumber : Agr -> Number =\a -> case a of {
Ag _ n _ => n
};
giveGender : Agr -> Gender =\a -> case a of {
Ag g _ _ => g
};
defaultAgr : Agr = agrP3 Masc Sg ;
agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n Pers3_Distant ;
personalAgr : Agr = agrP1 Masc Sg ;
agrP1 : Gender -> Number -> Agr = \g,n -> Ag g n Pers1 ;
param
CPolarity =
CPos
| CNeg Bool ; -- contracted or not
oper
contrNeg : Bool -> Polarity -> CPolarity = \b,p -> case p of {
Pos => CPos ;
Neg => CNeg b
} ;
NP : Type = {s : NPCase => Str ; a : Agr} ;
param
CTense = CPresent | CPast | CFuture ;
oper
copula : CTense -> Number -> UPerson -> Gender -> Str = \t,n,p,g ->
case <t,n,p,g> of {
<CPresent,Sg,Pers1,_ > => "ہوں" ;
<CPresent,Sg,Pers2_Casual,_ > => "ہے" ;
<CPresent,Sg,Pers2_Familiar,_ > => "ہو" ;
<CPresent,Sg,Pers2_Respect,_ > => "ہیں" ;
<CPresent,Sg,Pers3_Near,_ > => "ہے" ;
<CPresent,Sg,Pers3_Distant,_ > => "ہے" ;
<CPresent,Pl,Pers1,_ > => "ہیں" ;
<CPresent,Pl,Pers2_Casual,_ > => "ہو" ;
<CPresent,Pl,Pers2_Familiar,_ > => "ہو" ;
<CPresent,Pl,Pers2_Respect,_ > => "ہیں" ;
<CPresent,Pl,Pers3_Near,_ > => "ہیں" ;
<CPresent,Pl,Pers3_Distant,_ > => "ہیں" ;
<CPast,Sg,Pers1,Masc > => "تھا" ;
<CPast,Sg,Pers1,Fem > => "تھی" ;
<CPast,Sg,Pers2_Casual,Masc > => "تھا" ;
<CPast,Sg,Pers2_Casual,Fem > => "تھی" ;
<CPast,Sg,Pers2_Familiar,Masc > => "تھا" ;
<CPast,Sg,Pers2_Familiar,Fem > => "تھی" ;
<CPast,Sg,Pers2_Respect,Masc > => "تھے" ;
<CPast,Sg,Pers2_Respect,Fem > => "تھیں" ;
<CPast,Sg,Pers3_Near,Masc > => "تھا" ;
<CPast,Sg,Pers3_Near,Fem > => "تھی" ;
<CPast,Sg,Pers3_Distant,Masc > => "تھا" ;
<CPast,Sg,Pers3_Distant,Fem > => "تھی" ;
<CPast,Pl,Pers1,Masc > => "تھے" ;
<CPast,Pl,Pers1,Fem > => "تھیں" ;
<CPast,Pl,Pers2_Casual,Masc > => "تھے" ;
<CPast,Pl,Pers2_Casual,Fem > => "تھیں" ;
<CPast,Pl,Pers2_Familiar,Masc > => "تھے" ;
<CPast,Pl,Pers2_Familiar,Fem > => "تھیں" ;
<CPast,Pl,Pers2_Respect,Masc > => "تھے" ;
<CPast,Pl,Pers2_Respect,Fem > => "تھیں" ;
<CPast,Pl,Pers3_Near,Masc > => "تھے" ;
<CPast,Pl,Pers3_Near,Fem > => "تھیں" ;
<CPast,Pl,Pers3_Distant,Masc > => "تھے" ;
<CPast,Pl,Pers3_Distant,Fem > => "تھیں" ;
<CFuture,Sg,Pers1,Masc > => "گا" ;
<CFuture,Sg,Pers1,Fem > => "گی" ;
<CFuture,Sg,Pers2_Casual,Masc > => "گا" ;
<CFuture,Sg,Pers2_Casual,Fem > => "گi" ;
<CFuture,Sg,Pers2_Familiar,Masc > => "گے" ;
<CFuture,Sg,Pers2_Familiar,Fem > => "گی" ;
<CFuture,Sg,Pers2_Respect,Masc > => "گے" ;
<CFuture,Sg,Pers2_Respect,Fem > => "گی" ;
<CFuture,Sg,Pers3_Near,Masc > => "گا" ;
<CFuture,Sg,Pers3_Near,Fem > => "گی" ;
<CFuture,Sg,Pers3_Distant,Masc > => "گا" ;
<CFuture,Sg,Pers3_Distant,Fem > => "گی" ;
<CFuture,Pl,Pers1,Masc > => "گے" ;
<CFuture,Pl,Pers1,Fem > => "گی" ;
<CFuture,Pl,Pers2_Casual,Masc > => "گے" ;
<CFuture,Pl,Pers2_Casual,Fem > => "گی" ;
<CFuture,Pl,Pers2_Familiar,Masc > => "گے" ;
<CFuture,Pl,Pers2_Familiar,Fem > => "گی" ;
<CFuture,Pl,Pers2_Respect,Masc > => "گے" ;
<CFuture,Pl,Pers2_Respect,Fem > => "گی" ;
<CFuture,Pl,Pers3_Near,Masc > => "گے" ;
<CFuture,Pl,Pers3_Near,Fem > => "گے" ;
<CFuture,Pl,Pers3_Distant,Masc > => "گے" ;
<CFuture,Pl,Pers3_Distant,Fem > => "گی"
} ;
param
VPPTense =
VPPres
|VPPast
|VPFutr;
VPHTense =
VPGenPres -- impf hum nahim "I گo"
| VPImpPast -- impf Ta nahim "I وعنت"
| VPFut -- fut na/nahim "I سہالل گo"
| VPContPres -- stem raha hum nahim "I ام گoiنگ"
| VPContPast -- stem raha Ta nahim "I واس گoiنگ"
| VPContFut
| VPPerfPres -- perf hum na/nahim "I ہاvع گoنع"
| VPPerfPast -- perf Ta na/nahim "I ہاد گoنع"
| VPPerfFut
| VPPerfPresCont
| VPPerfPastCont
| VPPerfFutCont
| VPSubj -- subj na "I مای گo"
;
VPHForm =
VPTense VPPTense Agr -- 9 * 12
| VPReq
| VPImp
| VPReqFut
| VPInf
| VPStem
;
VType = VIntrans | VTrans | VTransPost ;
oper
objVType : VType -> NPCase = \vt -> case vt of {
VTrans => NPObj ;
_ => NPC Obl
} ;
VPH : Type = {
s : VPHForm => {fin, inf : Str} ;
obj : {s : Str ; a : Agr} ;
subj : VType ;
comp : Agr => Str;
inf : Str;
ad : Str;
embComp : Str ;
} ;
VPHSlash = VPH ** {c2 : Compl} ;
Compl : Type = {s : Str ; c : VType} ;
predV : Verb -> VPH = \verb -> {
s = \\vh =>
case vh of {
VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = verb.s ! VF Imperf p n g } ;
VPTense VPPast (Ag g n p) => {fin = [] ; inf =verb.s ! VF Perf p n g} ;
VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = verb.s ! VF Subj p n g } ;
VPStem => {fin = [] ; inf = verb.s ! Root};
_ => {fin = [] ; inf = verb.s ! Root}
};
obj = {s = [] ; a = defaultAgr} ;
subj = VTrans ;
inf = verb.s ! Inf;
ad = [];
embComp = [];
comp = \\_ => []
} ;
predVc : (Verb ** {c2,c1 : Str}) -> VPHSlash = \verb ->
predV verb ** {c2 = {s = verb.c1 ; c = VTrans} } ;
raha : Gender -> Number -> Str = \g,n ->
(regAdjective "رہا").s ! n ! g ! Dir ! Posit ;
cka : Gender -> Number -> Str = \g,n ->
(regAdjective "چكا").s ! n ! g ! Dir ! Posit ;
hw : UPerson -> Number -> Str = \pp,n ->
case <pp,n> of {
<Pers1,_> => "ہوں";
<_,Pl> => "ہوں";
<_,_> => "ہو"
};
predAux : Aux -> VPH = \verb -> {
s = \\vh =>
let
inf = verb.inf ;
part = verb.ppart ;
in
case vh of {
VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = part } ;
VPTense VPPast (Ag g n p) => {fin = copula CPast n p g ; inf = part } ;
VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = part ++ hw p n } ;
VPStem => {fin = [] ; inf = "رہ" };
_ => {fin = part ; inf = [] }
};
obj = {s = [] ; a = defaultAgr} ;
subj = VIntrans ;
inf = verb.inf;
ad = [];
embComp = [];
comp = \\_ => []
} ;
Aux = {
inf,ppart,prpart : Str
} ;
auxBe : Aux = {
inf = "" ;
ppart = "" ;
prpart = ""
} ;
Clause : Type = {s : VPHTense => Polarity => Order => Str} ;
mkClause : NP -> VPH -> Clause = \np,vp -> {
s = \\vt,b,ord =>
let
subjagr : NPCase * Agr = case vt of {
VPImpPast => case vp.subj of {
VTrans => <NPErg, vp.obj.a> ;
VTransPost => <NPErg, defaultAgr> ;
_ => <NPC Dir, np.a>
} ;
_ => <NPC Dir, np.a>
} ;
subj = subjagr.p1 ;
agr = subjagr.p2 ;
n = (fromAgr agr).n;
p = (fromAgr agr).p;
g = (fromAgr agr).g;
vps = case vt of {
VPGenPres => vp.s ! VPTense VPPres agr ;
VPImpPast => vp.s ! VPTense VPPast agr ;
VPFut => vp.s ! VPTense VPFutr agr ;
VPContPres =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContPast =>
{fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContFut =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n} ;
VPPerfPres =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ;
VPPerfPast =>
{fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ;
VPPerfFut =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ;
VPPerfPresCont =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ;
VPPerfPastCont =>
{fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ;
VPPerfFutCont =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n } ;
VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "ژاید" }
};
quest =
case ord of
{ ODir => [];
OQuest => "كیا" };
na =
case b of
{ Pos => [];
Neg => "نا" };
nahim =
case b of
{ Pos => [];
Neg => "نہیں" };
in
case vt of {
VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ na ++ vps.inf ++ vps.fin ++ vp.embComp ;
_ => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp};
} ;
mkSClause : Str -> Agr -> VPH -> Clause =
\subj,agr,vp -> {
s = \\t,b,ord =>
let
n = (fromAgr agr).n;
p = (fromAgr agr).p;
g = (fromAgr agr).g;
vps = case t of {
VPGenPres => vp.s ! VPTense VPPres agr ;
VPImpPast => vp.s ! VPTense VPPast agr ;
VPFut => vp.s ! VPTense VPFutr agr ;
VPContPres =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContPast =>
{fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContFut =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ;
VPPerfPres =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ;
VPPerfPast =>
{fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ;
VPPerfFut =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ;
VPPerfPresCont =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPPerfPastCont =>
{fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPPerfFutCont =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ;
VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "ژاید" }
};
quest =
case ord of
{ ODir => [];
OQuest => "كیا" };
na =
case b of
{ Pos => [];
Neg => "نا" };
nahim =
case b of
{ Pos => [];
Neg => "نہیں" };
in
case t of {
VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ na ++ vps.inf ++ vps.fin ++ vp.embComp;
_ => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp};
} ;
insertSubj : UPerson -> Str -> Str = \p,s ->
case p of { Pers1 => s ++ "وں" ; _ => s ++ "ے"};
insertObj : (Agr => Str) -> VPH -> VPH = \obj1,vp -> {
s = vp.s ;
obj = vp.obj ;
subj = vp.subj ;
inf = vp.inf;
ad = vp.ad;
embComp = vp.embComp;
comp = \\a => vp.comp ! a ++ obj1 ! a
} ;
insertVV : Str -> VPH -> VPH = \obj1,vp -> {
s = vp.s ;
obj = vp.obj ;
subj = vp.subj ;
inf = vp.inf;
ad = vp.ad;
embComp = vp.embComp;
comp = \\a => vp.comp ! a ++ obj1
} ;
insertObj2 : (Str) -> VPH -> VPH = \obj1,vp -> {
s = vp.s;
obj = vp.obj ;
subj = vp.subj ;
inf = vp.inf;
ad = vp.ad;
embComp = vp.embComp ++ obj1;
comp = vp.comp
} ;
insertObjc : (Agr => Str) -> VPHSlash -> VPHSlash = \obj,vp ->
insertObj obj vp ** {c2 = vp.c2} ;
insertObjc2 : Str -> VPHSlash -> VPHSlash = \obj,vp ->
insertObj2 obj vp ** {c2 = vp.c2} ;
infVP : Bool -> VPH -> Agr -> Str = \isAux,vp,a ->
vp.obj.s ++ vp.inf ++ vp.comp ! a ;
infVV : Bool -> VPH -> Str = \isAux,vp ->
case isAux of {False => vp.inf ; True => (vp.s ! VPImp).fin };
insertObject : NP -> VPHSlash -> VPH = \np,vps -> {
s = vps.s ;
obj = {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} ;
subj = vps.c2.c ;
inf = vps.inf;
ad = vps.ad;
embComp = vps.embComp;
comp = vps.comp
} ;
insertObjPre : (Agr => Str) -> VPHSlash -> VPH = \obj,vp -> {
s = vp.s ;
obj = vp.obj ;
inf = vp.inf ;
subj = vp.subj ;
ad = vp.ad ;
embComp = vp.embComp;
comp = \\a => obj ! a ++ vp.c2.s ++ vp.comp ! a
} ;
insertAdV : Str -> VPH -> VPH = \ad,vp -> {
s = vp.s ;
obj = vp.obj ;
inf = vp.inf ;
subj = vp.subj;
ad = vp.ad ++ ad ;
embComp = vp.embComp;
comp = vp.comp
} ;
conjThat : Str = "كہ" ;
-- strings collected from syntax files, AR
oper
sE_Str = "سے" ;
ka_Str = "كا" ;
hr_kwy_Str = "ہر كوی" ;
rakh6na_Str = "راكھنا" ;
comma_Str = "," ;
agr_Str = "اگر" ;
nE_Str = "نے" ;
jw_Str = "جو" ;
js_Str = "جس" ;
jn_Str = "جن" ;
mt_Str = "مت" ;
nh_Str = "نہ" ;
waN_Str = "واں" ;
awr_Str = "اور" ;
ky_Str = "كی" ;
kw_Str = "كو" ;
}
instance ResUrd of ResHindustani = DiffUrd ** open CommonHindustani, Prelude, Predef in {
} ;

View File

@@ -1,102 +1,2 @@
concrete SentenceUrd of Sentence = CatUrd ** open Prelude, ResUrd in {
flags optimize=all_subs ;
lin
PredVP np vp = mkClause np vp ;
PredSCVP sc vp = mkSClause sc.s (defaultAgr) vp ;
ImpVP vp = {
s = \\pol,n =>
let
agr = Ag Masc (numImp n) Pers2_Casual ;
verb = infVP True vp agr ;
dont = case pol of {
CNeg True => mt_Str ;
CNeg False => nh_Str ;
_ => []
}
in
dont ++ verb
} ;
SlashVP np vp =
mkClause np vp ** {c2 = vp.c2} ;
AdvSlash slash adv = {
s = \\t,p,o => adv.s ++ slash.s ! t ! p ! o ;
c2 = slash.c2
} ;
SlashPrep cl prep = cl ** {c2 = { s = prep.s ; c = VIntrans}} ;
SlashVS np vs slash =
mkClause np
(insertObj2 (conjThat ++ slash.s) (predV vs)) **
{c2 = slash.c2} ;
EmbedS s = {s = conjThat ++ s.s} ;
EmbedQS qs = {s = qs.s ! QIndir} ;
EmbedVP vp = {s = infVP False vp defaultAgr} ; --- agr
UseCl temp p cl =
{ s = case <temp.t,temp.a> of {
<Pres,Simul> => temp.s ++ p.s ++ cl.s ! VPGenPres ! p.p ! ODir
;<Pres,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPres ! p.p ! ODir; --# notpresent
<Past,Simul> => temp.s ++ p.s ++ cl.s ! VPImpPast ! p.p ! ODir; --# notpresent
<Past,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPast ! p.p ! ODir; --# notpresent
<Fut,Simul> => temp.s ++ p.s ++ cl.s ! VPFut ! p.p ! ODir; --# notpresent
<Fut,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfFut ! p.p ! ODir; --# notpresent
<Cond,Simul> => temp.s ++ p.s ++ cl.s ! VPContPres ! p.p ! ODir; --# notpresent
<Cond,Anter> => temp.s ++ p.s ++ cl.s ! VPContPast ! p.p ! ODir --# notpresent
};
} ;
UseQCl temp p cl = {
s = \\q => case <temp.t,temp.a> of {
<Pres,Simul> => temp.s ++ p.s ++ cl.s ! VPGenPres ! p.p ! q
;<Pres,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPres ! p.p ! q; --# notpresent
<Past,Simul> => temp.s ++ p.s ++ cl.s ! VPImpPast ! p.p ! q; --# notpresent
<Past,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPast ! p.p ! q; --# notpresent
<Fut,Simul> => temp.s ++ p.s ++ cl.s ! VPFut ! p.p ! q; --# notpresent
<Fut,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfFut ! p.p ! q; --# notpresent
<Cond,Simul> => temp.s ++ p.s ++ cl.s ! VPContPres ! p.p ! q; --# notpresent
<Cond,Anter> => temp.s ++ p.s ++ cl.s ! VPContPast ! p.p ! q --# notpresent
};
} ;
UseRCl temp p rcl = {
s = \\q => case <temp.t,temp.a> of {
<Pres,Simul> => temp.s ++ p.s ++ rcl.s ! VPGenPres ! p.p ! ODir ! q
;<Pres,Anter> => temp.s ++ p.s ++ rcl.s ! VPPerfPres ! p.p ! ODir ! q; --# notpresent
<Past,Simul> => temp.s ++ p.s ++ rcl.s ! VPImpPast ! p.p ! ODir ! q; --# notpresent
<Past,Anter> => temp.s ++ p.s ++ rcl.s ! VPPerfPast ! p.p ! ODir ! q; --# notpresent
<Fut,Simul> => temp.s ++ p.s ++ rcl.s ! VPFut ! p.p ! ODir ! q; --# notpresent
<Fut,Anter> => temp.s ++ p.s ++ rcl.s ! VPPerfFut ! p.p ! ODir ! q; --# notpresent
<Cond,Simul> => temp.s ++ p.s ++ rcl.s ! VPContPres ! p.p ! ODir ! q; --# notpresent
<Cond,Anter> => temp.s ++ p.s ++ rcl.s ! VPContPast ! p.p ! ODir ! q --# notpresent
};
c = rcl.c
} ;
UseSlash temp p clslash = {
s = case <temp.t,temp.a> of {
<Pres,Simul> => temp.s ++ p.s ++ clslash.s ! VPGenPres ! p.p ! ODir
;<Pres,Anter> => temp.s ++ p.s ++ clslash.s ! VPPerfPres ! p.p ! ODir; --# notpresent
<Past,Simul> => temp.s ++ p.s ++ clslash.s ! VPImpPast ! p.p ! ODir ; --# notpresent
<Past,Anter> => temp.s ++ p.s ++ clslash.s ! VPPerfPast ! p.p ! ODir; --# notpresent
<Fut,Simul> => temp.s ++ p.s ++ clslash.s ! VPFut ! p.p ! ODir; --# notpresent
<Fut,Anter> => temp.s ++ p.s ++ clslash.s ! VPPerfFut ! p.p ! ODir; --# notpresent
<Cond,Simul> => temp.s ++ p.s ++ clslash.s ! VPContPres ! p.p ! ODir; --# notpresent
<Cond,Anter> => temp.s ++ p.s ++ clslash.s ! VPContPast ! p.p ! ODir --# notpresent
};
c2 = clslash.c2
} ;
AdvS a s = {s = a.s ++ s.s} ;
RelS s r = {s = s.s ++ r.s ! agrP3 Masc Sg} ;
SSubjS s sj s = { s = s.s ++ sj.s ++ s.s};
}
concrete SentenceUrd of Sentence = CatUrd ** SentenceHindustani with
(ResHindustani = ResUrd) ;

View File

@@ -1,49 +1,51 @@
concrete StructuralUrd of Structural = CatUrd **
open MorphoUrd, ParadigmsUrd, Prelude, NounUrd in {
open MorphoUrd, ParadigmsUrd, Prelude, NounUrd,ParamX,CommonHindustani in {
flags optimize=all ;
coding = utf8;
lin
above_Prep = ss "اوپر" ;
after_Prep = ss "كے بعد" ;
above_Prep = mkPrep "اوپر" "اوپر" ;
after_Prep = mkPrep ["كے بعد"] ["كے بعد"] ;
all_Predet = ss "تمام" ;
almost_AdA, almost_AdN = ss "تقریبا" ;
although_Subj = ss "اگرچھ" ;
almost_AdA, almost_AdN = mkAdN "تقریبا" ;
although_Subj = ss "اگرچh-" ;
always_AdV = ss "ہمیشہ" ;
and_Conj = sd2 [] "اور" ** {n = Pl} ;
because_Subj = ss "كیونكھ" ;
before_Prep = ss "پہلے" ;
behind_Prep = ss "پیچھے" ;
between_Prep = ss "درمیاں" ;
because_Subj = ss "كیونكh-" ;
before_Prep = mkPrep "پہلے" "پہلے" ;
behind_Prep = mkPrep "پیچh-ے" "پیچh-ے" ;
between_Prep = mkPrep "درمیاں" "درمیاں" ;
both7and_DConj = sd2 "دونوں" "اور" ** {n = Pl} ;
but_PConj = ss "لیكن" ;
by8agent_Prep = ss "" ;
by8means_Prep = ss "" ;
by8agent_Prep = mkPrep "" "" ;
by8means_Prep = mkPrep "" "" ;
can8know_VV,can_VV = mkV "سكنا" ** { isAux = True} ;
during_Prep = ss ["كے درمیاں"] ;
during_Prep = mkPrep ["كے درمیاں"] ["كے درمیاں"] ;
either7or_DConj = sd2 "كوی ایك" "یا" ** {n = Sg} ;
everybody_NP = MassNP (UseN (ParadigmsUrd.mkN "ہر كوی" "ہر كوی" "ہر كوی" "ہر كوی" "ہر كوی" "ہر كوی" Masc )); -- not a good way coz need to include NounUrd
every_Det = mkDet "ہر" "ہر" "ہر" "ہر" Sg;
everything_NP = MassNP (UseN (ParadigmsUrd.mkN "ہر چیز" "ہر چیز" "ہر چیزو" "سب چیزیں" "سب چیزوں" "سب چیزو" Masc ));
everywhere_Adv = ss "ہر جگہ" ;
everywhere_Adv = mkAdv "ہر جگہ" ;
few_Det = mkDet "چند" "چند" "چند" "چند" Pl ;
for_Prep = ss "كیلیے" ;
from_Prep = ss "سے" ;
first_Ord = {s = "پعہلا" ; n = Sg} ; --DEPRECATED
for_Prep = mkPrep "كیلیے" "كیلیے" ;
from_Prep = mkPrep "سے" "سے" ;
he_Pron = personalPN "وہ" "اس" "" "اس كا" Sg Masc Pers3_Distant ;
here_Adv = ss "یہاں" ;
here7to_Adv = ss ["یہاں پر"] ;
here7from_Adv = ss ["یہاں سے"] ;
how_IAdv = ss "ہ" ;
here_Adv = mkAdv "یہاں" ;
here7to_Adv = mkAdv ["یہاں پر"] ;
here7from_Adv = mkAdv ["یہاں سے"] ;
how_IAdv = ss "كیسے" ;
how8many_IDet = makeIDet "كتنے" "كتنی" Pl ;
how8much_IAdv = ss "كتنا" ;
if_Subj = ss "اگر" ;
in8front_Prep = ss ["كے سامنے"] ;
i_Pron = personalPN "میں" "مجھ" "" "میرا" Sg Masc Pers1;
in_Prep = ss "معں" ;
in8front_Prep = mkPrep ["كے سامنے"] ["كے سامنے"] ;
i_Pron = personalPN "میں" "مجh-" "" "میرا" Sg Masc Pers1;
in_Prep = mkPrep "معں" "معں" ;
it_Pron = personalPN "یہ" "یہ" "یہ" "اس كا" Sg Masc Pers3_Near;
less_CAdv = {s = "كم" ; p = ""} ;
many_Det = mkDet "بہت زیادہ" "بہت زیادہ" "بہت زیادہ" "بہت زیادہ" Pl ;
more_CAdv = {s = "زیادھ" ; p = "" } ;
more_CAdv = {s = "زیادh-" ; p = "" } ;
most_Predet = ss "زیادہ تر" ;
much_Det = mkDet "بہت" "بہت" "بہت" "بہت" Sg ;
-- must_VV = {
@@ -60,34 +62,34 @@ concrete StructuralUrd of Structural = CatUrd **
-- } ;
-----b no_Phr = ss "نo" ;
no_Utt = ss "نہیں" ;
on_Prep = ss "پر" ;
on_Prep = mkPrep "پر" "پر" ;
-- one_Quant = demoPN "ایك" "ایك" "ایك" ; -- DEPRECATED
only_Predet = ss "سرف" ;
or_Conj = sd2 [] "یا" ** {n = Sg} ;
otherwise_PConj = ss "یا پھر" ;
part_Prep = ss "" ;
otherwise_PConj = ss "یا پh-ر" ;
part_Prep = mkPrep "" "" ;
please_Voc = ss "مہربانi" ;
possess_Prep = ss "كا" ;
possess_Prep = mkPrep "كا" "كی" ;
quite_Adv = ss "كہامoسہ" ;
she_Pron = personalPN "وہ" "اس" "وہ" "اس كی" Sg Fem Pers3_Distant ;
so_AdA = ss "سo" ;
somebody_NP = MassNP (UseN (ParadigmsUrd.mkN "كوی" "كوی" "كوی" "كوی" "كوی" "كوی" Masc ));
someSg_Det = mkDet "كچھ" "كچھ" "كچھ" "كچھ" Sg ;
somePl_Det = mkDet "كچھ" "كچھ" "كچھ" "كچھ" Pl ;
something_NP = MassNP (UseN (ParadigmsUrd.mkN "كوی چیز" "كوی چیز" "كوی چیز" "كھ چیزیں" "كھ چیزوں" "كھ چیزو" Masc ));
somewhere_Adv = ss ہiن پر" ;
someSg_Det = mkDet "كچh-" "كچh-" "كچh-" "كچh-" Sg ;
somePl_Det = mkDet "كچh-" "كچh-" "كچh-" "كچh-" Pl ;
something_NP = MassNP (UseN (ParadigmsUrd.mkN "كوی چیز" "كوی چیز" "كوی چیز" "كh- چیزیں" "كh- چیزوں" "كh- چیزو" Masc ));
somewhere_Adv = mkAdv [ہiن پر"] ;
that_Quant = demoPN "وہ" "اس" "ان" ;
that_Subj = ss "كہ";
there_Adv = ss "وہاں" ;
there7to_Adv = ss "وہاں پر" ;
there7from_Adv = ss ["وہاں سے"] ;
there_Adv = mkAdv "وہاں" ;
there7to_Adv = mkAdv ["وہاں پر"] ;
there7from_Adv = mkAdv ["وہاں سے"] ;
therefore_PConj = ss "اس لیے" ;
they_Pron = personalPN "وہ" "وہ" "وہ" "ان كا" Pl Masc Pers3_Distant ; ----
this_Quant = demoPN "یہ" "اس" "ان";
through_Prep = ss ["میں سے"] ;
through_Prep = mkPrep ["میں سے"] ["میں سے"] ;
too_AdA = ss "بہت" ;
to_Prep = ss "كو" ;
under_Prep = ss "نیچے" ;
to_Prep = mkPrep "كو" "كو" ; -- ** {lock_Prep = <>};
under_Prep = mkPrep "نیچے" "نیچے" ; -- ** {lock_Prep = <>};
very_AdA = ss "بہت" ;
want_VV = mkV "چاہنا" ** { isAux = False} ;
we_Pron = personalPN "ہم" "ہم" "ہم" "ہمارا" Pl Masc Pers1 ;
@@ -102,25 +104,25 @@ concrete StructuralUrd of Structural = CatUrd **
whoSg_IP = mkIP "كون" "كiس" "كiس" Sg Masc ;
whoPl_IP = mkIP "كون" "كن" "كنہوں" Pl Masc ;
why_IAdv = ss "كیوں" ;
without_Prep = ss ["كے بغیر"] ;
with_Prep = ss ["كے ساتھ"] ;
without_Prep = mkPrep ["كے بغیر"] ["كے بغیر"] ;
with_Prep = mkPrep ["كے ساتh-"] ["كے ساتh-"] ;
-- yes_Phr = ss "ہاں" ;
yes_Utt = ss "ہاں" ;
youSg_Pron = personalPN "تم" "تم" "تم" "تمھارا" Sg Masc Pers2_Casual ;
youPl_Pron = personalPN "تم" "تم" "تم" "تمھارا" Pl Masc Pers2_Casual ;
youSg_Pron = personalPN "تم" "تم" "تم" "تمh-ارا" Sg Masc Pers2_Casual ;
youPl_Pron = personalPN "تم" "تم" "تم" "تمh-ارا" Pl Masc Pers2_Casual ;
youPol_Pron = personalPN "آپ" "آP" "آP" "آپ كا" Sg Masc Pers2_Respect ;
no_Quant = demoPN " كوی نہیں" "كوی نہیں" "كوی نہیں" ;
not_Predet = {s="نہیں"} ;
if_then_Conj = sd2 "اگر" "تو" ** {n = Sg} ;
at_least_AdN = ss ["كم از كم"] ;
at_most_AdN = ss ["زیادہ سے زیادہ"];
at_least_AdN = mkAdN ["كم از كم"] ;
at_most_AdN = mkAdN ["زیادہ سے زیادہ"];
nothing_NP = MassNP (UseN (ParadigmsUrd.mkN "كوی چیز نہیں" "كوی چیز نہیں" "كوی چیز نہیں" "كوی چیز نہیں" "كوی چیز نہیں" "كوی چیز نہیں" Masc ));
except_Prep = ss "سواے" ;
except_Prep = mkPrep "سواے" "سواے" ;
nobody_NP = MassNP (UseN (ParadigmsUrd.mkN "كوی نہیں" "كوی نہیں" "كوی نہیں" "كوی نہیں" "كوی نہیں" "كوی نہیں" Masc ));
as_CAdv = {s = "عتنا" ; p = "جتنا"} ;
have_V2 = mkV2 (mkV "راكھنا") "" ;
have_V2 = mkV2 (mkV "راكh-نا") "" ;
language_title_Utt = ss "اردو" ;

View File

@@ -1,46 +1,4 @@
--# -path=.:../abstract:../common
--# -path=.:../hindustani:../abstract:../common
concrete SymbolUrd of Symbol = CatUrd ** open Prelude, ResUrd in {
lin
-- SymbPN i = {s = \\_ => i.s ; g = Masc} ;
SymbPN i = {s = addGenitiveS i.s ; g = Masc} ;
IntPN i = {s = addGenitiveS i.s ; g = Masc} ;
FloatPN i = {s = addGenitiveS i.s ; g = Masc} ;
NumPN i = {s = \\_ =>i.s ; g = Masc} ;
CNIntNP cn i = {
s = \\c => cn.s ! Sg ! Dir ++ i.s ;
a = agrP3 cn.g Sg
} ;
CNSymbNP det cn xs = {
s = \\c => det.s!Sg!Masc ++ cn.s ! det.n ! Dir ++ xs.s ;
a = agrP3 cn.g det.n
} ;
CNNumNP cn i = {
s = \\c => cn.s ! Sg ! Dir ++ i.s ;
a = agrP3 cn.g Sg
} ;
SymbS sy = sy ;
SymbNum sy = { s = sy.s ; n = Pl } ;
SymbOrd sy = { s = sy.s ++ waN_Str ; n = Pl} ;
lincat
Symb, [Symb] = SS ;
lin
MkSymb s = s ;
BaseSymb = infixSS awr_Str
;
ConsSymb = infixSS [] ;
oper
-- Note: this results in a space before 's, but there's
-- not mauch we can do about that.
addGenitiveS : Str -> Case => Str = \s ->
table {_ => s ++ ka_Str} ;
}
concrete SymbolUrd of Symbol = CatUrd ** SymbolHindustani with
(ResHindustani = ResUrd) ;

View File

@@ -1,40 +1,2 @@
concrete VerbUrd of Verb = CatUrd ** open ResUrd in {
flags optimize=all_subs ;
lin
UseV v = predV v ;
SlashV2a v = predV v ** {c2 = {s = v.c2.s ; c = VIntrans}} ;
Slash2V3 v np =
insertObjc (\\_ => np.s ! NPObj ++ v.c3 ) (predV v ** {c2 = {s = v.c2 ; c = VTrans}}) ;
Slash3V3 v np =
insertObjc (\\_ => np.s ! NPC Obl ++ v.c2) (predV v ** {c2 = {s = v.c3 ; c = VTrans}}) ;
ComplVV v vp = insertVV (infVV v.isAux vp) (predV v) ;
ComplVS v s = insertObj2 (conjThat ++ s.s) (predV v) ;
ComplVQ v q = insertObj2 (conjThat ++ q.s ! QIndir) (predV v) ;
ComplVA v ap = insertObj (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ! Posit) (predV v) ;
SlashV2V v vp = insertVV ((vp.s!VPImp).inf++ky_Str) (predV v) **{c2 = {s = sE_Str ; c = VIntrans}} ;
SlashV2S v s = insertObjc2 (conjThat ++ s.s) (predV v ** {c2 = {s = kw_Str ; c = VIntrans}}) ;
SlashV2Q v q = insertObjc2 (conjThat ++ q.s ! QIndir) (predV v ** {c2 = {s = sE_Str ; c = VIntrans}}) ;
SlashV2A v ap = insertObjc (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ! Posit) (predV v ** {c2 = {s = kw_Str ; c = VIntrans}}) ; ----
ComplSlash vp np = insertObject np vp ;
SlashVV vv vp =
insertObj (\\a => infVP vv.isAux vp a) (predV vv) **
{c2 = vp.c2} ;
SlashV2VNP vv np vp =
insertObjPre (\\_ => np.s ! NPObj )
(insertObjc (\\a => infVP vv.isAux vp a) (predVc vv)) **
{c2 = vp.c2} ;
UseComp comp = insertObj comp.s (predAux auxBe) ;
AdvVP vp adv = insertObj (\\_ => adv.s) vp ;
AdVVP adv vp = insertAdV adv.s vp ;
ReflVP v = insertObjPre (\\_ => RefPron) v ;
PassV2 v = predV v ; -- need to be fixed
CompAP ap ={s = \\a => ap.s ! giveNumber a ! giveGender a ! Dir ! Posit } ;
CompNP np = {s = \\_ => np.s ! NPObj} ;
CompAdv a = {s = \\_ => a.s} ;
}
concrete VerbUrd of Verb = CatUrd ** VerbHindustani with
(ResHindustani = ResUrd) ;

115
lib/src/urdu/src/DiffUrd.gf Normal file
View File

@@ -0,0 +1,115 @@
instance DiffUrd of DiffHindustani = open CommonHindustani, Prelude in {
flags coding = utf8 ;
oper
Clause : Type = {s : VPHTense => Polarity => Order => Str} ;
mkClause : NP -> VPH -> Clause = \np,vp -> {
s = \\vt,b,ord =>
let
subjagr : NPCase * Agr = case vt of {
VPImpPast => case vp.subj of {
VTrans => <NPErg, vp.obj.a> ;
VTransPost => <NPErg, defaultAgr> ;
_ => <NPC Dir, np.a>
} ;
_ => <NPC Dir, np.a>
} ;
subj = subjagr.p1 ;
agr = subjagr.p2 ;
n = (fromAgr agr).n;
p = (fromAgr agr).p;
g = (fromAgr agr).g;
vps = case vt of {
VPGenPres => vp.s ! VPTense VPPres agr ;
VPImpPast => vp.s ! VPTense VPPast agr ;
VPFut => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).fin ; inf = (vp.s ! VPTense VPFutr agr).inf ++ hw p n} ;
_ => vp.s ! VPTense VPFutr agr } ;
VPContPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContPast => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n} ;
VPPerfPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPerf agr).inf } ;
VPPerfPast => {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPerf agr).inf } ;
VPPerfFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPerf agr).inf ++ hw p n } ;
VPPerfPresCont => {fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ;
VPPerfPastCont => {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ;
VPPerfFutCont => {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n } ;
VPSubj => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).inf ++ hw p n ; inf = "Xayd" } ;
_ => {fin = (vp.s ! VPTense VPFutr agr).inf ; inf = "Xayd" } }
};
quest =
case ord of
{ ODir => [];
OQuest => "kya" };
na =
case b of
{ Pos => [];
Neg => "na" };
nahim =
case b of
{ Pos => [];
Neg => "nhyN" };
in
case vt of {
VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ na ++ vps.inf ++ vps.fin ++ vp.embComp ;
_ => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp};
} ;
mkSClause : Str -> Agr -> VPH -> Clause =
\subj,agr,vp -> {
s = \\t,b,ord =>
let
n = (fromAgr agr).n;
p = (fromAgr agr).p;
g = (fromAgr agr).g;
vps = case t of {
VPGenPres => vp.s ! VPTense VPPres agr ;
VPImpPast => vp.s ! VPTense VPPast agr ;
VPFut => vp.s ! VPTense VPFutr agr ;
VPContPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContPast => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ;
VPPerfPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ;
VPPerfPast => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ;
VPPerfFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ;
VPPerfPresCont => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPPerfPastCont => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPPerfFutCont => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ;
VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "xayd" }
};
quest =
case ord of
{ ODir => [];
OQuest => "kya" };
na =
case b of
{ Pos => [];
Neg => "na" };
nahim =
case b of
{ Pos => [];
Neg => "nhyN" };
in
case t of {
VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ na ++ vps.inf ++ vps.fin ++ vp.embComp;
_ => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp};
} ;
np2pronCase ppf npc a = case npc of {
NPC c => ppf ! c;
NPObj => ppf ! Obl ;
NPErg => case (fromAgr a).p of {
(Pers3_Near|Pers3_Distant) => ppf ! Obl ++ "nE" ;
_ => ppf ! Dir ++ "nE"
}
} ;
}

View File

@@ -0,0 +1,19 @@
concrete ExtraUrd of ExtraUrdAbs = CatUrd **
open ResUrd, Coordination, Prelude, MorphoUrd, ParadigmsUrd,CommonHindustani in {
flags coding = utf8 ;
lin
GenNP np = {s = \\_,_,_ => np.s ! NPC Obl ++ "ka" ; a = np.a} ;
each_Det = mkDet "hr kwy" "hr kwy" "hr kwy" "hr kwy" Sg ;
have_V = mkV "rakh-na";
IAdvAdv adv = {s = "ktny" ++ adv.s ! Masc} ;
ICompAP ap = {s = "ktnE" ++ ap.s ! Sg ! Masc ! Dir ! Posit} ;
cost_V = mkV "qymt" ;
-- added for causitives
make_CV = mkVerb "nothing" ** {c2 = "" };
-- for VP conjunction
}

View File

@@ -1,10 +1,10 @@
concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd in {
concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd,ParamX,CommonHindustani in {
flags optimize=all_subs ;
flags coding = utf8;
lin
ImpersCl vp = mkSClause [] (agrP3 Masc Sg) vp ;
ImpersCl vp = mkSClause " " (agrP3 Masc Sg) vp ;
GenericCl vp = mkSClause "kwy" (agrP3 Masc Sg) vp ;
CleftNP np rs =
@@ -12,7 +12,7 @@ concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd in {
in
{s = \\t,p,o => cl.s ! t ! p ! o ++ rs.s ! np.a };
CleftAdv ad ss = { s = \\t,b,o => ad.s ++ ss.s};
CleftAdv ad ss = { s = \\t,b,o => ad.s ! Masc ++ ss.s};
ExistNP np =
mkSClause "whaN" (agrP3 (fromAgr np.a).g (fromAgr np.a).n)
@@ -27,7 +27,8 @@ concrete IdiomUrd of Idiom = CatUrd ** open Prelude,Predef, ResUrd in {
}
};
ProgrVP vp = insertObj (\\a => vp.obj.s ++ vp.ad ++ vp.comp ! a ++ (vp.s ! VPStem).inf ++ raha (fromAgr a).g (fromAgr a).n ) (predAux auxBe) ;
-- ProgrVP vp = insertObj (\\a => vp.obj.s ++ vp.ad ++ vp.comp ! a ++ (vp.s ! VPStem).inf ++ raha (fromAgr a).g (fromAgr a).n ) (predAux auxBe) ;
ProgrVP vp = (predProg vp) ;
ImpPl1 vp = {s = "Aw" ++ infVP True vp (agrP1 Masc Pl)} ;

View File

@@ -14,7 +14,7 @@ concrete LexiconUrd of Lexicon = CatUrd **
apartment_N = mkN "kmrh" ;
apple_N = mkN "syb" ;
art_N = mkN "fn" ;
ask_V2Q = mkV2 (mkV "pwch-na") ;
ask_V2Q = mkV2 (mkV "pwch'na") ;
baby_N = mkN "bch" ;
bad_A = mkA "bra" ;
bank_N = mkN "bank" ;
@@ -34,27 +34,27 @@ concrete LexiconUrd of Lexicon = CatUrd **
boy_N = mkN "lRka" ;
bread_N = mkN "rwty" ;
break_V2 = mkV2 (mkV "twRna") ;
broad_A = mkA "kh-la" ;
brother_N2 = mkN2 (mkN "bh-ay") (mkPrep "ka") "kE" ; --not correct
broad_A = mkA "kh'la" ;
brother_N2 = mkN2 (mkN "bh'ay") (mkPrep "ka" "ka") "kE" ; --not correct
brown_A = mkA "nswary" ;
butter_N = mkN "mkh-n" ;
butter_N = mkN "mkh'n" ;
buy_V2 = mkV2 (mkV "Krydna");
camera_N = mkN "kymrh" ;
cap_N = mkN "twpy" ;
car_N = mkN "gaRy" ;
carpet_N = mkN "tpay^y" ;
cat_N = mkN "bly" ;
ceiling_N = mkN "ch-t" feminine ;
ceiling_N = mkN "ch't" feminine ;
chair_N = mkN "krsy" ;
cheese_N = mkN "pnyr" feminine ;
child_N = mkN "bch" ;
church_N = mkCmpdNoun "grja" (mkN "gh-r") ;
church_N = mkCmpdNoun "grja" (mkN "gh'r") ;
city_N = mkN "Xhr" ;
clean_A = mkA "Saf" ;
clever_A = mkA "hwXyar" ;
close_V2 = mkV2 (compoundV "bnd" do_V2);
coat_N = mkN "kwT" ;
cold_A = mkA "Th-nDa" ;
cold_A = mkA "Th'nDa" ;
come_V = mkV "Ana" ;
computer_N = mkN "kmpywTr" ;
country_N = mkN "mlk" ;
@@ -62,75 +62,76 @@ concrete LexiconUrd of Lexicon = CatUrd **
cow_N = mkN "gaE" feminine ;
die_V = mkV "mrna" ;
dirty_A = mkA "gnda" ;
distance_N3 = mkN3 (mkN "faSlh") (mkPrep "ka") "kE" "sE" ;
distance_N3 = mkN3 (mkN "faSlh") (mkPrep "ka" "ka") "kE" "sE" ;
doctor_N = mkN "mealj" ;
dog_N = mkN "kta" ;
door_N = mkN "drwzh" ;
drink_V2 = mkV2 (mkV "pyna");
easy_A2V = mkA "Asan" "" ;
eat_V2 = mkV2 (mkV "kh-ana") "" ;
eat_V2 = mkV2 (mkV "kh'ana") "" ;
empty_A = mkA "Kaly" ;
enemy_N = mkN "dXmn" ;
factory_N = mkN "karKanh" ;
father_N2 = mkN2 (mkN "aba") (mkPrep "ka") "kE" ;
father_N2 = mkN2 (mkN "aba") (mkPrep "ka" "ka") "kE" ;
fear_VS = mkV "drna";
find_V2 = mkV2 (mkV "pana") ;
fish_N = mkN "mch-ly" ;
fish_N = mkN "mch'ly" ;
floor_N = mkN "frX" ;
forget_V2 = mkV2 (mkV "bh-wlna") ;
forget_V2 = mkV2 (mkV "bh'wlna") ;
fridge_N = mkN "fryg" ;
friend_N = mkN "dwst" masculine ;
fruit_N = mkN "ph-l" ;
-- fun_AV = mkAV (regA "fun") ;
-- friend_N = mkN "dwst" masculine ;
fruit_N = mkN "ph'l" ;
-- fun_AV = mkAV (regA "f?n") ;
garden_N = mkN "baG" ;
girl_N = mkN "lRky" ;
glove_N = mkN "dstanh" ;
gold_N = mkN "swna" ;
good_A = mkA "ach-a" ;
good_A = mkA "ach'a" ;
go_V = mkV "jana" ;
green_A = mkA "sbz" ;
harbour_N = mkCmpdNoun "bndr" (mkN "gah") ;
hate_V2 = mkV2 (compoundV "nfrt" do_V2) ;
hat_N = mkN "twpy" ;
-- have_V2 = dirV2 (mk5V "have" "has" "had" "had" "having") ;
-- have_V2 = dirV2 (mk5V "ha?e" "has" "had" "had" "ha??ng") ;
hear_V2 = mkV2 (mkV "snna") ;
hill_N = mkN "phaRy" ;
hope_VS = (compoundV "amyd" do_V2);
horse_N = mkN "gh-wRa" ;
horse_N = mkN "gh'wRa" ;
hot_A = mkA "grm" ;
house_N = mkN "gh-r" ;
house_N = mkN "gh'r" ;
important_A = mkA "ahm" ;
industry_N = mkN "Snet" feminine ;
iron_N = mkN "lwha" ;
king_N = mkN "badXah" ;
know_V2 = mkV2 (mkV "janna") ;
know_VS = mkV "janna";
lake_N = mkN "jh-yl" feminine ;
know_VS = (mkV "janna") ;
know_VQ = (mkV "janna") ;
lake_N = mkN "jh'yl" feminine ;
lamp_N = mkN "lymp" ;
learn_V2 = mkV2 (mkV "sykh-na") ;
learn_V2 = mkV2 (mkV "sykh'na") ;
leather_N = mkN "cmRa" ;
leave_V2 = mkV2 (mkV "jana") ;
like_V2 = mkV2 (compoundV "psnd" do_V2);
listen_V2 = mkV2 (mkV "snna") ;
live_V = mkV "rhna" ; ---- touch
long_A = mkA "lmba" ;
lose_V2 = mkV2 (compoundV "kh-w" do_V2) ;
lose_V2 = mkV2 (compoundV "kh'w" do_V2) ;
love_N = mkN "mHbt" ;
love_V2 = mkV2 (compoundV "pyar" do_V2) "kw";
man_N = mkN "Admy" ; -- not correct according to rules should be discussed
married_A2 = mkA "Xady krna" "sE" ;
married_A2 = mkA "Xady?krna" "sE" ;
meat_N = mkN "gwXt" ;
milk_N = mkN "dwdh-" ;
milk_N = mkN "dwdh'" ;
moon_N = mkN "cand" ;
mother_N2 = mkN2 (mkN "maN") (mkPrep "ky") "kE"; -- not covered need to be discussed
mother_N2 = mkN2 (mkN "maN") (mkPrep "ky" "ky") "kE"; -- not covered need to be discussed
mountain_N = mkN "phaRy" ;
music_N = mkN "mwsyqy" ;
narrow_A = mkA "baryk" ;
new_A = mkA "nya" ;
newspaper_N = mkN "aKbar" ;
oil_N = mkN "tyl" ;
old_A = mkA "bwRh-a" ;
open_V2 = mkV2 (mkV "kh-wlna") ;
old_A = mkA "bwRh'a" ;
open_V2 = mkV2 (mkV "kh'wlna") ;
paint_V2A = mkV2 (compoundV "rng" do_V2) ;
paper_N = mkN "kaGz" ;
paris_PN = mkPN "pyrs" ;
@@ -138,20 +139,20 @@ concrete LexiconUrd of Lexicon = CatUrd **
pen_N = mkN "pnsl" ;
planet_N = mkN "syarh" ;
plastic_N = mkN "plasTk" ;
play_V2 = mkV2 (mkV "kh-ylna") ;
play_V2 = mkV2 (mkV "kh'ylna") ;
policeman_N = mkCmpdNoun "pwlys" (mkN "wala") ;
priest_N = (mkN "pyGmbr") ;
-- probable_AS = mkAS (regA "probable") ;
-- probable_AS = mkAS (regA "pr?bable") ;
queen_N = mkN "Xhzady" ;
radio_N = mkN "ryDyw" ;
rain_V0 = compoundV "barX" (mkV "hwna" ) ;
read_V2 = mkV2 (mkV "pRh-na");
read_V2 = mkV2 (mkV "pRh'na");
red_A = mkA "lal" ;
religion_N = mkN "mzhb" ;
restaurant_N = mkN "hwTl" ;
river_N = mkN "drya" masculine ;
-- river_N = mkN "drya" masculine ;
rock_N = mkN "cTan" ;
roof_N = mkN "ch-t" masculine ;
-- roof_N = mkN "ch't" masculine ;
rubber_N = mkN "rbR" ;
run_V = mkV "dwRna" ;
say_VS = mkV "khna" ;
@@ -159,25 +160,25 @@ concrete LexiconUrd of Lexicon = CatUrd **
science_N = mkN "sans" ;
sea_N = mkN "smndr" ;
seek_V2 = mkV2 (compoundV "tlaX" do_V2) ;
see_V2 = mkV2 (mkV "dykh-na") ;
see_V2 = mkV2 (mkV "dykh'na") ;
sell_V3 = mkV3 (mkV "bycna") "kw" "";
send_V3 = mkV3 (mkV "bh-yjna") "kw" "";
sheep_N = mkN "bh-yR" feminine ;
send_V3 = mkV3 (mkV "bh'yjna") "kw" "";
sheep_N = mkN "bh'yR" feminine ;
ship_N = mkN "jhaz" ;
shirt_N = mkN "qmyZ-" feminine;
shoe_N = mkN "jwta" ;
shop_N = mkN "dwkan" feminine ;
short_A = mkA "ch-wTa" ;
short_A = mkA "ch'wTa" ;
silver_N = mkN "candy" ;
sister_N = mkN "bhn" feminine ;
sleep_V = mkV "swna" ;
small_A = mkA "ch-wTa" ;
small_A = mkA "ch'wTa" ;
snake_N = mkN "sanp" ;
sock_N = mkN "jrab" feminine ;
speak_V2 = mkV2 (mkV "bwlna") ;
star_N = mkN "stara" ;
steel_N = mkN "styl" ;
stone_N = mkN "pth-r" ;
stone_N = mkN "pth'r" ;
stove_N = mkN "cwlha" ;
student_N = mkCmpdNoun "t-alb" (mkN "elm") ;
stupid_A = mkA "aHmq" ;
@@ -185,99 +186,99 @@ concrete LexiconUrd of Lexicon = CatUrd **
switch8off_V2 = mkV2 (mkV "clana") ;
switch8on_V2 = mkV2 (compoundV "bnd" do_V2) ;
table_N = mkN "myz" feminine ;
talk_V3 = mkV3 (mkV "bwlna") "sE" "kE barE meN";
teacher_N = mkN "istad" ;
teach_V2 = mkV2 (mkV "pRh-na") ;
talk_V3 = mkV3 (mkV "bwlna") "sE" "kE?barE?meN";
teacher_N = mkN "?stad" ;
teach_V2 = mkV2 (mkV "pRh'na") ;
television_N = mkN "telywyzn" ;
thick_A = mkA "mwTa" ;
thin_A = mkA "ptla" ;
train_N = mkN "gaRy" ;
travel_V = (compoundV "sfr" do_V2) ;
tree_N = mkN "drKt" masculine ;
-- ---- trousers_N = mkN "trousers" ;
-- tree_N = mkN "drKt" masculine ;
-- ---- trousers_N = mkN "tr??sers" ;
ugly_A = mkA "bdSwrt" ;
understand_V2 = mkV2 (mkV "smjh-na") ;
understand_V2 = mkV2 (mkV "smjh'na") ;
university_N = mkN "ywnywrsTy" ;
village_N = mkN "gawN" ;
wait_V2 = mkV2 (compoundV "antz-ar" do_V2) ;
walk_V = mkV "clna" ;
warm_A = mkA "grm" ;
war_N = mkN "jng" ;
watch_V2 = mkV2 (mkV "dykh-na") ;
watch_V2 = mkV2 (mkV "dykh'na") ;
water_N = mkN "pany" ; -- not covered masculine ending with y
white_A = mkA "sfyd" ;
window_N = mkN "kh-Rky" ;
window_N = mkN "kh'Rky" ;
wine_N = mkN "Xrab" feminine ;
win_V2 = mkV2 (mkV "jytna") ;
woman_N = mkN "ewrt" feminine ;
wonder_VQ = compoundV "Heran" (mkV "hwna") ;
wood_N = mkN "lkRy" ;
write_V2 = mkV2 (mkV "lkh-na") ;
write_V2 = mkV2 (mkV "lkh'na") ;
yellow_A = mkA "pyla" ;
young_A = mkA "jwan" ;
do_V2 = mkV2 (mkV "krna") ;
now_Adv = mkAdv "ab" ;
already_Adv = mkAdv "phlE hy" ;
already_Adv = mkAdv "phlE?hy" ;
song_N = mkN "gana" ;
add_V3 = mkV3 (compoundV "aZ-afh" do_V2) "" "" ;
number_N = mkN "hndsh" ;
put_V2 = mkV2 (mkV "Dalna") ;
stop_V = mkV "rkna" ;
jump_V = mkV "ch-langna" ;
jump_V = mkV "ch'langna" ;
left_Ord = {s = "bayaN" ; n = singular};
right_Ord = {s= "dayaN" ; n = singular};
far_Adv = mkAdv "dwr" ;
correct_A = mkA "Syh" ;
dry_A = mkA "KXk" ;
dull_A = mkA "nalik" ;
dull_A = mkA "nal?k" ;
full_A = mkA "mkml" ;
heavy_A = mkA "bh-ary" ;
heavy_A = mkA "bh'ary" ;
near_A = mkA "qryb" ;
rotten_A = mkA "Krab" ;
round_A = mkA "gwl" ;
sharp_A = mkA "tyz" ;
smooth_A = mkA "hmwar" ;
straight_A = mkA "sydh-a" ;
straight_A = mkA "sydh'a" ;
wet_A = mkA "gyla" ; ----
wide_A = mkA "kh-la" ;
wide_A = mkA "kh'la" ;
animal_N = mkN "janwr" ;
ashes_N = mkN "rakh-" feminine; -- FIXME: plural only?
ashes_N = mkN "rakh'" feminine; -- FIXME: plural only?
back_N = mkN "qmr" feminine ;
bark_N = mkN "bark" ;
belly_N = mkN "dh-ny" ;
belly_N = mkN "dh'ny" ;
blood_N = mkN "Kwn" ;
bone_N = mkN "hDy" ;
breast_N = mkN "ch-aty" ;
breast_N = mkN "ch'aty" ;
cloud_N = mkN "badl" ;
day_N = mkN "dn" ;
dust_N = mkN "dh-wl" ;
dust_N = mkN "dh'wl" ;
ear_N = mkN "kan" ;
earth_N = mkN "zmyn" feminine ;
egg_N = mkN "anDh" ;
eye_N = mkN "Ankh-" feminine ;
eye_N = mkN "Ankh'" feminine ;
fat_N = mkN "mwta" ;
feather_N = mkN "pr" ;
fingernail_N = mkN "naKn" ;
fire_N = mkN "Ag" feminine ;
flower_N = mkN "ph-wl" ;
fog_N = mkN "dh-nd" feminine ;
flower_N = mkN "ph'wl" ;
fog_N = mkN "dh'nd" feminine ;
foot_N = mkN "pawN" ; -- not properly covered need to be discussed
forest_N = mkN "njgl" ;
grass_N = mkN "gh-s" feminine ;
guts_N = mkN "gut" ; -- FIXME: no singular
grass_N = mkN "gh's" feminine ;
guts_N = mkN "g?t" ; -- FIXME: no singular
hair_N = mkN "bal" ;
hand_N = mkN "hath-" ;
hand_N = mkN "hath'" ;
head_N = mkN "sr" ;
heart_N = mkN "dl" ;
horn_N = mkN "gh-nty" ;
horn_N = mkN "gh'nty" ;
husband_N = mkN "Xwhr" ;
ice_N = mkN "brf" feminine ;
knee_N = mkN "khny" ;
leaf_N = mkN "pth" ;
leg_N = mkN "tang" feminine ;
liver_N = mkN "jgr" ;
louse_N = mkN "gh-r" ;
louse_N = mkN "gh'r" ;
mouth_N = mkN "mnh" ;
name_N = mkN "nam" ;
neck_N = mkN "grdn" feminine ;
@@ -293,21 +294,21 @@ concrete LexiconUrd of Lexicon = CatUrd **
seed_N = mkN "byj" ;
skin_N = mkN "jld" feminine ;
sky_N = mkN "Asman" ;
smoke_N = mkN "dh-waN"; -- singular masc nouns ending with aN,wN yet to be implemented
smoke_N = mkN "dh'waN"; -- singular masc nouns ending with aN,wN yet to be implemented
snow_N = mkN "brf" feminine ;
stick_N = mkN "ch-Ry" ;
stick_N = mkN "ch'Ry" ;
tail_N = mkN "dm" ;
tongue_N = mkN "zban" feminine ;
tooth_N = mkN "dant" masculine;
-- tooth_N = mkN "dant" masculine;
wife_N = mkN "bywy" ;
wind_N = mkN "Andh-y" ;
wind_N = mkN "Andh'y" ;
wing_N = mkN "pr" ;
worm_N = mkN "grm" ;
year_N = mkN "sal" ;
blow_V = mkV "clna" ;
breathe_V = compoundV "sans" (mkV "lyna" ) ;
burn_V = mkV "jlna" ;
dig_V = mkV "kh-wdna" ;
dig_V = mkV "kh'wdna" ;
fall_V = mkV "grna" ;
float_V = mkV "tyrna" ;
flow_V = mkV "bhna" ;
@@ -315,16 +316,16 @@ concrete LexiconUrd of Lexicon = CatUrd **
freeze_V = mkV "jmna";
give_V3 = mkV3 (mkV "dyna") "kw" "";
laugh_V = mkV "hnsna" ;
-- lie_N = mkN "jh-wt" masculine ;
lie_V = compoundV "jh-wt" (mkV "bwlna" );
play_V = mkV "kh-ylna" ;
-- lie_N = mkN "jh'wt" masculine ;
lie_V = compoundV "jh'wt" (mkV "bwlna" );
play_V = mkV "kh'ylna" ;
sew_V = mkV "syna" ;
sing_V = mkV "gana" ;
sit_V = mkV "byTh-na" ;
sit_V = mkV "byTh'na" ;
smell_V = mkV "swngna" ;
spit_V = mkV "th-wkna" ;
stand_V = compoundV "kh-RE" (mkV "hwna" );
swell_V = mkV "swjh-na" ;
spit_V = mkV "th'wkna" ;
stand_V = compoundV "kh'RE" (mkV "hwna" );
swell_V = mkV "swjh'na" ;
swim_V = mkV "tyrna" ;
think_V = mkV "swcna" ;
turn_V = mkV "mRna";
@@ -334,36 +335,36 @@ concrete LexiconUrd of Lexicon = CatUrd **
cut_V2 = mkV2 (mkV "katna") ;
fear_V2 = mkV2 (mkV "Drna") ;
fight_V2 = mkV2 (mkV "lRna") ;
hit_V2 = mkV2 (compoundV "th-wkr" (mkV "marna" ));
hit_V2 = mkV2 (compoundV "th'wkr" (mkV "marna" ));
hold_V2 = mkV2 (mkV "pkRna") ;
hunt_V2 = mkV2 (compoundV "Xkar" do_V2);
kill_V2 = mkV2 (compoundV "mar" (mkV "Dalna" )) ;
pull_V2 = mkV2 (mkV "kh-ncna");
push_V2 = mkV2 (mkV "dh-kylna") "kw" ;
pull_V2 = mkV2 (mkV "kh'ncna");
push_V2 = mkV2 (mkV "dh'kylna") "kw" ;
rub_V2 = mkV2 (mkV "rgRna") ;
scratch_V2 = mkV2 (mkV "kh-rcna") "kw" ;
scratch_V2 = mkV2 (mkV "kh'rcna") "kw" ;
split_V2 = mkV2 (mkV "banta") "kw" ;
-- squeeze_V2 = dirV2 (regV "squeeze") ;
-- squeeze_V2 = dirV2 (regV "sq?eeze") ;
-- stab_V2 = dirV2 (regDuplV "stab") ;
suck_V2 = mkV2 (mkV "cwsna") ;
throw_V2 = mkV2 (mkV "ph-ynkna") ;
tie_V2 = mkV2 (mkV "bandh-na") ;
wash_V2 = mkV2 (mkV "dh-wna") ;
throw_V2 = mkV2 (mkV "ph'ynkna") ;
tie_V2 = mkV2 (mkV "bandh'na") ;
wash_V2 = mkV2 (mkV "dh'wna") ;
wipe_V2 = mkV2 (compoundV "Saf" (mkV "krna" ));
---- other_A = regA "other" ;
---- other_A = regA "?ther" ;
grammar_N = mkN "grdan" ;
language_N = mkN "zban" feminine ;
rule_N = mkN "aSwl" ;
---- added 4/6/2007
john_PN = mkPN "jon" ;
john_PN = mkPN "jan" ;
question_N = mkN "swal" ;
-- ready_A = regA "ready" ;
reason_N = mkN "wjh" feminine ;
today_Adv = mkAdv "Aj" ;
uncertain_A = mkA ["Gyr yqyny"] ;
uncertain_A = mkA ["Gyryqyny"] ;
}

View File

@@ -8,7 +8,7 @@
---- syntax. To build a lexicon, it is better to use $ParadigmsUrd$, which
---- gives a higher-level access to this module.
--
resource MorphoUrd = ResUrd ** open Prelude,Predef in {
resource MorphoUrd = ResUrd ** open CommonHindustani,Prelude,Predef,ParamX in {
flags optimize=all ;
coding = utf8;
@@ -42,6 +42,7 @@ oper
_ + "y" => mkN03 (s);
_ + ("aN"|"wN") => mkN04 (s);
_ + "w^" => mkN12 (s);
_ + "t" => mkN10 s ;
_ => regNoun2 (s)
};
regNoun2 : Str -> Noun;
@@ -195,7 +196,11 @@ oper
-- Proposition
makePrep : Str -> Preposition = \str -> {s = str};
makePrep : Str -> Str -> Preposition = \s1,s2 -> {s =
table {
Masc => s1;
Fem => s2
}; } ** { lock_Prep = <>};
----2 Pronouns
PronForm = {s:Pronoun => Str};

View File

@@ -1,45 +1,47 @@
concrete StructuralUrd of Structural = CatUrd **
open MorphoUrd, ParadigmsUrd, Prelude, NounUrd in {
open MorphoUrd, ParadigmsUrd, Prelude, NounUrd,ParamX,CommonHindustani in {
flags optimize=all ;
coding = utf8;
lin
above_Prep = ss "awpr" ;
after_Prep = ss "kE bed" ;
above_Prep = mkPrep "awpr" "awpr" ;
after_Prep = mkPrep ["kE bed"] ["kE bed"] ;
all_Predet = ss "tmam" ;
almost_AdA, almost_AdN = ss "tqryba" ;
almost_AdA, almost_AdN = mkAdN "tqryba" ;
although_Subj = ss "agrch-" ;
always_AdV = ss "hmyXh" ;
and_Conj = sd2 [] "awr" ** {n = Pl} ;
because_Subj = ss "kywnkh-" ;
before_Prep = ss "phlE" ;
behind_Prep = ss "pych-E" ;
between_Prep = ss "drmyaN" ;
before_Prep = mkPrep "phlE" "phlE" ;
behind_Prep = mkPrep "pych-E" "pych-E" ;
between_Prep = mkPrep "drmyaN" "drmyaN" ;
both7and_DConj = sd2 "dwnwN" "awr" ** {n = Pl} ;
but_PConj = ss "lykn" ;
by8agent_Prep = ss "" ;
by8means_Prep = ss "" ;
by8agent_Prep = mkPrep "" "" ;
by8means_Prep = mkPrep "" "" ;
can8know_VV,can_VV = mkV "skna" ** { isAux = True} ;
during_Prep = ss ["kE drmyaN"] ;
during_Prep = mkPrep ["kE drmyaN"] ["kE drmyaN"] ;
either7or_DConj = sd2 "kwy ayk" "ya" ** {n = Sg} ;
everybody_NP = MassNP (UseN (ParadigmsUrd.mkN "hr kwy" "hr kwy" "hr kwy" "hr kwy" "hr kwy" "hr kwy" Masc )); -- not a good way coz need to include NounUrd
every_Det = mkDet "hr" "hr" "hr" "hr" Sg;
everything_NP = MassNP (UseN (ParadigmsUrd.mkN "hr cyz" "hr cyz" "hr cyzw" "sb cyzyN" "sb cyzwN" "sb cyzw" Masc ));
everywhere_Adv = ss "hr jgh" ;
everywhere_Adv = mkAdv "hr jgh" ;
few_Det = mkDet "cnd" "cnd" "cnd" "cnd" Pl ;
for_Prep = ss "kylyE" ;
from_Prep = ss "sE" ;
first_Ord = {s = "pehla" ; n = Sg} ; --DEPRECATED
for_Prep = mkPrep "kylyE" "kylyE" ;
from_Prep = mkPrep "sE" "sE" ;
he_Pron = personalPN "wh" "as" "" "as ka" Sg Masc Pers3_Distant ;
here_Adv = ss "yhaN" ;
here7to_Adv = ss ["yhaN pr"] ;
here7from_Adv = ss ["yhaN sE"] ;
how_IAdv = ss "how" ;
here_Adv = mkAdv "yhaN" ;
here7to_Adv = mkAdv ["yhaN pr"] ;
here7from_Adv = mkAdv ["yhaN sE"] ;
how_IAdv = ss "kysE" ;
how8many_IDet = makeIDet "ktnE" "ktny" Pl ;
how8much_IAdv = ss "ktna" ;
if_Subj = ss "agr" ;
in8front_Prep = ss ["kE samnE"] ;
in8front_Prep = mkPrep ["kE samnE"] ["kE samnE"] ;
i_Pron = personalPN "myN" "mjh-" "" "myra" Sg Masc Pers1;
in_Prep = ss "meN" ;
in_Prep = mkPrep "meN" "meN" ;
it_Pron = personalPN "yh" "yh" "yh" "as ka" Sg Masc Pers3_Near;
less_CAdv = {s = "km" ; p = ""} ;
many_Det = mkDet "bht zyadh" "bht zyadh" "bht zyadh" "bht zyadh" Pl ;
@@ -60,14 +62,14 @@ concrete StructuralUrd of Structural = CatUrd **
-- } ;
-----b no_Phr = ss "no" ;
no_Utt = ss "nhyN" ;
on_Prep = ss "pr" ;
on_Prep = mkPrep "pr" "pr" ;
-- one_Quant = demoPN "ayk" "ayk" "ayk" ; -- DEPRECATED
only_Predet = ss "srf" ;
or_Conj = sd2 [] "ya" ** {n = Sg} ;
otherwise_PConj = ss "ya ph-r" ;
part_Prep = ss "" ;
part_Prep = mkPrep "" "" ;
please_Voc = ss "mhrbani" ;
possess_Prep = ss "ka" ;
possess_Prep = mkPrep "ka" "ky" ;
quite_Adv = ss "khamosh" ;
she_Pron = personalPN "wh" "as" "wh" "as ky" Sg Fem Pers3_Distant ;
so_AdA = ss "so" ;
@@ -75,19 +77,19 @@ concrete StructuralUrd of Structural = CatUrd **
someSg_Det = mkDet "kch-" "kch-" "kch-" "kch-" Sg ;
somePl_Det = mkDet "kch-" "kch-" "kch-" "kch-" Pl ;
something_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy cyz" "kwy cyz" "kwy cyz" "kh- cyzyN" "kh- cyzwN" "kh- cyzw" Masc ));
somewhere_Adv = ss "khin pr" ;
somewhere_Adv = mkAdv ["khin pr"] ;
that_Quant = demoPN "wh" "as" "an" ;
that_Subj = ss "kh";
there_Adv = ss "whaN" ;
there7to_Adv = ss "whaN pr" ;
there7from_Adv = ss ["whaN sE"] ;
there_Adv = mkAdv "whaN" ;
there7to_Adv = mkAdv ["whaN pr"] ;
there7from_Adv = mkAdv ["whaN sE"] ;
therefore_PConj = ss "as lyE" ;
they_Pron = personalPN "wh" "wh" "wh" "an ka" Pl Masc Pers3_Distant ; ----
this_Quant = demoPN "yh" "as" "an";
through_Prep = ss ["myN sE"] ;
through_Prep = mkPrep ["myN sE"] ["myN sE"] ;
too_AdA = ss "bht" ;
to_Prep = ss "kw" ;
under_Prep = ss "nycE" ;
to_Prep = mkPrep "kw" "kw" ; -- ** {lock_Prep = <>};
under_Prep = mkPrep "nycE" "nycE" ; -- ** {lock_Prep = <>};
very_AdA = ss "bht" ;
want_VV = mkV "cahna" ** { isAux = False} ;
we_Pron = personalPN "hm" "hm" "hm" "hmara" Pl Masc Pers1 ;
@@ -102,8 +104,8 @@ concrete StructuralUrd of Structural = CatUrd **
whoSg_IP = mkIP "kwn" "kis" "kis" Sg Masc ;
whoPl_IP = mkIP "kwn" "kn" "knhwN" Pl Masc ;
why_IAdv = ss "kywN" ;
without_Prep = ss ["kE bGyr"] ;
with_Prep = ss ["kE sath-"] ;
without_Prep = mkPrep ["kE bGyr"] ["kE bGyr"] ;
with_Prep = mkPrep ["kE sath-"] ["kE sath-"] ;
-- yes_Phr = ss "haN" ;
yes_Utt = ss "haN" ;
youSg_Pron = personalPN "tm" "tm" "tm" "tmh-ara" Sg Masc Pers2_Casual ;
@@ -112,10 +114,10 @@ concrete StructuralUrd of Structural = CatUrd **
no_Quant = demoPN " kwy nhyN" "kwy nhyN" "kwy nhyN" ;
not_Predet = {s="nhyN"} ;
if_then_Conj = sd2 "agr" "tw" ** {n = Sg} ;
at_least_AdN = ss ["km az km"] ;
at_most_AdN = ss ["zyadh sE zyadh"];
at_least_AdN = mkAdN ["km az km"] ;
at_most_AdN = mkAdN ["zyadh sE zyadh"];
nothing_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" Masc ));
except_Prep = ss "swaE" ;
except_Prep = mkPrep "swaE" "swaE" ;
nobody_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" Masc ));
as_CAdv = {s = "etna" ; p = "jtna"} ;

11
lib/src/urdu/translit.gfs Normal file
View File

@@ -0,0 +1,11 @@
rf -file=../hindustani/CommonHindustani.gf | ps -env=quotes -to_urdu | wf -file=CommonHindustani.gf
rf -file=../hindustani/ExtraHindustani.gf | ps -env=quotes -to_urdu | wf -file=ExtraHindustani.gf
rf -file=../hindustani/ResHindustani.gf | ps -env=quotes -to_urdu | wf -file=ResHindustani.gf
rf -file=../hindustani/StringsHindustani.gf | ps -env=quotes -to_urdu | wf -file=StringsHindustani.gf
rf -file=src/DiffUrd.gf | ps -env=quotes -to_urdu | wf -file=DiffUrd.gf
rf -file=src/ExtraUrd.gf | ps -env=quotes -to_urdu | wf -file=ExtraUrd.gf
rf -file=src/IdiomUrd.gf | ps -env=quotes -to_urdu | wf -file=IdiomUrd.gf
rf -file=src/LexiconUrd.gf | ps -env=quotes -to_urdu | wf -file=LexiconUrd.gf
rf -file=src/MorphoUrd.gf | ps -env=quotes -to_urdu | wf -file=MorphoUrd.gf
rf -file=src/StructuralUrd.gf | ps -env=quotes -to_urdu | wf -file=StructuralUrd.gf

View File

@@ -1,6 +0,0 @@
rf -file=transliterated/IdiomUrd.gf | ps -env=quotes -to_urdu | wf -file=IdiomUrd.gf
rf -file=transliterated/LexiconUrd.gf | ps -env=quotes -to_urdu | wf -file=LexiconUrd.gf
rf -file=transliterated/MorphoUrd.gf | ps -env=quotes -to_urdu | wf -file=MorphoUrd.gf
rf -file=transliterated/NumeralUrd.gf | ps -env=quotes -to_urdu | wf -file=NumeralUrd.gf
rf -file=transliterated/ResUrd.gf | ps -env=quotes -to_urdu | wf -file=ResUrd.gf
rf -file=transliterated/StructuralUrd.gf | ps -env=quotes -to_urdu | wf -file=StructuralUrd.gf

View File

@@ -1,127 +0,0 @@
concrete NumeralUrd of Numeral = CatUrd ** open ResUrd in {
-- By Harald Hammarström
-- Modification for Urdu Shafqat Virk
flags coding=utf8 ;
--- still old Devanagari coding
param DForm = unit | ten ;
param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;
param Size = sing | less100 | more100 ;
oper LinDigit = {s : DForm => Str ; size : DSize ; n : Number} ;
lincat Dig = { s:Str ; n : Number};
lincat Digit = LinDigit ;
lincat Sub10 = {s : DForm => Str ; size : DSize ; n : Number} ;
lincat Sub100 = {s : Str ; size : Size ; n : Number} ;
lincat Sub1000 = {s : Str ; s2 : Str ; size : Size ; n : Number } ;
lincat Sub1000000 = { s : Str ; n : Number } ;
lin num x0 =
{s = table {
NCard => x0.s ;
NOrd => x0.s ++ "waN" -- need to use mkOrd which will make irregular ordinals but it gives path error
};
n = x0.n
} ;
oper mkOrd : Str -> Str =
\s -> case s of {
"ek" => "phla";
"do" => "dwsra";
"ti:n" => "tesra";
"ca:r" => "cwth-a";
("cHah"|"cHa"|"cHai") => "ch-Ta";
_ => s ++ "waN"
};
-- {s = \\_ => x0.s ; n = x0.n} ;
oper mkNum : Str -> Str -> DSize -> LinDigit =
\do -> \bis -> \sz ->
{s = table {unit => do ; ten => bis } ;
size = sz ; n = Pl} ;
lin n2 = mkNum "dw" "bys" r2 ;
lin n3 = mkNum "tyn" "tys" r3 ;
lin n4 = mkNum "car" "calys" r4 ;
lin n5 = mkNum "panc" "pcas" r5 ;
lin n6 = mkNum "ch-" "sath-" r6 ;
lin n7 = mkNum "sat" "str" r7;
lin n8 = mkNum "Ath-" "asy" r8;
lin n9 = mkNum "nw" "nwE" r9 ;
oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table {
sg => a1 + "ah" ;
r2 => a2 + "i:s" ;
r3 => a3 + "ti:s" ;
r4 => a4 + "a:li:s" ;
r5 => a5 + "an" ;
r6 => a6 + "saTH" ;
r7 => a7 + "hattar" ;
r8 => a8 + "a:si:" ;
r9 => a9 + "a:nave"
} ;
oper rows : DSize => DSize => Str = table {
sg => mkR "gyarh" "ikk" "ikat" "ekt" "ikyaw" "ik" "ik" "iky" "iky" ;
r2 => mkR "barh" "bay" "bat" "bay" "baw" "ba" "ba" "bay" "b" ;
r3 => mkR "tyr" "ty" "tyn" "tnt" "trp" "try" "t" "tr" "tr" ;
r4 => mkR "cwd" "cwb" "cwn" "cwa" "cww" "cwn" "cwh" "cwr" "cwr" ;
r5 => mkR "pnd" "pcy" "pyn" "pnta" "pcp" "pyn" "ph" "pc" "pc" ;
r6 => mkR "swl" "ch-b" "ch-t" "ch-y" "ch-p" "ch-ya" "ch-" "ch-y" "ch-y" ;
r7 => mkR "str" "sta" "syn" "snt" "staw" "sta" "sr" "st" "sta" ;
r8 => mkR "ath-ar" "ath-ay" "aR" "aRt" "ath-aw" "aR" "ath-" "ath-" "ath-" ;
r9 => table {sg => "anys" ; r2 => "antys" ; r3 => "antalys" ;
r4 => "ancas" ; r5 => "ansth-" ; r6 => "anhtr" ;
r7 => "anasy" ;
r8 => "ananwE" ; r9 => "nnanwE" }
} ;
oper ss : Str -> {s : Str} = \s -> {s = s} ;
lin pot01 = {s = table {unit => "ayk" ; _ => "dummy" } ; size = sg ; n = Sg} ;
lin pot0 d = d ;
lin pot110 = {s = "das" ; size = less100 ; n = Pl} ;
lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ;
lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ;
lin pot0as1 n = {s = n.s ! unit ; size = table {sg => sing ; _ => less100} ! n.size ; n = n.n } ;
lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ;
lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ;
lin pot1as2 n = {s = n.s ; s2 = "dummy" ; size = n.size ; n = n.n} ;
lin pot2 d = {s = (mksau (d.s ! unit) d.size) ;
s2 = d.s ! unit ++ "lakh-" ; size = more100 ; n = d.n} ;
lin pot2plus d e =
{s = (mksau (d.s ! unit) d.size) ++ e.s ;
s2 = (d.s ! unit) ++ "lakh-" ++ (mkhazar e.s e.size) ;
size = more100 ; n = d.n} ;
lin pot2as3 n = {s = n.s ; n = n.n} ;
lin pot3 n = {s = table { sing => ekhazar ;
less100 => n.s ++ "hzar" ;
more100 => n.s2 } ! n.size ; n = n.n} ;
lin pot3plus n m =
{s = table {sing => ekhazar ;
less100 => n.s ++ "hzar" ;
more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ;
lin D_0 = { s = "0" ; n = Sg};
lin D_1 = { s = "1" ; n = Sg};
lin D_2 = { s = "2" ; n = Pl};
lin D_3 = { s = "3" ; n = Pl};
lin D_4 = { s = "4" ; n = Pl};
lin D_5 = { s = "5" ; n = Pl};
lin D_6 = { s = "6" ; n = Pl};
lin D_7 = { s = "7" ; n = Pl};
lin D_8 = { s = "8" ; n = Pl};
lin D_9 = { s = "9" ; n = Pl};
lin IDig d = { s = \\_ => d.s ; n = d.n} ;
lin IIDig d dg = { s = \\df => dg.s ! df ++ d.s ; n = Pl }; -- need to use + rather than ++, but gives error need to discuss
oper ekhazar : Str = variants {"hzar" ; "ayk" ++ "hzar"} ;
oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {sing => ekhazar ; _ => s ++ "hzar"} ! sz ;
oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "sw" ; _ => s ++ "sw"} ! sz ;
}

View File

@@ -1,641 +0,0 @@
--# -path=.:../abstract:../common:../../prelude
--
--1 Urdu auxiliary operations.
--
-- This module contains operations that are needed to make the
-- resource syntax work.
resource ResUrd = ParamX ** open Prelude,Predef in {
flags optimize=all ;
coding = utf8;
param
Case = Dir | Obl | Voc ;
Gender = Masc | Fem ;
VTense = Subj | Perf | Imperf;
UPerson = Pers1
| Pers2_Casual
| Pers2_Familiar
| Pers2_Respect
| Pers3_Near
| Pers3_Distant;
Order = ODir | OQuest ;
--2 For $Relative$
RAgr = RNoAg | RAg Agr ;
RCase = RC Number Case ;
-- for Numerial
CardOrd = NCard | NOrd ;
-----------------------------------------
-- Urd Pronouns
-----------------------------------------
Pronoun = P Number Gender Case UPerson;
PersPronForm = PPF Number UPerson Case;
-------------------------------------------
--Verbs
-------------------------------------------
VerbForm = VF VTense UPerson Number Gender
| Inf
| Root
| Inf_Obl
| Inf_Fem;
oper
Noun = {s : Number => Case => Str ; g : Gender} ;
Verb = {s : VerbForm => Str} ;
Preposition = {s : Str};
DemPronForm = {s : Number => Gender => Case => Str};
PossPronForm = {s : Number => Gender => Case => Str};
Determiner = {s : Number => Gender => Str ; n : Number};
-- a useful oper
eq : Str -> Str -> Bool = \s1,s2-> (pbool2bool (eqStr s1 s2)) ;
-----------------------------------------------
-- Urd Adjectives
-----------------------------------------------
Adjective = { s: Number => Gender => Case => Degree => Str };
mkAdjective : (x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36:Str) -> Adjective =
\y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21,y22,y23,y24,y25,y26,y27,y28,y29,y30,y31,y32,y33,y34,y35,y36 -> {
s = table {
Sg => table {
Masc => table {
Dir => table {
Posit => y1 ;
Compar => y2 ;
Superl => y3
};
Obl => table {
Posit => y4 ;
Compar => y5 ;
Superl => y6
};
Voc => table {
Posit => y7 ;
Compar => y8 ;
Superl => y9
}
};
Fem => table {
Dir => table {
Posit => y10 ;
Compar => y11 ;
Superl => y12
};
Obl => table {
Posit => y13 ;
Compar => y14 ;
Superl => y15
};
Voc => table {
Posit => y16 ;
Compar => y17 ;
Superl => y18
}
}
};
Pl => table {
Masc => table {
Dir => table {
Posit => y19 ;
Compar => y20 ;
Superl => y21
};
Obl => table {
Posit => y22 ;
Compar => y23 ;
Superl => y24
};
Voc => table {
Posit => y25 ;
Compar => y26 ;
Superl => y27
}
};
Fem => table {
Dir => table {
Posit => y28 ;
Compar => y29 ;
Superl => y30
};
Obl => table {
Posit => y31 ;
Compar => y32 ;
Superl => y33
};
Voc => table {
Posit => y34 ;
Compar => y35 ;
Superl => y36
}
}
}
}
};
regAdjective : Str -> Adjective;
regAdjective x = case x of {
acch + ("a"|"aN") => mkAdjective x ("bht" ++ x) ("sab sE" ++ x) (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E")
(acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y")
(acch +"E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sab sE" ++ acch + "E")
(acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sab sE" ++ acch + "y");
_ => mkAdjective x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
};
RefPron : Str;
RefPron = "Kwd";
----------------------------------------------------------
-- Grammar part
----------------------------------------------------------
param
Agr = Ag Gender Number UPerson ;
NPCase = NPC Case | NPObj | NPErg ;
oper
np2pronCase : (Case => Str) -> NPCase -> Str = \ppf,npc -> case npc of {
NPC c => ppf ! c;
NPObj => ppf ! Dir ;
NPErg => ppf ! Obl ++ "ne"
} ;
toNP : ( Case => Str) -> NPCase -> Str = \pn, npc -> case npc of {
NPC c => pn ! c ;
NPObj => pn ! Dir ;
NPErg => pn ! Obl ++ "ne"
} ;
detcn2NP : (Determiner) -> Noun -> NPCase -> Number -> Str = \dt,cn,npc,nn -> case npc of {
NPC c => dt.s ! Sg ! Masc ++ cn.s ! nn ! Dir ;
NPObj => dt.s ! Sg ! Masc ++ cn.s ! nn ! Dir ;
NPErg => dt.s ! Sg ! Masc ++ cn.s ! nn ! Obl ++ "ne"
} ;
det2NP : (Determiner) -> NPCase -> Str = \dt,npc -> case npc of {
NPC c => dt.s ! Sg ! Masc ;
NPObj => dt.s ! Sg ! Masc ;
NPErg => dt.s ! Sg ! Masc ++ "ne"
} ;
------------------------------------------
-- Agreement transformations
-----------------------------------------
toAgr : Number -> UPerson -> Gender -> Agr = \n,p,g ->
Ag g n p;
fromAgr : Agr -> {n : Number ; p : UPerson ; g : Gender} = \a -> case a of {
Ag g n p => {n = n ; p = p ; g = g}
} ;
conjAgr : Agr -> Agr -> Agr = \a0,b0 ->
let a = fromAgr a0 ; b = fromAgr b0
in
toAgr
(conjNumber a.n b.n)
b.p a.g;
giveNumber : Agr -> Number =\a -> case a of {
Ag _ n _ => n
};
giveGender : Agr -> Gender =\a -> case a of {
Ag g _ _ => g
};
defaultAgr : Agr = agrP3 Masc Sg ;
agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n Pers3_Distant ;
personalAgr : Agr = agrP1 Masc Sg ;
agrP1 : Gender -> Number -> Agr = \g,n -> Ag g n Pers1 ;
param
CPolarity =
CPos
| CNeg Bool ; -- contracted or not
oper
contrNeg : Bool -> Polarity -> CPolarity = \b,p -> case p of {
Pos => CPos ;
Neg => CNeg b
} ;
NP : Type = {s : NPCase => Str ; a : Agr} ;
param
CTense = CPresent | CPast | CFuture ;
oper
copula : CTense -> Number -> UPerson -> Gender -> Str = \t,n,p,g ->
case <t,n,p,g> of {
<CPresent,Sg,Pers1,_ > => "hwN" ;
<CPresent,Sg,Pers2_Casual,_ > => "hE" ;
<CPresent,Sg,Pers2_Familiar,_ > => "hw" ;
<CPresent,Sg,Pers2_Respect,_ > => "hyN" ;
<CPresent,Sg,Pers3_Near,_ > => "hE" ;
<CPresent,Sg,Pers3_Distant,_ > => "hE" ;
<CPresent,Pl,Pers1,_ > => "hyN" ;
<CPresent,Pl,Pers2_Casual,_ > => "hw" ;
<CPresent,Pl,Pers2_Familiar,_ > => "hw" ;
<CPresent,Pl,Pers2_Respect,_ > => "hyN" ;
<CPresent,Pl,Pers3_Near,_ > => "hyN" ;
<CPresent,Pl,Pers3_Distant,_ > => "hyN" ;
<CPast,Sg,Pers1,Masc > => "th-a" ;
<CPast,Sg,Pers1,Fem > => "th-y" ;
<CPast,Sg,Pers2_Casual,Masc > => "th-a" ;
<CPast,Sg,Pers2_Casual,Fem > => "th-y" ;
<CPast,Sg,Pers2_Familiar,Masc > => "th-a" ;
<CPast,Sg,Pers2_Familiar,Fem > => "th-y" ;
<CPast,Sg,Pers2_Respect,Masc > => "th-E" ;
<CPast,Sg,Pers2_Respect,Fem > => "th-yN" ;
<CPast,Sg,Pers3_Near,Masc > => "th-a" ;
<CPast,Sg,Pers3_Near,Fem > => "th-y" ;
<CPast,Sg,Pers3_Distant,Masc > => "th-a" ;
<CPast,Sg,Pers3_Distant,Fem > => "th-y" ;
<CPast,Pl,Pers1,Masc > => "th-E" ;
<CPast,Pl,Pers1,Fem > => "th-yN" ;
<CPast,Pl,Pers2_Casual,Masc > => "th-E" ;
<CPast,Pl,Pers2_Casual,Fem > => "th-yN" ;
<CPast,Pl,Pers2_Familiar,Masc > => "th-E" ;
<CPast,Pl,Pers2_Familiar,Fem > => "th-yN" ;
<CPast,Pl,Pers2_Respect,Masc > => "th-E" ;
<CPast,Pl,Pers2_Respect,Fem > => "th-yN" ;
<CPast,Pl,Pers3_Near,Masc > => "th-E" ;
<CPast,Pl,Pers3_Near,Fem > => "th-yN" ;
<CPast,Pl,Pers3_Distant,Masc > => "th-E" ;
<CPast,Pl,Pers3_Distant,Fem > => "th-yN" ;
<CFuture,Sg,Pers1,Masc > => "ga" ;
<CFuture,Sg,Pers1,Fem > => "gy" ;
<CFuture,Sg,Pers2_Casual,Masc > => "ga" ;
<CFuture,Sg,Pers2_Casual,Fem > => "gi" ;
<CFuture,Sg,Pers2_Familiar,Masc > => "gE" ;
<CFuture,Sg,Pers2_Familiar,Fem > => "gy" ;
<CFuture,Sg,Pers2_Respect,Masc > => "gE" ;
<CFuture,Sg,Pers2_Respect,Fem > => "gy" ;
<CFuture,Sg,Pers3_Near,Masc > => "ga" ;
<CFuture,Sg,Pers3_Near,Fem > => "gy" ;
<CFuture,Sg,Pers3_Distant,Masc > => "ga" ;
<CFuture,Sg,Pers3_Distant,Fem > => "gy" ;
<CFuture,Pl,Pers1,Masc > => "gE" ;
<CFuture,Pl,Pers1,Fem > => "gy" ;
<CFuture,Pl,Pers2_Casual,Masc > => "gE" ;
<CFuture,Pl,Pers2_Casual,Fem > => "gy" ;
<CFuture,Pl,Pers2_Familiar,Masc > => "gE" ;
<CFuture,Pl,Pers2_Familiar,Fem > => "gy" ;
<CFuture,Pl,Pers2_Respect,Masc > => "gE" ;
<CFuture,Pl,Pers2_Respect,Fem > => "gy" ;
<CFuture,Pl,Pers3_Near,Masc > => "gE" ;
<CFuture,Pl,Pers3_Near,Fem > => "gE" ;
<CFuture,Pl,Pers3_Distant,Masc > => "gE" ;
<CFuture,Pl,Pers3_Distant,Fem > => "gy"
} ;
param
VPPTense =
VPPres
|VPPast
|VPFutr;
VPHTense =
VPGenPres -- impf hum nahim "I go"
| VPImpPast -- impf Ta nahim "I went"
| VPFut -- fut na/nahim "I shall go"
| VPContPres -- stem raha hum nahim "I am going"
| VPContPast -- stem raha Ta nahim "I was going"
| VPContFut
| VPPerfPres -- perf hum na/nahim "I have gone"
| VPPerfPast -- perf Ta na/nahim "I had gone"
| VPPerfFut
| VPPerfPresCont
| VPPerfPastCont
| VPPerfFutCont
| VPSubj -- subj na "I may go"
;
VPHForm =
VPTense VPPTense Agr -- 9 * 12
| VPReq
| VPImp
| VPReqFut
| VPInf
| VPStem
;
VType = VIntrans | VTrans | VTransPost ;
oper
objVType : VType -> NPCase = \vt -> case vt of {
VTrans => NPObj ;
_ => NPC Obl
} ;
VPH : Type = {
s : VPHForm => {fin, inf : Str} ;
obj : {s : Str ; a : Agr} ;
subj : VType ;
comp : Agr => Str;
inf : Str;
ad : Str;
embComp : Str ;
} ;
VPHSlash = VPH ** {c2 : Compl} ;
Compl : Type = {s : Str ; c : VType} ;
predV : Verb -> VPH = \verb -> {
s = \\vh =>
case vh of {
VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = verb.s ! VF Imperf p n g } ;
VPTense VPPast (Ag g n p) => {fin = [] ; inf =verb.s ! VF Perf p n g} ;
VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = verb.s ! VF Subj p n g } ;
VPStem => {fin = [] ; inf = verb.s ! Root};
_ => {fin = [] ; inf = verb.s ! Root}
};
obj = {s = [] ; a = defaultAgr} ;
subj = VTrans ;
inf = verb.s ! Inf;
ad = [];
embComp = [];
comp = \\_ => []
} ;
predVc : (Verb ** {c2,c1 : Str}) -> VPHSlash = \verb ->
predV verb ** {c2 = {s = verb.c1 ; c = VTrans} } ;
raha : Gender -> Number -> Str = \g,n ->
(regAdjective "rha").s ! n ! g ! Dir ! Posit ;
cka : Gender -> Number -> Str = \g,n ->
(regAdjective "cka").s ! n ! g ! Dir ! Posit ;
hw : UPerson -> Number -> Str = \pp,n ->
case <pp,n> of {
<Pers1,_> => "hwN";
<_,Pl> => "hwN";
<_,_> => "hw"
};
predAux : Aux -> VPH = \verb -> {
s = \\vh =>
let
inf = verb.inf ;
part = verb.ppart ;
in
case vh of {
VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = part } ;
VPTense VPPast (Ag g n p) => {fin = copula CPast n p g ; inf = part } ;
VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = part ++ hw p n } ;
VPStem => {fin = [] ; inf = "rh" };
_ => {fin = part ; inf = [] }
};
obj = {s = [] ; a = defaultAgr} ;
subj = VIntrans ;
inf = verb.inf;
ad = [];
embComp = [];
comp = \\_ => []
} ;
Aux = {
inf,ppart,prpart : Str
} ;
auxBe : Aux = {
inf = "" ;
ppart = "" ;
prpart = ""
} ;
Clause : Type = {s : VPHTense => Polarity => Order => Str} ;
mkClause : NP -> VPH -> Clause = \np,vp -> {
s = \\vt,b,ord =>
let
subjagr : NPCase * Agr = case vt of {
VPImpPast => case vp.subj of {
VTrans => <NPErg, vp.obj.a> ;
VTransPost => <NPErg, defaultAgr> ;
_ => <NPC Dir, np.a>
} ;
_ => <NPC Dir, np.a>
} ;
subj = subjagr.p1 ;
agr = subjagr.p2 ;
n = (fromAgr agr).n;
p = (fromAgr agr).p;
g = (fromAgr agr).g;
vps = case vt of {
VPGenPres => vp.s ! VPTense VPPres agr ;
VPImpPast => vp.s ! VPTense VPPast agr ;
VPFut => vp.s ! VPTense VPFutr agr ;
VPContPres =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContPast =>
{fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContFut =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n} ;
VPPerfPres =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ;
VPPerfPast =>
{fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ;
VPPerfFut =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ;
VPPerfPresCont =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ;
VPPerfPastCont =>
{fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ;
VPPerfFutCont =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n } ;
VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "xayd" }
};
quest =
case ord of
{ ODir => [];
OQuest => "kya" };
na =
case b of
{ Pos => [];
Neg => "na" };
nahim =
case b of
{ Pos => [];
Neg => "nhyN" };
in
case vt of {
VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ na ++ vps.inf ++ vps.fin ++ vp.embComp ;
_ => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp};
} ;
mkSClause : Str -> Agr -> VPH -> Clause =
\subj,agr,vp -> {
s = \\t,b,ord =>
let
n = (fromAgr agr).n;
p = (fromAgr agr).p;
g = (fromAgr agr).g;
vps = case t of {
VPGenPres => vp.s ! VPTense VPPres agr ;
VPImpPast => vp.s ! VPTense VPPast agr ;
VPFut => vp.s ! VPTense VPFutr agr ;
VPContPres =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContPast =>
{fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPContFut =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ;
VPPerfPres =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ;
VPPerfPast =>
{fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ;
VPPerfFut =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ;
VPPerfPresCont =>
{fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPPerfPastCont =>
{fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ;
VPPerfFutCont =>
{fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ;
VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "xayd" }
};
quest =
case ord of
{ ODir => [];
OQuest => "kya" };
na =
case b of
{ Pos => [];
Neg => "na" };
nahim =
case b of
{ Pos => [];
Neg => "nhyN" };
in
case t of {
VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ na ++ vps.inf ++ vps.fin ++ vp.embComp;
_ => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp};
} ;
insertSubj : UPerson -> Str -> Str = \p,s ->
case p of { Pers1 => s ++ "wN" ; _ => s ++ "E"};
insertObj : (Agr => Str) -> VPH -> VPH = \obj1,vp -> {
s = vp.s ;
obj = vp.obj ;
subj = vp.subj ;
inf = vp.inf;
ad = vp.ad;
embComp = vp.embComp;
comp = \\a => vp.comp ! a ++ obj1 ! a
} ;
insertVV : Str -> VPH -> VPH = \obj1,vp -> {
s = vp.s ;
obj = vp.obj ;
subj = vp.subj ;
inf = vp.inf;
ad = vp.ad;
embComp = vp.embComp;
comp = \\a => vp.comp ! a ++ obj1
} ;
insertObj2 : (Str) -> VPH -> VPH = \obj1,vp -> {
s = vp.s;
obj = vp.obj ;
subj = vp.subj ;
inf = vp.inf;
ad = vp.ad;
embComp = vp.embComp ++ obj1;
comp = vp.comp
} ;
insertObjc : (Agr => Str) -> VPHSlash -> VPHSlash = \obj,vp ->
insertObj obj vp ** {c2 = vp.c2} ;
insertObjc2 : Str -> VPHSlash -> VPHSlash = \obj,vp ->
insertObj2 obj vp ** {c2 = vp.c2} ;
infVP : Bool -> VPH -> Agr -> Str = \isAux,vp,a ->
vp.obj.s ++ vp.inf ++ vp.comp ! a ;
infVV : Bool -> VPH -> Str = \isAux,vp ->
case isAux of {False => vp.inf ; True => (vp.s ! VPImp).fin };
insertObject : NP -> VPHSlash -> VPH = \np,vps -> {
s = vps.s ;
obj = {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} ;
subj = vps.c2.c ;
inf = vps.inf;
ad = vps.ad;
embComp = vps.embComp;
comp = vps.comp
} ;
insertObjPre : (Agr => Str) -> VPHSlash -> VPH = \obj,vp -> {
s = vp.s ;
obj = vp.obj ;
inf = vp.inf ;
subj = vp.subj ;
ad = vp.ad ;
embComp = vp.embComp;
comp = \\a => obj ! a ++ vp.c2.s ++ vp.comp ! a
} ;
insertAdV : Str -> VPH -> VPH = \ad,vp -> {
s = vp.s ;
obj = vp.obj ;
inf = vp.inf ;
subj = vp.subj;
ad = vp.ad ++ ad ;
embComp = vp.embComp;
comp = vp.comp
} ;
conjThat : Str = "kh" ;
-- strings collected from syntax files, AR
oper
sE_Str = "sE" ;
ka_Str = "ka" ;
hr_kwy_Str = "hr kwy" ;
rakh6na_Str = "rakh-na" ;
comma_Str = "," ;
agr_Str = "agr" ;
nE_Str = "nE" ;
jw_Str = "jw" ;
js_Str = "js" ;
jn_Str = "jn" ;
mt_Str = "mt" ;
nh_Str = "nh" ;
waN_Str = "waN" ;
awr_Str = "awr" ;
ky_Str = "ky" ;
kw_Str = "kw" ;
}