summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvirk.shafqat <virk.shafqat@gmail.com>2012-03-05 09:46:05 +0000
committervirk.shafqat <virk.shafqat@gmail.com>2012-03-05 09:46:05 +0000
commitf4fb8fe57d309c05c46e8d7459e550a1b7c6c4d9 (patch)
treefe59f753af980a345d4f4d7b5b40dad9151f83b2
parent2ffa5f70da24110a69ff968bc459218a4068c16d (diff)
HinPesPhrasebook
-rw-r--r--examples/phrasebook/GreetingsHin.gf29
-rw-r--r--examples/phrasebook/GreetingsPes.gf29
-rw-r--r--examples/phrasebook/PhrasebookHin.gf10
-rw-r--r--examples/phrasebook/PhrasebookPes.gf9
-rw-r--r--examples/phrasebook/SentencesHin.gf38
-rw-r--r--examples/phrasebook/SentencesPes.gf8
-rw-r--r--examples/phrasebook/WordsHin.gf280
-rw-r--r--examples/phrasebook/WordsPes.gf289
8 files changed, 692 insertions, 0 deletions
diff --git a/examples/phrasebook/GreetingsHin.gf b/examples/phrasebook/GreetingsHin.gf
new file mode 100644
index 000000000..8d5c74489
--- /dev/null
+++ b/examples/phrasebook/GreetingsHin.gf
@@ -0,0 +1,29 @@
+concrete GreetingsHin of Greetings = SentencesHin [mkGreeting] ** open (P=Prelude) in {
+
+-- lincat
+-- Greeting = {s : Str; lock_Text : {}} ;
+flags coding = utf8 ;
+lin
+ GBye = P.ss "नमस्कार" ;
+ GCheers = P.ss "चियर्ज़" ;
+ GDamn = P.ss "ाफ़" ;
+ GExcuse, GExcusePol = P.ss "क्षमा कीजिये" ;
+ GGoodDay = P.ss "नमस्कार" ; ----
+ GGoodEvening = P.ss "नमस्कार" ;
+ GGoodMorning = P.ss "नमस्कार" ;
+ GGoodNight = P.ss "नमस्कार" ;
+ GGoodbye = P.ss "हम आपसे विदा लेते हैं" ;
+ GHello = P.ss "नमस्कार" ;
+ GHelp = P.ss "सहायता" ;
+ GHowAreYou = P.ss "आप कैसे हैं" ;
+ GLookOut = P.ss "सावधान" ;
+ GNiceToMeetYou, GNiceToMeetYouPol = P.ss "आप से मिल कर च्छा लगा" ;
+ GPleaseGive, GPleaseGivePol = P.ss "कृपया" ;
+ GSeeYouSoon = P.ss "फिर मिलेंगे" ;
+ GSorry, GSorryPol = P.ss "क्षमा कीजिये" ;
+ GThanks = P.ss "धन्यवाद" ;
+ GTheCheck = P.ss "बिल" ;
+ GCongratulations = P.ss "बधाई हो";
+ GHappyBirthday = P.ss "जन्मदिन की शुभकामनाएँ" ;
+ GGoodLuck = P.ss "शुभकामनाएँ" ;
+}
diff --git a/examples/phrasebook/GreetingsPes.gf b/examples/phrasebook/GreetingsPes.gf
new file mode 100644
index 000000000..ba968c9f8
--- /dev/null
+++ b/examples/phrasebook/GreetingsPes.gf
@@ -0,0 +1,29 @@
+concrete GreetingsPes of Greetings = SentencesPes [mkGreeting] ** open (P=Prelude) in {
+
+-- lincat
+-- Greeting = {s : Str; lock_Text : {}} ;
+flags coding = utf8 ;
+lin
+ GBye = P.ss ["خداحافظ"] ;
+ GCheers = P.ss ["به سلامتی"] ;
+ GDamn = P.ss "لعنتی" ;
+ GExcuse, GExcusePol = P.ss ["ببخشید"] ;
+ GGoodDay = P.ss ["روز به خیر"] ; ----
+ GGoodEvening = P.ss ["عصر به خیر"] ;
+ GGoodMorning = P.ss ["صبح به خیر"] ;
+ GGoodNight = P.ss ["شب به خیر"] ;
+ GGoodbye = P.ss ["خداحافظ"] ;
+ GHello = P.ss "سلام" ;
+ GHelp = P.ss "کمک" ;
+ GHowAreYou = P.ss ["حال شما چطور است"] ;
+ GLookOut = P.ss ["مراقب باشید"] ;
+ GNiceToMeetYou, GNiceToMeetYouPol = P.ss ["از ملاقات شما خوشوقتم"] ;
+ GPleaseGive, GPleaseGivePol = P.ss ["لطفاً بدهید"] ;
+ GSeeYouSoon = P.ss ["به امید دیدار"] ;
+ GSorry, GSorryPol = P.ss "متأسفم" ;
+ GThanks = P.ss "ممنونم" ;
+ GTheCheck = P.ss "چک" ;
+ GCongratulations = P.ss ["تبریک میگم"];
+ GHappyBirthday = P.ss ["تولدت مبارک"] ;
+ GGoodLuck = P.ss ["موفق باشید"] ;
+}
diff --git a/examples/phrasebook/PhrasebookHin.gf b/examples/phrasebook/PhrasebookHin.gf
new file mode 100644
index 000000000..805df25d3
--- /dev/null
+++ b/examples/phrasebook/PhrasebookHin.gf
@@ -0,0 +1,10 @@
+--# -path=.:alltenses:/users/shafqat/www.grammaticalframework.org_4/lib/src/hindi:/users/shafqat/www.grammaticalframework.org_4/lib/src/api
+
+
+concrete PhrasebookHin of Phrasebook =
+ GreetingsHin,
+ WordsHin ** open
+ SyntaxHin,
+ Prelude in {
+
+}
diff --git a/examples/phrasebook/PhrasebookPes.gf b/examples/phrasebook/PhrasebookPes.gf
new file mode 100644
index 000000000..bd6e240cd
--- /dev/null
+++ b/examples/phrasebook/PhrasebookPes.gf
@@ -0,0 +1,9 @@
+--# -path=.:alltenses:/users/shafqat/www.grammaticalframework.org_4/lib/src/persian:/users/shafqat/www.grammaticalframework.org_4/lib/src/api
+
+concrete PhrasebookPes of Phrasebook =
+ GreetingsPes,
+ WordsPes ** open
+ SyntaxPes,
+ Prelude in {
+
+}
diff --git a/examples/phrasebook/SentencesHin.gf b/examples/phrasebook/SentencesHin.gf
new file mode 100644
index 000000000..607d86963
--- /dev/null
+++ b/examples/phrasebook/SentencesHin.gf
@@ -0,0 +1,38 @@
+concrete SentencesHin of Sentences = NumeralHin ** SentencesI - [sing,IFemale,YouFamFemale,YouPolFemale,MMust,YouPlurFamFemale,YouPlurPolFemale,YouFamMale] with
+ (Syntax = SyntaxHin),
+ (Symbolic = SymbolicHin),
+ (Lexicon = LexiconHin) **
+ open
+ (P=ParadigmsHin),
+ ParamX,
+ CommonHindustani in {
+ lin IFemale = mkPerson (P.personalPN myN mjh "" myra myry myrE myry Sg Fem Pers1) ;
+ YouFamMale = mkPerson (P.personalPN tum tum tum tumhara tumhary tumharay tumhary Pl Masc Pers2_Familiar) ;
+ YouFamFemale = mkPerson (P.personalPN tw tw tw tyra tyry tyrE tyry Sg Fem Pers2_Casual) ;
+ YouPolFemale = mkPerson (P.personalPN ap ap ap apka apky apkE apky Pl Fem Pers2_Respect);
+ YouPlurFamFemale = mkPerson (P.personalPN tum tum tum tumhara tumhary tumharay tumhary Pl Fem Pers2_Familiar) ;
+ YouPlurPolFemale = mkPerson (P.personalPN ap ap ap apka apky apkE apky Pl Fem Pers2_Respect) ;
+
+
+
+flags coding = utf8 ;
+
+oper
+ myN = "मैं" ;
+ mjh = "मुझ" ;
+ myra = "मेरा" ;
+ myry = "मेरी" ;
+ myrE = "मेरे" ;
+ tw = "तू" ;
+ tum = "तुम" ;
+ tyra = "तेरा" ;
+ tyry = "तेरी" ;
+ tyrE = "तेरे" ;
+ tumhara = "तुम्हारा" ;
+ tumhary = "तुम्हारी" ;
+ tumharay = "तुम्हारे" ;
+ ap = "आप" ;
+ apka = ["आप का"] ;
+ apky = ["आप की"] ;
+ apkE = ["आप के"] ;
+ } ;
diff --git a/examples/phrasebook/SentencesPes.gf b/examples/phrasebook/SentencesPes.gf
new file mode 100644
index 000000000..e84a09015
--- /dev/null
+++ b/examples/phrasebook/SentencesPes.gf
@@ -0,0 +1,8 @@
+concrete SentencesPes of Sentences = NumeralUrd ** SentencesI - [sing,NNumeral,ObjPlural,MCan,MKnow,MMust,V2Wait,VWait] with
+ (Syntax = SyntaxPes),
+ (Symbolic = SymbolicPes),
+ (Lexicon = LexiconPes) **
+ {
+ lin ObjPlural k = mkNP k ;
+ };;
+
diff --git a/examples/phrasebook/WordsHin.gf b/examples/phrasebook/WordsHin.gf
new file mode 100644
index 000000000..6c640a104
--- /dev/null
+++ b/examples/phrasebook/WordsHin.gf
@@ -0,0 +1,280 @@
+--2 Implementations of Words, with English as example
+
+concrete WordsHin of Words = SentencesHin **
+ open
+ SyntaxHin,
+ CommonHindustani,
+ ParadigmsHin,
+ (L = LexiconHin),
+ (P = ParadigmsHin),
+-- IrregHin,
+ ExtraHin,
+ Prelude in {
+flags coding = utf8 ;
+
+-- param Gender = Masc | Fem ;
+ lin
+
+-- Kinds; many of them are in the resource lexicon, others can be built by $mkN$.
+
+ Apple = mkCN L.apple_N ;
+ Beer = mkCN L.beer_N ;
+ Bread = mkCN L.bread_N ;
+ Cheese = mkCN (mkN "पनीर" Fem) ;
+ Chicken = mkCN (mkN "मुरग़ी") ;
+ Coffee = mkCN (mkN "काफ़ी") ;
+ Fish = mkCN L.fish_N ;
+ Meat = mkCN (mkN "गोश्त") ;
+ Milk = mkCN L.milk_N ;
+ Pizza = mkCN (mkN "पिज़्ज़ा") ;
+ Salt = mkCN L.salt_N ;
+ Tea = mkCN (mkN "चाय" Fem) ;
+ Water = mkCN L.water_N;
+ Wine = mkCN L.wine_N ;
+
+-- Properties; many of them are in the resource lexicon, others can be built by $mkA$.
+
+ Bad = L.bad_A ;
+ Boring = mkA "उबाऊ" ;
+ Cheap = mkA "सस्ता" ;
+ Cold = L.cold_A ;
+ Delicious = mkA "मज़ेदार" ;
+ Expensive = mkA "महंगा" ;
+ Fresh = mkA "ताज़ा" ;
+ Good = L.good_A ;
+ Suspect = mkA "बुरा" ;
+ Warm = L.warm_A ;
+
+-- Places require different prepositions to express location; in some languages
+-- also the directional preposition varies, but in English we use $to$, as
+-- defined by $mkPlace$.
+
+ Airport = mkPlace "हवाई अड्डा" "पर" ;
+ AmusementPark = mkCompoundPlace "मनोरंजन" "उद्यान" "में" ;
+ Bank = mkPlace "बैंक" "में" ;
+ Bar = mkPlace "बार" "में" ;
+ Cafeteria = mkPlace "जलपान घर" "में" ;
+ Center = mkPlace "केन्द्र" "पर" ;
+ Cinema = mkPlace "सिनेमा" "में" ;
+ Church = mkPlace "गिरजा" "में" ;
+ Disco = mkPlace "डिस्को" "में" ;
+ Hospital = mkPlace "अस्पताल" "में" ;
+ Hotel = mkPlace "होटेल" "में" ;
+ Museum = mkPlace "संग्रहालय" "पर" ;
+ Park = mkPlace "उद्यान" "में" ;
+ Parking = mkCompoundPlace "कार" "पार्क" "में" ;
+ Pharmacy = mkPlace "दवासाजी" "पर" ;
+ PostOffice = mkCompoundPlace "डाक" "घर" "पर" ;
+ Pub = mkPlace "पब" "में" ;
+ Restaurant = mkPlace "रेस्तोरां" "में" ;
+ School = mkPlace "स्कूल" "में" ;
+ Shop = mkPlaceFem "दुकान" "में" Fem;
+ Station = mkPlace "स्टेशन" "पर" ;
+ Supermarket = mkPlace "सुपर बाज़ार" "में" ;
+ Theatre = mkPlace "रंगशाला" "पर" ;
+ Toilet = mkPlace "शौचालय" "में" ;
+ University = mkPlaceFem "विश्वविद्यालय" "में" Fem;
+ Zoo = mkPlace "चिड़ियाघर" "में" ;
+
+ CitRestaurant cit = mkCNPlace (mkCN cit (mkN "रेस्तोरां")) in_Prep to_Prep ;
+
+
+-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
+
+ DanishCrown = mkCN (mkA "डेनिश") (mkN "क्राउन") | mkCN (mkN "क्राउन") ;
+ Dollar = mkCN (mkN "डालर") ;
+ Euro = mkCN (mkN "यूरो") ; -- to prevent euroes
+ Lei = mkCN (mkN "लेई") ;
+ Leva = mkCN (mkN "लेवा") ;
+ NorwegianCrown = mkCN (mkA "नारवीजियन") (mkN "क्राउन") | mkCN (mkN "क्राउन") ;
+ Pound = mkCN (mkN "पाउंड") ;
+ Rouble = mkCN (mkN "रूबल") ;
+ SwedishCrown = mkCN (mkA "स्वीडिश") (mkN "क्राउन") | mkCN (mkN "क्राउन") ;
+ Zloty = mkCN (mkN "ज़्लोटी" Fem) ;
+
+-- Nationalities
+
+ Belgian = mkA "बेल्जियन" ;
+ Belgium = mkNP (mkPN "बेल्जियम") ;
+ Bulgarian = mkNat "बुलगेरियाई" "बुलगेरिया" ;
+ Catalan = mkNPNationality (mkNP (mkPN "केटलान")) (mkNP (mkPN "केटलान")) (mkA "केटलान") ;
+ Danish = mkNat "डेनिश" "डेनमार्क" ;
+ Dutch = mkNPNationality (mkNP (mkPN "डच")) (mkNP the_Quant (mkN "नीदरलैंड्स")) (mkA "डच") ;
+ English = mkNat "अंग्रेज़" "इंगलैंड" ;
+ Finnish = mkNat "फ़िनिश" "फ़िनलैंड" ;
+ Flemish = mkNP (mkPN "फ़्लेमिश") ;
+ French = mkNat "फ़्रान्सीसी" "फ़्रान्स" ;
+ German = mkNat "जर्मन" "जर्मनी" ;
+ Italian = mkNat "इतालवी" "इटली" ;
+ Norwegian = mkNat "नार्वीजियन" "नार्वे" ;
+ Polish = mkNat "पोलिश" "पोलैंड" ;
+ Romanian = mkNat "रोमानियन" "रोमानिया" ;
+ Russian = mkNat "रूसी" "रूस" ;
+ Spanish = mkNat "स्पेनी" "स्पेन" ;
+ Swedish = mkNat "स्वीडिश" "स्वीडन" ;
+
+-- Means of transportation
+
+ Bike = mkTransport L.bike_N ;
+ Bus = mkTransport (mkN "बस" Fem) ;
+ Car = mkTransport L.car_N ;
+ Ferry = mkTransport (mkN "फ़ेरी") ;
+ Plane = mkTransport L.airplane_N ;
+ Subway = mkTransport (mkN "सबवे") ;
+ Taxi = mkTransport (mkN "टैक्सी") ;
+ Train = mkTransport (mkN "रेल गाड़ी") ;
+ Tram = mkTransport (mkN "ट्राम" Fem) ;
+
+ ByFoot = P.mkAdv "पैदल चलकर" ;
+
+-- Actions: the predication patterns are very often language-dependent.
+
+-- AHasAge p num = mkCl p.name (mkNP (mkNP num L.year_N) (ParadigmsHin.mkAdv "का"));
+ AHasAge p num = mkCl p.name (mkNP num (mkCN (modN L.year_N)));
+ AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
+ AHasRoom p num = mkCl p.name have_V2
+ (mkNP (mkNP a_Det (mkN "कमरा")) (SyntaxHin.mkAdv for_Prep (mkNP num (P.mkN "व्यक्ति" "व्यक्ति" "व्यक्ति" "लोग" "लोगों" "लोगो" masculine)))) ;
+ AHasTable p num = mkCl p.name have_V2
+ (mkNP (mkNP a_Det (mkN "मेज़")) (SyntaxHin.mkAdv for_Prep (mkNP num (P.mkN "व्यक्ति" "व्यक्ति" "व्यक्ति" "लोग" "लोगों" "लोगो" masculine)))) ;
+ AHasName p name = mkCl (nameOf p) name ;
+ AHungry p = mkCl p.name (mkA "भूखा") ;
+ AIll p = mkCl p.name (mkA "बीमार") ;
+ AKnow p = mkCl p.name (mkV "जानना") ;
+ ALike p item = mkCl p.name (L.like_V2) item ;
+ ALive p co = mkCl p.name (mkVP (mkVP (L.live_V)) (SyntaxHin.mkAdv in_Prep co)) ;
+ ALove p q = mkCl p.name (L.love_V2) q.name ;
+ AMarried p = mkCl p.name (P.mkIrregA "शादी शुदा") ;
+ AReady p = mkCl p.name (mkA "तैयार") ;
+-- AScared p = mkCl p.name (P.mkCompoundA "डरा" "हुआ") ;
+ ASpeak p lang = mkCl p.name L.speak_V2 lang ;
+ AThirsty p = mkCl p.name (mkA "प्यासा") ;
+-- ATired p = mkCl p.name (P.mkCompoundA "थका" "हुआ") ;
+ AUnderstand p = mkCl p.name (mkV "समझना") ;
+ AWant p obj = mkCl p.name (mkV2 (mkV "चाहना")) obj ;
+-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.name) ;
+ AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
+
+-- miscellaneous
+
+-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
+ QWhatName p = mkQS (mkQCl what_IAdv (mkNP p.poss (P.mkN "नाम" "नाम" "नाम" "नाम" "नाम" "नाम" masculine))) ;
+-- QWhatAge p = mkQS (mkQCl (mkCl (mkNP (modQuant p.poss)) (mkAdv "उम्र"))) ;
+ QWhatAge p = mkQS (mkQCl howMuch_IAdv (mkNP (modQuant p.poss) (P.mkN "उम्र" "उम्र" "उम्र" "उम्र" "उम्र" "उम्र" feminine))) ;
+ HowMuchCost item = mkQS (mkQCl (mkCl (modNP item) (mkAdv ["की क़ीमत"]))) ;
+ ItCost item price = mkCl item (mkV2 (mkV "क़ीमत")) price ;
+
+ PropOpen p = mkCl p.name open_Adv ;
+ PropClosed p = mkCl p.name closed_Adv ;
+ PropOpenDate p d = mkCl p.name (mkVP (mkVP d) open_Adv) ;
+ PropClosedDate p d = mkCl p.name (mkVP (mkVP d) closed_Adv) ;
+ PropOpenDay p d = mkCl p.name (mkVP (mkVP d.habitual) open_Adv);
+ PropClosedDay p d = mkCl p.name (mkVP (mkVP d.habitual) closed_Adv) ;
+
+-- Building phrases from strings is complicated: the solution is to use
+-- mkText : Text -> Text -> Text ;
+
+ PSeeYouDate d = mkText (mkPhrase (mkUtt d)) (lin Text (Prelude.ss ("मिलते हैं"))) ;
+ PSeeYouPlace p = mkText (mkPhrase (mkUtt p.at)) (lin Text (Prelude.ss ("मिलते हैं"))) ;
+ PSeeYouPlaceDate p d =
+ mkText (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d)))
+ (lin Text (Prelude.ss ("मिलते हैं"))) ;
+
+-- Relations are expressed as "मय wिफ़e" or "मय सon'स wिफ़e", as defined by $xOf$
+-- below. Languages without productive genitives must use an equivalent of
+-- "तहe wिफ़e oफ़ मय सoन" for non-pronouns.
+
+ Wife = xOf ssing (mkN "पत्नी") ;
+ Husband = xOf ssing (mkN "पति") ;
+ Son = xOf ssing (mkN "बेटा") ;
+ Daughter = xOf ssing (mkN "बेटी") ;
+ Children = xOf plur L.child_N ;
+
+-- week days
+
+ Monday = mkDay "सोमवार" ;
+ Tuesday = mkDay "मंगलवार" ;
+ Wednesday = mkDay "बुधवार" ;
+ Thursday = mkDay "गुरुवार" ;
+ Friday = mkDay "शुक्रवार" ;
+ Saturday = mkDay "शनिवार" ;
+ Sunday = mkDay "रविवार" ;
+
+ Tomorrow = P.mkAdv "कल" ;
+
+-- modifiers of places
+
+ TheBest = mkSuperl L.good_A ;
+ TheClosest = mkSuperl L.near_A ;
+ TheCheapest = mkSuperl (mkA "सस्ता") ;
+ TheMostExpensive = mkSuperl (mkA "महंगा") ;
+ TheMostPopular = mkSuperl (mkA "मशहूर") ;
+ TheWorst = mkSuperl L.bad_A ;
+
+ SuperlPlace sup p = placeNP sup p ;
+
+
+-- transports
+
+
+ HowFar place = mkQS (mkQCl far_IAdv place.name) ;
+ HowFarFrom x y = mkQS (mkQCl far_IAdv (mkNP y.name (SyntaxHin.mkAdv from_Prep x.name))) ;
+ HowFarFromBy x y t =
+ mkQS (mkQCl far_IAdv (mkNP (mkNP y.name (SyntaxHin.mkAdv from_Prep x.name)) t)) ;
+ HowFarBy y t = mkQS (mkQCl far_IAdv (mkNP y.name t)) ;
+
+ WhichTranspPlace trans place =
+ mkQS (mkQCl (SyntaxHin.mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
+
+ IsTranspPlace trans place =
+ mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
+
+
+
+-- auxiliaries
+
+ oper
+
+ mkNat : Str -> Str -> NPNationality = \nat,co ->
+ mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
+
+ mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
+-- let day = mkNP (mkPN d) in
+ mkNPDay (mkNP (mkCN (mkN d))) (SyntaxHin.mkAdv to_Prep (mkNP (mkCN (mkN d))))
+ (SyntaxHin.mkAdv to_Prep (mkNP (mkCN (mkN d)))) ; --changed from plNum to sgNum
+
+ mkCompoundPlace : Str -> Str -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \comp, p, i ->
+-- mkCNPlace (mkCN (P.mkN comp (mkN p))) (P.mkPrep i) to_Prep ;
+ mkCNPlace (mkCN (mkN (comp++p))) (P.mkPrep i i) to_Prep ;
+
+ mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i ->
+ mkCNPlace (mkCN (mkN p)) (P.mkPrep i i) to_Prep ;
+ mkPlaceFem : Str -> Str -> Gender -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i,g ->
+ mkCNPlace (mkCN (P.mkN p g)) (P.mkPrep i i) to_Prep ;
+
+ open_Adv = P.mkAdv "खुला";
+ closed_Adv = P.mkAdv "बंद" ;
+
+ xOf : SentencesHin.GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
+ relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
+
+ nameOf : NPPerson -> NP = \p -> (xOf ssing (mkN "नाम") p).name ;
+ ssing = False ;
+
+ mkTransport : N -> {name : CN ; by : Adv} = \n -> {
+ name = mkCN n ;
+ by = SyntaxHin.mkAdv by8means_Prep (mkNP n)
+ } ;
+
+-- mkSuperl : A -> Det = \a -> SyntaxHin.mkDet the_Art (SyntaxHin.mkOrd a) ;
+ mkSuperl : A -> Det = \a -> lin Det { s = \\n,g,c => a.s ! n ! g ! c ! Superl ; n = Sg } ;
+
+ far_IAdv = ExtraHin.IAdvAdv (P.mkAdv "दूर") ;
+ what_IAdv = lin IAdv {s = "क्या"} ;
+ howMuch_IAdv = lin IAdv {s = "कितनी"} ;
+-- cost_Predet = lin Predet {s = ["की क़ीमत"]} ;
+-------------------
+modN : N -> N = \noun -> lin N {s = \\n,c =>noun.s!n!c++"का" ; g =noun.g} ;
+modQuant : Quant -> Quant = \q -> lin Quant {s = \\n,g,c => q.s ! n ! Fem ! c ; a = q.a};
+modNP : NP -> NP = \np -> lin NP {s = \\_ => np.s ! NPC Obl ; a = np.a};
+
+}
diff --git a/examples/phrasebook/WordsPes.gf b/examples/phrasebook/WordsPes.gf
new file mode 100644
index 000000000..69ff86802
--- /dev/null
+++ b/examples/phrasebook/WordsPes.gf
@@ -0,0 +1,289 @@
+--2 Implementations of Words, with English as example
+
+concrete WordsPes of Words = SentencesPes **
+ open
+ SyntaxPes,
+ ResPes,
+ ParadigmsPes,
+ (L = LexiconPes),
+ (P = ParadigmsPes),
+-- IrregPes,
+ ExtraPes,
+ Prelude in {
+flags coding = utf8 ;
+
+-- param Gender = Masc | Fem ;
+ lin
+
+-- Kinds; many of them are in the resource lexicon, others can be built by $mkN01$.
+
+ Apple = mkCN L.apple_N ;
+ Beer = mkCN L.beer_N ;
+ Bread = mkCN L.bread_N ;
+ Cheese = mkCN (mkN01 "پنیر" Inanimate) ;
+ Chicken = mkCN (mkN01 "مرغ" Animate) ;
+ Coffee = mkCN (mkN01 "قهوه" Inanimate) ;
+ Fish = mkCN L.fish_N ;
+ Meat = mkCN (mkN01 "گوشت" Inanimate) ;
+ Milk = mkCN L.milk_N ;
+ Pizza = mkCN (mkN01 "پیتزا" Inanimate) ;
+ Salt = mkCN L.salt_N ;
+ Tea = mkCN (mkN01 "چای" Inanimate) ;
+ Water = mkCN L.water_N;
+ Wine = mkCN L.wine_N ;
+
+-- Properties; many of them are in the resource lexicon, others can be built by $mkA$.
+
+ Bad = L.bad_A ;
+ Boring = mkA ["خسته کننده"] ;
+ Cheap = mkA "ارزان" ;
+ Cold = L.cold_A ;
+ Delicious = mkA "خوشمزه" ;
+ Expensive = mkA "گران" ;
+ Fresh = mkA "تازه" ;
+ Good = L.good_A ;
+ Suspect = mkA "مشکوک" ;
+ Warm = L.warm_A ;
+
+-- Places require different prepositions to express location; in some languages
+-- also the directional preposition varies, but in English we use $to$, as
+-- defined by $mkPlace$.
+
+ Airport = mkPlace "فرودگاه" "در" ;
+ AmusementPark = mkPlace "شهربازی" "در" ;
+ Bank = mkPlace "بانک" "در" ;
+ Bar = mkPlace "بار" "در" ;
+ Cafeteria = mkPlace ["کافه تریا"] "در" ;
+ Center = mkPlace "مرکز" "در" ;
+ Cinema = mkPlace "سینما" "در" ;
+ Church = mkPlace "کلیسا" "در" ;
+ Disco = mkPlace "دیسکو" "در" ;
+ Hospital = mkPlace "بیمارستان" "در" ;
+ Hotel = mkPlace "هتل" "در" ;
+ Museum = mkPlace "موزه" "در" ;
+ Park = mkPlace "پارک" "در" ;
+ Parking = mkPlace "پارکینگ" "در" ;
+ Pharmacy = mkPlace "داروخانه" "در" ;
+ PostOffice = mkCompoundPlace "اداره" "پست" "در" ;
+ Pub = mkPlace "میخانه" "در" ;
+ Restaurant = mkPlace "رستوران" "در" ;
+ School = mkPlace "مدرسه" "در" ;
+ Shop = mkPlace "مغازه" "در";
+ Station = mkPlace "ایستگاه" "در" ;
+ Supermarket = mkPlace "فروشگاه" "در" ;
+ Theatre = mkPlace "تئاتر" "در" ;
+ Toilet = mkPlace "دستشویی" "در" ;
+ University = mkPlace "دانشگاه" "در";
+ Zoo = mkPlace ["باغ وحش"] "در" ;
+
+ CitRestaurant cit = mkCNPlace (mkCN cit (mkCN (mkN01 "رستوران" Inanimate))) in_Prep to_Prep ;
+
+
+-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
+
+ DanishCrown = mkCN (mkA "دانمارک") (mkCN (mkN01 "کرون" Inanimate)) | mkCN (mkN01 "کرون" Inanimate) ;
+ Dollar = mkCN (mkN01 "دلار" Inanimate) ;
+ Euro = mkCN (mkN01 "یورو" Inanimate) ; -- to prevent euroes
+ Lei = mkCN (mkN01 "لی" Inanimate) ; -- check this
+ Leva = mkCN (mkN01 "لوا" Inanimate) ;
+ NorwegianCrown = mkCN (mkA "نروژ") (mkCN (mkN01 "کرون" Inanimate)) | mkCN (mkN01 "کرون" Inanimate) ;
+ Pound = mkCN (mkN01 "پوند" Inanimate) ;
+ Rouble = mkCN (mkN01 "روبل" Inanimate) ;
+ SwedishCrown = mkCN (mkA "سوئد") (mkCN (mkN01 "کرون" Inanimate)) | mkCN (mkN01 "کرون" Inanimate) ;
+ Zloty = mkCN (mkN01 "زلوتی" Inanimate) ; check this
+
+-- Nationalities
+
+ Belgian = mkA "بلژیکی" ;
+ Belgium = mkNP (mkPN "بلژیک" Inanimate) ;
+ Bulgarian = mkNat "بلغاری" "بلغارستان" ;
+ Catalan = mkNPNationality (mkNP (mkPN "کاتالان" Inanimate)) (mkNP (mkPN "کاتالان" Inanimate)) (mkA "کاتالان") ;
+ Danish = mkNat "دانمارکی" "دانمارک" ;
+ Dutch = mkNPNationality (mkNP (mkPN "هلندی" Inanimate)) (mkNP the_Quant (mkCN (mkN01 "هلندی" Inanimate))) (mkA "هلندی") ;
+ English = mkNat "انگلیسی" "انگلستان" ;
+ Finnish = mkNat "فنلاندی" "فنلاند" ;
+ Flemish = mkNP (mkPN "فلاندرز" Inanimate) ;
+ French = mkNat "فرانسوی" "فرانسه" ;
+ German = mkNat "آلمانی" "آلمان" ;
+ Italian = mkNat "ایتالیایی" "ایتالیا" ;
+ Norwegian = mkNat "نروژی" "نروژ" ;
+ Polish = mkNat "لهستانی" "لهستان" ;
+ Romanian = mkNat "رومانیایی" "رومانی" ;
+ Russian = mkNat "روسی" "روسیه" ;
+ Spanish = mkNat "اسپانیایی" "اسپانیا" ;
+ Swedish = mkNat "سوئدی" "سوئد" ;
+
+-- Means of transportation
+
+ Bike = mkTransport L.bike_N ;
+ Bus = mkTransport (mkN01 "اتوبوس" Inanimate) ;
+ Car = mkTransport L.car_N ;
+ Ferry = mkTransport (mkN01 "قایق" Inanimate) ;
+ Plane = mkTransport L.airplane_N ;
+ Subway = mkTransport (mkN01 "مترو" Inanimate) ;
+ Taxi = mkTransport (mkN01 "تاکسی" Inanimate) ;
+ Train = mkTransport (mkN01 "قطار" Inanimate) ; -- check this
+ Tram = mkTransport (mkN01 "تراموا" Inanimate) ;
+
+ ByFoot = P.mkAdv "پیاده" ;
+
+-- Actions: the predication patterns are very often language-dependent.
+
+-- AHasAge p num = mkCl p.name (mkNP (mkNP num L.year_N) (ParadigmsPes.mkAdv "ک"));
+ AHasAge p num = mkCl p.name (mkNP num (mkCN L.year_N));
+ AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
+ AHasRoom p num = mkCl p.name have_V2
+ (mkNP (mkNP a_Det (mkCN (mkN01 "اتاق" Inanimate))) (SyntaxPes.mkAdv for_Prep (mkNP num (mkCN (P.mkN01 "شخص" Animate))))) ;
+ AHasTable p num = mkCl p.name have_V2
+ (mkNP (mkNP a_Det (mkCN (mkN01 "میز" Inanimate))) (SyntaxPes.mkAdv for_Prep (mkNP num (mkCN (P.mkN01 "شخص" Animate))))) ;
+ AHasName p name = mkCl (nameOf p) name ;
+ AHungry p = mkCl p.name (mkA "گرسنه") ;
+ AIll p = mkCl p.name (mkA "بیمار") ;
+ AKnow p = mkCl p.name (mkV "داستن" "دان") ;
+ ALike p item = mkCl p.name (L.like_V2) item ;
+ ALive p co = mkCl p.name (mkVP (mkVP (L.live_V)) (SyntaxPes.mkAdv in_Prep co)) ;
+ ALove p q = mkCl p.name (L.love_V2) q.name ;
+ AMarried p = mkCl p.name (mkA "متأهل") ;
+ AReady p = mkCl p.name (mkA "آماده") ;
+ AScared p = mkCl p.name (P.mkA "ترسیده") ;
+ ASpeak p lang = mkCl p.name L.speak_V2 lang ;
+ AThirsty p = mkCl p.name (mkA "تشنه") ;
+ ATired p = mkCl p.name (P.mkA "خسته") ;
+ AUnderstand p = mkCl p.name (mkV "فهمیدن" "فهم") ; -- "فهمید" is the past root and "فهمیدن" is the infinitive
+ AWant p obj = mkCl p.name (mkV2 (mkV "خواستن" "خواه")) obj ;
+-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.name) ;
+ AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) (SyntaxPes.mkAdv (P.mkPrep "به") place.name)) ;
+
+-- miscellaneous
+
+-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
+ QWhatName p = mkQS (mkQCl what_IAdv (mkNP p.poss (lin N (mkN01 "نام" Inanimate)))) ;
+-- QWhatAge p = mkQS (mkQCl (mkCl (mkNP p.poss) (P.mkAdv "سال"))) ;
+ QWhatAge p = mkQS (mkQCl howMuchAge_IAdv (mkNP (mkNP p.poss) (P.mkAdv "سال"))) ;
+-- HowMuchCost item = mkQS (mkQCl (mkCl item (P.mkAdv ["قیمت داشتن"]))) ;
+ HowMuchCost item = mkQS (mkQCl howMuchCost_IAdv (mkNP (lin Predet {s = "قیمت"}) item)) ;
+ ItCost item price = mkCl item (mkV2 (mkV "قیمت" "")) price ;
+
+ PropOpen p = mkCl p.name open_Adv ;
+ PropClosed p = mkCl p.name closed_Adv ;
+ -- PropOpenDate p d = mkCl p.name (mkVP (mkVP d) open_Adv) ;
+ PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ;
+-- PropClosedDate p d = mkCl p.name (mkVP (mkVP d) closed_Adv) ;
+ PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ;
+-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual);
+ PropOpenDay p d = mkCl p.name (mkVP (mkNP d.name open_Adv));
+-- PropClosedDay p d = mkCl p.name (mkVP (mkVP d.habitual) closed_Adv) ;
+ PropClosedDay p d = mkCl p.name (mkVP (mkNP d.name closed_Adv)) ;
+
+-- Building phrases from strings is complicated: the solution is to use
+-- mkText : Text -> Text -> Text ;
+
+ PSeeYouDate d = mkText (lin Text (Prelude.ss ("شما را"))) (mkText (mkPhrase (mkUtt d)) (lin Text (Prelude.ss ("می بینم")))) ;
+ PSeeYouPlace p = mkText (lin Text (Prelude.ss ("شما را"))) (mkText (mkPhrase (mkUtt p.at)) (lin Text (Prelude.ss ("می بینم")))) ;
+ PSeeYouPlaceDate p d =
+ mkText (lin Text (Prelude.ss ("شما را")))
+ (mkText (mkPhrase (mkUtt p.at)) (mkText (mkPhrase (mkUtt d)) (lin Text (Prelude.ss ("می بینم"))))) ;
+
+-- Relations are expressed as "می wفe" or "می سْn'س wفe", as defined by $xOf$
+-- below. Languages without productive genitives must use an equivalent of
+-- "تهe wفe ْف می سْن" for non-pronouns.
+
+ Wife = xOf ssing (mkN01 "زن" Animate) ;
+ Husband = xOf ssing (mkN01 "شوهر" Animate) ;
+ Son = xOf ssing (mkN01 "پسر" Animate) ;
+ Daughter = xOf ssing (mkN01 "دختر" Animate) ;
+ Children = xOf plur L.child_N ;
+
+-- week days
+
+ Monday = mkDay "دوشنبه" ;
+ Tuesday = mkDay "سه شنبه" ;
+ Wednesday = mkDay "چهارشنبه" ;
+ Thursday = mkDay "پنج شنبه" ;
+ Friday = mkDay "جمعه" ;
+ Saturday = mkDay "شنبه" ;
+ Sunday = mkDay "یکشنبه" ;
+
+ Tomorrow = P.mkAdv "فردا" ;
+
+-- modifiers of places
+
+ TheBest = mkSuperl L.good_A ;
+ TheClosest = mkSuperl L.near_A ;
+ TheCheapest = mkSuperl (mkA "ارزان") ;
+ TheMostExpensive = mkSuperl (mkA "گران") ;
+ TheMostPopular = mkSuperl (mkA "پرطرفدار") ;
+ TheWorst = mkSuperl L.bad_A ;
+
+ SuperlPlace sup p = placeNP sup p ;
+
+
+-- transports
+
+
+ HowFar place = mkQS (mkQCl far_IAdv (mkNP tA_Prep place.name)) ;
+ HowFarFrom x y = mkQS (mkQCl far_IAdv (mkNP (mkNP from_Prep x.name) (SyntaxPes.mkAdv tA_Prep y.name ))) ;
+ HowFarFromBy x y t =
+ mkQS (mkQCl far_IAdv (mkNP (mkNP (mkNP from_Prep x.name) (SyntaxPes.mkAdv tA_Prep y.name)) t)) ;
+ HowFarBy y t = mkQS (mkQCl far_IAdv (mkNP (mkNP tA_Prep y.name) t)) ;
+
+ WhichTranspPlace trans place =
+ mkQS (mkQCl (SyntaxPes.mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
+
+ IsTranspPlace trans place =
+ mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
+
+
+
+-- auxiliaries
+
+ oper
+
+ mkNat : Str -> Str -> NPNationality = \nat,co ->
+ mkNPNationality (mkNP (mkPN nat Inanimate)) (mkNP (mkPN co Inanimate)) (mkA nat) ;
+
+ mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
+ let day = mkNP (mkPN d Inanimate) in
+ mkNPDay day (SyntaxPes.mkAdv no_Prep day)
+ (SyntaxPes.mkAdv to_Prep (mkNP a_Quant sgNum (mkCN (mkN01 d Inanimate)))) ; --changed from plNum to sgNum
+
+ mkCompoundPlace : Str -> Str -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \comp, p, i ->
+-- mkCNPlace (mkCN (P.mkN01 comp (mkN01 p))) (P.mkPrep i) to_Prep ;
+ mkCNPlace (mkCN (mkN01 (comp++p) Inanimate)) (P.mkPrep i) to_Prep ;
+
+ mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i ->
+ mkCNPlace (mkCN (mkN01 p Inanimate)) (P.mkPrep i) to_Prep ;
+-- mkPlaceFem : Str -> Str -> Gender -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i,g ->
+-- mkCNPlace (mkCN (P.mkN01 p Inanimate)) (P.mkPrep i) to_Prep ;
+
+ open_Adv = P.mkAdv "باز";
+ open_Predet = lin Predet {s = "باز"};
+ closed_Adv = P.mkAdv "بسته" ;
+
+ xOf : SentencesPes.GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
+ relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
+
+ nameOf : NPPerson -> NP = \p -> (xOf ssing (mkN01 "نام" Inanimate) p).name ;
+ ssing = False ;
+
+ mkTransport : N -> {name : CN ; by : Adv} = \n -> {
+ name = mkCN n ;
+ by = SyntaxPes.mkAdv by8means_Prep (mkNP n)
+ } ;
+
+-- mkSuperl : A -> Det = \a -> SyntaxPes.mkDet the_Art (SyntaxPes.mkOrd a) ;
+ mkSuperl : A -> Det = \a -> lin Det { s = a.s ! bEzafa ++ "ترین" ; n = Sg ; isNum = False ; fromPron = False} ;
+
+-- far_IAdv = ExtraPes.IAdvAdv (P.mkAdv "دور") ;
+ far_IAdv = lin IAdv {s = "چقدر راه"} ;
+ howMuchAge_IAdv = lin IAdv {s = "چند"} ;
+ howMuchCost_IAdv = lin IAdv {s = "چقدر"} ;
+ what_IAdv = lin IAdv {s = ["چه چیزی"]} ;
+ no_Prep = lin Prep {s = ""} ;
+ tA_Prep = lin Prep {s = "تا"} ;
+-------------------
+--modN : N -> N = \noun -> lin N {s = \\n,c =>noun.s!n!c++"ک" ; g =noun.g} ;
+--modQuant : Quant -> Quant = \q -> lin Quant {s = \\n,g,c => q.s ! n ! Fem ! c ; a = q.a};
+--modNP : NP -> NP = \np -> lin NP {s = \\_ => np.s ! NPC Obl ; a = np.a};
+
+}