Add Phrasebook to testsuite. Move grammars into subfolders. Add run-bench script.

This commit is contained in:
John J. Camilleri
2021-02-20 13:22:29 +01:00
parent 5ad5789b31
commit dca2ebaf72
179 changed files with 20169 additions and 26 deletions

View File

@@ -0,0 +1,28 @@
abstract Greetings = Sentences [Greeting] ** {
fun
GBye : Greeting ;
GCheers : Greeting ;
GDamn : Greeting ;
GExcuse, GExcusePol : Greeting ;
GGoodDay : Greeting ;
GGoodEvening : Greeting ;
GGoodMorning : Greeting ;
GGoodNight : Greeting ;
GGoodbye : Greeting ;
GHello : Greeting ;
GHelp : Greeting ;
GHowAreYou : Greeting ;
GLookOut : Greeting ;
GNiceToMeetYou : Greeting ;
GPleaseGive, GPleaseGivePol : Greeting ;
GSeeYouSoon : Greeting ;
GSorry, GSorryPol : Greeting ;
GThanks : Greeting ;
GTheCheck : Greeting ;
GCongratulations : Greeting ;
GHappyBirthday : Greeting ;
GGoodLuck : Greeting ;
GWhatTime : Greeting ;
}

View File

@@ -0,0 +1,31 @@
concrete GreetingsBul of Greetings = SentencesBul [Greeting,mkGreeting] ** open Prelude in {
flags
coding=utf8;
lin
GBye = mkGreeting "чао" ;
GCheers = mkGreeting "наздраве" ;
GDamn = mkGreeting "по дяволите" ;
GExcuse, GExcusePol = mkGreeting "извинете" ;
GGoodDay = mkGreeting "добър ден" ;
GGoodEvening = mkGreeting "добра вечер" ;
GGoodMorning = mkGreeting "добро утро" ;
GGoodNight = mkGreeting "лека нощ" ;
GGoodbye = mkGreeting "довиждане" ;
GHello = mkGreeting "здравей" ;
GHelp = mkGreeting "помощ" ;
GHowAreYou = mkGreeting "как си" ;
GLookOut = mkGreeting "погледни" ;
GNiceToMeetYou = mkGreeting "радвам се да се видим" ;
GPleaseGive, GPleaseGivePol = mkGreeting "моля" ;
GSeeYouSoon = mkGreeting "до скоро" ;
GSorry, GSorryPol = mkGreeting "извинете" ;
GThanks = mkGreeting "благодаря ти" ;
GTheCheck = mkGreeting "сметката" ;
GCongratulations = mkGreeting "поздравления";
GHappyBirthday = mkGreeting "честит рожден ден" ;
GGoodLuck = mkGreeting "успех" ;
GWhatTime = mkGreeting "колко е часът" ;
}

View File

@@ -0,0 +1,31 @@
--# -coding=latin1
concrete GreetingsCat of Greetings = SentencesCat [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "adéu" ;
GCheers = mkGreeting "salut" ;
GDamn = mkGreeting "merda" ;
GExcuse = mkGreeting "perdona" ;
GExcusePol = mkGreeting ("perdoni" | "disculpi") ;
GCongratulations = mkGreeting "felicitats" ;
GHappyBirthday = mkGreeting "feliç aniversari" ;
GGoodLuck = mkGreeting "sort" ;
GGoodDay = mkGreeting "bon dia" ;
GGoodEvening = mkGreeting "bona tarda" ;
GGoodMorning = mkGreeting "bon dia" ;
GGoodNight = mkGreeting "bona nit" ;
GGoodbye = mkGreeting "a reveure" ;
GHello = mkGreeting "hola" ;
GHelp = mkGreeting "socors" ;
GHowAreYou = mkGreeting "què tal" ;
GLookOut = mkGreeting "compte" ;
GNiceToMeetYou = mkGreeting "encantat de conèixer-lo" ; -- make distinction Masc/Fem
GPleaseGive = mkGreeting "si et plau" ;
GPleaseGivePol = mkGreeting "si us plau" ;
GSeeYouSoon = mkGreeting "fins aviat" ;
GSorry = mkGreeting "perdoni" ;
GSorryPol = mkGreeting "em sap greu" ;
GThanks = mkGreeting "gràcies" ;
GTheCheck = mkGreeting "el compte" ;
}

View File

@@ -0,0 +1,33 @@
concrete GreetingsChi of Greetings =
SentencesChi [Greeting,mkGreeting] **
open ParadigmsChi, ResChi, Prelude in {
flags coding = utf8 ;
lin
GBye = (mkInterj "再见" ) ;
GCheers = (mkInterj "干杯" ) ;
GDamn = (mkInterj "该死的" ) ;
GExcuse, GExcusePol = (mkInterj "原谅我" ) ;
GGoodDay = (mkInterj "你好" ) ;
GGoodEvening = (mkInterj "下午好" ) ;
GGoodMorning = (mkInterj "早上好" ) ;
GGoodNight = (mkInterj "晚安" ) ;
GGoodbye = (mkInterj "再见" ) ;
GHello = (mkInterj "你好" ) ;
GHelp = mkInterj "帮助" ;
GHowAreYou = mkInterj "你好吗" ;
GLookOut = mkInterj "留意" ;
GNiceToMeetYou = mkInterj "很高兴见到你" ;
GNiceToMeetYouPol = mkInterj "很高兴见到您" ;
GPleaseGive, GPleaseGivePol = mkInterj "请" ;
GSeeYouSoon = mkInterj "很快再见" ;
GSorry, GSorryPol = mkInterj "对不起" ;
GThanks = (mkInterj "谢谢" ) ;
GTheCheck = mkInterj "检查" ;
GCongratulations = mkInterj "祝贺您" ;
GHappyBirthday = mkInterj "祝你生日快乐" ;
GGoodLuck = (mkInterj "祝你好运" ) ;
GWhatTime = mkInterj "现在是什么时候" ;
}

View File

@@ -0,0 +1,29 @@
--# -coding=latin1
concrete GreetingsDan of Greetings = SentencesDan [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "hej hej" ; -- not google translate
GCheers = mkGreeting "skål" ;
GDamn = mkGreeting "satans" ; -- X
GExcuse, GExcusePol = mkGreeting "undskyld mig" ;
GGoodDay = mkGreeting "god dag" ;
GGoodEvening = mkGreeting "god aften" ;
GGoodMorning = mkGreeting "god morgen" ;
GGoodNight = mkGreeting "godnat" ;
GGoodbye = mkGreeting "farvel" ;
GHello = mkGreeting "hej" ;
GHelp = mkGreeting "hjælp" ;
GHowAreYou = mkGreeting "hvordan har du det" ;
GLookOut = mkGreeting "pas på" ;
GNiceToMeetYou, GNiceToMeetYouPol = mkGreeting "hyggeligt at møde dig" ; -- more common than rart (google translate)
GPleaseGive = mkGreeting "vær så sød" ; -- can also have flink instead of sod
GPleaseGivePol = mkGreeting "venligst" ; -- X not behage
GSeeYouSoon = mkGreeting "vi ses snart" ; -- X se dig snart
GSorry, GSorryPol = mkGreeting "undskyld" ;
GThanks = mkGreeting "tak" ;
GTheCheck = mkGreeting "regningen" ;
GCongratulations = mkGreeting "tillykke";
GHappyBirthday = mkGreeting "tillykke med fødselsdagen" ;
GGoodLuck = mkGreeting "held og lykke" ;
}

View File

@@ -0,0 +1,30 @@
concrete GreetingsDut of Greetings = SentencesDut [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "doei" ;
GCheers = mkGreeting "proost" ;
GDamn = mkGreeting "verdomme" ;
GExcuse, GExcusePol = mkGreeting "pardon" ;
GGoodDay = mkGreeting "goedendag" ;
GGoodEvening = mkGreeting "goedenavond" ;
GGoodMorning = mkGreeting "goedemorgen" ;
GGoodNight = mkGreeting "goedenacht" ;
GGoodbye = mkGreeting "tot ziens" ;
GHello = mkGreeting "hallo" ;
GHelp = mkGreeting "help" ;
GHowAreYou = mkGreeting "hoe gaat het" ;
GLookOut = mkGreeting "kijk uit" ;
GNiceToMeetYou = mkGreeting "leuk je te ontmoeten" ;
GNiceToMeetYouPol = mkGreeting "leuk je u ontmoeten" ;
GPleaseGive, GPleaseGivePol = mkGreeting "alstublieft" ;
GSeeYouSoon = mkGreeting "tot ziens" ;
GSorry = mkGreeting "sorry";
GSorryPol = mkGreeting "mijn verontschuldiging" ;
GThanks = mkGreeting "dank je wel" ;
GTheCheck = mkGreeting "rekening" ;
GCongratulations = mkGreeting "gefeliciteerd";
GHappyBirthday = mkGreeting "gelukkige verjaardag" ;
GGoodLuck = mkGreeting "veel geluk" ;
GWhatTime = mkGreeting "hoe laat is het" ;
}

View File

@@ -0,0 +1,27 @@
concrete GreetingsEng of Greetings = SentencesEng [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "bye" ;
GCheers = mkGreeting "cheers" ;
GDamn = mkGreeting "damn" ;
GExcuse, GExcusePol = mkGreeting "excuse me" ;
GGoodDay = mkGreeting "good afternoon" ; ----
GGoodEvening = mkGreeting "good evening" ;
GGoodMorning = mkGreeting "good morning" ;
GGoodNight = mkGreeting "good night" ;
GGoodbye = mkGreeting "goodbye" ;
GHello = mkGreeting "hello" ;
GHelp = mkGreeting "help" ;
GHowAreYou = mkGreeting "how are you" ;
GLookOut = mkGreeting "look out" ;
GNiceToMeetYou, GNiceToMeetYouPol = mkGreeting "nice to meet you" ;
GPleaseGive, GPleaseGivePol = mkGreeting "please" ;
GSeeYouSoon = mkGreeting "see you soon" ;
GSorry, GSorryPol = mkGreeting "sorry" ;
GThanks = mkGreeting "thank you" ;
GTheCheck = mkGreeting "the bill" ;
GCongratulations = mkGreeting "congratulations";
GHappyBirthday = mkGreeting "happy birthday" ;
GGoodLuck = mkGreeting "good luck" ;
GWhatTime = mkGreeting "what time is it" | mkGreeting "what is the time" ;
}

View File

@@ -0,0 +1,26 @@
concrete GreetingsEst of Greetings = SentencesEst [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "head aega" ;
GCheers = mkGreeting "terviseks" ;
GDamn = mkGreeting "neetud" ;
GExcuse, GExcusePol = mkGreeting "vabandust" ;
GGoodDay = mkGreeting "tere päevast" ;
GGoodEvening = mkGreeting "tere õhtust" ;
GGoodMorning = mkGreeting "tere hommikust" ;
GGoodNight = mkGreeting "head ööd" ;
GGoodbye = mkGreeting "head aega" ;
GHello = mkGreeting "tere" ;
GHelp = mkGreeting "appi" ;
GHowAreYou = mkGreeting "kuidas käsi käib" ;
GLookOut = mkGreeting "ettevaatust" ;
GNiceToMeetYou = mkGreeting "meeldiv tutvuda" ;
GPleaseGive, GPleaseGivePol = mkGreeting "palun" ;
GSeeYouSoon = mkGreeting "kohtumiseni" ;
GSorry, GSorryPol = mkGreeting "vabandust" ;
GThanks = mkGreeting "suur tänu" ;
GTheCheck = mkGreeting "arve" ;
GCongratulations = mkGreeting "palju õnne";
GHappyBirthday = mkGreeting "palju õnne sünnipäevaks" ;
GGoodLuck = mkGreeting "palju edu" ;
}

View File

@@ -0,0 +1,30 @@
--# -coding=latin1
concrete GreetingsFin of Greetings = SentencesFin [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "hei hei" ;
GCheers = mkGreeting "terveydeksi" ;
GDamn = mkGreeting "hitto" ;
GExcuse, GExcusePol = mkGreeting "anteeksi" ;
GGoodDay = mkGreeting "hyvää päivää" ;
GGoodEvening = mkGreeting "hyvää iltaa" ;
GGoodMorning = mkGreeting "hyvää huomenta" ;
GGoodNight = mkGreeting "hyvää yötä" ;
GGoodbye = mkGreeting "näkemiin" ;
GHello = mkGreeting "hei" ;
GHelp = mkGreeting "apua" ;
GHowAreYou = mkGreeting "mitä kuuluu" ;
GLookOut = mkGreeting "varo" ;
GNiceToMeetYou = mkGreeting "hauska tutustua" ;
GPleaseGive = mkGreeting "ole hyvä" ;
GPleaseGivePol = mkGreeting "olkaa hyvä" ;
GSeeYouSoon = mkGreeting "nähdään pian" ;
GSorry, GSorryPol = mkGreeting "anteeksi" ;
GThanks = mkGreeting "kiitos" ;
GTheCheck = mkGreeting "lasku" ;
GCongratulations = mkGreeting "onnittelut";
GHappyBirthday = mkGreeting "hyvää syntymäpäivää" ;
GGoodLuck = mkGreeting "onnea" ;
GWhatTime = mkGreeting "paljonko kello on" | mkGreeting "mitä kello on" ;
}

View File

@@ -0,0 +1,31 @@
--# -coding=latin1
concrete GreetingsFre of Greetings = SentencesFre [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "au revoir" ;
GCheers = mkGreeting "santé" ;
GDamn = mkGreeting "maudit" ;
GExcuse = mkGreeting "excuse-moi" ;
GExcusePol = mkGreeting "excusez-moi" ;
GGoodDay = mkGreeting "bonjour" ;
GGoodEvening = mkGreeting "bon soir" ;
GGoodMorning = mkGreeting "bonjour" ;
GGoodNight = mkGreeting "bonne nuit" ;
GGoodbye = mkGreeting "au revoir" ;
GHello = mkGreeting "salut" ;
GHelp = mkGreeting "au secours" ;
GHowAreYou = mkGreeting "comment ça va" ;
GLookOut = mkGreeting "attention" ;
GNiceToMeetYou = mkGreeting "enchanté" ;
GPleaseGive = mkGreeting "s'il te plaît" ;
GPleaseGivePol = mkGreeting "s'il vous plaît" ;
GSeeYouSoon = mkGreeting "à bientôt" ;
GSorry, GSorryPol = mkGreeting "pardon" ;
GThanks = mkGreeting "merci" ;
GTheCheck = mkGreeting "l'addition" ;
GCongratulations = mkGreeting "félicitations";
GHappyBirthday = mkGreeting "joyeux anniversaire" ;
GGoodLuck = mkGreeting "bonne chance" ;
GWhatTime = mkGreeting "quelle heure est-il" ;
}

View File

@@ -0,0 +1,31 @@
--# -path=.:abstract:prelude:german:api:common
--# -coding=latin1
concrete GreetingsGer of Greetings = SentencesGer [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "tschüß" ;
GCheers = mkGreeting "zum Wohl" ;
GDamn = mkGreeting "verdammt" ;
GExcuse, GExcusePol = mkGreeting "Entschuldigung" ;
GGoodDay = mkGreeting "guten Tag" ;
GGoodEvening = mkGreeting "guten Abend" ;
GGoodMorning = mkGreeting "guten Morgen" ;
GGoodNight = mkGreeting "gute Nacht" ;
GGoodbye = mkGreeting "auf Wiedersehen" ;
GHello = mkGreeting "Hallo" ;
GHelp = mkGreeting "Hilfe" ;
GHowAreYou = mkGreeting "wie geht's" ;
GLookOut = mkGreeting "Achtung" ;
GNiceToMeetYou = mkGreeting "nett, Sie zu treffen" ;
GPleaseGive, GPleaseGivePol = mkGreeting "bitte" ;
GSeeYouSoon = mkGreeting "bis bald" ;
GSorry, GSorryPol = mkGreeting "Entschuldigung" ;
GThanks = mkGreeting "Danke" ;
GTheCheck = mkGreeting "die Rechnung" ;
GCongratulations = mkGreeting "herzlichen Glückwunsch";
GHappyBirthday = mkGreeting "alles Gute zum Geburtstag" ;
GGoodLuck = mkGreeting "viel Glück" ;
GWhatTime = mkGreeting "wieviel Uhr ist es" | mkGreeting "wie spät ist es" ;
}

View File

@@ -0,0 +1,31 @@
concrete GreetingsHin of Greetings = SentencesHin [Greeting,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 "शुभकामनाएँ" ;
GWhatTime = P.ss "कितने बजे हैं" ;
}

View File

@@ -0,0 +1,31 @@
concrete GreetingsIta of Greetings = SentencesIta [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "ciao" ;
GCheers = mkGreeting "cincin" ;
GDamn = mkGreeting "maledizione" ;
GExcuse = mkGreeting "scusa" ;
GExcusePol = mkGreeting "scusi" ;
GGoodDay = mkGreeting "buongiorno" ;
GGoodEvening = mkGreeting "buona sera" ;
GGoodMorning = mkGreeting "buongiorno" ;
GGoodNight = mkGreeting "buona notte" ;
GGoodbye = mkGreeting "arrivederci" ;
GHello = mkGreeting "ciao" ;
GHelp = mkGreeting "aiuto" ;
GHowAreYou = mkGreeting "come sta" ;
GLookOut = mkGreeting "attenzione" ;
GNiceToMeetYou = mkGreeting "piacere di conoscerti" ;
GNiceToMeetYouPol = mkGreeting "piacere di conoscerLa" ;
GPleaseGive, GPleaseGivePol = mkGreeting "per favore" ;
GSeeYouSoon = mkGreeting "a presto" ; ----
GSorry = mkGreeting "scusami" ; ----
GSorryPol = mkGreeting "scusimi" ; ----
GThanks = mkGreeting "grazie" ;
GTheCheck = mkGreeting "il conto" ;
GCongratulations = mkGreeting "congratulazioni";
GHappyBirthday = mkGreeting "buon compleanno" ;
GGoodLuck = mkGreeting "buona fortuna" ;
GWhatTime = mkGreeting "che ore sono" ;
}

View File

@@ -0,0 +1,30 @@
concrete GreetingsJpn of Greetings = SentencesJpn [Greeting,mkGreeting] ** open Prelude in {
flags coding = utf8 ;
lin
GBye = mkGreeting "バイ" ;
GCheers = mkGreeting "かんぱい" ;
GDamn = mkGreeting "くそ" ;
GExcuse, GExcusePol = mkGreeting "すみません" ;
GGoodDay, GHello = mkGreeting "こんにちは" ; ----
GGoodEvening = mkGreeting "こんばんは" ;
GGoodMorning = mkGreeting "おはようございます" ;
GGoodNight = mkGreeting "おやすみなさい" ;
GGoodbye = mkGreeting "さようなら" ;
GHelp = mkGreeting "助けて" ;
GHowAreYou = mkGreeting "お元気ですか" ;
GLookOut = mkGreeting "危ない" ;
GNiceToMeetYou = mkGreeting "初めまして" ;
GPleaseGive = mkGreeting "ください" ;
GPleaseGivePol = mkGreeting "お願いします" ;
GSeeYouSoon = mkGreeting "またね" ;
GSorry = mkGreeting "ごめんなさい" ;
GSorryPol = mkGreeting "申し訳ありません" ;
GThanks = mkGreeting "ありがとう" ;
GTheCheck = mkGreeting "会計" ;
GCongratulations = mkGreeting "お目出度うご座います";
GHappyBirthday = mkGreeting "お誕生日おめでとうございます" ;
GGoodLuck = mkGreeting "がんばってください" ;
GWhatTime = mkGreeting "今何時ですか" ;
}

View File

@@ -0,0 +1,33 @@
--# -path=.:present
concrete GreetingsLav of Greetings = SentencesLav [Greeting, mkGreeting] **
open Prelude
in {
flags
coding = utf8 ;
lin
GBye = mkGreeting "atā" ;
GCheers = mkGreeting "priekā" ;
GDamn = mkGreeting "sasodīts" ;
GExcuse, GExcusePol = mkGreeting "atvainojiet" ;
GGoodDay = mkGreeting "labdien" ;
GGoodEvening = mkGreeting "labvakar" ;
GGoodMorning = mkGreeting "labrīt" ;
GGoodNight = mkGreeting "ar labunakti" ;
GGoodbye = mkGreeting "visu labu" ;
GHello = mkGreeting "sveiki" ;
GHelp = mkGreeting "palīdziet" ;
GHowAreYou = mkGreeting "kā klājas" ;
GLookOut = mkGreeting "uzmanīgi" ;
GNiceToMeetYou, GNiceToMeetYouPol = mkGreeting "prieks iepazīties" ;
GPleaseGive, GPleaseGivePol = mkGreeting "lūdzu" ;
GSeeYouSoon = mkGreeting "uz drīzu tikšanos" ;
GSorry, GSorryPol = mkGreeting "piedodiet" ;
GThanks = mkGreeting "paldies" ;
GTheCheck = mkGreeting "rēķins" ;
GCongratulations = mkGreeting "apsveicu" ;
GHappyBirthday = mkGreeting "daudz laimes dzimšanas dienā" ;
GGoodLuck = mkGreeting "veiksmīgi" ;
}

View File

@@ -0,0 +1,28 @@
--# -coding=latin1
concrete GreetingsNor of Greetings = SentencesNor [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "ha det" ;
GCheers = mkGreeting "skål" ; -- google translate !
GDamn = mkGreeting "faen" ;
GExcuse, GExcusePol = mkGreeting "unnskyld" ;
GGoodDay = mkGreeting "god dag" ;
GGoodEvening = mkGreeting "god kveld" ;
GGoodMorning = mkGreeting "god morgen" ;
GGoodNight = mkGreeting "god natt" ;
GGoodbye = mkGreeting "ha det bra" ;
GHello = mkGreeting "hei" ;
GHelp = mkGreeting "hjelp" ;
GHowAreYou = mkGreeting "hvordan går det" ;
GLookOut = mkGreeting "se opp" ; -- google translate !
GNiceToMeetYou, GNiceToMeetYouPol = mkGreeting "hyggelig å treffe deg" ;
GPleaseGive, GPleaseGivePol = mkGreeting "vær så snill" ;
GSeeYouSoon = mkGreeting "se deg snart" ; -- google translate !
GSorry, GSorryPol = mkGreeting "beklager" ;
GThanks = mkGreeting "takk" ;
GTheCheck = mkGreeting "regningen" ;
GCongratulations = mkGreeting "gratulerer";
GHappyBirthday = mkGreeting "gratulerer med dagen" ;
GGoodLuck = mkGreeting "lykke til" ;
}

View File

@@ -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 ["موفق باشید"] ;
}

View File

@@ -0,0 +1,27 @@
concrete GreetingsPol of Greetings = SentencesPol [Greeting,mkGreeting] ** open Prelude in {
flags
optimize =values ; coding =utf8 ;
lin
GBye = mkGreeting "cześć" ;
GCheers = mkGreeting "na zdrowie" ;
GDamn = mkGreeting "cholera" ; -- not polite
GExcuse, GExcusePol, GSorry, GSorryPol = mkGreeting "przepraszam" ;
GGoodDay, GGoodMorning = mkGreeting "dzień dobry" ;
GGoodEvening = mkGreeting "dobry wieczór" ;
GGoodNight = mkGreeting "dobranoc" ;
GGoodbye = mkGreeting "do widzenia" ;
GHello = mkGreeting "cześć" ;
GHelp = mkGreeting "pomocy" ;
GHowAreYou = mkGreeting "jak się masz" ;
GLookOut = mkGreeting "uwaga" ;
GNiceToMeetYou = mkGreeting "miło mi" ;
GPleaseGive, GPleaseGivePol = mkGreeting "poproszę" ;
GSeeYouSoon = mkGreeting "do zobaczenia" ;
GThanks = mkGreeting "dziękuję" ;
GTheCheck = mkGreeting "rachunek" ;
GCongratulations = mkGreeting "gratulacje";
GHappyBirthday = mkGreeting "wszystkiego najlepszego z okazji urodzin" ;
GGoodLuck = mkGreeting "powodzenia" ;
}

View File

@@ -0,0 +1,31 @@
concrete GreetingsRon of Greetings = SentencesRon [Greeting,mkGreeting] ** open Prelude in {
flags coding = utf8 ;
lin
GBye = mkGreeting "pa" ;
GCheers = mkGreeting "noroc" ;
GDamn = mkGreeting "ptiu" ;
GExcuse = mkGreeting "pardon" ;
GExcusePol = mkGreeting "mă scuzați" ;
GGoodDay = mkGreeting "bună ziua" ;
GGoodEvening = mkGreeting "bună seara" ;
GGoodMorning = mkGreeting "bună dimineaţa" ;
GGoodNight = mkGreeting "noapte bună" ;
GGoodbye = mkGreeting "la revedere" ;
GHello = mkGreeting "salut" ;
GHelp = mkGreeting "ajutor" ;
GHowAreYou = mkGreeting "ce faci" ;
GLookOut = mkGreeting "atenţie" ;
GNiceToMeetYou = mkGreeting "încântat" ;
GPleaseGive = mkGreeting "te rog" ;
GPleaseGivePol = mkGreeting "vă rog" ;
GSeeYouSoon = mkGreeting "pe curând" ;
GSorry, GSorryPol = mkGreeting "îmi pare rău" ;
GThanks = mkGreeting "mulţumesc" ;
GTheCheck = mkGreeting "nota de plată" ;
GCongratulations = mkGreeting "felicitări";
GHappyBirthday = mkGreeting "la mulți ani" ;
GGoodLuck = mkGreeting "baftă" ;
}

View File

@@ -0,0 +1,29 @@
concrete GreetingsRus of Greetings = open Prelude in {
flags coding = utf8 ;
lin
GBye = ss "до свидания" ;
GCheers = ss "ура" ;
GDamn = ss "чёрт" ;
GExcuse, GExcusePol = ss "извините" ;
GGoodDay = ss "добрый день" ; ----
GGoodEvening = ss "добрый вечер" ;
GGoodMorning = ss "доброе утро" ;
GGoodNight = ss "спокойной ночи" ;
GGoodbye = ss "до свидания" ;
GHello = ss "привет" ;
GHelp = ss "помогите" ;
GHowAreYou = ss "Как поживаете" ;
GLookOut = ss "смотреть" ;
GNiceToMeetYou, GNiceToMeetYouPol = ss "приятно познакомиться" ;
GPleaseGive, GPleaseGivePol = ss "пожалуйста" ;
GSeeYouSoon = ss "до скорой встречи" ;
GSorry, GSorryPol = ss "Мне жаль" ;
GThanks = ss "спасибо" ;
GTheCheck = ss "проверить" ;
GCongratulations = ss "поздравляю";
GHappyBirthday = ss "с днем рождения" ;
GGoodLuck = ss "желаю удачи" ;
}

View File

@@ -0,0 +1,29 @@
concrete GreetingsSnd of Greetings = SentencesSnd [mkGreeting,Greeting] ** 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 "قسمت ڀلي هجي" ;
}

View File

@@ -0,0 +1,31 @@
concrete GreetingsSpa of Greetings = SentencesSpa [Greeting,mkGreeting] ** open Prelude in {
flags coding = utf8 ;
lin
GBye = mkGreeting "adiós" ;
GCheers = mkGreeting "salud" ;
GDamn = mkGreeting "joder" ;
GExcuse = mkGreeting "perdón" ;
GExcusePol = mkGreeting "perdone" ;
GCongratulations = mkGreeting "felicitaciones" ;
GGoodLuck = mkGreeting "buena suerte" ;
GHappyBirthday = mkGreeting "feliz cumpleaños" ;
GGoodMorning, GGoodDay = mkGreeting "buenos días" ;
GGoodEvening = mkGreeting "buenas tardes" ;
GGoodNight = mkGreeting "buenas noches" ;
GGoodbye = mkGreeting "hasta luego" ;
GHello = mkGreeting "hola" ;
GHelp = mkGreeting "socorro" ;
GHowAreYou = mkGreeting "cómo está" ; -- the polite singular "you"
GLookOut = mkGreeting "atención" ;
GNiceToMeetYou = mkGreeting "encantado de conocerle" ; -- the polite singular "you"
GPleaseGive, GPleaseGivePol = mkGreeting "por favor" ;
GSeeYouSoon = mkGreeting "nos vemos pronto" ;
GSorry = mkGreeting "disculpa" ;
GSorryPol = mkGreeting "disculpe" ;
GThanks = mkGreeting "gracias" ;
GTheCheck = mkGreeting "la cuenta" ;
GWhatTime = mkGreeting "qué hora es" ;
}

View File

@@ -0,0 +1,29 @@
--# -coding=latin1
concrete GreetingsSwe of Greetings = SentencesSwe [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "hej då" ;
GCheers = mkGreeting "skål" ;
GDamn = mkGreeting "fan" ;
GExcuse, GExcusePol = mkGreeting "ursäkta" ;
GGoodDay = mkGreeting "god dag" ;
GGoodEvening = mkGreeting "god afton" ;
GGoodMorning = mkGreeting "god morgon" ;
GGoodNight = mkGreeting "god natt" ;
GGoodbye = mkGreeting "hej då" ;
GHello = mkGreeting "hej" ;
GHelp = mkGreeting "hjälp" ;
GHowAreYou = mkGreeting "hur står det till" ;
GLookOut = mkGreeting "se upp" ;
GNiceToMeetYou, GNiceToMeetYouPol = mkGreeting "trevligt att träffas" ;
GPleaseGive, GPleaseGivePol = mkGreeting "var så god" ;
GSeeYouSoon = mkGreeting "vi ses snart" ;
GSorry, GSorryPol = mkGreeting "förlåt" ;
GThanks = mkGreeting "tack" ;
GTheCheck = mkGreeting "notan" ;
GCongratulations = mkGreeting "grattis";
GHappyBirthday = mkGreeting "grattis på födelsedagen" ;
GGoodLuck = mkGreeting "lycka till" ;
GWhatTime = mkGreeting "vad är klockan" | mkGreeting "hur mycket är klockan" ;
}

View File

@@ -0,0 +1,35 @@
concrete GreetingsTha of Greetings =
SentencesTha [Greeting,mkGreeting] **
open ResTha, Prelude in {
-- สุขสันต์วันเกิด
flags coding = utf8 ;
lin
GBye = mkGreeting (thword "ลา" "ก่อน") ;
GCheers = mkGreeting (thword "ไช" "โย") ;
GDamn = mkGreeting (thword "ชิบ" "หาย") ;
GExcuse, GExcusePol = mkGreeting (thword "ขอ" "โทษ") ;
GGoodDay = mkGreeting (thword "สวัส" "ดี") ;
GGoodEvening = mkGreeting (thword "สวัส" "ดี") ;
GGoodMorning = mkGreeting (thword "สวัส" "ดี") ;
GGoodNight = mkGreeting (thword "รา" "ตรี" "สวัส" "ดิ์") ;
GGoodbye = mkGreeting (thword "ลา" "ก่อน") ;
GHello = mkGreeting (thword "สวัส" "ดี") ;
GHelp = mkGreeting (thword "ช่วย" "ด้วย") ;
GHowAreYou = mkGreeting (thword "สบาย" "ดี" "ไหม") ;
GLookOut = mkGreeting (thword "ระ" "วัง") ; ---- google
GNiceToMeetYou, GNiceToMeetYouPol =
mkGreeting (thword "ยิน" "ดี" "ที่" "ได้" "รู้" "จัก") ;
GPleaseGive, GPleaseGivePol = mkGreeting "นะ" ;
GSeeYouSoon = mkGreeting (thword "เจอ" "กัน" "นะ") ;
GSorry, GSorryPol = mkGreeting (thword "ขอ" "โทษ") ;
GThanks = mkGreeting (thword "ขอบ" "คุณ") ;
GTheCheck = mkGreeting (thword "เช็ค" "บิล") ;
GCongratulations = mkGreeting (thword "ยิน" "ดี" "ด้วย") ;
GHappyBirthday = mkGreeting (thword "สุข" "สันต์" "วัน" "เกิด") ;
GGoodLuck = mkGreeting (thword "โชค" "ดี" "นะ") ;
}

View File

@@ -0,0 +1,29 @@
concrete GreetingsUrd of Greetings = SentencesUrd [mkGreeting,Greeting] ** 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 "گڈ لك" ;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
abstract Phrasebook =
Greetings,
Words
** {
flags startcat = Phrase ;
}

View File

@@ -0,0 +1,9 @@
--# -path=.:present
concrete PhrasebookBul of Phrasebook =
GreetingsBul,
WordsBul ** open
SyntaxBul,
Prelude in {
}

View File

@@ -0,0 +1,11 @@
--# -path=.:present
concrete PhrasebookCat of Phrasebook =
GreetingsCat,
WordsCat
** open
SyntaxCat,
Prelude in {
}

View File

@@ -0,0 +1,11 @@
--# -path=.:alltenses
concrete PhrasebookChi of Phrasebook =
GreetingsChi,
WordsChi
** open
SyntaxChi,
Prelude in {
}

View File

@@ -0,0 +1,9 @@
--# -path=.:present:alltenses
concrete PhrasebookDan of Phrasebook =
GreetingsDan,
WordsDan ** open
SyntaxDan,
Prelude in {
}

View File

@@ -0,0 +1,10 @@
--# -path=.:present
concrete PhrasebookDut of Phrasebook =
GreetingsDut,
WordsDut ** open
SyntaxDut,
Prelude in {
}

View File

@@ -0,0 +1,12 @@
--# -path=.:present
concrete PhrasebookEng of Phrasebook =
GreetingsEng,
WordsEng ** open
SyntaxEng,
Prelude in {
flags
language = en_US ;
}

View File

@@ -0,0 +1,7 @@
concrete PhrasebookEst of Phrasebook =
GreetingsEst,
WordsEst ** open
SyntaxEst,
Prelude in {
}

View File

@@ -0,0 +1,9 @@
--# -path=.:present
concrete PhrasebookFin of Phrasebook =
GreetingsFin,
WordsFin ** open
SyntaxFin,
Prelude in {
}

View File

@@ -0,0 +1,11 @@
--# -path=.:present
concrete PhrasebookFre of Phrasebook =
GreetingsFre,
WordsFre
** open
SyntaxFre,
Prelude in {
}

View File

@@ -0,0 +1,10 @@
--# -path=.:present
concrete PhrasebookGer of Phrasebook =
GreetingsGer,
WordsGer ** open
SyntaxGer,
Prelude in {
}

View File

@@ -0,0 +1,10 @@
--# -path=.:alltenses
concrete PhrasebookHin of Phrasebook =
GreetingsHin,
WordsHin ** open
SyntaxHin,
Prelude in {
}

View File

@@ -0,0 +1,13 @@
--# -path=.:present
concrete PhrasebookIta of Phrasebook =
GreetingsIta,
WordsIta
** open
SyntaxIta,
Prelude in {
flags language = it_IT ;
}

View File

@@ -0,0 +1,7 @@
concrete PhrasebookJpn of Phrasebook =
GreetingsJpn,
WordsJpn ** open
SyntaxJpn,
Prelude in {
}

View File

@@ -0,0 +1,7 @@
--# -path=.:present
concrete PhrasebookLav of Phrasebook = GreetingsLav, WordsLav **
open
SyntaxLav,
Prelude
in {} ;

View File

@@ -0,0 +1,9 @@
--# -path=.:present
concrete PhrasebookNor of Phrasebook =
GreetingsNor,
WordsNor ** open
SyntaxNor,
Prelude in {
}

View File

@@ -0,0 +1,13 @@
--# -path=.:present
concrete PhrasebookPol of Phrasebook =
GreetingsPol,
WordsPol ** open
SyntaxPol,
Prelude in {
flags
language = pl_PL ; optimize =values ; coding =utf8 ;
}

View File

@@ -0,0 +1,11 @@
--# -path=.:present
concrete PhrasebookRon of Phrasebook =
GreetingsRon,
WordsRon
** open
SyntaxRon,
Prelude in {
}

View File

@@ -0,0 +1,9 @@
--# -path=.:present
concrete PhrasebookSnd of Phrasebook =
GreetingsSnd,
WordsSnd ** open
SyntaxSnd,
Prelude in {
}

View File

@@ -0,0 +1,12 @@
--# -path=.:present
concrete PhrasebookSpa of Phrasebook =
GreetingsSpa,
WordsSpa
** open
SyntaxSpa,
Prelude in {
}

View File

@@ -0,0 +1,11 @@
--# -path=.:present
concrete PhrasebookSwe of Phrasebook =
GreetingsSwe,
WordsSwe ** open
SyntaxSwe,
Prelude in {
flags
language = sv_SE ;
}

View File

@@ -0,0 +1,11 @@
--# -path=.:alltenses
concrete PhrasebookTha of Phrasebook =
GreetingsTha,
WordsTha
** open
-- SyntaxTha,
Prelude in {
}

View File

@@ -0,0 +1,9 @@
--# -path=.:present
concrete PhrasebookUrd of Phrasebook =
GreetingsUrd,
WordsUrd ** open
SyntaxUrd,
Prelude in {
}

View File

@@ -0,0 +1,222 @@
--1 The Ontology of the Phrasebook
--2 Syntactic Structures of the Phrasebook
-- This module contains phrases that can be defined by a functor over the
-- resource grammar API. The phrases that are likely to have different implementations
-- are in the module Words. But the distinction is not quite sharp; thus it may happen
-- that the functor instantiations make exceptions.
abstract Sentences = Numeral ** {
-- The ontology of the phrasebook is defined by the following types. The commented ones
-- are defined in other modules.
cat
Phrase ; -- complete phrase, the unit of translation e.g. "Where are you?"
Word ; -- word that could be used as phrase e.g. "Monday"
Message ; -- sequence of phrases, longest unit e.g. "Hello! Where are you?"
Greeting ; -- idiomatic greeting e.g. "hello"
Sentence ; -- declarative sentence e.g. "I am in the bar"
Question ; -- question, either yes/no or wh e.g. "where are you"
Proposition ; -- can be turned into sentence or question e.g. "this pizza is good"
Object ; -- the object of wanting, ordering, etc e.g. "three pizzas and a beer"
PrimObject ; -- single object of wanting, ordering, etc e.g. "three pizzas"
Item ; -- a single entity e.g. "this pizza"
Kind ; -- a type of an item e.g. "pizza"
MassKind ; -- a type mass (uncountable) e.g. "water"
PlurKind ; -- a type usually only in plural e.g. "noodles"
DrinkKind ; -- a drinkable, countable type e.g. "beer"
Quality ; -- qualification of an item, can be complex e.g. "very good"
Property ; -- basic property of an item, one word e.g. "good"
Place ; -- location e.g. "the bar"
PlaceKind ; -- type of location e.g. "bar"
Currency ; -- currency unit e.g. "leu"
Price ; -- number of currency units e.g. "eleven leu"
Person ; -- agent wanting or doing something e.g. "you"
Action ; -- proposition about a Person e.g. "you are here"
Nationality ; -- complex of language, property, country e.g. "Swedish, Sweden"
LAnguage ; -- language (can be without nationality) e.g. "Flemish"
Citizenship ; -- property (can be without language) e.g. "Belgian"
Country ; -- country (can be without language) e.g. "Belgium"
Day ; -- weekday type e.g. "Friday"
Date ; -- definite date e.g. "on Friday"
Name ; -- name of person e.g. "NN"
Number ; -- number expression 1 .. 999,999 e.g. "twenty"
Transport ; -- transportation device e.g. "car"
ByTransport ; -- mean of transportation e.g. "by tram"
Superlative ; -- superlative modifiers of places e.g. "the best restaurant"
fun
-- To build a whole message
MPhrase : Phrase -> Message ;
MContinue : Phrase -> Message -> Message ;
-- Many of the categories are accessible as Phrases, i.e. as translation units.
-- To regulate whether words appear on the top level, change their status between
-- Word and Phrase, or uncomment PWord,
-- PWord : Word -> Phrase ;
PGreetingMale : Greeting -> Phrase ; -- depends on speaker e.g. in Thai
PGreetingFemale : Greeting -> Phrase ;
PSentence : Sentence -> Phrase ;
PQuestion : Question -> Phrase ;
PNumber : Number -> Phrase ;
PPrice : Price -> Phrase ;
PObject : Object -> Word ;
PKind : Kind -> Word ;
PMassKind : MassKind -> Word ;
PQuality : Quality -> Word ;
PPlace : Place -> Word ;
PPlaceKind : PlaceKind -> Word ;
PCurrency : Currency -> Word ;
PLanguage : LAnguage -> Word ;
PCitizenship : Citizenship -> Word ;
PCountry : Country -> Word ;
PDay : Day -> Word ;
PByTransport : ByTransport -> Word ;
PTransport : Transport -> Word ;
PYes, PNo, PYesToNo : Greeting ; -- yes, no, si/doch (pos. answer to neg. question)
-- To order something.
GObjectPlease : Object -> Greeting ; -- a pizza and beer, please!
-- This is the way to build propositions about inanimate items.
Is : Item -> Quality -> Proposition ; -- this pizza is good
IsMass : MassKind -> Quality -> Proposition ; -- Belgian beer is good
-- To use propositions on higher levels.
SProp : Proposition -> Sentence ; -- this pizza is good
SPropNot : Proposition -> Sentence ; -- this pizza isn't good
QProp : Proposition -> Question ; -- is this pizza good
WherePlace : Place -> Question ; -- where is the bar
WherePerson : Person -> Question ; -- where are you
-- This is the way to build propositions about persons.
PropAction : Action -> Proposition ; -- (you (are|aren't) | are you) Swedish
-- Here are some general syntactic constructions.
ObjItem : Item -> PrimObject ; -- this pizza
ObjNumber : Number -> Kind -> PrimObject ; -- five pizzas
ObjIndef : Kind -> PrimObject ; -- a pizza
ObjPlural : Kind -> PrimObject ; -- pizzas
ObjPlur : PlurKind -> PrimObject ; -- noodles
ObjMass : MassKind -> PrimObject ; -- water
ObjAndObj : PrimObject -> Object -> Object ; -- this pizza and a beer
OneObj : PrimObject -> Object ; -- this pizza
SuchKind : Quality -> Kind -> Kind ; -- Italian pizza
SuchMassKind : Quality -> MassKind -> MassKind ; -- Italian water
Very : Property -> Quality ; -- very Italian
Too : Property -> Quality ; -- too Italian
PropQuality : Property -> Quality ; -- Italian
MassDrink : DrinkKind -> MassKind ; -- beer
DrinkNumber : Number -> DrinkKind -> PrimObject ; -- five beers
-- Determiners.
This, That, These, Those : Kind -> Item ; -- this pizza,...,those pizzas
The, Thes : Kind -> Item ; -- the pizza, the pizzas
ThisMass, ThatMass, TheMass : MassKind -> Item ; -- this/that/the water
ThesePlur, ThosePlur, ThesPlur : PlurKind -> Item ; -- these/those/the potatoes
AmountCurrency : Number -> Currency -> Price ; -- five euros
ThePlace : PlaceKind -> Place ; -- the bar
APlace : PlaceKind -> Place ; -- a bar
IMale, IFemale, -- I, said by man/woman (affects agreement)
YouFamMale, YouFamFemale, -- familiar you, said to man/woman (affects agreement)
YouPolMale, YouPolFemale : Person ; -- polite you, said to man/woman (affects agreement)
LangNat : Nationality -> LAnguage ; -- Swedish
CitiNat : Nationality -> Citizenship ; -- Swedish
CountryNat : Nationality -> Country ; -- Sweden
PropCit : Citizenship -> Property ; -- Swedish
OnDay : Day -> Date ; -- on Friday
Today : Date ; -- today
PersonName : Name -> Person ; -- person referred by name
NameNN : Name ; -- the name "NN"
---- NameString : String -> Name ; ---- creates ambiguities with all words --%
NNumeral : Numeral -> Number ; -- numeral in words, e.g. "twenty"
-- Actions are typically language-dependent, not only lexically but also
-- structurally. However, these ones are mostly functorial.
SHave : Person -> Object -> Sentence ; -- you have beer
SHaveNo : Person -> Kind -> Sentence ; -- you have no apples
SHaveNoMass : Person -> MassKind -> Sentence ; -- you have no beer
QDoHave : Person -> Object -> Question ; -- do you have beer
AHaveCurr : Person -> Currency -> Action ; -- you have dollars
ACitizen : Person -> Citizenship -> Action ; -- you are Swedish
ABePlace : Person -> Place -> Action ; -- you are in the bar
ByTransp : Transport -> ByTransport ; -- by bus
AKnowSentence : Person -> Sentence -> Action ; -- you know that I am in the bar
AKnowPerson : Person -> Person -> Action ; -- you know me
AKnowQuestion : Person -> Question -> Action ; -- you know how far the bar is
------------------------------------------------------------------------------------------
-- New things added 30/11/2011 by AR
------------------------------------------------------------------------------------------
cat
VerbPhrase ; -- things one does, can do, must do, wants to do, e.g. swim
Modality ; -- can, want, must
fun
ADoVerbPhrase : Person -> VerbPhrase -> Action ; -- I swim
AModVerbPhrase : Modality -> Person -> VerbPhrase -> Action ; -- I can swim
ADoVerbPhrasePlace : Person -> VerbPhrase -> Place -> Action ; -- I swim in the hotel
AModVerbPhrasePlace : Modality -> Person -> VerbPhrase -> Place -> Action ; -- I can swim in the hotel
QWhereDoVerbPhrase : Person -> VerbPhrase -> Question ; -- where do you swim
QWhereModVerbPhrase : Modality -> Person -> VerbPhrase -> Question ; -- where can I swim
MCan, MKnow, MMust, MWant : Modality ;
-- lexical items given in the resource Lexicon
VPlay, VRun, VSit, VSleep, VSwim, VWalk : VerbPhrase ;
VDrink, VEat, VRead, VWait, VWrite, VSit, VStop : VerbPhrase ;
V2Buy, V2Drink, V2Eat : Object -> VerbPhrase ;
V2Wait : Person -> VerbPhrase ;
PImperativeFamPos, -- eat
PImperativeFamNeg, -- don't eat
PImperativePolPos, -- essen Sie
PImperativePolNeg, -- essen Sie nicht
PImperativePlurPos, -- esst
PImperativePlurNeg : -- esst nicht
VerbPhrase -> Phrase ;
-- other new things allowed by the resource
--- PBecause : Sentence -> Sentence -> Phrase ; -- I want to swim because it is hot
He, She, -- he, she
WeMale, WeFemale, -- we, said by men/women (affects agreement)
YouPlurFamMale, YouPlurFamFemale, -- plural familiar you, said to men/women (affects agreement)
YouPlurPolMale, YouPlurPolFemale, -- plural polite you, said to men/women (affects agreement)
TheyMale, TheyFemale : Person ; -- they, said of men/women (affects agreement)
}

View File

@@ -0,0 +1,54 @@
concrete SentencesBul of Sentences =
NumeralBul ** SentencesI - [IMale, IFemale, YouFamMale, YouFamFemale, YouPolMale,
YouPolFemale, ACitizen, Citizenship, PCitizenship,
LangNat, CitiNat, CountryNat, PropCit,
Nationality, Country, LAnguage, PLanguage, PCountry
] with
(Syntax = SyntaxBul),
(Symbolic = SymbolicBul),
(Lexicon = LexiconBul) ** open ExtraBul, (R = ResBul) in {
lincat
Citizenship = {s1 : R.Gender => R.NForm => Str; -- there are two nouns for every citizenship - one for males and one for females
s2 : A -- furthermore, adjective for Property
} ;
Nationality = {s1 : R.Gender => R.NForm => Str; -- there are two nouns for every citizenship - one for males and one for females
s2 : A; -- furthermore, adjective for Property
s3 : PN -- country name
} ;
LAnguage = A ;
Country = PN ;
lin IMale = mkPerson i_Pron ;
IFemale = mkPerson i8fem_Pron ;
lin YouFamMale = mkPerson youSg_Pron ;
YouFamFemale = mkPerson youSg8fem_Pron ;
YouPolMale, YouPolFemale = mkPerson youPol_Pron ;
lin ACitizen p cit =
let noun : N
= case p.name.gn of {
R.GSg g => lin N {s = \\nf => cit.s1 ! g ! nf;
rel = cit.s2.s; relType = R.AdjMod;
g = case g of {R.Masc=>R.AMasc R.Human; R.Fem=>R.AFem; R.Neut=>R.ANeut}
} ;
R.GPl => lin N {s = \\nf => cit.s1 ! R.Masc ! nf;
rel = cit.s2.s; relType = R.AdjMod;
g = R.AMasc R.Human
}
} ;
in mkCl p.name noun ;
PCitizenship cit =
mkPhrase (mkUtt (mkAP cit.s2)) ;
LangNat n = n.s2 ;
CitiNat n = n ;
CountryNat n = n.s3 ;
PropCit cit = cit.s2 ;
PLanguage x = mkPhrase (mkUtt (mkAP x)) ;
PCountry x = mkPhrase (mkUtt (mkNP x)) ;
}

View File

@@ -0,0 +1,93 @@
--# -coding=latin1
concrete SentencesCat of Sentences = NumeralCat ** SentencesI - [
IsMass,
IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale,
WeMale, WeFemale, YouPlurFamMale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale, TheyMale, TheyFemale,
PImperativeFamNeg, PImperativePolNeg, PImperativePlurNeg, --negative imperatives in subjunctive
Superlative,
AKnowPerson
]
with
(Syntax = SyntaxCat),
(Symbolic = SymbolicCat),
(Lexicon = LexiconCat) **
open ParadigmsCat, BeschCat, SyntaxCat, ExtraCat, Prelude in {
--flags coding = utf8 ;
lincat
Superlative = OrdSuperlative ; -- {ord: Ord ; isPre: Bool}
lin
IsMass m q = mkCl (mkNP the_Det m) q ; -- le vin allemand est bon
IFemale =
{name = mkNP (ProDrop i8fem_Pron) ; isPron = True ; poss = mkQuant i_Pron} ;
YouFamFemale =
{name = mkNP (ProDrop youSg8fem_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ;
YouPolFemale =
{name = mkNP (ProDrop youPol8fem_Pron) ; isPron = True ; poss = mkQuant youPol_Pron};
IMale =
{name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = mkQuant i_Pron} ;
YouFamMale =
{name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ;
YouPolMale =
{name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron} ;
He =
{name = mkNP (ProDrop he_Pron) ; isPron = True ; poss = mkQuant he_Pron} ;
She =
{name = mkNP (ProDrop she_Pron) ; isPron = True ; poss = mkQuant she_Pron} ;
WeMale =
{name = mkNP (ProDrop we_Pron) ; isPron = True ; poss = mkQuant we_Pron} ;
WeFemale =
{name = mkNP (ProDrop we8fem_Pron) ; isPron = True ; poss = mkQuant we_Pron} ;
YouPlurFamMale =
{name = mkNP (ProDrop youPl_Pron) ; isPron = True ; poss = mkQuant youPl_Pron} ;
YouPlurFamFemale =
{name = mkNP (ProDrop youPl8fem_Pron) ; isPron = True ; poss = mkQuant youPl_Pron} ;
YouPlurPolMale =
{name = mkNP (ProDrop youPolPl_Pron) ; isPron = True ; poss = mkQuant youPolPl_Pron} ;
YouPlurPolFemale =
{name = mkNP (ProDrop youPolPl8fem_Pron) ; isPron = True ; poss = mkQuant youPolPl_Pron};
TheyMale =
{name = mkNP (ProDrop they_Pron) ; isPron = True ; poss = mkQuant they_Pron} ;
TheyFemale =
{name = mkNP (ProDrop they8fem_Pron) ; isPron = True ; poss = mkQuant they_Pron} ;
PImperativeFamNeg v = phrasePlease (ImpNeg (mkNP (ProDrop youSg_Pron)) v) ;
PImperativePolNeg v = phrasePlease (ImpNeg (mkNP (ProDrop youPol_Pron)) v) ;
PImperativePlurNeg v = phrasePlease (ImpNeg (mkNP (ProDrop youPl_Pron)) v) ;
AKnowPerson p q =
let coneixer : V2 = mkV2 (mkV (conèixer_27 "conèixer"))
in mkCl p.name coneixer q.name ;
oper
CNPlace : Type = {name : CN ; at : Prep ; to : Prep } ;
mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t ->
{ name = p ; at = i ; to = t ; } ;
OrdSuperlative : Type = {ord: Ord ; isPre: Bool} ;
placeNPSuperl : OrdSuperlative -> CNPlace -> NPPlace = \sup,kind -> case sup.isPre of {
True => placeNPDet sup.ord kind ;
False => placeNPAdj sup.ord kind
} ;
placeNPDet : Ord -> CNPlace -> NPPlace = \ord,kind ->
let name : NP = mkNP (mkDet the_Art ord) kind.name in {
name = name ;
at = SyntaxCat.mkAdv kind.at name ;
to = SyntaxCat.mkAdv kind.to name ;
};
placeNPAdj : Ord -> CNPlace -> NPPlace = \ord,kind ->
let name : NP = mkNP the_Art (mkCN kind.name (mkAP ord)) in {
name = name ;
at = SyntaxCat.mkAdv kind.at name ;
to = SyntaxCat.mkAdv kind.to name ;
};
}

View File

@@ -0,0 +1,62 @@
concrete SentencesChi of Sentences = NumeralChi ** SentencesI - [QWhereModVerbPhrase, APlace,ThePlace, PropCit, CitiNat, ACitizen, Nationality, CitizenShip, ByTransp, GObjectPlease, AKnowPerson, QDoHave , QWhereDoVerbPhrase, SHaveNo, AHaveCurr]
with
(Syntax = SyntaxChi),
(Symbolic = SymbolicChi),
(Lexicon = LexiconChi) ** open SyntaxChi, (P = ParadigmsChi) in {
flags coding=utf8 ;
lincat
Citizenship = N ;
Nationality = {lang : NP ; country : NP; prop : A };
lin
ThePlace kind =
let name : NP = lin NP (Syntax.mkNP theSg_Det kind.name) in {
name = lin NP name ;
at = mkAdv kind.at (lin NP name) ;
to = mkAdv kind.to (lin NP name)
} ;
APlace kind =
let name : NP = lin NP (Syntax.mkNP aSg_Det kind.name) in {
name = lin NP name ;
at = mkAdv kind.at (lin NP name) ;
to = mkAdv kind.to (lin NP name)
} ;
ACitizen p n = mkCl p.name (lin N {s = n.s ++ "人" } ) ; -- to get 俄罗斯人, not 俄罗斯(人)的 ;
CitiNat n = n.prop ; -- lin A { s = n.prop.s ++ "人" ; lock_A = <> ; monoSyl = False} ;
PropCit c = lin A { s = c.s ; lock_A = <>; monoSyl = True } ;
ByTransp t = t.by ;
QWhereModVerbPhrase m p vp = mkQS (mkQCl zai_where_IAdv (mkCl p.name (mkVP m vp))) ;
GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) please_shang_Voc) | lin Text (mkUtt o) ;
AKnowPerson p q = mkCl p.name (P.mkV2 "认识") q.name ;
QDoHave p obj = mkQS (mkQCl (mkCl p.name have_V2 obj)) ;
QWhereDoVerbPhrase p vp = mkQS (mkQCl qu_where_IAdv (mkCl p.name vp)) ;
SHaveNo p k = mkS negativePol (mkCl p.name have_V2 (mkNP k)) ;
AHaveCurr p curr = mkCl p.name have_V2 (mkNP curr) ;
MCan = can_VV ;
MWant = want_VV ;
MMust = must_VV ;
oper
qu_where_IAdv = mkIAdvL "去哪里" ;
zai_where_IAdv = mkIAdvL "在哪里" ;
where_m_IAdv : VV -> SS = \m -> mkIAdvL m.s ; -- ( "想在哪里" ) ;
have_or_not_V2 = P.mkV2 (P.mkV "有没有" "了" "着" "在" "过" "没") ;
please_shang_Voc : SS = ss "请上" ;
}

View File

@@ -0,0 +1,8 @@
concrete SentencesDan of Sentences = NumeralDan ** SentencesI - [NameNN] with
(Syntax = SyntaxDan),
(Symbolic = SymbolicDan),
(Lexicon = LexiconDan) ** open Prelude, SyntaxDan, (P = ParadigmsDan) in {
lin NameNN = mkNP (P.mkPN "NN") ;
}

View File

@@ -0,0 +1,53 @@
concrete SentencesDut of Sentences = NumeralDut ** SentencesI -
[SHaveNo,SHaveNoMass,
Proposition,Action, Is, IsMass, SProp, SPropNot, QProp,
AHaveCurr, ACitizen, ABePlace, AKnowSentence, AKnowPerson, AKnowQuestion,
---- QDoHave, QWhereDoVerbPhrase, QWhereModVerbPhrase, SHave,
SHaveNo,
QModVerbPhrase,
ADoVerbPhrase, AModVerbPhrase, ADoVerbPhrasePlace, AModVerbPhrasePlace]
with
(Syntax = SyntaxDut),
(Symbolic = SymbolicDut),
(Lexicon = LexiconDut) ** open Prelude, SyntaxDut in {
lincat
Proposition, Action = Prop ;
oper
Prop = {pos : Cl ; neg : S} ; -- x F y ; x F niet/geen y
mkProp : Cl -> S -> Prop = \pos,neg -> {pos = pos ; neg = neg} ;
prop : Cl -> Prop = \cl -> mkProp cl (mkS negativePol cl) ;
lin
Is i q = prop (mkCl i q) ;
IsMass m q = prop (mkCl (mkNP m) q) ;
SProp p = mkS p.pos ;
SPropNot p = p.neg ;
QProp p = mkQS (mkQCl p.pos) ;
AHaveCurr p curr = prop (mkCl p.name have_V2 (mkNP aPl_Det curr)) ;
ACitizen p n = prop (mkCl p.name n) ;
ABePlace p place = prop (mkCl p.name place.at) ;
AKnowSentence p s = prop (mkCl p.name Lexicon.know_VS s) ;
AKnowQuestion p s = prop (mkCl p.name Lexicon.know_VQ s) ;
AKnowPerson p q = prop (mkCl p.name Lexicon.know_V2 q.name) ;
lincat
Nationality = {lang : CN ; country : NP ; prop : A} ;
Language = CN ; -- kein Deutsch
-- the new things
lin
ADoVerbPhrase p vp = prop (mkCl p.name vp) ;
AModVerbPhrase m p vp = prop (mkCl p.name (mkVP m vp)) ;
ADoVerbPhrasePlace p vp x = prop (mkCl p.name (mkVP vp x.at)) ;
AModVerbPhrasePlace m p vp x = prop (mkCl p.name (mkVP m (mkVP vp x.at))) ;
-- the old things
lin
SHaveNo p k = mkS (mkCl p.name have_V2 (mkNP no_Quant plNum k)) ;
SHaveNoMass p k = mkS (mkCl p.name have_V2 (mkNP no_Quant k)) ;
}

View File

@@ -0,0 +1,4 @@
concrete SentencesEng of Sentences = NumeralEng ** SentencesI with
(Syntax = SyntaxEng),
(Symbolic = SymbolicEng),
(Lexicon = LexiconEng) ;

View File

@@ -0,0 +1,63 @@
concrete SentencesEst of Sentences = NumeralEst ** SentencesI -
[NameNN, ObjMass,
NPPlace, CNPlace, placeNP, mkCNPlace, mkCNPlacePl, NPNationality, mkNPNationality,
CitiNat, Citizenship, Nationality, ACitizen, PropCit, PCitizenship,
GObjectPlease
] with
(Syntax = SyntaxEst),
(Symbolic = SymbolicEst),
(Lexicon = LexiconEst) **
open SyntaxEst, ExtraEst, (P = ParadigmsEst), (V = VerbEst), Prelude in {
flags optimize = noexpand ;
lincat
Citizenship = ACitizenship ;
Nationality = NPNationality ;
oper
NPPlace : Type = {name : NP ; at : Adv ; to : Adv ; from : Adv} ;
CNPlace : Type = {name : CN ; at : Prep ; to : Prep ; from : Prep ; isPl : Bool} ;
ACitizenship : Type = { prop : A ; nat : A } ;
NPNationality : Type = ACitizenship ** {lang : NP ; country : NP} ;
placeNP : Det -> CNPlace -> NPPlace = \det,kind ->
let name : NP = mkNP det kind.name in {
name = name ;
at = mkAdv kind.at name ;
to = mkAdv kind.to name ;
from = mkAdv kind.from name
} ;
lin
-- The Fin-grammar overloaded the Is and IsMass functions to be
-- able to use the complement in partitive.
-- This would be wrong in Est, where the complement is in nominative.
-- Fin: tämä pizza on herkullista
-- Is item prop = mkCl item (V.UseComp (CompPartAP prop)) ;
--
-- Fin: pizza on herkullista
-- IsMass mass prop = mkCl (mkNP a_Det mass) (V.UseComp (CompPartAP prop)) ;
NameNN = mkNP (P.mkPN (P.mkN "NN")) ;
-- Estonian does not have possessive endings and does not make use of ProDrop
-- that much, so we do not override SentencesI, like Finnish does.
{--
IMale, IFemale =
{name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = ProDropPoss i_Pron} ;
YouFamMale, YouFamFemale =
{name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = ProDropPoss youSg_Pron} ;
YouPolMale, YouPolFemale =
{name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = ProDropPoss youPol_Pron} ;
--}
ObjMass = PartCN ;
GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) (lin Voc (ss "palun"))) ;
CitiNat n = n ; -- keep just prop and nat fields
PropCit c = c.prop ;
PCitizenship c = mkPhrase (mkUtt (mkAP c.prop)) ;
ACitizen p n = mkCl p.name n.nat ;
}

View File

@@ -0,0 +1,56 @@
--# -coding=latin1
concrete SentencesFin of Sentences = NumeralFin ** SentencesI -
[Is, IsMass, NameNN, ObjMass,
IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale,
WeMale, WeFemale, YouPlurFamMale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale,
NPPlace, CNPlace, placeNP, mkCNPlace, mkCNPlacePl,
GObjectPlease,
NPNationality, mkNPNationality,
Country, PCountry
] with
(Syntax = SyntaxFin),
(Symbolic = SymbolicFin),
(Lexicon = LexiconFin) **
open SyntaxFin, ExtraFin, (P = ParadigmsFin), (V = VerbFin), Prelude in {
flags optimize = noexpand ;
lincat
Country = {np : NP ; isExternal : Bool} ;
lin
PCountry x = mkPhrase (mkUtt x.np) ;
oper
NPNationality = {lang : NP ; prop : A ; country : {np : NP ; isExternal : Bool}} ;
NPPlace = {name : NP ; at : Adv ; to : Adv ; from : Adv} ;
CNPlace = {name : CN ; isExternal : Bool ; isPl : Bool} ;
placeNP : Det -> CNPlace -> NPPlace = \det,kind ->
let name : NP = mkNP det kind.name in {
name = name ;
at = mkAdv (P.casePrep (if_then_else P.Case kind.isExternal P.adessive P.inessive)) name ;
to = mkAdv (P.casePrep (if_then_else P.Case kind.isExternal P.allative P.illative)) name ;
from = mkAdv (P.casePrep (if_then_else P.Case kind.isExternal P.ablative P.elative)) name
} ;
lin
Is item prop = mkCl item (V.UseComp (CompPartAP prop)) ; -- tämä pizza on herkullista
IsMass mass prop = mkCl (mkNP a_Det mass) (V.UseComp (CompPartAP prop)) ; -- pizza on herkullista
NameNN = mkNP (P.mkPN (P.mkN "NN" "NN:iä")) ;
IMale, IFemale =
{name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = ProDropPoss i_Pron} ;
YouFamMale, YouFamFemale =
{name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = ProDropPoss youSg_Pron} ;
YouPolMale, YouPolFemale =
{name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = ProDropPoss youPol_Pron} ;
WeMale, WeFemale =
{name = mkNP (ProDrop we_Pron) ; isPron = True ; poss = ProDropPoss we_Pron} ;
YouPlurFamMale, YouPlurFamFemale, YouPlurPolMale, YouPlurPolFemale =
{name = mkNP (ProDrop youPl_Pron) ; isPron = True ; poss = ProDropPoss youPl_Pron} ;
ObjMass = PartCN ;
GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) (lin Voc (ss "kiitos"))) ;
}

View File

@@ -0,0 +1,47 @@
concrete SentencesFre of Sentences = NumeralFre ** SentencesI - [
IsMass,
QProp,
IFemale, YouFamFemale, YouPolFemale, WeFemale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale, TheyFemale,
PYesToNo,
SHaveNo,SHaveNoMass,
Superlative
]
with
(Syntax = SyntaxFre),
(Symbolic = SymbolicFre),
(Lexicon = LexiconFre) **
open SyntaxFre, ExtraFre, (P = ParadigmsFre), Prelude in {
lincat
Superlative = {s : Ord ; isPre : Bool} ;
lin
IsMass m q = mkCl (mkNP the_Det m) q ; -- le vin allemand est bon
QProp a =
lin QS {s = \\_ => (EstcequeS (mkS a)).s} ;
IFemale =
{name = mkNP i8fem_Pron ; isPron = True ; poss = mkQuant i_Pron} ;
YouFamFemale =
{name = mkNP youSg8fem_Pron ; isPron = True ; poss = mkQuant youSg_Pron} ;
YouPolFemale =
{name = mkNP youPol8fem_Pron ; isPron = True ; poss = mkQuant youPol_Pron} ;
WeFemale =
{name = mkNP we8fem_Pron ; isPron = True ; poss = mkQuant we_Pron} ;
YouPlurFamFemale =
{name = mkNP youPl8fem_Pron ; isPron = True ; poss = mkQuant youPl_Pron} ;
YouPlurPolMale =
{name = mkNP youPl_Pron ; isPron = True ; poss = mkQuant youPol_Pron};
YouPlurPolFemale =
{name = mkNP youPl8fem_Pron ; isPron = True ; poss = mkQuant youPol_Pron};
TheyFemale =
{name = mkNP they8fem_Pron ; isPron = True ; poss = mkQuant they_Pron} ;
PYesToNo = mkPhrase (lin Utt (ss "si")) ;
SHaveNo p k = mkS negativePol (mkCl p.name have_de (mkNP aPl_Det k)) ;
SHaveNoMass p k = mkS negativePol (mkCl p.name (ComplCN have_de k)) ;
oper
have_de : V2 = P.mkV2 (P.mkV have_V2) P.genitive ;
}

View File

@@ -0,0 +1,50 @@
concrete SentencesGer of Sentences = NumeralGer ** SentencesI -
[PYesToNo,SHaveNo,SHaveNoMass,
Proposition, Action, Is, IsMass, SProp, SPropNot, QProp,
AHaveCurr, ACitizen, ABePlace, AKnowSentence, AKnowPerson, AKnowQuestion,
Nationality, LAnguage,
ADoVerbPhrase, AModVerbPhrase, ADoVerbPhrasePlace, AModVerbPhrasePlace,
YouPlurPolMale, YouPlurPolFemale
] with
(Syntax = SyntaxGer),
(Symbolic = SymbolicGer),
(Lexicon = LexiconGer) ** open Prelude, SyntaxGer in {
lin
PYesToNo = mkPhrase (lin Utt (ss "doch")) ;
SHaveNo p k = mkS (mkCl p.name have_V2 (mkNP no_Quant plNum k)) ;
SHaveNoMass p k = mkS (mkCl p.name have_V2 (mkNP no_Quant k)) ;
lincat
Proposition, Action = Prop ;
oper
Prop = {pos : Cl ; neg : S} ; -- x F y ; x F nicht/kein y
mkProp : Cl -> S -> Prop = \pos,neg -> {pos = pos ; neg = neg} ;
prop : Cl -> Prop = \cl -> mkProp cl (mkS negativePol cl) ;
lin
Is i q = prop (mkCl i q) ;
IsMass m q = prop (mkCl (mkNP m) q) ;
SProp p = mkS p.pos ;
SPropNot p = p.neg ;
QProp p = mkQS (mkQCl p.pos) ;
AHaveCurr p curr = prop (mkCl p.name have_V2 (mkNP aPl_Det curr)) ;
ACitizen p n = prop (mkCl p.name n) ;
ABePlace p place = prop (mkCl p.name place.at) ;
AKnowSentence p s = prop (mkCl p.name Lexicon.know_VS s) ;
AKnowQuestion p s = prop (mkCl p.name Lexicon.know_VQ s) ;
AKnowPerson p q = prop (mkCl p.name Lexicon.know_V2 q.name) ;
lincat
Nationality = {lang : CN ; country : NP ; prop : A} ;
LAnguage = CN ; -- kein Deutsch
-- the new things
lin
ADoVerbPhrase p vp = prop (mkCl p.name vp) ;
AModVerbPhrase m p vp = prop (mkCl p.name (mkVP m vp)) ;
ADoVerbPhrasePlace p vp x = prop (mkCl p.name (mkVP vp x.at)) ;
AModVerbPhrasePlace m p vp x = prop (mkCl p.name (mkVP m (mkVP vp x.at))) ;
YouPlurPolMale, YouPlurPolFemale = mkPerson youPol_Pron ;
}

View File

@@ -0,0 +1,42 @@
concrete SentencesHin of Sentences = NumeralHin ** SentencesI -
[sing,IFemale,YouFamFemale,YouPolFemale,MMust,YouPlurFamFemale,YouPlurPolFemale,YouFamMale,mkGreeting] 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
mkGreeting = ss ;
oper
myN = "मैं" ;
mjh = "मुझ" ;
myra = "मेरा" ;
myry = "मेरी" ;
myrE = "मेरे" ;
tw = "तू" ;
tum = "तुम" ;
tyra = "तेरा" ;
tyry = "तेरी" ;
tyrE = "तेरे" ;
tumhara = "तुम्हारा" ;
tumhary = "तुम्हारी" ;
tumharay = "तुम्हारे" ;
ap = "आप" ;
apka = ["आप का"] ;
apky = ["आप की"] ;
apkE = ["आप के"] ;
} ;

View File

@@ -0,0 +1,302 @@
--1 Implementation of MOLTO Phrasebook
--2 The functor for (mostly) common structures
incomplete concrete SentencesI of Sentences = Numeral **
open
Syntax,
Lexicon,
Symbolic, -- for names as strings
Prelude
in {
lincat
Phrase = Text ;
Word = Text ;
Message = Text ;
Greeting = Text ;
Sentence = S ;
Question = QS ;
Proposition = Cl ;
Item = NP ;
Kind = CN ;
MassKind = CN ;
MassKind = CN ;
PlurKind = CN ;
DrinkKind = CN ;
Quality = AP ;
Property = A ;
Object = NP ;
PrimObject = NP ;
Place = NPPlace ; -- {name : NP ; at : Syntax.Adv ; to : Syntax.Adv} ;
PlaceKind = CNPlace ; -- {name : CN ; at : Prep ; to : Prep} ;
Currency = CN ;
Price = NP ;
Action = Cl ;
Person = NPPerson ; -- {name : NP ; isPron : Bool ; poss : Quant} ;
Nationality = NPNationality ; -- {lang : NP ; country : NP ; prop : A} ;
LAnguage = NP ;
Citizenship = A ;
Country = NP ;
Day = NPDay ; -- {name : NP ; point : Syntax.Adv ; habitual : Syntax.Adv} ;
Date = Syntax.Adv ;
Name = NP ;
Number = Card ;
ByTransport = Syntax.Adv ;
Transport = {name : CN ; by : Syntax.Adv} ;
Superlative = Det ;
lin
MPhrase p = p ;
MContinue p m = mkText p m ;
PSentence s = mkText s | lin Text (mkUtt s) ; -- optional '.'
PQuestion s = mkText s | lin Text (mkUtt s) ; -- optional '?'
PGreetingMale, PGreetingFemale = \g -> mkText (lin Phr (ss g.s)) exclMarkPunct | g ;
-- PWord w = w ;
PNumber x = mkSentence (mkUtt x) ;
PPrice x = mkSentence (mkUtt x) ;
PObject x = mkPhrase (mkUtt x) ;
PKind x = mkPhrase (mkUtt x) ;
PMassKind x = mkPhrase (mkUtt x) ;
PQuality x = mkPhrase (mkUtt x) ;
PPlace x = mkPhrase (mkUtt x.name) ;
PPlaceKind x = mkPhrase (mkUtt x.name) ;
PCurrency x = mkPhrase (mkUtt x) ;
PLanguage x = mkPhrase (mkUtt x) ;
PCountry x = mkPhrase (mkUtt x) ;
PCitizenship x = mkPhrase (mkUtt (mkAP x)) ;
PDay d = mkPhrase (mkUtt d.name) ;
PTransport t = mkPhrase (mkUtt t.name) ;
PByTransport t = mkPhrase (mkUtt t) ;
PYes = mkPhrase yes_Utt ;
PNo = mkPhrase no_Utt ;
PYesToNo = mkPhrase yes_Utt ;
GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) please_Voc) | lin Text (mkUtt o) ;
Is = mkCl ;
IsMass m q = mkCl (mkNP m) q ;
SProp = mkS ;
SPropNot = mkS negativePol ;
QProp p = mkQS (mkQCl p) ;
WherePlace place = mkQS (mkQCl where_IAdv place.name) ;
WherePerson person = mkQS (mkQCl where_IAdv person.name) ;
PropAction a = a ;
AmountCurrency num curr = mkNP num curr ;
ObjItem i = i ;
ObjNumber n k = mkNP n k ;
ObjIndef k = mkNP a_Quant k ;
ObjPlural k = mkNP aPl_Det k ;
ObjPlur k = mkNP aPl_Det k ;
ObjMass k = mkNP k ;
ObjAndObj = mkNP and_Conj ;
OneObj o = o ;
MassDrink d = d ;
DrinkNumber n k = mkNP n k ;
This kind = mkNP this_Quant kind ;
That kind = mkNP that_Quant kind ;
These kind = mkNP this_Quant plNum kind ;
Those kind = mkNP that_Quant plNum kind ;
The kind = mkNP the_Quant kind ;
Thes kind = mkNP the_Quant plNum kind ;
ThisMass kind = mkNP this_Quant kind ;
ThatMass kind = mkNP that_Quant kind ;
TheMass kind = mkNP the_Quant kind ;
ThesePlur kind = mkNP this_Quant plNum kind ;
ThosePlur kind = mkNP that_Quant plNum kind ;
ThesPlur kind = mkNP the_Quant plNum kind ;
SuchKind quality kind = mkCN quality kind ;
SuchMassKind quality kind = mkCN quality kind ;
Very property = mkAP very_AdA (mkAP property) ;
Too property = mkAP too_AdA (mkAP property) ;
PropQuality property = mkAP property ;
ThePlace kind = let dd : Det = if_then_else Det kind.isPl thePl_Det theSg_Det
in placeNP dd kind ;
APlace kind = let dd : Det = if_then_else Det kind.isPl aPl_Det aSg_Det
in placeNP dd kind ;
IMale, IFemale = mkPerson i_Pron ;
YouFamMale, YouFamFemale = mkPerson youSg_Pron ;
YouPolMale, YouPolFemale = mkPerson youPol_Pron ;
LangNat n = n.lang ;
CitiNat n = n.prop ;
CountryNat n = n.country ;
PropCit c = c ;
OnDay d = d.point ;
Today = today_Adv ;
PersonName n =
{name = n ; isPron = False ; poss = mkQuant he_Pron} ; -- poss not used
---- NameString s = symb s ; --%
NameNN = symb "NN" ;
NNumeral n = mkCard <lin Numeral n : Numeral> ;
SHave p obj = mkS (mkCl p.name have_V2 obj) ;
SHaveNo p k = mkS negativePol (mkCl p.name have_V2 (mkNP aPl_Det k)) ;
SHaveNoMass p m = mkS negativePol (mkCl p.name have_V2 (mkNP m)) ;
QDoHave p obj = mkQS (mkQCl (mkCl p.name have_V2 obj)) ;
AHaveCurr p curr = mkCl p.name have_V2 (mkNP aPl_Det curr) ;
ACitizen p n = mkCl p.name n ;
ABePlace p place = mkCl p.name place.at ;
ByTransp t = t.by ;
AKnowSentence p s = mkCl p.name Lexicon.know_VS s ;
AKnowQuestion p s = mkCl p.name Lexicon.know_VQ s ;
AKnowPerson p q = mkCl p.name Lexicon.know_V2 q.name ;
oper
-- These operations are used internally in Sentences.
mkPhrase : Utt -> Text = \u -> lin Text u ; -- no punctuation
mkGreeting : Str -> Text = \s -> lin Text (ss s) ; -- no punctuation
mkSentence : Utt -> Text = \t -> lin Text (postfixSS "." t | t) ; -- optional .
mkPerson : Pron -> {name : NP ; isPron : Bool ; poss : Quant} = \p ->
{name = mkNP p ; isPron = True ; poss = mkQuant p} ;
-- These are used in Words for each language.
NPNationality : Type = {lang : NP ; country : NP ; prop : A} ;
mkNPNationality : NP -> NP -> A -> NPNationality = \la,co,pro ->
{lang = la ;
country = co ;
prop = pro
} ;
NPDay : Type = {name : NP ; point : Syntax.Adv ; habitual : Syntax.Adv} ;
mkNPDay : NP -> Syntax.Adv -> Syntax.Adv -> NPDay = \d,p,h ->
{name = d ;
point = p ;
habitual = h
} ;
NPPlace : Type = {name : NP ; at : Syntax.Adv ; to : Syntax.Adv} ;
CNPlace : Type = {name : CN ; at : Prep ; to : Prep; isPl : Bool} ;
mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
name = p ;
at = i ;
to = t ;
isPl = False
} ;
mkCNPlacePl : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
name = p ;
at = i ;
to = t ;
isPl = True
} ;
placeNP : Det -> CNPlace -> NPPlace = \det,kind ->
let name : NP = mkNP det kind.name in {
name = name ;
at = Syntax.mkAdv kind.at name ;
to = Syntax.mkAdv kind.to name
} ;
NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ;
relativePerson : GNumber -> CN -> (Num -> NP -> CN -> NP) -> NPPerson -> NPPerson =
\n,x,f,p ->
let num = if_then_else Num n plNum sgNum in {
name = case p.isPron of {
True => mkNP p.poss num x ;
_ => f num p.name x
} ;
isPron = False ;
poss = mkQuant he_Pron -- not used because not pron
} ;
GNumber : PType = Bool ;
sing = False ; plur = True ;
-- for languages without GenNP, use "the wife of p"
mkRelative : Bool -> CN -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n x
(\a,b,c -> mkNP (mkNP the_Quant a c) (Syntax.mkAdv possess_Prep b)) p ;
-- for languages with GenNP, use "p's wife"
-- relativePerson n x (\a,b,c -> mkNP (GenNP b) a c) p ;
phrasePlease : Utt -> Text = \u -> --- lin Text (mkPhr noPConj u please_Voc) |
lin Text u ;
------------------------------------------------------------------------------------------
-- New things added 30/11/2011 by AR
------------------------------------------------------------------------------------------
lincat
VerbPhrase = VP ;
Modality = VV ;
lin
ADoVerbPhrase p vp = mkCl p.name vp ;
AModVerbPhrase m p vp = mkCl p.name (mkVP m vp) ;
ADoVerbPhrasePlace p vp x = mkCl p.name (mkVP vp x.at) ;
AModVerbPhrasePlace m p vp x = mkCl p.name (mkVP m (mkVP vp x.at)) ;
QWhereDoVerbPhrase p vp = mkQS (mkQCl where_IAdv (mkCl p.name vp)) ;
QWhereModVerbPhrase m p vp = mkQS (mkQCl where_IAdv (mkCl p.name (mkVP m vp))) ;
MWant = want_VV ;
MCan = can_VV ;
MKnow = can8know_VV ;
MMust = must_VV ;
VPlay = mkVP play_V ;
VRun = mkVP run_V ;
VSit = mkVP sit_V ;
VSleep = mkVP sleep_V ;
VSwim = mkVP swim_V ;
VWalk = mkVP walk_V ;
VSit = mkVP sit_V ;
VStop = mkVP stop_V ;
VDrink = mkVP <lin V drink_V2 : V> ;
VEat = mkVP <lin V eat_V2 : V> ;
VRead = mkVP <lin V read_V2 : V> ;
VWait = mkVP <lin V wait_V2 : V> ;
VWrite = mkVP <lin V write_V2 : V> ;
V2Buy o = mkVP buy_V2 o ;
V2Drink o = mkVP drink_V2 o ;
V2Eat o = mkVP eat_V2 o ;
V2Wait o = mkVP wait_V2 o.name ;
PImperativeFamPos v = phrasePlease (mkUtt (mkImp v)) ;
PImperativeFamNeg v = phrasePlease (mkUtt negativePol (mkImp v)) ;
PImperativePolPos v = phrasePlease (mkUtt politeImpForm (mkImp v)) ;
PImperativePolNeg v = phrasePlease (mkUtt politeImpForm negativePol (mkImp v)) ;
PImperativePlurPos v = phrasePlease (mkUtt pluralImpForm (mkImp v)) ;
PImperativePlurNeg v = phrasePlease (mkUtt pluralImpForm negativePol (mkImp v)) ;
-- other new things allowed by the resource
--- PBecause a b = SSubjS a because_Subj b ;
He = mkPerson he_Pron ;
She = mkPerson she_Pron ;
WeMale, WeFemale = mkPerson we_Pron ;
YouPlurFamMale, YouPlurFamFemale = mkPerson youPl_Pron ;
YouPlurPolMale, YouPlurPolFemale = mkPerson youPl_Pron ;
TheyMale, TheyFemale = mkPerson they_Pron ;
}

View File

@@ -0,0 +1,78 @@
concrete SentencesIta of Sentences = NumeralIta ** SentencesI - [
IsMass,
IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale,
WeMale, WeFemale, YouPlurFamMale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale, TheyMale, TheyFemale,
mkPerson, Superlative, SHaveNoMass
]
with
(Syntax = SyntaxIta),
(Symbolic = SymbolicIta),
(Lexicon = LexiconIta) **
open SyntaxIta, ExtraIta, Prelude in {
lincat
Place = NPPlace ; -- {name : NP ; at : Adv ; to : Adv ; } ;
Superlative = {s : A ; isPre : Bool} ;
lin
IsMass m q = mkCl (mkNP the_Det m) q ; -- le vin allemand est bon
IFemale =
{name = mkNP (ProDrop i8fem_Pron) ; isPron = True ; poss = PossFamQuant i_Pron} ;
IMale =
{name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = PossFamQuant i_Pron} ;
YouFamMale =
{name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = PossFamQuant youSg_Pron} ;
YouFamFemale =
{name = mkNP (ProDrop youSg8fem_Pron) ; isPron = True ; poss = PossFamQuant youSg_Pron} ;
YouPolMale =
{name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = PossFamQuant youPol_Pron} ;
YouPolFemale =
{name = mkNP (ProDrop youPol8fem_Pron) ; isPron = True ; poss = PossFamQuant youPol_Pron};
He =
{name = mkNP (ProDrop he_Pron) ; isPron = True ; poss = PossFamQuant he_Pron} ;
She =
{name = mkNP (ProDrop she_Pron) ; isPron = True ; poss = PossFamQuant she_Pron} ;
WeMale =
{name = mkNP (ProDrop we_Pron) ; isPron = True ; poss = PossFamQuant we_Pron} ;
WeFemale =
{name = mkNP (ProDrop we8fem_Pron) ; isPron = True ; poss = PossFamQuant we_Pron} ;
YouPlurFamMale =
{name = mkNP (ProDrop youPl_Pron) ; isPron = True ; poss = PossFamQuant youPl_Pron} ;
YouPlurFamFemale =
{name = mkNP (ProDrop youPl8fem_Pron) ; isPron = True ; poss = PossFamQuant youPl_Pron} ;
YouPlurPolMale =
{name = mkNP (ProDrop youPolPl_Pron) ; isPron = True ; poss = PossFamQuant youPolPl_Pron} ;
YouPlurPolFemale =
{name = mkNP (ProDrop youPolPl8fem_Pron) ; isPron = True ; poss = PossFamQuant youPolPl_Pron};
TheyMale =
{name = mkNP (ProDrop they_Pron) ; isPron = True ; poss = PossFamQuant they_Pron} ;
TheyFemale =
{name = mkNP (ProDrop they8fem_Pron) ; isPron = True ; poss = PossFamQuant they_Pron} ;
SHaveNoMass p k = mkS negativePol (mkCl p.name (ComplCN have_V2 k)) ;
oper
CNPlace : Type = {name : CN ; at : Prep ; to : Prep } ;
mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
name = p ;
at = i ;
to = t ;
} ;
placeNP : Det -> CNPlace -> NPPlace = \det,kind ->
let name : NP = mkNP det kind.name in {
name = name ;
at = mkAdv kind.at name ;
to = mkAdv kind.to name
} ;
mkPerson : Pron -> {name : NP ; isPron : Bool ; poss : Quant} = \p ->
{name = mkNP p ; isPron = True ; poss = PossFamQuant p} ;
}

View File

@@ -0,0 +1,62 @@
concrete SentencesJpn of Sentences = NumeralJpn **
SentencesI - [
VDrink,VEat,VRead,VWait,VWrite,
phrasePlease, mkSentence, mkPhrase,
NameNN,
PSentence, PQuestion, GObjectPlease,
ACitizen, Citizenship, CitiNat, Nationality, NPNationality, mkNPNationality, PropCit, PCitizenship
]
with
(Syntax = SyntaxJpn),
-- (Symbolic = SymbolicJpn),
(Lexicon = LexiconJpn) ** open SyntaxJpn, ParadigmsJpn in {
flags coding = utf8 ;
lincat
Citizenship = NPCitizenship ;
Nationality = NPNationality ;
lin
VDrink = v2toVP drink_V2 ;
VEat = v2toVP eat_V2 ;
VRead = v2toVP read_V2 ;
VWait = v2toVP wait_V2 ;
VWrite = v2toVP write_V2 ;
NameNN = mkNP (mkPN "NN") ;
PSentence s = mkText (mkPhr (mkUtt s)) | lin Text (mkPhr (mkUtt s)) ; -- optional '.'
PQuestion s = mkText (mkPhr (mkUtt s)) | lin Text (mkPhr (mkUtt s)) ; -- optional '?'
GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) please_Voc) | lin Text (mkPhr (mkUtt o)) ;
ACitizen p n = mkCl p.name n.citizenship ;
CitiNat n = {prop = n.prop ; citizenship = n.citizenship} ;
PropCit c = c.prop ;
PCitizenship x = mkPhrase (mkUtt x.citizenship) ;
oper
v2toVP : V2 -> VP = \v2 -> mkVP <lin V (v2 ** {needSubject = True}) : V> ;
phrasePlease : Utt -> Text = \u -> lin Text (mkPhr u) | lin Text (mkPhr noPConj u please_Voc) ;
mkPhrase : Utt -> Text = \u -> lin Text (mkPhr u) ; -- no punctuation
mkSentence : Utt -> Text = \t -> lin Text (postfixSS "." (mkPhr t) | (mkPhr t)) ; -- optional .
NPCitizenship : Type = {prop : A ; citizenship : NP} ;
NPNationality : Type = NPCitizenship ** {lang : NP ; country : NP} ;
mkNPNationality : NP -> NP -> A -> NP -> NPNationality = \la,co,pro,ci ->
{lang = la ;
country = co ;
prop = pro ;
citizenship = ci
} ;
}

View File

@@ -0,0 +1,50 @@
concrete SentencesLav of Sentences = NumeralLav ** SentencesI - [
LAnguage,
PLanguage,
NPNationality,
mkNPNationality,
NameNN,
IFemale,
YouFamFemale,
YouPolFemale,
WeFemale,
YouPlurFamFemale,
YouPlurPolFemale,
TheyFemale
]
with
(Syntax = SyntaxLav),
(Symbolic = SymbolicLav),
(Lexicon = LexiconLav) **
open
Prelude,
SyntaxLav,
(P = ParadigmsLav),
ExtraLav
in {
lincat
LAnguage = NPLanguage ;
lin
PLanguage x = mkPhrase (mkUtt x.lang) ;
NameNN = mkNP (P.mkN "NN") ;
IFemale = mkPerson i8fem_Pron ;
YouFamFemale = mkPerson youSg8fem_Pron ;
YouPolFemale = mkPerson youPol8fem_Pron ;
WeFemale = mkPerson we8fem_Pron ;
YouPlurFamFemale, YouPlurPolFemale = mkPerson youPl8fem_Pron ;
TheyFemale = mkPerson they8fem_Pron ;
oper
NPLanguage : Type = {lang : NP ; modif : Adv} ;
NPNationality : Type = {lang : NPLanguage ; country : NP ; prop : A} ;
mkNPNationality : NPLanguage -> NP -> A -> NPNationality = \la,co,pro -> {
lang = la ;
country = co ;
prop = pro
} ;
}

View File

@@ -0,0 +1,10 @@
concrete SentencesNor of Sentences = NumeralNor ** SentencesI - [NameNN] with
(Syntax = SyntaxNor),
(Symbolic = SymbolicNor),
(Lexicon = LexiconNor) ** open SyntaxNor, (P = ParadigmsNor) in
{
lin NameNN = mkNP (P.mkPN "NN") ;
}

View File

@@ -0,0 +1,8 @@
concrete SentencesPes of Sentences = NumeralPes ** SentencesI - [sing,NNumeral,ObjPlural,MCan,MKnow,MMust,V2Wait,VWait] with
(Syntax = SyntaxPes),
(Symbolic = SymbolicPes),
(Lexicon = LexiconPes) **
{
lin ObjPlural k = mkNP k ;
};

View File

@@ -0,0 +1,52 @@
concrete SentencesPol of Sentences =
NumeralPol ** SentencesI - [
Day,PDay,OnDay,LAnguage,PLanguage,Citizenship,
PCitizenship,CitiNat,PropCit,ACitizen,
Nationality,Transport,PTransport,ByTransp,
IFemale,YouFamFemale, YouPolFemale,YouPolMale,
IMale, YouFamMale --- AR, for pro drop
]
with
(Syntax = SyntaxPol),
(Symbolic = SymbolicPol),
(Lexicon = LexiconPol) **
open (N = NounPol),(R = ResPol), (Pron = PronounMorphoPol), (E = ExtraPol), Prelude in {
flags
optimize =values ; coding =utf8 ;
lincat
Day = { name,hab,adv:Str } ;
LAnguage = A ;
Citizenship = { prop:A; citizenMSg:Str; citizenMPl:Str; citizenF:Str} ;
Nationality = { lang: A; prop: A; country: NP; citizenMSg:Str; citizenMPl:Str; citizenF:Str } ;
Transport = { cn:CN; verb:Str} ;
lin
PDay d = (ss d.name) ** {lock_Text = <>};
OnDay d = (ss d.adv) ** {lock_Adv = <>};
PLanguage l = (ss l.pos.s1) ** {lock_Text = <>};
PTransport t = mkPhrase (mkUtt t.cn) ;
ByTransp t = { s=t.cn.s!R.Sg!R.Instr; lock_Adv = <>} ;
PCitizenship c = mkPhrase (mkUtt (mkAP c.prop)) ;
CitiNat n = {prop=n.prop; citizenMSg=n.citizenMSg; citizenMPl=n.citizenMPl; citizenF=n.citizenF};
PropCit c = c.prop;
ACitizen p n = mkCl p.name {s= case p.name.gn of {
R.MascPersSg=>n.citizenMSg; R.FemSg=>n.citizenF; _=>n.citizenMPl
};
lock_Adv=<>};
--- AR 8/12/2010: using pro drop
IMale = mkPerson (E.ProDrop Pron.pronJa);
IFemale = mkPerson (E.ProDrop (Pron.pronJaFoo (R.PGen R.Fem)));
YouFamMale = mkPerson (E.ProDrop (Pron.pronTy));
YouFamFemale = mkPerson (E.ProDrop (Pron.pronTyFoo (R.PGen R.Fem)));
-- YouPolFemale = mkPerson (E.ProDrop (Pron.pronPani));
-- YouPolMale = mkPerson (E.ProDrop (Pron.pronPan));
--- original
--- IFemale = mkPerson (Pron.pronJaFoo (R.PGen R.Fem));
--- YouFamFemale = mkPerson (Pron.pronTyFoo (R.PGen R.Fem));
YouPolFemale = mkPerson (Pron.pronPani);
YouPolMale = mkPerson (Pron.pronPan);
}

View File

@@ -0,0 +1,71 @@
concrete SentencesRon of Sentences = NumeralRon ** SentencesI - [
IsMass,
IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale,
ThePlace, Nationality, CitiNat, Citizenship, ACitizen, PCitizenship, PropCit
]
with
(Syntax = SyntaxRon),
(Symbolic = SymbolicRon),
(Lexicon = LexiconRon) **
open SyntaxRon, ExtraRon, (R = ResRon), (P = ParamX), (PR = ParadigmsRon) in {
oper
NPNationalityRon : Type = {lang : NP ;
country : NP ;
propObj : A;
propPers : R.Gender => P.Number => Str};
CitizenshipRon : Type = {pers : R.Gender => P.Number => Str;
prop : A};
mkNPNationalityRon : NP -> NP -> A -> Str -> Str -> Str -> Str -> NPNationalityRon = \la,co,pro, s1,s2,s3,s4 ->
{lang = la ;
country = co ;
propObj = pro ;
propPers = mkCitiPers s1 s2 s3 s4
} ;
mkCitizenshipRon : A -> Str -> Str -> Str -> Str -> CitizenshipRon = \aobj, ap1, ap2, ap3, ap4 -> {pers = mkCitiPers ap1 ap2 ap3 ap4; prop = aobj};
mkCitiPers : Str -> Str -> Str -> Str -> (R.Gender => P.Number => Str) = \francez, franceza, francezi, franceze ->
table {R.Masc => table {P.Sg => francez;
P.Pl => francezi};
R.Fem => table {P.Sg => franceza;
P.Pl => franceze}};
lincat
Nationality = NPNationalityRon ;
Citizenship = CitizenshipRon ;
lin
IsMass m q = mkCl (mkNP the_Det m) q ; -- le vin allemand est bon
IFemale = {name = mkNP i8fem_Pron ; isPron = True ; poss = mkQuant i_Pron} ;
YouFamFemale = {name = mkNP youSg8fem_Pron ; isPron = True ; poss = mkQuant youSg_Pron} ;
YouPolFemale = {name = mkNP youPol8fem_Pron ; isPron = True ; poss = mkQuant youPol_Pron};
IMale = {name = mkNP i_Pron ; isPron = True ; poss = mkQuant i_Pron} ;
YouFamMale = {name = mkNP youSg_Pron ; isPron = True ; poss = mkQuant youSg_Pron} ;
YouPolMale = {name = mkNP youPol_Pron ; isPron = True ; poss = mkQuant youPol_Pron} ;
ThePlace kind = let name : NP = mkNP the_Quant kind.name ;
condAt : Bool = needIndefPlace kind.name kind.at ;
condTo : Bool = needIndefPlace kind.name kind.to in {
name = name ;
at = if_then_else Adv condAt (mkAdv kind.at (mkNP the_Art kind.name)) (mkAdv kind.at name);
to = if_then_else Adv condTo (mkAdv kind.at (mkNP the_Art kind.name)) (mkAdv kind.to name)
} ;
CitiNat n = {pers = n.propPers; prop = n.propObj} ;
ACitizen p n = mkCl p.name (PR.mkAdv (n.pers ! (p.name.a.g) ! (p.name.a.n))) ;
PCitizenship x = mkPhrase (mkUtt (mkAP x.prop)) ;
PropCit p = p.prop ;
oper needIndefPlace : CN -> Prep -> Bool = \cn,prep ->
case <cn.isComp,prep.needIndef> of
{<True,_> => True ;
<False,True> => False ;
_ => True
};
}

View File

@@ -0,0 +1,25 @@
concrete SentencesRus of Sentences = NumeralRus ** SentencesI - [
NameNN, SHave, SHaveNo, SHaveNoMass, QDoHave, AHaveCurr,
IMale, IFemale, YouFamMale, YouFamFemale, YouPolMale, YouPolFemale
] with
(Syntax = SyntaxRus),
(Symbolic = SymbolicRus),
(Lexicon = LexiconRus), (Grammar = GrammarRus) ** open Prelude, SyntaxRus, ExtraRus, (P = ParadigmsRus), (R = ResRus), (M = MorphoRus) in {
lin
SHave p obj = mkS (mkCl (mkVP have_V3 obj p.name)) ;
SHaveNo p obj = mkS (mkCl (mkVP have_not_V3 (mkNP obj) p.name)) ;
SHaveNoMass p obj = mkS (mkCl (mkVP have_not_V3 (mkNP obj) p.name)) ;
QDoHave p obj = mkQS (mkQCl (mkCl (mkVP have_V3 obj p.name))) ;
AHaveCurr p curr = mkCl (mkVP have_V3 (mkNP aPl_Det curr) p.name) ;
lin
NameNN = mkNP (P.mkN "NN") ;
IMale = mkPerson (M.pronYa R.Masc) ;
IFemale = mkPerson (M.pronYa R.Fem) ;
YouFamMale = mkPerson (M.pronTu R.Masc) ;
YouFamFemale = mkPerson (M.pronTu R.Fem) ;
YouPolMale = mkPerson (M.pronVu R.Masc) ;
YouPolFemale = mkPerson (M.pronVu R.Fem) ;
}

View File

@@ -0,0 +1,38 @@
concrete SentencesSnd of Sentences = NumeralSnd ** SentencesI - [sing,IFemale,YouFamFemale,YouPolFemale,MMust,YouPlurFamFemale,YouPlurPolFemale,YouFamMale,VRead,VWrite] with
(Syntax = SyntaxSnd),
(Symbolic = SymbolicSnd),
(Lexicon = LexiconSnd) **
open
(P=ParadigmsSnd),
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 tum tum tum tyra tyry tyrE tyry Pl Fem Pers2_Familiar) ;
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 = ["آپ كے"] ;
-}
} ;

View File

@@ -0,0 +1,104 @@
concrete SentencesSpa of Sentences = NumeralSpa ** SentencesI - [
IsMass,
IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale,
WeMale, WeFemale, YouPlurFamMale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale, TheyMale, TheyFemale,
WherePlace, WherePerson, ABePlace,
PImperativeFamNeg, PImperativePlurNeg, --negative imperatives in subjunctive
Superlative
]
with
(Syntax = SyntaxSpa),
(Symbolic = SymbolicSpa),
(Lexicon = LexiconSpa) **
open ParadigmsSpa, BeschSpa, SyntaxSpa, ExtraSpa, Prelude in {
flags coding = utf8 ;
lincat
Superlative = OrdSuperlative ; -- {ord: Ord ; isPre: Bool}
lin
IsMass m q = mkCl (mkNP the_Det m) q ; -- le vin allemand est bon
IFemale =
{name = mkNP (ProDrop i8fem_Pron) ; isPron = True ; poss = mkQuant i_Pron} ;
YouFamFemale =
{name = mkNP (ProDrop youSg8fem_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ;
YouPolFemale =
{name = mkNP (ProDrop youPol8fem_Pron) ; isPron = True ; poss = mkQuant youPol_Pron};
IMale =
{name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = mkQuant i_Pron} ;
YouFamMale =
{name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ;
YouPolMale =
{name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron} ;
He =
{name = mkNP (ProDrop he_Pron) ; isPron = True ; poss = mkQuant he_Pron} ;
She =
{name = mkNP (ProDrop she_Pron) ; isPron = True ; poss = mkQuant she_Pron} ;
WeMale =
{name = mkNP (ProDrop we_Pron) ; isPron = True ; poss = mkQuant we_Pron} ;
WeFemale =
{name = mkNP (ProDrop we8fem_Pron) ; isPron = True ; poss = mkQuant we_Pron} ;
YouPlurFamMale =
{name = mkNP (ProDrop youPl_Pron) ; isPron = True ; poss = mkQuant youPl_Pron} ;
YouPlurFamFemale =
{name = mkNP (ProDrop youPl8fem_Pron) ; isPron = True ; poss = mkQuant youPl_Pron} ;
YouPlurPolMale =
{name = mkNP (ProDrop youPolPl_Pron) ; isPron = True ; poss = mkQuant youPolPl_Pron} ;
YouPlurPolFemale =
{name = mkNP (ProDrop youPolPl8fem_Pron) ; isPron = True ; poss = mkQuant youPolPl_Pron};
TheyMale =
{name = mkNP (ProDrop they_Pron) ; isPron = True ; poss = mkQuant they_Pron} ;
TheyFemale =
{name = mkNP (ProDrop they8fem_Pron) ; isPron = True ; poss = mkQuant they_Pron} ;
--IL 2012-10-12
--Negative imperative is done with subjunctive.
--PImperativePolNeg is fine in RGL, but fam and plur are wrong
--A special ImpNeg in ExtraSpa is defined for that
PImperativeFamNeg v = phrasePlease (ImpNeg (mkNP (ProDrop youSg_Pron)) v) ;
PImperativePlurNeg v = phrasePlease (ImpNeg (mkNP (ProDrop youPl_Pron)) v) ;
ABePlace p place = mkCl p.name (mkVP (mkVP estar) place.at) ;
WherePlace place = mkQS (mkQCl where_IAdv (mkCl place.name estar) ) ;
WherePerson person = mkQS (mkQCl where_IAdv (mkCl person.name estar) ) ;
oper
estar = mkV (estar_2 "estar") ;
CNPlace : Type = {name : CN ; at : Prep ; to : Prep } ;
mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
name = p ;
at = i ;
to = t ;
} ;
OrdSuperlative : Type = {ord: Ord ; isPre: Bool} ;
placeNPSuperl : OrdSuperlative -> CNPlace -> NPPlace = \sup,kind -> case sup.isPre of {
True => placeNPDet sup.ord kind ;
False => placeNPAdj sup.ord kind
} ;
-- "el mejor aeropuerto"
placeNPDet : Ord -> CNPlace -> NPPlace = \ord,kind ->
let name : NP = mkNP (mkDet the_Art ord) kind.name in {
name = name ;
at = SyntaxSpa.mkAdv kind.at name ;
to = SyntaxSpa.mkAdv kind.to name ;
};
-- "el aeropuerto más grande"
placeNPAdj : Ord -> CNPlace -> NPPlace = \ord,kind ->
let name : NP = mkNP the_Art (mkCN kind.name (mkAP ord)) in {
name = name ;
at = SyntaxSpa.mkAdv kind.at name ;
to = SyntaxSpa.mkAdv kind.to name ;
};
}

View File

@@ -0,0 +1,14 @@
concrete SentencesSwe of Sentences = NumeralSwe ** SentencesI - [
PYesToNo, NameNN,
DrinkNumber -- should be utrum gender when countable
] with
(Syntax = SyntaxSwe),
(Symbolic = SymbolicSwe),
(Lexicon = LexiconSwe) ** open Prelude, SyntaxSwe, (P = ParadigmsSwe) in {
lin
PYesToNo = mkPhrase (lin Utt (ss "jo")) ;
NameNN = mkNP (P.mkPN "NN") ;
DrinkNumber n d = mkNP n (mkCN (P.mkN [] [] [] [] P.utrum) (lin Adv (mkUtt d))) ; --- empty classifier - quite a hack...
}

View File

@@ -0,0 +1,26 @@
concrete SentencesTha of Sentences = NumeralTha ** SentencesI - [
PGreetingMale, PGreetingFemale,
GObjectPlease,
IMale, YouFamMale, YouFamFemale,
ACitizen
] with
(Syntax = SyntaxTha),
(Symbolic = SymbolicTha),
(Lexicon = LexiconTha) ** open SyntaxTha, (P = ParadigmsTha), (R = ResTha) in {
flags coding=utf8 ;
lin
PGreetingMale g = mkText (lin Text g) (lin Text (ss "ครับ")) | g ;
PGreetingFemale g = mkText (lin Text g) (lin Text (ss "ค่ะ")) | g ;
GObjectPlease o =
lin Text (mkPhr (lin PConj (ss "ขอ")) (mkUtt o) (lin Voc (ss "หน่อย"))) | lin Text (mkUtt o) ;
ACitizen p n = mkCl p.name (mkVP (mkCN n (P.personN R.khon_s))) ;
IMale = mkPerson (R.mkNP "ผม") ;
YouFamMale, YouFamFemale = mkPerson (R.mkNP "เธอ") ;
oper
thpron = R.thpron ;
}

View File

@@ -0,0 +1,36 @@
concrete SentencesUrd of Sentences = NumeralUrd ** SentencesI - [sing,IFemale,YouFamFemale,YouPolFemale,MMust,YouPlurFamFemale,YouPlurPolFemale,YouFamMale] with
(Syntax = SyntaxUrd),
(Symbolic = SymbolicUrd),
(Lexicon = LexiconUrd) **
open
(P=ParadigmsUrd),
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 tum tum tum tyra tyry tyrE tyry Pl Fem Pers2_Familiar) ;
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 = ["آپ كے"] ;
} ;

View File

@@ -0,0 +1,254 @@
--2 Words and idiomatic phrases of the Phrasebook
-- (c) 2010 Aarne Ranta under LGPL --%
abstract Words = Sentences ** {
fun
-- kinds of items (so far mostly food stuff)
Apple : Kind ;
Beer : DrinkKind ;
Bread : MassKind ;
Cheese : MassKind ;
Chicken : MassKind ;
Coffee : DrinkKind ;
Fish : MassKind ;
Meat : MassKind ;
Milk : MassKind ;
Pizza : Kind ;
Salt : MassKind ;
Tea : DrinkKind ;
Water : DrinkKind ;
Wine : DrinkKind ;
-- properties of kinds (so far mostly of food)
Bad : Property ;
Boring : Property ;
Cheap : Property ;
Cold : Property ;
Delicious : Property ;
Expensive : Property ;
Fresh : Property ;
Good : Property ;
Suspect : Property ;
Warm : Property ;
-- kinds of places
Airport : PlaceKind ;
AmusementPark : PlaceKind ;
Bank : PlaceKind ;
Bar : PlaceKind ;
Cafeteria : PlaceKind ;
Center : PlaceKind ;
Cinema : PlaceKind ;
Church : PlaceKind ;
Disco : PlaceKind ;
Hospital : PlaceKind ;
Hotel : PlaceKind ;
Museum : PlaceKind ;
Park : PlaceKind ;
Parking : PlaceKind ;
Pharmacy : PlaceKind ;
PostOffice : PlaceKind ;
Pub : PlaceKind ;
Restaurant : PlaceKind ;
School : PlaceKind ;
Shop : PlaceKind ;
Station : PlaceKind ;
Supermarket : PlaceKind ;
Theatre : PlaceKind ;
Toilet : PlaceKind ;
University : PlaceKind ;
Zoo : PlaceKind ;
CitRestaurant : Citizenship -> PlaceKind ;
-- currency units
DanishCrown : Currency ;
Dollar : Currency ;
Euro : Currency ; -- Germany, France, Italy, Finland, Spain, The Netherlands
Lei : Currency ; -- Romania
Leva : Currency ; -- Bulgaria
NorwegianCrown : Currency ;
Pound : Currency ; -- UK
Rouble : Currency ; -- Russia
Rupee : Currency ; -- India
SwedishCrown : Currency ;
Zloty : Currency ; -- Poland
Yuan : Currency ; -- China
-- nationalities, countries, languages, citizenships
Belgian : Citizenship ;
Belgium : Country ;
Bulgarian : Nationality ;
Catalan : Nationality ;
Chinese : Nationality ;
Danish : Nationality ;
Dutch : Nationality ;
English : Nationality ;
Finnish : Nationality ;
Flemish : LAnguage ;
French : Nationality ;
German : Nationality ;
Hindi : LAnguage ;
India : Country ;
Indian : Citizenship ;
Italian : Nationality ;
Norwegian : Nationality ;
Polish : Nationality ;
Romanian : Nationality ;
Russian : Nationality ;
Spanish : Nationality ;
Swedish : Nationality ;
-- means of transportation
Bike : Transport ;
Bus : Transport ;
Car : Transport ;
Ferry : Transport ;
Plane : Transport ;
Subway : Transport ;
Taxi : Transport ;
Train : Transport ;
Tram : Transport ;
ByFoot : ByTransport ;
-- Actions (which can be expressed by different structures in different languages).
-- Notice that also negations and questions can be formed from these.
AHasAge : Person -> Number -> Action ; -- I am seventy years
AHasChildren: Person -> Number -> Action ; -- I have six children
AHasName : Person -> Name -> Action ; -- my name is Bond
AHasRoom : Person -> Number -> Action ; -- you have a room for five persons
AHasTable : Person -> Number -> Action ; -- you have a table for five persons
AHungry : Person -> Action ; -- I am hungry
AIll : Person -> Action ; -- I am ill
AKnow : Person -> Action ; -- I (don't) know
ALike : Person -> Item -> Action ; -- I like this pizza
ALive : Person -> Country -> Action ; -- I live in Sweden
ALove : Person -> Person -> Action ; -- I love you
AMarried : Person -> Action ; -- I am married
AReady : Person -> Action ; -- I am ready
AScared : Person -> Action ; -- I am scared
ASpeak : Person -> LAnguage -> Action ; -- I speak Finnish
AThirsty : Person -> Action ; -- I am thirsty
ATired : Person -> Action ; -- I am tired
AUnderstand : Person -> Action ; -- I (don't) understand
AWant : Person -> Object -> Action ; -- I want two apples
AWantGo : Person -> Place -> Action ; -- I want to go to the hospital
-- Miscellaneous phrases. Notice that also negations and questions can be formed from
-- propositions.
QWhatAge : Person -> Question ; -- how old are you
QWhatName : Person -> Question ; -- what is your name
HowMuchCost : Item -> Question ; -- how much does the pizza cost
ItCost : Item -> Price -> Proposition ; -- the pizza costs five euros
PropOpen : Place -> Proposition ; -- the museum is open
PropClosed : Place -> Proposition ; -- the museum is closed
PropOpenDate : Place -> Date -> Proposition ; -- the museum is open today
PropClosedDate : Place -> Date -> Proposition ; -- the museum is closed today
PropOpenDay : Place -> Day -> Proposition ; -- the museum is open on Mondays
PropClosedDay : Place -> Day -> Proposition ; -- the museum is closed on Mondays
PSeeYouPlaceDate : Place -> Date -> Greeting ; -- see you in the bar on Monday
PSeeYouPlace : Place -> Greeting ; -- see you in the bar
PSeeYouDate : Date -> Greeting ; -- see you on Monday
-- family relations
Wife, Husband : Person -> Person ; -- my wife, your husband
Son, Daughter : Person -> Person ; -- my son, your husband
Children : Person -> Person ; -- my children
-- week days
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday : Day ;
Tomorrow : Date ;
-- transports
HowFar : Place -> Question ; -- how far is the zoo ?
HowFarFrom : Place -> Place -> Question ; -- how far is the center from the hotel ?
HowFarFromBy : Place -> Place -> ByTransport -> Question ;
-- how far is the airport from the hotel by taxi ?
HowFarBy : Place -> ByTransport -> Question ; -- how far is the museum by bus ?
WhichTranspPlace : Transport -> Place -> Question ; -- which bus goes to the hotel
IsTranspPlace : Transport -> Place -> Question ; -- is there a metro to the airport ?
-- modifiers of places
TheBest : Superlative ;
TheClosest : Superlative ;
TheCheapest : Superlative ;
TheMostExpensive : Superlative ;
TheMostPopular : Superlative ;
TheWorst : Superlative ;
SuperlPlace : Superlative -> PlaceKind -> Place ; -- the best bar
--------------------------------------------------
-- New 30/11/2011 AR
--------------------------------------------------
{- 28/8/2012 still only available in Bul Eng Fin Swe Tha
fun
Thai : Nationality ;
Baht : Currency ; -- Thailand
Rice : MassKind ;
Pork : MassKind ;
Beef : MassKind ;
Noodles : PlurKind ;
Shrimps : PlurKind ;
Chili : MassKind ;
Garlic : MassKind ;
Durian : Kind ;
Mango : Kind ;
Pineapple : Kind ;
Egg : Kind ;
Coke : DrinkKind ;
IceCream : DrinkKind ; --- both mass and plural
OrangeJuice : DrinkKind ;
Lemonade : DrinkKind ;
Salad : DrinkKind ;
Beach : PlaceKind ;
ItsRaining : Proposition ;
ItsWindy : Proposition ;
ItsWarm : Proposition ;
ItsCold : Proposition ;
SunShine : Proposition ;
Smoke : VerbPhrase ;
ADoctor : Person -> Action ;
AProfessor : Person -> Action ;
ALawyer : Person -> Action ;
AEngineer : Person -> Action ;
ATeacher : Person -> Action ;
ACook : Person -> Action ;
AStudent : Person -> Action ;
ABusinessman : Person -> Action ;
-}
}

View File

@@ -0,0 +1,305 @@
--2 Implementations of Words, with English as example
concrete WordsBul of Words = SentencesBul **
open
SyntaxBul,
(R = ResBul),
ParadigmsBul,
(L = LexiconBul),
(P = ParadigmsBul),
ExtraBul,
MorphoFunsBul,
Prelude in {
flags
coding=utf8;
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 (mkN066 "сирене") ;
Chicken = mkCN (mkN065 "пиле") ;
Coffee = mkCN (mkN065 "кафе") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN054 "месо") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN041 "пица") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN028 "чай") ;
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 = mkA079 "еднообразен" ;
Cheap = mkA076 "евтин" ;
Cold = L.cold_A ;
Delicious = mkA079 "превъзходен" ;
Expensive = mkA076 "скъп" ;
Fresh = mkA076 "свеж" ;
Good = L.good_A ;
Suspect = mkA079 "подозрителен" ;
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 (mkN066 "летище") na_Prep ;
AmusementPark = mkCompoundPlace (mkA079 "увеселителен") (mkN001 "парк") in_Prep ;
Bank = mkPlace (mkN041 "банка") in_Prep ;
Bar = mkPlace (mkN001 "бар") in_Prep ;
Cafeteria = mkPlace (mkN065 "кафе") in_Prep ;
Center = mkPlace (mkN009a "център") in_Prep ;
Cinema = mkPlace (mkN054 "кино") na_Prep ;
Church = mkPlace (mkN041 "църква") in_Prep ;
Disco = mkPlace (mkN041 "дискотека") in_Prep ;
Hospital = mkPlace (mkN041 "болница") in_Prep ;
Hotel = mkPlace (mkN007 "хотел") in_Prep ;
Museum = mkPlace (mkN032 "музей") in_Prep ;
Park = mkPlace (mkN001 "парк") in_Prep ;
Parking = mkPlace (mkN007 "паркинг") na_Prep ;
Pharmacy = mkPlace (mkN041 "аптека") in_Prep ;
PostOffice = mkPlace (mkN041 "поща") in_Prep ;
Pub = mkPlace (mkN001 "бар") in_Prep ;
Restaurant = mkPlace (mkN007 "ресторант") in_Prep ;
School = mkPlace (mkN007 "училище") in_Prep ;
Shop = mkPlace (mkN007 "магазин") in_Prep ;
Station = mkPlace (mkN041 "гара") na_Prep ;
Supermarket = mkPlace (mkN007 "супермаркет") in_Prep ;
Theatre = mkPlace (mkN009 "театър") na_Prep ;
Toilet = mkPlace (mkN041 "тоалетна") in_Prep ;
University = mkPlace (mkN007 "университет") in_Prep ;
Zoo = mkPlace (mkN001 "зоопарк") in_Prep ;
CitRestaurant cit = mkCNPlace (mkCN cit.s2 (mkN007 "ресторант")) in_Prep to_Prep ;
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
DanishCrown = mkCN (mkA078 "датски") (mkN041 "крона") | mkCN (mkN041 "крона") ;
Dollar = mkCN (mkN007 "долар") ;
Euro = mkCN (mkN054 "евро") ;
Lei = mkCN (mkN047 "лея") ;
Leva = mkCN (mkN001 "лев") ;
NorwegianCrown = mkCN (mkA078 "норвежки") (mkN041 "крона") | mkCN (mkN041 "крона") ;
Pound = mkCN (mkN007 "паунд") ;
Rouble = mkCN (mkN041 "рубла") ;
SwedishCrown = mkCN (mkA078 "шведски") (mkN041 "крона") | mkCN (mkN041 "крона") ;
Zloty = mkCN (mkN041 "злота") ;
Baht = mkCN (mkN007a "бат") ;
-- Nationalities
Belgian = mkCitizenship (mkN013 "белгиец") (mkN041 "белгийка") (mkA078 "белгийски") ;
Belgium = mkPN "Белгия" R.Fem ;
Bulgarian = mkNat (mkN018 "българин") (mkN041 "българка") (mkA078 "български") (mkPN "България" R.Fem) ;
Catalan = mkNat (mkN008a "каталонец") (mkN041 "каталонка") (mkA078 "каталонски") (mkPN "Каталуния" R.Fem) ;
Danish = mkNat (mkN018 "датчанин") (mkN041 "датчанка") (mkA078 "датски") (mkPN "Дания" R.Fem) ;
Dutch = mkNat (mkN008a "холандец") (mkN041 "холандка") (mkA078 "холандски") (mkPN "Холандия" R.Fem) ;
English = mkNat (mkN018 "англичанин") (mkN041 "англичанка") (mkA078 "английски") (mkPN "Англия" R.Fem) ;
Finnish = mkNat (mkN008a "финландец") (mkN041 "финландка") (mkA078 "финландски") (mkPN "Финландия" R.Fem) ;
Flemish = mkA078 "фламандски" ;
French = mkNat (mkN018 "французин") (mkN041 "французойка") (mkA078 "френски") (mkPN "Франция" R.Fem) ;
German = mkNat (mkN008a "германец") (mkN041 "германка") (mkA078 "немски") (mkPN "Германия" R.Fem) ;
Italian = mkNat (mkN008a "италианец") (mkN041 "италианка") (mkA078 "италиански") (mkPN "Италия" R.Fem) ;
Norwegian = mkNat (mkN008a "норвежец") (mkN041 "норвежка") (mkA078 "норвежки") (mkPN "Норвегия" R.Fem) ;
Polish = mkNat (mkN014 "поляк") (mkN047 "полякиня") (mkA078 "полски") (mkPN "Полша" R.Fem) ;
Romanian = mkNat (mkN008a "румънец") (mkN041 "румънка") (mkA078 "румънски") (mkPN "Румъния" R.Fem) ;
Russian = mkNat (mkN014 "руснак") (mkN047 "рускиня") (mkA078 "руски") (mkPN "Русия" R.Fem) ;
Swedish = mkNat (mkN007 "швед") (mkN041 "шведка") (mkA078 "шведски") (mkPN "Швеция" R.Fem) ;
Spanish = mkNat (mkN008a "испанец") (mkN041 "испанка") (mkA078 "испански") (mkPN "Испания" R.Fem) ;
Thai = mkNat (mkN008a "тайландец") (mkN041 "тайландка") (mkA078 "тайландски") (mkPN "Тайланд" R.Masc) ;
-- Means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN007 "автобус") ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN007 "ферибот") ;
Plane = mkTransport (mkN007 "самолет") ;
Subway = mkTransport (mkN054 "метро") ;
Taxi = mkTransport (mkN073 "такси") ;
Train = mkTransport (mkN001 "влак") ;
Tram = mkTransport (mkN032 "трамвай") ;
ByFoot = P.mkAdv "пеша" ;
-- Actions: the predication patterns are very often language-dependent.
AHasAge p num = mkCl p.name (SyntaxBul.mkAdv na_Prep (mkNP num 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 (mkN047 "стая")) (SyntaxBul.mkAdv (mkPrep "за" R.Acc) (mkNP num (mkN014 "човек")))) ;
AHasTable p num = mkCl p.name have_V2 (mkNP (mkNP a_Det (mkN041 "маса")) (SyntaxBul.mkAdv (mkPrep "за" R.Acc) (mkNP num (mkN014 "човек")))) ;
AHasName p name = mkCl p.name (dirV2 (medialV (actionV (mkV186 "казвам") (mkV156 "кажа")) R.Acc)) name ;
AHungry p = mkCl p.name (mkA079 "гладен") ;
AIll p = mkCl p.name (mkA079 "болен") ;
AKnow p = mkCl p.name (actionV (mkV186 "знам") (mkV162 "зная")) ;
ALike p item = mkCl p.name (dirV2 (actionV (mkV186 "харесвам") (mkV186 "харесам"))) item ;
ALive p co = mkCl p.name (mkVP (mkVP (stateV (mkV160 "живея"))) (SyntaxBul.mkAdv in_Prep (mkNP co))) ;
ALove p q = mkCl p.name (dirV2 (actionV (mkV186 "обичам") (mkV152 "обикна"))) q.name ;
AMarried p = mkCl p.name (mkA076 (case p.name.gn of {
R.GSg R.Fem => "омъжен" ;
_ => "женен"
})) ;
AReady p = mkCl p.name (mkA076 "готов") ;
AScared p = mkCl p.name (mkA076 "уплашен") ;
ASpeak p lang = mkCl p.name (dirV2 (stateV (mkV173 "говоря"))) (mkNP (substantiveN lang (R.AMasc R.NonHuman))) ;
AThirsty p = mkCl p.name (mkA079 "жаден") ;
ATired p = mkCl p.name (mkA076 "уморен") ;
AUnderstand p = mkCl p.name (actionV (mkV186 "разбирам") (mkV170 "разбера")) ;
AWant p obj = mkCl p.name (dirV2 (stateV (mkV186 "искам"))) obj ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP (actionV (mkV186 "отивам") (mkV146 "отида"))) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (medialV (actionV (mkV186 "казвам") (mkV156 "кажа")) R.Acc))) ;
QWhatAge p = mkQS (mkQCl (MorphoFunsBul.mkIAdv "на колко") (mkCl p.name (mkNP a_Quant plNum L.year_N))) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (stateV (mkV186 "струвам")))) ;
ItCost item price = mkCl item (dirV2 (stateV (mkV186 "струвам"))) price ;
PropOpen p = mkCl p.name open_AP ;
PropClosed p = mkCl p.name closed_AP ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_AP) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_AP) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_AP) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_AP) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("ще се видим"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("ще се видим"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("ще се видим")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN041 "съпруга") ;
Husband = xOf sing (mkN015 "съпруг") ;
Son = xOf sing (mkN018 "син") ;
Daughter = xOf sing (mkN047 "дъщеря") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay (mkN014 "понеделник") ;
Tuesday = mkDay (mkN014 "вторник") ;
Wednesday = mkDay (mkN043 "сряда") ;
Thursday = mkDay (mkN014 "четвъртък") ;
Friday = mkDay (mkN014 "петък") ;
Saturday = mkDay (mkN041 "събота") ;
Sunday = mkDay (mkN047 "неделя") ;
Tomorrow = P.mkAdv "утре" ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA076 "евтин") ;
TheMostExpensive = mkSuperl (mkA076 "скъп") ;
TheMostPopular = mkSuperl (mkA079 "известен") ;
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 (SyntaxBul.mkAdv from_Prep x.name))) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkNP (mkNP y.name (SyntaxBul.mkAdv from_Prep x.name)) t)) ;
HowFarBy y t = mkQS (mkQCl far_IAdv (mkNP y.name t)) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
Rice = mkCN (mkN040a "ориз") ;
Pork = mkCN (mkN054 "свинско") ;
Beef = mkCN (mkN054 "телешко") ;
Egg = mkCN (mkN066 "яйце") ;
Noodles = mkCN (mkN075 "спагети") ;
Shrimps = mkCN (mkN041 "скарида") ;
Chili = mkCN (mkN065 "чили") ;
Garlic = mkCN (mkN007 "чесън") ;
Durian = mkCN (mkN007 "дуриан") ;
Mango = mkCN (mkN065 "манго") ;
Pineapple = mkCN (mkN007 "ананас") ;
Coke = mkCN (mkN041 "кола") ;
IceCream = mkCN (mkN007 "сладолед") ;
Salad = mkCN (mkN041 "салата") ;
OrangeJuice = mkCN (mkA076 "портокалов") (mkN001 "сок") ;
Lemonade = mkCN (mkN041 "лимонада") ;
Beach = mkPlace (mkN001 "плаж") na_Prep ;
ItsRaining = mkCl (mkVP (stateV (mkV174 "валя"))) ;
ItsCold = mkCl (mkVP (mkA076 "студен")) ;
ItsWarm = mkCl (mkVP (mkA080 "топъл")) ;
ItsWindy = mkCl (mkVP (mkA076 "ветровит")) ;
SunShine = mkCl (progressiveVP (mkVP (actionV (mkV186 "пеквам") (mkV148 "пека")))) ;
Smoke = mkVP (stateV (mkV176 "пуша")) ;
ADoctor = mkProfession (mkN007a "доктор") ;
AProfessor = mkProfession (mkN007a "професор") ;
ALawyer = mkProfession (mkN007a "адвокат") ;
AEngineer = mkProfession (mkN007a "инженер") ;
ATeacher = mkProfession (mkN031a "учител") ;
ACook = mkProfession (mkN007b "готвач") ;
AStudent = mkProfession (mkN007a "студент") ;
ABusinessman = mkProfession (mkN007a "бизнесмен") ;
-- auxiliaries
oper
mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;
mkCitizenship : N -> N -> A -> Citizenship
= \male, female, adj -> lin Citizenship {s1 = table {R.Fem => female.s; _ => male.s}; s2 = adj} ;
mkNat : N -> N -> A -> PN -> Nationality
= \male, female, adj, country -> lin Nationality {s1 = table {R.Fem => female.s; _ => male.s}; s2 = adj; s3 = country} ;
mkDay : N -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day : NP = mkNP d ;
in mkNPDay day
(SyntaxBul.mkAdv in_Prep day)
(SyntaxBul.mkAdv in_Prep (mkNP the_Quant plNum (mkCN d))) ;
mkCompoundPlace : A -> N -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \a, n, p ->
mkCNPlace (mkCN a n) p to_Prep ;
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \n,p ->
mkCNPlace (mkCN n) p to_Prep ;
open_AP = mkAP (mkA076 "отворен") ;
closed_AP = mkAP (mkA076 "затворен") ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (mkNP the_Quant a c) (SyntaxBul.mkAdv (mkPrep "" R.Dat) b)) p ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxBul.mkAdv with_Prep (mkNP n)
} ;
mkSuperl : A -> Det = \a -> SyntaxBul.mkDet the_Art (SyntaxBul.mkOrd a) ;
far_IAdv = ExtraBul.IAdvAdv (ss "далече") ;
na_Prep = mkPrep "на" R.Acc ;
}

View File

@@ -0,0 +1,302 @@
-- (c) 2010 Aarne Ranta and Olga Caprotti under LGPL
--# -coding=latin1
concrete WordsCat of Words = SentencesCat ** open
SyntaxCat,
BeschCat,
(E = ExtraCat),
(L = LexiconCat),
(P = ParadigmsCat),
(S = SyntaxCat),
ParadigmsCat,
Prelude in {
lin
-- kinds
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "formatge") ;
Chicken = mkCN (mkN "pollastre") ;
Coffee = mkCN (mkN "cafè") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "carn" feminine) ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "te") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = L.bad_A ;
Boring = mkA "avorrit" ;
Cheap = cheap_A ;
Cold = L.cold_A ;
Delicious = mkA "deliciós" ;
Expensive = expensive_A ;
Fresh = mkA "fresc" ;
Good = L.good_A ;
Suspect = mkA "sospitós" ;
Warm = mkA "calent" ;
-- places
lin
Airport = mkPlace (mkN "aeroport") ;
AmusementPark = mkPlace (mkN "parc d' atraccions") ;
Bank = mkPlace (mkN "banc") ;
Bar = mkPlace (mkN "bar") ;
Cafeteria = mkPlace (mkN "cafeteria") ;
Center = mkPlace (mkN "centre") ;
Cinema = mkPlace (mkN "cinema" masculine) ;
Church = mkPlace (mkN "església") ;
Disco = mkPlace (mkN "discoteca") ;
Hospital = mkPlace (mkN "hospital") ;
Hotel = mkPlace (mkN "hotel") ;
Museum = mkPlace (mkN "museu") ;
Park = mkPlace (mkN "parc") ;
Parking = mkPlace (mkN "aparcament" masculine) ;
Pharmacy = mkPlace (mkN "farmàcia") ;
PostOffice = mkPlace (mkN "oficina de correus" feminine) ;
Pub = mkPlace (mkN "pub" masculine) ;
Restaurant = mkPlace (mkN "restaurant") ;
School = mkPlace (mkN "escola") ;
Shop = mkPlace (mkN "tenda") ;
Station = mkPlace (mkN "estació" feminine) ;
Supermarket = mkPlace (mkN "supermercat" masculine) ;
Theatre = mkPlace (mkN "teatre") ;
Toilet = mkPlace (mkN "lavabo") ;
University = mkPlace (mkN "universitat" feminine) ;
Zoo = mkPlace (mkN "zoo" masculine) ;
CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurant")) dative dative ;
-- currencies
oper corona : A -> CN = \adj ->
let corona_N = (mkN "corona")
in mkCN adj corona_N | mkCN corona_N ;
lin
DanishCrown = corona (mkA "danès" "danesa" "danesos" "daneses" "a la danesa") ;
Dollar = mkCN (mkN "dòlar") ;
Euro = mkCN (mkN "euro" masculine) ;
Lei = mkCN (mkN "leu" "lei" masculine) ;
Leva = mkCN (mkN "lev" "lev" masculine) ;
NorwegianCrown = corona (mkA "noruec" "noruega" "noruecs" "noruegues" "a la noruega") ;
Pound = mkCN (mkN "lliura") ;
Rouble = mkCN (mkN "ruble") ;
SwedishCrown = corona (mkA "suec" "sueca" "suecs" "sueques" "a la sueca") ;
Zloty = mkCN (mkN "zloty" "zloty" masculine) ;
-- nationalities
Belgian = mkA "belga" "belga" "belgues" "belgues" "a la Belga" ;
Belgium = mkNP (mkPN "Bèlgica") ;
Bulgarian = mkNat3 "búlgar" "búlgara" "búlgars" "búlgueres" "Bulgària" ;
Catalan = mkNat5 "catal" "Catalunya" ;
Danish = mkNat4 "dan" "Dinamarca" ;
Dutch = mkNat4 "holand" "Holanda" ;
English = mkNat4 "angl" "Anglaterra" ;
Finnish = mkNat4 "fin" "Finlàndia" ;
Flemish = mkNP (mkPN "flamenc") ;
French = mkNat4 "franc" "França" ;
German = mkNat3 "alemany" "alemanya" "alemanys" "alemanyes" "Alemania" ;
Italian = mkNat5 "itali" "Itàlia" ;
Norwegian = mkNat3 "noruec" "noruega" "noruecs" "noruegues" "Noruega" ;
Polish = mkNat4 "polon" "Polònia" ;
Romanian = mkNat4 "roman" "Romania" ;
Russian = mkNat3 "rus" "russa" "russos" "russes" "Rússia" ;
Spanish = mkNat3 "espanyol" "espanyola" "espanyols" "espanyoles" "Espanya" ;
Swedish = mkNat3 "suec" "sueca" "suecs" "sueques" "Suècia" ;
-- means of transportation
Bike = mkTransport (mkN "bici" feminine) ;
Bus = mkTransport (mkN "autobús" "autobusos" masculine) ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "ferri" masculine) ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN "metro") ;
Taxi = mkTransport (mkN "taxi" masculine) ;
Train = mkTransport (mkN "tren" masculine) ;
Tram = mkTransport (mkN "tramvia" masculine) ;
ByFoot = P.mkAdv "a peu" ;
-- actions
AHasAge p num = mkCl p.name have_V2 (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num (mkN "fill" masculine)) ;
AHasName p name =
let dir = mkV (dir_41 "dir")
in mkCl p.name (mkV2 (reflV dir)) name ;
AHasRoom p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "habitació" feminine)) (SyntaxCat.mkAdv for_Prep (mkNP num (mkN "persona")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "taula")) (SyntaxCat.mkAdv for_Prep (mkNP num (mkN "persona")))) ;
AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "gana" feminine))) ;
AIll p = mkCl p.name stateCopula (mkAP (mkA "malalt")) ;
AKnow p =
let saber = mkV (saber_99 "saber")
in mkCl p.name saber ;
ALike p item = mkCl item (mkV2 (mkV "agradar") dative) p.name ;
ALive p co =
let viure = mkV (viure_119 "viure")
in mkCl p.name (mkVP (mkVP viure) (SyntaxCat.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (mkV2 (mkV "estimar")) q.name ;
AMarried p = mkCl p.name stateCopula (mkAP (mkA "casat")) ;
AReady p = mkCl p.name stateCopula (mkAP (mkA "preparat")) ;
AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "por" feminine))) ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "parlar")) lang ;
AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "set" feminine))) ;
ATired p = mkCl p.name stateCopula (mkAP (mkA "cansat")) ;
AUnderstand p = mkCl p.name (mkV "entendre") ;
AWant p obj =
let voler = mkV (voler_120 "voler")
in mkCl p.name (mkV2 voler) obj ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ;
QWhatName p =
let dir = mkV (dir_41 "dir")
in mkQS (mkQCl how_IAdv (mkCl p.name (reflV dir))) ;
HowMuchCost item =
let valer = mkV (valer_114 "valer" False) ---- False? AR 2019-05-20
in mkQS (mkQCl how8much_IAdv (mkCl item valer)) ;
ItCost item price =
let valer = mkV (valer_114 "valer" False)
in mkCl item (mkV2 valer) price ;
PropOpen p = mkCl p.name stateCopula (mkAP open_A) ;
PropClosed p = mkCl p.name stateCopula (mkAP closed_A) ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP stateCopula (mkAP open_A)) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP stateCopula (mkAP closed_A)) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("a reveure")))
(mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ;
PSeeYouPlace p = mkText (lin Text (ss ("fins aviat"))) (mkPhrase (mkUtt p.at)) ;
-- PSeeYou d = mkText (lin Text (ss ("fins aviat"))) (mkPhrase (mkUtt d)) ;
PSeeYouDate d = mkText (lin Text (ss ("a reveure"))) (mkPhrase (mkUtt d)) ;
-- family relations
Wife = xOf sing (mkN "dona") ;
Husband = xOf sing (mkN "marit") ;
Son = xOf sing (mkN "fill") ;
Daughter = xOf sing (mkN "filla") ;
Children = xOf plur (mkN "fill") ;
-- week days
Monday = mkDay "dilluns" ;
Tuesday = mkDay "dimarts" ;
Wednesday = mkDay "dimecres" ;
Thursday = mkDay "dijous" ;
Friday = mkDay "divendres" ;
Saturday = mkDay "dissabte" ;
Sunday = mkDay "diumenge" ;
Tomorrow = P.mkAdv "demà" ;
-- transports
--a quina distància està PLACE
HowFar place = mkQS (mkQCl what_distance_IAdv (mkCl place.name placeCopula) );
HowFarFrom x y = mkQS (mkQCl what_distance_IAdv
(mkCl y.name (mkVP (mkVP placeCopula)
(S.mkAdv from_Prep x.name))));
HowFarFromBy x y t = mkQS (mkQCl what_distance_IAdv
(mkCl y.name (mkVP
(mkVP (mkVP placeCopula)
(S.mkAdv from_Prep x.name))
t)));
HowFarBy y t = mkQS (mkQCl what_distance_IAdv
(mkCl y.name (mkVP (mkVP placeCopula) t)));
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name (SyntaxCat.mkAdv to_Prep place.name)))) ;
-- modifiers of places
TheBest = mkSuperl L.good_A True ;
TheClosest = mkSuperl L.near_A False;
TheCheapest = mkSuperl cheap_A False ;
TheMostExpensive = mkSuperl expensive_A False ;
TheMostPopular = mkSuperl (mkA "popular" "popular" "populars" "populars" "popularment") False ;
TheWorst = mkSuperl L.bad_A True ;
SuperlPlace sup p = placeNPSuperl sup p ;
-- auxiliaries
oper
mkSuperl : A -> Bool -> OrdSuperlative = \a,bool ->
let ord : Ord = S.mkOrd a in {
ord = ord ;
isPre = bool ;
} ;
desde_Prep = mkPrep "des de" ;
fins_Prep = mkPrep "fins a" ;
what_distance_IAdv = ss "a quina distància"**{lock_IAdv=<>};
placeCopula = mkV (estar_54 "estar") ;
mkNat : Str -> Str -> NPNationality = \nat,co ->
mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
mkNat2 : A -> Str -> Str -> NPNationality = \adj,nat,co ->
mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) adj ;
mkNat3 : (_,_,_,_:Str) -> Str -> NPNationality = \ms,fs,mp,fp,co ->
mkNPNationality (mkNP (mkPN ms)) (mkNP (mkPN co)) (mkA ms fs mp fp ("a la" ++ fs)) ;
mkNat4 : Str -> Str -> NPNationality = \angl,co ->
mkNat3 (angl+"ès") (angl+"esa") (angl+"esos") (angl+"eses") co ;
mkNat5 : Str -> Str -> NPNationality = \catal,co ->
mkNat3 (catal+"à") (catal+"ana") (catal+"ans") (catal+"anes") co ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d)
in
case last d of {
"s" => mkNPDay day (P.mkAdv ("el" ++ d)) (P.mkAdv ("els" ++ d)) ;
_ => mkNPDay day (P.mkAdv ("el" ++ d)) (P.mkAdv ("els" ++ d + "s"))
} ;
mkPlace : N -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p ->
mkCNPlace (mkCN p) dative dative ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = S.mkAdv with_Prep (mkNP n)
} ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
stateCopula = mkVA (mkV (estar_54 "estar")) ;
open_A = mkA "obert" ;
closed_A = mkA "tancat" ;
cheap_A = mkA "barat" "barata" ;
expensive_A = mkA "car" ;
}

View File

@@ -0,0 +1,334 @@
concrete WordsChi of Words = SentencesChi **
open
SyntaxChi,
ParadigmsChi,
(P = ParadigmsChi),
(R = ResChi),
(L = LexiconChi),
Prelude in {
flags coding = utf8 ;
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 L.cheese_N ;
Chicken = mkCN (mkN "鸡" "只" ) ;
Coffee = mkCN (mkN "咖啡" ) ;
Fish = mkCN L.fish_N ;
Meat = mkCN L.meat_N ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "比萨饼") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "茶" ) ;
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 = (mkA "好" ) ;
Suspect = mkA "可疑" ;
Warm = (mkA "热") ; -- 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 (( (mkN "机场" ) )) ;
AmusementPark = mkPlace (mkN "游乐园") ;
Bank = mkPlace (( (L.bank_N ) )) ;
Bar = mkPlace (( (mkN "酒吧" ) )) ;
Cafeteria = mkPlace (( (L.bank_N ) )) ;
Center = mkPlace (mkN "中心") ;
Cinema = mkPlace (mkN "电影院") ;
Church = mkPlace (L.church_N ) ;
Disco = mkPlace (mkN "迪斯科") ;
Hospital = mkPlace (mkN "医院" ) ;
Hotel = mkPlace (mkN "旅馆" ) ;
Museum = mkPlace (mkN "博物馆" ) ;
Park = mkPlace (mkN "公园" ) ;
Parking = mkPlace (mkN "停车场") ;
Pharmacy = mkPlace (mkN "药店") ;
PostOffice = mkPlace (mkN "邮局") ;
Pub = mkPlace (mkN "酒吧") ;
Restaurant = mkPlace L.restaurant_N ;
School = mkPlace L.school_N ;
Shop = mkPlace L.shop_N ;
Station = mkPlace (mkN "车站" ) ;
Supermarket = mkPlace (mkN "超级市场" "家" ) ;
Theatre = mkPlace (mkN "剧院") ;
Toilet = mkPlace (mkN "厕所" ) ;
University = mkPlace L.university_N ;
Zoo = mkPlace (mkN "动物园") ;
CitRestaurant cit = mkCNPlace (mkCN cit L.restaurant_N) at_Prep noPrep ;
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
Dollar = mkCN (mkN "美元") ;
DanishCrown = mkCN (mkN "丹麦克朗") ;
Euro = mkCN (mkN "欧元") ;
Lei = mkCN (mkN "列弗") ;
Leva = mkCN (mkN "列伊") ;
Pound = mkCN (mkN "英镑") ;
Rouble = mkCN (mkN "卢布") ;
SwedishCrown = mkCN (mkN "瑞典克朗") ;
Zloty = mkCN (mkN "兹罗提") ;
NorwegianCrown = mkCN (mkN "挪威克朗") ;
-- Nationalities
Belgian = mkA ( "比利时") ;
Belgium = mkNP (mkPN "比利时" ) ;
Bulgarian = mkNat "保加利亚语" "保加利亚" ;
Catalan = mkNat "加泰罗尼亚语" "加泰罗尼亚" ;
Danish = mkNat "丹麦语" "丹麦" ;
Dutch = mkNat "荷兰语" "荷兰" ;
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 "瑞典语" "瑞典" ;
Chinese = mkNat "汉语" "中国" ;
-- Means of transportation
Bike = mkTransport L.bike_N (mkV "骑") ;
Bus = mkTransport (mkN "公共汽车" ) (mkV "乘") ;
Car = mkTransport L.car_N (mkV "开") ;
Ferry = mkTransport (mkN "渡船") (mkV "乘") ;
Plane = mkTransport L.airplane_N (mkV "坐") ;
Subway = mkTransport (mkN "地铁") (mkV "坐") ;
Taxi = mkTransport (mkN "出租车") (mkV "乘") ;
Train = mkTransport L.train_N (mkV "乘") ;
Tram = mkTransport (mkN "电车") (mkV "乘") ;
ByFoot = P.mkAdv ("步行") ;
-- Actions: the predication patterns are very often language-dependent.
AHasAge p nu = mkCl (lin NP {s = p.name.s ++ nu.s}) (mkV "岁") ; ----
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 "房间" ) ) (SyntaxChi.mkAdv for_gei_Prep (mkNP num (L.person_N ) ))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det L.table_N ) (SyntaxChi.mkAdv for_gei_Prep (mkNP num (L.person_N ) ))) ;
AHasName p name = mkCl p.name (mkV2 "叫") name ;
-- AHungry p = mkCl p.name (mkA "饿") ;
AHungry p = mkCl p.name (mkV "饿了") ;
-- AIll p = mkCl p.name (mkA "生病" ) ;
AIll p = mkCl p.name (mkV "生病了") ;
AKnow p = mkCl p.name <lin V L.know_V2 : V> ;
ALike p item = mkCl p.name (L.like_V2 ) item ;
ALive p co = mkCl p.name (mkV2 (mkV "住")) co ;
ALove p q = mkCl p.name L.love_V2 q.name ;
AMarried p = mkCl p.name (mkA "已婚") ;
AReady p = mkCl p.name L.ready_A ;
-- AReady p = mkCl p.name (mkV "准备好了") ;
AScared p = mkCl p.name (mkA "惊慌") ;
ASpeak p lang = mkCl p.name L.speak_V2 lang ;
-- AThirsty p = mkCl p.name (mkA "渴") ;
AThirsty p = mkCl p.name (mkV "渴了") ;
-- ATired p = mkCl p.name (mkA "累") ;
ATired p = mkCl p.name (lin V (mkV "累了")) ;
AUnderstand p = mkCl p.name (lin V (mkV "理解" ) ) ;
AWant p obj = mkCl p.name (mkV2 "要") obj ;
AWantGo p place = mkCl p.name want_VV (mkVP L.go_V place.name) ;
-- LangNat l = l.lang ; -- ++ "语" ;
-- miscellaneous
QWhatName p = lin QS {s = \\_ => p.name.s ++ R.word "贵姓"} ; ---
QWhatAge p = lin QS {s = \\_ => p.name.s ++ R.word "几岁"} | lin QS {s = \\_ => p.name.s ++ R.word "多大"} ; ---
HowMuchCost item = lin QS {s = \\_ => item.s ++ R.word "是多少钱"} ;
ItCost item price = mkCl item (mkV2 "是") price ;
PropOpen p = mkCl p.name (mkA "开放" ) ;
PropClosed p = mkCl p.name closed_A ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP (mkA "开放" ) ) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP (mkA "开放" ) ) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- PropCit c = lin A { s = c.s ; lock_A = <>; monoSyl = True } ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = lin Text (ss (d.s ++ "见")) ;
PSeeYouPlace p = lin Text (ss (p.at.s ++ "见")) ; ---
PSeeYouPlaceDate p d = lin Text (ss (d.s ++ p.at.s ++ "见")) ; ----
-- Relations are expressed as "มย วิฝเ" or "มย สoณส วิฝเ", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "ตหเ วิฝเ oฝ มย สoน" for non-pronouns.
Wife = xOf (L.wife_N ) ;
Husband = xOf (L.husband_N ) ;
Wife = xOf (L.wife_N ) ;
Son = xOf (mkN "儿子" ) ;
Daughter = xOf (mkN "女儿" ) ;
Children = xOf L.child_N ; ----
-- week days
Monday = mkDay "星期一" ;
Tuesday = mkDay "星期二" ;
Wednesday = mkDay "星期三" ;
Thursday = mkDay "星期四" ;
Friday = mkDay "星期五" ;
Saturday = mkDay "星期六" ;
Sunday = mkDay "星期日" ;
Tomorrow = ParadigmsChi.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 = lin QS {s = \\_ => place.name.s ++ R.word "有多远"} ;
HowFarFrom x y = lin QS {s = \\_ => "从" ++ x.name.s ++ "到" ++ y.name.s ++ R.word "有多远"} ; ----
-- HowFarFromBy x y t =
-- mkQS (mkQCl howFar.how (mkCl (mkNP y.name howFar.far)
-- (lin AP (R.thbind from_Prep (mkNP x.name t))))) ;
-- mkQS (mkQCl howFar.how (mkCl (mkNP y.name howFar.far)
-- (SyntaxChi.mkAdv from_Prep (mkNP x.name t)))) ;
HowFarBy y t = lin QS {s = \\_ => t.s ++ "到" ++ y.name.s ++ R.word "有多远" } ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name)(mkVP (mkV2 "去") place.name)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (R.mkNP ( L.go_V.s ++ place.name.s ++ "的" ++ trans.name.s) ))) ;
-- auxiliaries
oper
mkNat : Str -> Str -> NPNationality = \lang, co -> mkNPNationality (mkNP (mkPN lang)) (mkNP (mkPN co)) (mkA co) ;
mkDay : Str -> {name : NP ; point : SyntaxChi.Adv ; habitual : SyntaxChi.Adv} = \d ->
let day = mkNP (mkPN d) in
mkNPDay day (SyntaxChi.mkAdv noPrep day)
(SyntaxChi.mkAdv noPrep (mkNP (mkCN (mkN d)))) ;
mkPlace : N -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p ->
mkCNPlace (mkCN p) at_Prep noPrep ;
placeN : Str -> N = \s -> mkN s "间" ;
closed_A = P.mkA "关闭" ;
closed_or_not_A = P.mkA "不是关闭" ;
xOf : N -> NPPerson -> NPPerson = \f,p ->
{name = mkNP the_Det (mkCN f (SyntaxChi.mkAdv possess_Prep p.name)) ;
isPron = False ; poss = the_Quant} ; ---- poss not used
by_Prep = mkPrep "乘" [] mannerAdvType ;
mkTransport : N -> V -> {name : CN ; by : SyntaxChi.Adv ; way : V } = \n,m -> {
name = mkCN n ;
-- by = SyntaxChi.mkAdv by8means_Prep (mkNP n);
by = SyntaxChi.mkAdv by_Prep (mkNP n) ;
way = m;
} ;
mkSuperl : A -> Det = \a -> SyntaxChi.mkDet the_Art ({s = ResChi.superlative_s ++ a.s ++ R.word "的那"}) ; -- (SyntaxChi.mkOrd a) ;
-- mkCurrency : Str -> CN = \s -> mkCN (mkN [] s) ; ---- just a classifier
at_Prep = (mkPrep "在" ) ;
noPrep = mkPrep [] ;
for_gei_Prep = mkPrep "给" ;
--------------------------------------------------
-- New 30/11/2011 AR
--------------------------------------------------
lin
Thai = mkNat "泰国" "泰语" ;
Baht = mkCN (mkN "泰铢") ;
Rice = mkCN (mkN ("米饭")) ;
Pork = mkCN (mkN ("猪肉")) ;
Beef = mkCN (mkN ("牛肉")) ;
Egg = mkCN L.egg_N ;
Noodles = mkCN (mkN "面条") ;
Shrimps = mkCN (mkN "虾") ;
Chili = mkCN (mkN "辣椒") ;
Garlic = mkCN (mkN "大蒜") ;
Durian = mkCN (mkN "榴莲") ;
Mango = mkCN (mkN "芒果") ;
Pineapple = mkCN (mkN "菠萝") ;
Coke = mkCN (mkN ("可乐")) ;
IceCream = mkCN (mkN "冰激凌") ;
Salad = mkCN (mkN "色拉") ;
OrangeJuice = mkCN (mkN "橙汁") ;
Lemonade = mkCN (mkN "柠檬汁") ;
Beach = mkPlace (placeN "海滩") ;
ItsRaining = mkCl (mkVP L.rain_V0) ;
ItsCold = mkCl (mkVP L.cold_A) ;
ItsWarm = mkCl (mkVP L.warm_A) ;
ItsWindy = mkCl (mkVP (P.mkA ("有风"))) ;
SunShine = mkCl (mkNP the_Det L.sun_N) (mkA "很大") ;
Smoke = mkVP (P.mkV ( "吸烟" )) ;
ADoctor = mkProfession (mkN "医生") ;
AProfessor = mkProfession (mkN "教授") ;
ALawyer = mkProfession (mkN "律师") ;
AEngineer = mkProfession (mkN "工程师") ;
ATeacher = mkProfession (mkN "教师") ;
ACook = mkProfession (mkN "厨师") ;
AStudent = mkProfession (mkN "学生") ;
ABusinessman = mkProfession (mkN "商人") ;
oper
mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;
}

View File

@@ -0,0 +1,260 @@
-- (c) 2009 Aarne Ranta under LGPL
--# -coding=latin1
concrete WordsDan of Words = SentencesDan **
open SyntaxDan, ParadigmsDan, IrregDan, (L = LexiconDan), ExtraDan, StructuralDan, Prelude in {
lin
-- kinds of food
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "ost" "osten" "oste" "ostene") ;
Chicken = mkCN (mkN "kylling" "kyllingen" "kyllinger" "kyllingerne") ;
Coffee = mkCN (mkN "kaffe" "kaffen" "kaffe" "kaffe") ; -- den kaffe
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "kød" "kødet" "kød" "kødet") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza" "pizzaen" "pizzaer" "pizzaerne") ; -- den pizza
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "te" "teen" "teer" "teerne") ; -- den te
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = L.bad_A ;
Cheap = mkA "billig" ;
Boring = mkA "kedelig" ;
Cold = L.cold_A ;
Delicious = mkA "lækker" ;
Expensive = mkA "dyr" ; -- or dyrt
Fresh = mkA "frisk" ;
Good = L.good_A ;
Suspect = mkA "mistænkelig" ;
Warm = L.warm_A ;
-- places
Airport = mkPlace (mkN "lufthavnen" "lufthavnen" "lufthavne" "lufthavnene") "i" ;
AmusementPark = mkPlace (mkN "forlystelsespark" "forlystelsesparken" "forlystelsesparker" "forlystelsesparker") "i" ;
Bank = mkPlace (mkN "bank" "banken" "banke" "bankene") "i" ;
Bar = mkPlace (mkN "bar" "baren" "barer" "barerne") "i" ;
Cafeteria = mkPlace (mkN "cafeteria" "cafeteriet" "cafeterier" "cafeterierne") "i" ;
Center = mkPlace (mkN "centrum" "centrum" "centrummer" "centrummerne") "i" ; -- all centrum ?
Cinema = mkPlace (mkN "biograf" "biografen" "biografer" "biograferne") "i" ;
Church = mkPlace (mkN "kirke" "kirken" "kirker" "kirkerne") "i" ;
Disco = mkPlace (mkN "diskotek" "diskoteket" "diskoteker" "diskotekerne") "på" ;
Hospital = mkPlace (mkN "hospital" "hospitalet" "hospitaler" "hospitalerne") "på" ;
Hotel = mkPlace (mkN "hotel" "hotellet" "hoteller" "hotellerne") "på" ;
Museum = mkPlace (mkN "museum" "museet" "museer" "museerne") "på" ;
Park = mkPlace (mkN "park" "parken" "parker" "parkerne") "i" ;
Parking = mkPlace (mkN "parkeringsplads" "parkeringspladsen" "parkeringspladser" "parkeringspladserne") "på" ;
Pharmacy = mkPlace (mkN "apotek" "apoteket" "apoteker" "apotekerne") "på" ;
PostOffice = mkPlace (mkN "posthus" "posthuset" "posthuse" "posthusene") "på" ;
Pub = mkPlace (mkN "pub" "pubben" "pubber" "pubber") "på" ;
Restaurant = mkPlace (mkN "restaurant" "restauranten" "restauranter" "restauranterne") "på" ;
School = mkPlace (mkN "skole" "skolen" "skoler" "skolerne") "i" ;
Shop = mkPlace (mkN "butik" "butikken" "butikker" "butikkerne") "i" ;
Station = mkPlace (mkN "station" "stationen" "stationer" "stationerne") "på" ;
Supermarket = mkPlace (mkN "supermarked" "supermarkedet" "supermarkeder" "supermarkederne") "i" ;
Theatre = mkPlace (mkN "teater" "teatret" "teatre" "teatrene") "i" ;
Toilet = mkPlace (mkN "toilet" "toilettet" "toiletter" "toiletterne") "på" ;
University = mkPlace (mkN "universitet" "universitetet" "universiteter" "universiteterne") "på" ;
Zoo = mkCNPlace (mkCN (mkA "zoologisk") (mkN "have")) in_Prep to_Prep ;
CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurant")) (mkPrep "på") to_Prep ;
-- currencies
DanishCrown = mkCN (mkA "dansk") (mkN "krone" "kronen" "kroner" "kronerne") | mkCN (mkN "krone" "kronen" "kroner" "kronerne") ;
Dollar = mkCN (mkN "dollar" "dollaren" "dollar" "dollar") ; -- den dollar
Euro = mkCN (mkN "euro" "euroen" "euro" "euroerne") ; -- den euro
Lei = mkCN (mkN "leu" "leu" "lei" "lei") ; -- det leis ?
Leva = mkCN (mkN "lev" "lev" "leva" "leva") ; -- det leva ?
NorwegianCrown = mkCN (mkA "norsk") (mkN "krone" "kronen" "kroner" "kronerne") | mkCN (mkN "krone" "kronen" "kroner" "kronerne") ;
Pound = mkCN (mkN "pund" "pundet" "pund" "pundene") ; -- det pund
Rouble = mkCN (mkN "rubel" "rublen" "rubler" "rublerne") ; -- den rubel
SwedishCrown = mkCN (mkA "svensk") (mkN "krone" "kronen" "kroner" "kronerne") | mkCN (mkN "krone" "kronen" "kroner" "kronerne") ;
Zloty = mkCN (mkN "zloty" "zloty" "zloty" "zloty") ; -- det zloty ?
-- nationalities
Belgian = mkA "belgisk" ;
Belgium = mkNP (mkPN "Belgien") ;
Bulgarian = mkNat "bulgarsk" "Bulgarien" ;
Catalan = mkNPNationality (mkNP (mkPN "catalansk")) (mkNP (mkPN "Catalonien")) (mkA "catalonsk") ;
Danish = mkNat "dansk" "Danmark" ;
Dutch = mkNat "hollandsk" "Holland" ;
English = mkNat "engelsk" "England" ;
Finnish = mkNat "finsk" "Finland" ;
Flemish = mkNP (mkPN "flamsk") ;
French = mkNat "fransk" "Frankrig" ;
German = mkNat "tysk" "Tyskland" ;
Italian = mkNat "italiensk" "Italien" ;
Norwegian = mkNat "norsk" "Norge" ;
Polish = mkNat "polsk" "Polen" ;
Romanian = mkNat "rumænsk" "Rumænien" ;
Russian = mkNat "russisk" "Russland" ;
Spanish = mkNat "spansk" "Spanien" ;
Swedish = mkNat "svensk" "Sverige" ;
-- Means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN "bus" "bussen" "busser" "busserne") ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "færge" "færgen" "færger" "færgerne") ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN "undergrundsbane" "undergrundsbanen" "undergrundsbaner" "undergrundsbanerne") ;
Taxi = mkTransport (mkN "taxa") ;
Train = mkTransport (mkN "tog" "toget" "tog" "togene") ;
Tram = mkTransport (mkN "sporvogn" "sporvognen" "sporvogne" "sporvognene") ;
ByFoot = ParadigmsDan.mkAdv "til fods" ;
-- actions
AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasName p name = mkCl p.name (mkV2 (mkV "hedde")) name ;
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 "værelse" "værelset" "værelser" "værelserne"))
(SyntaxDan.mkAdv to_Prep (mkNP num (mkN "person" "personen" "personer" "personerne")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "bord"))
(SyntaxDan.mkAdv to_Prep (mkNP num (mkN "person" "personen" "personer" "personerne")))) ;
AHungry p = mkCl p.name (mkA "sulten" "sultet" "sultne") ;
AIll p = mkCl p.name (mkA "syg") ;
AKnow p = mkCl p.name vide_V ;
ALike p item = mkCl p.name (mkV2 holde_V (mkPrep "af")) item ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDan.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (dirV2 (regV "elske")) q.name ;
AMarried p = mkCl p.name (mkA "gift") ;
AReady p = mkCl p.name (mkA "færdig") ;
AScared p = mkCl p.name (mkA "bange") ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "tale")) lang ;
AThirsty p = mkCl p.name (mkA "tørstig") ;
ATired p = mkCl p.name (mkA "træt") ;
AUnderstand p = mkCl p.name (irregV "forstå" "forstod" "forstået") ;
AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP tage_V) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 hede_V)) ;
QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "koste"))) ;
ItCost item price = mkCl item (mkV2 (mkV "koste")) price ;
PropOpen p = mkCl p.name (mkVP (mkVP have_V) open_Adv) ;
PropClosed p = mkCl p.name (mkVP (mkVP have_V) closed_Adv) ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP (mkVP have_V) open_Adv) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP (mkVP have_V) closed_Adv) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP (mkVP have_V) open_Adv) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP (mkVP have_V) closed_Adv) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("vi ses")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "kone" "konen" "koner" "konerne") ;
Husband = xOf sing L.man_N ;
Son = xOf sing (mkN "søn" "sønnen" "sønner" "sønnerne") ;
Daughter = xOf sing (mkN "datter" "datteren" "døtre" "døtrene") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "mandag" ;
Tuesday = mkDay "tirsdag" ;
Wednesday = mkDay "onsdag" ;
Thursday = mkDay "torsdag" ;
Friday = mkDay "fredag" ;
Saturday = mkDay "lørdag" ;
Sunday = mkDay "søndag" ;
Tomorrow = ParadigmsDan.mkAdv "i morgen" ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA "billig") ;
TheMostExpensive = mkSuperl (mkA "dyr") ;
TheMostPopular = mkSuperl (mkA "populær") ;
TheWorst = mkSuperl L.bad_A ;
SuperlPlace sup p = placeNP sup p ;
-- transports
HowFar place =
mkQS (mkQCl long_IAdv (mkCl (mkVP (SyntaxDan.mkAdv to_Prep place.name)))) ;
HowFarFrom place x =
mkQS (mkQCl long_IAdv (mkCl place.name (SyntaxDan.mkAdv from_Prep x.name))) ;
HowFarFromBy x y t =
mkQS (mkQCl long_IAdv (mkCl y.name (SyntaxDan.mkAdv from_Prep (mkNP x.name t)))) ;
HowFarBy y t =
mkQS (mkQCl long_IAdv (mkCl y.name t)) ;
-- not sure !
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
oper
mkNat : Str -> Str -> NPNationality = \nat,co ->
mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
-- don't add the "a"
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d) in
mkNPDay day (SyntaxDan.mkAdv on_Prep day)
(SyntaxDan.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i ->
mkCNPlace (mkCN p) (mkPrep i) to_Prep ;
open_Adv = ParadigmsDan.mkAdv "åbent" ;
closed_Adv = ParadigmsDan.mkAdv "lukket" ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
mkSuperl : A -> Det = \a -> mkDet the_Art (mkOrd a) ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxDan.mkAdv by8means_Prep (mkNP n)
} ;
far_IAdv = ExtraDan.IAdvAdv L.far_Adv ;
long_IAdv : IAdv = ss "hvor langt" ** {lock_IAdv = <>};
how8much_IAdv : IAdv = ss "hvad" ** {lock_IAdv = <>};
}

View File

@@ -0,0 +1,294 @@
-- (c) 2009 Aarne Ranta under LGPL
--# -coding=latin1
concrete WordsDut of Words = SentencesDut **
open SyntaxDut, (P = ParadigmsDut), (I = IrregDut), (L = LexiconDut), (R=ResDut), (E=ExtendDut), Prelude in {
lin
-- kinds of food
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN L.cheese_N ;
Chicken = mkCN (P.mkN "kip" "kippen" P.de) ;
Coffee = mkCN (P.mkN "koffie" "koffie" P.de) ;
Fish = mkCN L.fish_N ;
Meat = mkCN (P.mkN "vlees" "vleesen" P.het) ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (P.mkN "pizza" "pizza's" P.de) ;
Salt = mkCN L.salt_N ;
Tea = mkCN (P.mkN "thee" "thee" P.de) ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = P.mkA "slecht" ;
Cheap = P.mkA "goedkoop" ;
Boring = P.mkA "saai" ;
Cold = L.cold_A ;
Delicious = P.mkA "lekker" ;
Expensive = P.mkA "duur" ;
Fresh = P.mkA "vers" ;
Good = L.good_A ;
Suspect = P.mkA "verdacht" ;
Warm = L.warm_A ;
-- places
Airport = mkPlace (P.mkN "luchthaven" "luchthavens" P.de) "op" ;
AmusementPark = mkPlace (P.mkN "pretpark" "pretparken" P.het) "in" ;
Bank = mkPlace (P.mkN "bank" "banken" P.de) "op" ;
Bar = mkPlace (P.mkN "bar" P.de) "in" ;
Cafeteria = mkPlace (P.mkN "cafetaria" "cafetaria's" P.de) "in" ;
Center = mkPlace (P.mkN "centrum" "centra" P.het) "in" ;
Church = mkPlace (P.mkN "kerk" "kerken" P.de) "in" ;
Cinema = mkPlace (P.mkN "bioscoop" "bioscopen" P.de) "in" ;
Disco = mkPlace (P.mkN "disco" "disco's" P.de) "in" ;
Hospital = mkPlace (P.mkN "ziekenhuis" "ziekenhuizen" P.het) "in" ;
Hotel = mkPlace (P.mkN "hotel" "hotels" P.het) "in" ;
Museum = mkPlace (P.mkN "museum" "musea" P.het) "in" ;
Park = mkPlace (P.mkN "park" "parken" P.het) "in" ;
Parking = mkPlace (P.mkN "parkeerplaats" "parkeerplaatsen" P.de) "op" ; --parkeren x parkeerplaats -- naar op
Pharmacy = mkPlace (P.mkN "apotheek" "apotheken" P.de) "in" ;
PostOffice = mkPlace (P.mkN "postkantoor" "postkantoren" P.het) "op" ;
Pub = mkPlace (P.mkN "kroeg" "kroegen" P.de) "in" ;
Restaurant = mkPlace (P.mkN "restaurant" "restaurants" P.het) "in" ;
Shop = mkPlace (P.mkN "winkel" "winkels" P.de) "in" ; -- shop x winkel
School = mkPlace (P.mkN "school" "scholen" P.de) "in" ;
Station = mkPlace (P.mkN "station" "stations" P.het) "op" ;
Supermarket = mkPlace (P.mkN "supermarkt" "supermarkten" P.de) "in" ;
Theatre = mkPlace (P.mkN "theater" "theaters" P.het) "in" ;
Toilet = mkPlace (P.mkN "toilet" "toiletten" P.het) "op" ;
University = mkPlace (P.mkN "universiteit" "universiteiten" P.de) "in" ; --universitair x universiteit -- naar in
Zoo = mkPlace (P.mkN "dierentuin" "dierentuinen" P.de) "op" ;
CitRestaurant cit =
mkCNPlace (mkCN cit (P.mkN "restaurant" "restaurants" P.het)) in_Prep to_Prep ;
-- currencies
DanishCrown = mkCN (P.mkA "Deens") (P.mkN "kroon" "kronen" P.de) ;
Dollar = mkCN (P.mkN "dollar" "dollars" P.de) ;
Euro = mkCN (P.mkN "euro" "euro's" P.de) ;
Lei = mkCN (P.mkA "Roemeens") (P.mkN "leu" "lei" P.de) ;
Leva = mkCN (P.mkA "Bulgaars") (P.mkN "leva" "levs" P.de) ;
NorwegianCrown = mkCN (P.mkA "Noors") (P.mkN "kroon" "kronen "P.de) ;
Pound = mkCN (P.mkA "Brits") (P.mkN "pond" "pond" P.het);
Rouble = mkCN (P.mkA "Russisch") (P.mkN "roebel" "roebel" P.de) ;
SwedishCrown = mkCN (P.mkA "Zweeds") (P.mkN "kroon" "kronen" P.de) ;
Zloty = mkCN (P.mkA "Pools") (P.mkN "zloty" "zloty" P.de) ;
-- Nationalities
Belgian = P.mkA "Belgisch" ;
Belgium = mkNP (P.mkPN "België") ;
Bulgarian = mkNat "Bulgaars" "Bulgarije" ;
Catalan = mkNat "Catalaans" "Catalonië" ;
Danish = mkNat "Deens" "Denemarken" ;
Dutch = mkNat "Nederlands" "Nederland" ;
English = mkNat "Engels" "Engeland" ;
Finnish = mkNat "Fins" "Finland" ;
Flemish = mkNP (P.mkPN "Vlaams") ;
French = mkNat "Frans" "Frankrijk" ;
German = mkNat "Duits" "Duitsland" ;
Italian = mkNat "Italiaans" "Italië" ;
Norwegian = mkNat "Noors" "Noorwegen" ;
Polish = mkNat "Pools" "Polen" ;
Romanian = mkNat "Roemeens" "Roemenië" ;
Russian = mkNat "Russisch" "Rusland" ;
Spanish = mkNat "Spaans" "Spanje" ;
Swedish = mkNat "Zweeds" "Zweden" ;
-- Means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (P.mkN "bus" "bussen" P.de) ;
Car = mkTransport (P.mkN "auto" "auto's" P.de);
Ferry = mkTransport (P.mkN "veerboot" "veerboten" P.de) ; -- ferry x veerboot
Plane = mkTransport (P.mkN "vliegtuig" "vliegtuigen" P.het) ;
Subway = mkTransport (P.mkN "metro" "metro" P.de) ;
Taxi = mkTransport (P.mkN "taxi" "taxi's" P.de) ;
Tram = mkTransport (P.mkN "tram" "trams" P.de) ;
Train = mkTransport (P.mkN "trein" "treinen" P.de) ;
ByFoot = P.mkAdv "te voet" ;
{-
ik ga met de/het ....
ik ga te voet/ ik ga lopend
-}
-- actions
AHasAge p num = prop (mkCl p.name (mkNP num L.year_N)) ; -- ik ben ... jaar
AHasName p name = prop (mkCl p.name (P.mkV2 I.heten_V) name) ; -- ik heet ...
AHasChildren p num = prop (mkCl p.name have_V2 (mkNP num L.child_N)) ; -- ik heb ... kinderen
--todo geen
AHasRoom p num =
mkProp (mkCl p.name have_V2 -- ik heb een kamer voor ... personen
(mkNP (mkNP a_Det (P.mkN "kamer"))
(SyntaxDut.mkAdv for_Prep (mkNP num (P.mkN "persoon")))))
(mkS (mkCl p.name have_V2 -- ik heb geen kamer voor ... personen
(mkNP (mkNP no_Quant (P.mkN "kamer"))
(SyntaxDut.mkAdv for_Prep (mkNP num (P.mkN "persoon"))))));
AHasTable p num =
mkProp (mkCl p.name have_V2
(mkNP (mkNP a_Det (P.mkN "tafel"))
(SyntaxDut.mkAdv for_Prep (mkNP num (P.mkN "persoon")))))
(mkS (mkCl p.name have_V2
(mkNP (mkNP no_Quant (P.mkN "tafel"))
(SyntaxDut.mkAdv for_Prep (mkNP num (P.mkN "persoon")))))) ;
AHungry p = mkProp (mkCl p.name have_V2 (mkNP (P.mkN "honger")))
(mkS (mkCl p.name have_V2 (mkNP no_Quant (P.mkN "honger")))) ; -- to have
AIll p = prop (mkCl p.name (P.mkA "ziek")) ; -- to be ?
AKnow p = prop (mkCl p.name I.weten_V) ; -- ik weet het.
ALike p item = prop (mkCl p.name L.like_V2 item) ; -- ik vind X leuk
ALive p co = prop (mkCl p.name (mkVP (mkVP (P.mkV "wonen")) (SyntaxDut.mkAdv in_Prep co))) ; -- woon
ALove p q = prop (mkCl p.name L.love_V2 q.name) ; -- houden van
AMarried p = prop (mkCl p.name (P.mkA "getrouwd")) ; -- ik ben getrouwd
AReady p = prop (mkCl p.name (P.mkA "klaar")) ; -- ik ben klaar
AScared p = prop (mkCl p.name (P.mkA "bang")) ; -- ik ben bang
ASpeak p lang = mkProp (mkCl p.name (P.mkV2 I.spreken_V) lang) -- ik spreek ...
(mkS (mkCl p.name (P.mkV2 I.spreken_V) (mkNP no_Predet lang))); -- ik spreek geen ...
AThirsty p = mkProp (mkCl p.name have_V2 (mkNP (P.mkN "dorst"))) --ik heb dorst
(mkS (mkCl p.name have_V2 (mkNP no_Quant (P.mkN "dorst")))) ; --ik heb geen dorst
ATired p = prop (mkCl p.name (P.mkA "moe")) ; -- ik ben moe
AUnderstand p = prop (mkCl p.name (P.mkV "verstaan" "verstond" "verstonden" "verstaan")) ;
AWant p obj = prop (mkCl p.name wants_V2 obj) ;
AWantGo p place = prop (mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to)) ; -- ik wil naar ...
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name I.heten_V)) ; --hoe heet je
QWhatAge p = mkQS (mkQCl (E.ICompAP (mkAP L.old_A)) p.name) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (P.mkV "kosten"))) ; --hoeveel kost...
ItCost item price = prop (mkCl item (P.mkV2 (P.mkV "kosten")) price) ; --..item.. kost ..price..
PropOpen p = prop (mkCl p.name open_A) ;
PropClosed p = prop (mkCl p.name closed_A) ;
PropOpenDate p d = prop (mkCl p.name (mkVP (mkVP open_A) d)) ; --de winkel is geopend op vrijdag(s)
--normaal gesproken ga ik op vrijdag ..action../vrijdags ga ik ..action..
PropClosedDate p d = prop (mkCl p.name (mkVP (mkVP closed_A) d)) ; -- gesloten
PropOpenDay p d = prop (mkCl p.name (mkVP (mkVP open_A) d.habitual)) ;
PropClosedDay p d = prop (mkCl p.name (mkVP (mkVP closed_A) d.habitual)) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("ik zie je"))) (mkPhrase (mkUtt d)) ; -- zie je / tot
PSeeYouPlace p =
mkText (lin Text (ss ("ik zie je"))) (mkPhrase (mkUtt p.at)) ; -- tot ziens in p (AR)
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("ik zie je")))
(mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ; --tot ... op/in/bij
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (P.mkN "vrouw" "vrowen" P.de) ; -- x vrouw
Husband = xOf sing L.man_N ;
Son = xOf sing (P.mkN "zoon" "zonen" P.de) ;
Daughter = xOf sing (P.mkN "dochter" "dochters" P.de) ;
Children = xOf plur L.child_N ; -- kind
-- week days
Monday = mkDay "maandag" ;
Tuesday = mkDay "dinsdag" ;
Wednesday = mkDay "woensdag" ;
Thursday = mkDay "donderdag" ;
Friday = mkDay "vrijdag" ;
Saturday = mkDay "zaterdag" ;
Sunday = mkDay "zondag" ;
Tomorrow = P.mkAdv "morgen" ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl (P.mkA
"dichtbijzijnd" "dichtbijzijnde" "dichtbijzijndes"
"dichterbijzijnd" "dichtestbijzijnd") ;
TheCheapest = mkSuperl (P.mkA "goedkoop") ;
TheMostExpensive = mkSuperl (P.mkA "duur") ;
TheMostPopular = mkSuperl (P.mkA "populair") ;
TheWorst = mkSuperl (P.mkA "slecht") ;
SuperlPlace sup p = placeNP sup p ;
-- transports
HowFar place = mkQS (mkQCl far_IAdv place.name) ; -- hoe ver is de dierentuin
HowFarFrom x y = mkQS (mkQCl far_IAdv (mkNP y.name (SyntaxDut.mkAdv van_Prep x.name))) ;
-- how far is the center from the hotel ? hoever is het centrum van het hotel
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkNP (mkNP y.name (SyntaxDut.mkAdv van_Prep x.name)) t)) ;
--hoelang duurt het om van het vliegveld naar het hotel te gaan per taxi
HowFarBy y t = mkQS (mkQCl far_IAdv (mkNP y.name t)) ; --hoe ver is het museum per bus
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
oper
mkNat : Str -> Str -> NPNationality = \nat,co ->
mkNPNationality (mkNP (P.mkPN nat)) (mkNP (P.mkPN co)) (P.mkA nat) ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
mkNPDay (mkNP (P.mkPN d)) (mkAdv (P.mkPrep []) (mkNP (P.mkPN d)))
---- (mkAdv on_Prep (mkNP (P.mkPN d)))
(mkAdv on_Prep (mkNP a_Quant plNum (mkCN (P.mkN d (d + "en") P.utrum)))) ;
mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i ->
mkCNPlace (mkCN p) (P.mkPrep i) to_Prep ;
open_A = P.mkA "geopend" ;
closed_A = P.mkA "gesloten" ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (mkNP the_Quant a c) (SyntaxDut.mkAdv possess_Prep b)) p ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxDut.mkAdv with_Prep (mkNP the_Det n)
} ;
far_IAdv = ss "hoe ver" ** {lock_IAdv = <>} ;
long_IAdv = ss "hoe lang" ** {lock_IAdv = <>};
mkSuperl : A -> Det = \a -> SyntaxDut.mkDet the_Art (SyntaxDut.mkOrd a) ;
van_Prep : Prep = P.mkPrep "van" ;
wants_V2 : V2 = P.mkV2 (P.mkV "wil" "wil" "willen" "wou" "wouden" "gewild") ;
no_Predet = R.mkPredet "geen" "geen" ;
{-
HowFarFrom : how far is the center from the hotel ? hoe ver is het centrum van het hotel
HowFarFromBy : how far is the airport from the hotel by taxi ? hoe lang duurt het om van het vliegveld naar het hotel te gaan per taxi
HowFarBy : how far is the museum by bus ? hoe ver is het museum per bus/ hoelang doe je er over om met de bus naar het museum te gaan/hoelang doet de bus er over tot het museum
-}
}

View File

@@ -0,0 +1,314 @@
--2 Implementations of Words, with English as example
concrete WordsEng of Words = SentencesEng **
open
SyntaxEng,
ParadigmsEng,
(L = LexiconEng),
(P = ParadigmsEng),
IrregEng,
ExtraEng,
Prelude in {
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 "cheese") ;
Chicken = mkCN (mkN "chicken") ;
Coffee = mkCN (mkN "coffee") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "meat") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "tea") ;
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 "boring" ;
Cheap = mkA "cheap" ;
Cold = L.cold_A ;
Delicious = mkA "delicious" ;
Expensive = mkA "expensive" ;
Fresh = mkA "fresh" ;
Good = L.good_A ;
Suspect = mkA "suspect" ;
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 "airport" "at" ;
AmusementPark = mkCompoundPlace "amusement" "park" "at" ;
Bank = mkPlace "bank" "at" ;
Bar = mkPlace "bar" "in" ;
Cafeteria = mkPlace "canteen" "in" ;
Center = mkPlace "center" "in" ;
Cinema = mkPlace "cinema" "at" ;
Church = mkPlace "church" "in" ;
Disco = mkPlace "disco" "at" ;
Hospital = mkPlace "hospital" "in" ;
Hotel = mkPlace "hotel" "in" ;
Museum = mkPlace "museum" "at" ;
Park = mkPlace "park" "in" ;
Parking = mkCompoundPlace "car" "park" "in" ;
Pharmacy = mkPlace "pharmacy" "at" ;
PostOffice = mkCompoundPlace "post" "office" "at" ;
Pub = mkPlace "pub" "at" ;
Restaurant = mkPlace "restaurant" "in" ;
School = mkPlace "school" "at" ;
Shop = mkPlace "shop" "at" ;
Station = mkPlace "station" "at" ;
Supermarket = mkPlace "supermarket" "at" ;
Theatre = mkPlace "theatre" "at" ;
Toilet = mkPlace "toilet" "in" ;
University = mkPlace "university" "at" ;
Zoo = mkPlace "zoo" "at" ;
CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurant")) in_Prep to_Prep ;
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
DanishCrown = mkCN (mkA "Danish") (mkN "crown") | mkCN (mkN "crown") ;
Dollar = mkCN (mkN "dollar") ;
Euro = mkCN (mkN "euro" "euros") ; -- to prevent euroes
Lei = mkCN (mkN "leu" "lei") ;
Leva = mkCN (mkN "lev") ;
NorwegianCrown = mkCN (mkA "Norwegian") (mkN "crown") | mkCN (mkN "crown") ;
Pound = mkCN (mkN "pound") ;
Rouble = mkCN (mkN "rouble") ;
Rupee = mkCN (mkN "rupee") ;
SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ;
Zloty = mkCN (mkN "zloty" "zloty") ;
Yuan = mkCN (mkN "yuan" "yuan") ;
-- Nationalities
Belgian = mkA "Belgian" ;
Belgium = mkNP (mkPN "Belgium") ;
Bulgarian = mkNat "Bulgarian" "Bulgaria" ;
Catalan = mkNPNationality (mkNP (mkPN "Catalan")) (mkNP (mkPN "Catalonia")) (mkA "Catalonian") ;
Chinese = mkNat "Chinese" "China" ;
Danish = mkNat "Danish" "Denmark" ;
Dutch = mkNPNationality (mkNP (mkPN "Dutch")) (mkNP the_Quant (mkN "Netherlands")) (mkA "Dutch") ;
English = mkNat "English" "England" ;
Finnish = mkNat "Finnish" "Finland" ;
Flemish = mkNP (mkPN "Flemish") ;
French = mkNat "French" "France" ;
German = mkNat "German" "Germany" ;
Hindi = mkNP (mkPN "Hindi") ;
India = mkNP (mkPN "India") ;
Indian = mkA "Indian" ;
Italian = mkNat "Italian" "Italy" ;
Norwegian = mkNat "Norwegian" "Norway" ;
Polish = mkNat "Polish" "Poland" ;
Romanian = mkNat "Romanian" "Romania" ;
Russian = mkNat "Russian" "Russia" ;
Spanish = mkNat "Spanish" "Spain" ;
Swedish = mkNat "Swedish" "Sweden" ;
-- Means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN "bus") ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "ferry") ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN "subway") ;
Taxi = mkTransport (mkN "taxi") ;
Train = mkTransport (mkN "train") ;
Tram = mkTransport (mkN "tram") ;
ByFoot = P.mkAdv "by foot" ;
-- Actions: the predication patterns are very often language-dependent.
AHasAge p num = mkCl p.name (mkNP (mkNP num L.year_N) (ParadigmsEng.mkAdv "old"));
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 "room")) (SyntaxEng.mkAdv for_Prep (mkNP num (mkN "person")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "table")) (SyntaxEng.mkAdv for_Prep (mkNP num (mkN "person")))) ;
AHasName p name = mkCl (nameOf p) name ;
AHungry p = mkCl p.name (mkA "hungry") ;
AIll p = mkCl p.name (mkA "ill") ;
AKnow p = mkCl p.name IrregEng.know_V ;
ALike p item = mkCl p.name (mkV2 (mkV "like")) item ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxEng.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (mkV2 (mkV "love")) q.name ;
AMarried p = mkCl p.name (mkA "married") ;
AReady p = mkCl p.name (mkA "ready") ;
AScared p = mkCl p.name (mkA "scared") ;
ASpeak p lang = mkCl p.name (mkV2 IrregEng.speak_V) lang ;
AThirsty p = mkCl p.name (mkA "thirsty") ;
ATired p = mkCl p.name (mkA "tired") ;
AUnderstand p = mkCl p.name IrregEng.understand_V ;
AWant p obj = mkCl p.name (mkV2 (mkV "want")) obj ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP IrregEng.go_V) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl (mkIComp whatSg_IP) (nameOf p)) ;
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregEng.cost_V)) ;
ItCost item price = mkCl item (mkV2 IrregEng.cost_V) price ;
PropOpen p = mkCl p.name open_Adv ;
PropClosed p = mkCl p.name closed_Adv ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("see you")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "wife") ;
Husband = xOf sing (mkN "husband") ;
Son = xOf sing (mkN "son") ;
Daughter = xOf sing (mkN "daughter") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "Monday" ;
Tuesday = mkDay "Tuesday" ;
Wednesday = mkDay "Wednesday" ;
Thursday = mkDay "Thursday" ;
Friday = mkDay "Friday" ;
Saturday = mkDay "Saturday" ;
Sunday = mkDay "Sunday" ;
Tomorrow = P.mkAdv "tomorrow" ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA "cheap") ;
TheMostExpensive = mkSuperl (mkA "expensive") ;
TheMostPopular = mkSuperl (mkA "popular") ;
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 (mkCl y.name (SyntaxEng.mkAdv from_Prep x.name))) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkCl y.name (SyntaxEng.mkAdv from_Prep (mkNP x.name t)))) ;
HowFarBy y t = mkQS (mkQCl far_IAdv (mkCl y.name t)) ;
WhichTranspPlace trans place =
mkQS (mkQCl (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 day (SyntaxEng.mkAdv on_Prep day)
(SyntaxEng.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
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 ;
mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i ->
mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
open_Adv = P.mkAdv "open" ;
closed_Adv = P.mkAdv "closed" ;
xOf : 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 sing (mkN "name") p).name ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxEng.mkAdv by8means_Prep (mkNP n)
} ;
mkSuperl : A -> Det = \a -> SyntaxEng.mkDet the_Art (SyntaxEng.mkOrd a) ;
far_IAdv = ExtraEng.IAdvAdv (ss "far") ;
--------------------------------------------------
-- New 30/11/2011 AR
--------------------------------------------------
lin
Thai = mkNat "Thai" "Thailand" ;
Baht = mkCN (mkN "baht" "baht") ;
Rice = mkCN (mkN "rice") ;
Pork = mkCN (mkN "pork") ;
Beef = mkCN (mkN "beef") ;
Egg = mkCN L.egg_N ;
Noodles = mkCN (mkN "noodle") ;
Shrimps = mkCN (mkN "shrimp") ;
Chili = mkCN (mkN "chili") ;
Garlic = mkCN (mkN "garlic") ;
Durian = mkCN (mkN "durian") ;
Mango = mkCN (mkN "mango") ;
Pineapple = mkCN (mkN "pineapple") ;
Coke = mkCN (mkN "coke") ;
IceCream = mkCN (mkN "ice cream") ;
Salad = mkCN (mkN "salad") ;
OrangeJuice = mkCN (mkN "orange juice") ;
Lemonade = mkCN (mkN "lemonade") ;
Beach = mkPlace "beach" "on" ;
ItsRaining = mkCl (progressiveVP (mkVP L.rain_V0)) ;
ItsCold = mkCl (mkVP L.cold_A) ;
ItsWarm = mkCl (mkVP L.warm_A) ;
ItsWindy = mkCl (mkVP (P.mkA "windy")) ;
SunShine = mkCl (mkNP the_Det L.sun_N) (progressiveVP (mkVP shine_V)) ;
Smoke = mkVP (P.mkV "smoke") ;
ADoctor = mkProfession (mkN "doctor") ;
AProfessor = mkProfession (mkN "professor") ;
ALawyer = mkProfession (mkN "lawyer") ;
AEngineer = mkProfession (mkN "engineer") ;
ATeacher = mkProfession (mkN "teacher") ;
ACook = mkProfession (mkN "cook") ;
AStudent = mkProfession (mkN "student") ;
ABusinessman = mkProfession (mkN "businessman" "businessmen") ;
oper
mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;
}

View File

@@ -0,0 +1,372 @@
-- (c) 2010 Aarne Ranta under LGPL
-- Estonian port by Kaarel Kaljurand
concrete WordsEst of Words = SentencesEst **
open
SyntaxEst, ParadigmsEst, (L = LexiconEst), (R = ResEst),
Prelude, (E = ExtraEst) in {
flags optimize = noexpand ;
lin
-- kinds
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "juust" "juustu" "juustu" "juustu" "juustude" "juuste") ;
Chicken = mkCN (mkN "kana") ;
Coffee = mkCN (mkN "kohv" "kohvi" "kohvi" "kohvi" "kohvide" "kohve") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "liha") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pitsa" "pitsa" "pitsat" "pitsasse" "pitsade" "pitsasid") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "tee") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- qualities
Bad = L.bad_A ;
Boring = mkA "igav" ;
Cheap = mkA "odav" ;
Cold = L.cold_A ;
Delicious = mkA "maitsev" ;
Expensive = mkA (mkN "kallis" "kalli" "kallist" "kallisse" "kallite" "kalleid");
Fresh = mkA "toores" ;
Good = L.good_A ;
Suspect = mkA "kahtlane" ;
Warm = L.warm_A ;
-- places
Restaurant = mkPlace (mkN "restoran") ssa ;
Bank = mkPlace (mkN "pank") ssa ;
PostOffice = mkPlace (mkN "post" (mkN "kontor")) ssa ;
Bar = mkPlace (mkN "baar") ssa ;
Toilet = mkPlace (mkN "tualett") ssa ;
Museum = mkPlace (mkN "muuseum") ssa ;
Airport = mkPlace (mkN "lennu" (mkN "jaam" "jaama" "jaama" "jaama" "jaamade" "jaamu")) ssa ; -- different in Fin
Station = mkPlace (mkN "jaam" "jaama" "jaama" "jaama" "jaamade" "jaamu") ssa ; -- different in Fin
Hospital = mkPlace (mkN "haigla") ssa ;
Church = mkPlace (mkN "kirik") ssa ;
Cinema = mkPlace (mkN "kino") ssa ;
Theatre = mkPlace (mkN "teater") ssa ;
Shop = mkPlace (mkN "pood" "poe" "poodi" "poodi" "poodide" "poode") ssa ;
Park = mkPlace (mkN "park") ssa ;
Hotel = mkPlace (mkN "hotell" "hotelli" "hotelli" "hotelli" "hotellide" "hotelle") ssa ;
University = mkPlace (mkN "üli" (mkN "kool")) ssa ; -- different in Fin
School = mkPlace (mkN "kool") ssa ; -- different in Fin
CitRestaurant cit = {
name = mkCN cit.prop (mkN "restoran") ;
at = casePrep inessive ;
to = casePrep illative;
from = casePrep elative ;
isPl = False
} ;
Parking = mkPlace (mkN "parkla") ssa ; -- different in Fin
Supermarket = mkPlace (mkN "super" (mkN "market")) ssa ;
Pharmacy = mkPlace (mkN "apteek") ssa ;
Center = mkPlace (mkN "keskus") ssa ;
Cafeteria = mkPlace (mkN "kohvik") ssa ;
Disco = mkPlace (mkN "diskoteek") ssa ;
Pub = mkPlace (mkN "kõrts") ssa ;
AmusementPark = mkPlace (mkN "lõbustus" (mkN "park")) ssa ;
Zoo = mkPlace (mkN "looma" (mkN "aed" "aia" "aeda" "aeda" "aedade" "aedu")) ssa ;
-- currencies
DanishCrown = mkCN (kroon2 "taani") ;
Dollar = mkCN (mkN "dollar") ;
Euro = mkCN (mkN "euro") ;
Lei = mkCN (mkN "leu") ;
Leva = mkCN (mkN "leev") ;
NorwegianCrown = mkCN (kroon2 "norra") ;
Pound = mkCN (mkN "nael" "naela") ;
Rouble = mkCN (mkN "rubla") ;
Rupee = mkCN (mkN "ruupia") ;
SwedishCrown = mkCN (kroon2 "rootsi") ;
Zloty = mkCN (mkN "zlott") ;
Yuan = mkCN (mkN "jüään") ;
-- Citizenship
Belgian = { prop = invA "belgia" ; nat = mkA "belglane" } ;
Indian = { prop = invA "india" ; nat = mkA "indialane" } ;
-- Country
Belgium = mkNP (mkPN "Belgia") ;
India = mkNP (mkPN "India") ;
-- Nationality
Bulgarian = mkNat "bulgaaria" "bulgaarlane" (mkPN "Bulgaaria") ;
Catalan = mkNat "katalaani" "kataloonlane" (mkPN "Kataloonia") ;
Chinese = mkNat "hiina" "hiinlane" (mkPN "Hiina") ;
Danish = mkNat "taani" "taanlane" (mkPN "Taani") ;
Dutch = mkNat "hollandi" "hollandlane" (mkPN "Holland") ;
English = mkNat "inglise" "inglane" (mkPN "Inglismaa") ;
Finnish = mkNat "soome" "soomlane" (mkPN "Soome") ;
Flemish = mkNP (mkPN "flaami keel") ; -- Language
Hindi = mkNP (mkPN "hindi keel") ; -- Language
French = mkNat "prantsuse" "prantslane" (mkPN "Prantsusmaa") ;
German = mkNat "saksa" "sakslane" (mkPN "Saksamaa") ;
Italian = mkNat "itaalia" "itaallane" (mkPN "Itaalia") ;
Norwegian = mkNat "norra" "norralane" (mkPN "Norra") ;
Polish = mkNat "poola" "poolakas" (mkPN "Poola") ;
Romanian = mkNat "rumeenia" "rumeenlane" (mkPN "Rumeenia") ;
Russian = mkNat "vene" "venelane" (mkPN "Venemaa") ;
Spanish = mkNat "hispaania" "hispaanlane" (mkPN "Hispaania") ;
Swedish = mkNat "rootsi" "rootslane" (mkPN "Rootsi") ;
---- it would be nice to have a capitalization Predef function
-- means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN "buss" "bussi" "bussi" "bussi" "busside" "busse") ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "praam") ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN "metroo") ;
Taxi = mkTransport (mkN "takso") ;
Train = mkTransport L.train_N ;
Tram = mkTransport (mkN "tramm") ;
ByFoot = ParadigmsEst.mkAdv "jalgsi" ;
-- actions
AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
AHasName p name = mkCl (nameOf p) name ;
AHasRoom p = haveForPerson p.name (mkCN (mkN "tuba")) ;
AHasTable p = haveForPerson p.name (mkCN (mkN "laud")) ;
AHungry p = E.AdvExistNP (SyntaxEst.mkAdv on_Prep p.name) (mkNP (mkN "nälg")) ;
AIll p = mkCl p.name (mkA "haige") ;
--AKnow p = mkCl p.name (mkV "teadma") ;
AKnow p = mkCl p.name L.know_VS ;
ALike p item = mkCl p.name L.like_V2 item ;
ALive p co = mkCl p.name (mkVP (mkVP L.live_V) (SyntaxEst.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name L.love_V2 q.name ;
AMarried p = mkCl p.name (ParadigmsEst.mkAdv "abielus") ;
AReady p = mkCl p.name (ParadigmsEst.invA "valmis" ) ;
-- Eng: I am scared
-- Fin: Minua pelottaa (partitive)
-- Est: Mina kardan (nominative)
-- Est: Mul on hirm (nominative)
-- AScared p = mkCl p.name (caseV nominative (mkV "kartma")) ;
AScared p = E.AdvExistNP (SyntaxEst.mkAdv on_Prep p.name) (mkNP (mkN "hirm")) ;
-- Fin: puhua: Puhun hollantia (partitive)
-- Est: Mina räägin hollandi keelt (partitive)
ASpeak p lang = mkCl p.name L.speak_V2 lang ;
AThirsty p = E.AdvExistNP (SyntaxEst.mkAdv on_Prep p.name) (mkNP (mkN "janu")) ;
-- Eng: I am tired
-- Fin: Minua väsyttää. (partitive)
-- Ger: Ich bin müde.
-- Est: Mina olen väsinud.
-- ATired p = mkCl p.name (caseV partitive (mkV "väsitada")) ;
ATired p = mkCl p.name (ParadigmsEst.mkA "väsinud") ;
AUnderstand p = mkCl p.name (mkV "aru" (mkV "saama")) ;
AWant p obj = mkCl p.name (mkV2 "tahtma") obj ;
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))) ;
QWhatAge p = mkQS (mkQCl (E.ICompAP (mkAP L.old_A)) p.name) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item maksma_V)) ;
ItCost item price = mkCl item (mkV2 maksma_V) price ;
PropOpen p = mkCl p.name open_Adv ;
PropClosed p = mkCl p.name closed_Adv ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("kohtumiseni"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("kohtumiseni"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("kohtumiseni")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "naine") ;
Husband = xOf sing L.man_N ;
Son = xOf sing (mkN "poeg" "poja" "poega" "poegadesse" "poegade" "poegi") ;
Daughter = xOf sing (mkN "tütar" "tütre" "tütart" "tütresse" "tütarde" "tütreid") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDayPaev "esmas" ;
Tuesday = mkDayPaev "teisi" ;
Wednesday = mkDayPaev "kolma" ;
Thursday = mkDayPaev "nelja" ;
Friday = mkDay (mkPN (mkN "reede" "reede")) ("reedeti") ;
Saturday = mkDayPaev "lau" ;
Sunday = mkDayPaev "püha" ;
Tomorrow = ParadigmsEst.mkAdv "homme" ;
-- transports
HowFar place = mkQS (mkQCl far_IAdv place.name) ;
HowFarFrom x y =
mkQS (mkQCl far_IAdv (mkCl y.name x.from)) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkCl y.name
(mkVP (mkVP x.from) t))) ;
HowFarBy place t =
mkQS (mkQCl far_IAdv (mkCl place.name t)) ;
-- mkQS (mkQCl (mkIAdv far_IAdv t) y.name) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkVP (mkVP (mkVP (mkV "saama")) trans.by) place.to))) ;
-- pääseekö keskustaan bussilla
-- mkQS (mkQCl (E.AdvPredNP place.to L.go_V (E.PartCN (trans.name)))) ;
-- meneekö keskustaan bussia
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl (mkA (mkN "lähedal asuv") "lähem" "lähim") ;
TheCheapest = mkSuperl (mkA "odav") ;
TheMostExpensive = mkSuperl (mkA (mkN "kallis" "kalli" "kallist" "kallisse" "kallite" "kalleid")) ;
TheMostPopular = mkSuperl (mkA "populaarne") ;
TheWorst = mkSuperl (L.bad_A) ;
SuperlPlace sup p = placeNP sup p ;
oper
kroon : N = mkN "kroon" "krooni" "krooni" "krooni" "kroonide" "kroone" ;
kroon2 : Str -> N = \taani -> mkN (taani + " ") kroon ;
maksma_V : V = mkV "maksma" "maksta" "maksab" ;
mkNat : Str -> Str -> PN -> NPNationality
= \attr,pred,co ->
{lang = mkNP (mkCN (mkN (attr + " ") (mkN "keel" "keele" "keelt" "keelde" "keelte" "keeli")));
prop = invA attr ;
nat = mkA pred ;
country = mkNP co
} ;
---- using overloaded paradigms slows down compilation dramatically
-- Eng: See you on Monday!
-- Est: Kohtumiseni esmaspäeval! (adessive)
-- Fin: Nähdään maanantaina! (essive)
-- TODO: use StructuralEst.gf: on_Prep = casePrep adessive
mkDay : PN -> Str -> {name : NP ; point : Adv ; habitual : Adv} = \d,s ->
let day = mkNP d in
{name = day ;
point = SyntaxEst.mkAdv (casePrep adessive) day ;
habitual = ParadigmsEst.mkAdv s
} ;
mkDayPaev : Str -> {name : NP ; point : Adv ; habitual : Adv} = \s ->
mkDay (mkPN (mkN (s + "päev") (s + "päeva"))) (s + "päeviti") ;
mkPlace : N -> Bool -> {name : CN ; at : Prep ; to : Prep; from : Prep ; isPl : Bool} = \p,e -> {
name = mkCN p ;
at = casePrep (if_then_else Case e adessive inessive) ; -- True: external
to = casePrep (if_then_else Case e allative illative) ;
from = casePrep (if_then_else Case e ablative elative) ;
isPl = False
} ;
ssa = False ;
lla = True ;
-- Ger-grammar uses this xOf (mis on nimi minu naise)
-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
-- (mis on minu naise nimi)
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (E.GenNP b) a c) p ;
nameOf : NPPerson -> NP = \p -> (xOf sing L.name_N p).name ;
oper
-- do you have a table for five persons
haveForPerson : NP -> CN -> Card -> Cl = \p,a,n ->
mkCl p have_V2
---- (mkNP (E.PartCN a) ---- partitive works in questions )
(mkNP (mkNP a_Det a)
(SyntaxEst.mkAdv for_Prep (mkNP n L.person_N))) ;
---- (SyntaxEst.mkAdv for_Prep (mkNP (mkDet n)))) ; -- 60s faster compile 25/10/2010
open_Adv = ParadigmsEst.mkAdv "avatud" ;
closed_Adv = ParadigmsEst.mkAdv "suletud" ;
-- Fin: casePrep adessive
-- Est: casePrep comitative
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxEst.mkAdv (casePrep comitative) (mkNP n)
} ;
mkSuperl : A -> Det = \a -> mkDet the_Quant (mkOrd a) ;
far_IAdv = E.IAdvAdv L.far_Adv ;
--------------------------------------------------
-- New 30/11/2011 AR
--------------------------------------------------
lin
Thai = mkNat ("tai") "tailane" (mkPN "Tai") ;
Baht = mkCN (mkN "baht") ;
Rice = mkCN (mkN "riis") ;
Pork = mkCN (mkN "siga") ;
Beef = mkCN (mkN "veis") ;
Egg = mkCN L.egg_N ;
Noodles = mkCN (mkN "nuudel") ;
Shrimps = mkCN (mkN "krevet") ;
Chili = mkCN (mkN "tšilli") ;
Garlic = mkCN (mkN "küüs" (mkN "lauk")) ;
Durian = mkCN (mkN "duurian") ;
Mango = mkCN (mkN "mango") ;
Pineapple = mkCN (mkN "ananass") ;
Coke = mkCN (mkN "coca-cola") ;
IceCream = mkCN (mkN "jäätis") ;
Salad = mkCN (mkN "salat") ;
OrangeJuice = mkCN (mkN "apelsiini" (mkN "mahl")) ;
Lemonade = mkCN (mkN "limonaad") ;
Beach = mkPlace (mkN "supel" (mkN "rand")) ssa ;
ItsRaining = mkCl (mkVP L.rain_V0) ;
ItsCold = mkCl (mkVP L.cold_A) ;
ItsWarm = mkCl (mkVP L.warm_A) ;
ItsWindy = mkCl (mkNP the_Det L.wind_N) (mkVP (mkV "puhuma")) ;
SunShine = mkCl (mkNP the_Det L.sun_N) (mkVP (mkV "paistma")) ;
Smoke = mkVP (mkV "suitsetama") ;
ADoctor = mkProfession (mkN "arst") ;
AProfessor = mkProfession (mkN "professor") ;
ALawyer = mkProfession (mkN "jurist") ;
AEngineer = mkProfession (mkN "insener") ;
ATeacher = mkProfession (mkN "õpetaja") ;
ACook = mkProfession (mkN "kokk") ;
AStudent = mkProfession (mkN "õpilane") ;
ABusinessman = mkProfession (mkN "äri" L.man_N) ;
oper
mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;
}

View File

@@ -0,0 +1,334 @@
-- (c) 2010 Aarne Ranta under LGPL
--# -coding=latin1
concrete WordsFin of Words = SentencesFin **
open
SyntaxFin, ParadigmsFin, (L = LexiconFin),
Prelude, (E = ExtraFin) in {
flags optimize = noexpand ;
lin
-- kinds
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "juusto") ;
Chicken = mkCN (mkN "kana") ;
Coffee = mkCN (mkN "kahvi") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "liha") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "tee") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- qualities
Bad = L.bad_A ;
Boring = mkA "tylsä" ;
Cheap = mkA "halpa" ;
Cold = L.cold_A ;
Delicious = mkA "herkullinen" ;
Expensive = mkA "kallis" ;
Fresh = mkA "tuore" ;
Good = L.good_A ;
Suspect = mkA "epäilyttävä" ;
Warm = L.warm_A ;
-- places
Restaurant = mkPlace (mkN "ravintola") ssa ;
Bank = mkPlace (mkN "pankki") ssa ;
PostOffice = mkPlace (mkN "posti") ssa ;
Bar = mkPlace (mkN "baari") ssa ;
Toilet = mkPlace (mkN "vessa") ssa ;
Museum = mkPlace (mkN "museo") ssa ;
Airport = mkPlace (mkN "lento" (mkN "kenttä")) lla ;
Station = mkPlace (mkN "asema") lla ;
Hospital = mkPlace (mkN "sairaala") ssa ;
Church = mkPlace (mkN "kirkko") ssa ;
Cinema = mkPlace (mkN "elokuva" (mkN "teatteri")) ssa ;
Theatre = mkPlace (mkN "teatteri") ssa ;
Shop = mkPlace (mkN "kauppa") ssa ;
Park = mkPlace (mkN "puisto") ssa ;
Hotel = mkPlace (mkN "hotelli") ssa ;
University = mkPlace (mkN "yliopisto") lla ;
School = mkPlace (mkN "koulu") lla ;
CitRestaurant cit = {
name = mkCN cit (mkN "ravintola") ; isExternal = False ; isPl = False
} ;
Parking = mkPlace (mkN "pysäköinti" (mkN "alue")) lla ;
Supermarket = mkPlace (mkN "supermarket") ssa ;
Pharmacy = mkPlace (mkN "apteekki") ssa ;
Center = mkPlace (mkN "keskusta") ssa ;
Cafeteria = mkPlace (mkN "kahvila") ssa ;
Disco = mkPlace (mkN "disko") ssa ;
Pub = mkPlace (mkN "pub") ssa ;
AmusementPark = mkPlace (mkN "huvi" (mkN "puisto")) ssa ;
Zoo = mkPlace (mkN "eläin" (mkN "tarha")) ssa ;
-- currencies
DanishCrown = mkCN (mkN "Tanskan kruunu") | mkCN (mkN "kruunu") ;
Dollar = mkCN (mkN "dollari") ;
Euro = mkCN (mkN "euro") ;
Lei = mkCN (mkN "lei") ;
Leva = mkCN (mkN "leva") ;
NorwegianCrown = mkCN (mkN "Norjan kruunu") | mkCN (mkN "kruunu") ;
Pound = mkCN (mkN "punta") ;
Rouble = mkCN (mkN "rupla") ;
SwedishCrown = mkCN (mkN "Ruotsin kruunu") | mkCN (mkN "kruunu") ;
Zloty = mkCN (mkN "zloty" "zlotyja") ;
-- nationalities
Belgian = mkA "belgialainen" ;
Belgium = {np = mkNP (mkPN "Belgia") ; isExternal = False} ;
Bulgarian = mkNat (mkPN "bulgaria") (mkPN "Bulgaria") (mkA "bulgarialainen") ;
Catalan = mkNat (mkPN "katalaani") (mkPN "Katalonia") (mkA "katalonialainen") ;
Danish = mkNat (mkPN "tanska") (mkPN "Tanska") (mkA "tanskalainen") ;
Dutch = mkNat (mkPN "hollanti") (mkPN "Hollanti") (mkA "hollantilainen") ;
English = mkNat (mkPN "englanti") (mkPN "Englanti") (mkA "englantilainen") ;
Finnish =
mkNat (mkPN (mkN "suomi" "suomia")) (mkPN (mkN "Suomi" "Suomia"))
(mkA "suomalainen") ;
Flemish = mkNP (mkPN "flaami") ;
French = mkNat (mkPN "ranska") (mkPN "Ranska") (mkA "ranskalainen") ;
German = mkNat (mkPN "saksa") (mkPN "Saksa") (mkA "saksalainen") ;
Italian = mkNat (mkPN "italia") (mkPN "Italia") (mkA "italialainen") ;
Norwegian = mkNat (mkPN "norja") (mkPN "Norja") (mkA "norjalainen") ;
Polish = mkNat (mkPN "puola") (mkPN "Puola") (mkA "puolalainen") ;
Romanian = mkNat (mkPN "romania") (mkPN "Romania") (mkA "romanialainen") ;
Russian = mkNatExternal (mkPN "venäjä") (mkPN "Venäjä") (mkA "venäläinen") ;
Spanish = mkNat (mkPN "espanja") (mkPN "Espanja") (mkA "espanjalainen") ;
Swedish = mkNat (mkPN "ruotsi") (mkPN "Ruotsi") (mkA "ruotsalainen") ;
---- it would be nice to have a capitalization Predef function
-- means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN "bussi") ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "lautta") ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN "metro") ;
Taxi = mkTransport (mkN "taksi") ;
Train = mkTransport L.train_N ;
Tram = mkTransport (mkN "raitiovaunu") ;
ByFoot = ParadigmsFin.mkAdv "jalkaisin" ;
-- actions
AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
AHasName p name = mkCl (nameOf p) name ;
AHasRoom p = haveForPerson p.name (mkCN (mkN "huone")) ;
AHasTable p = haveForPerson p.name (mkCN (mkN "pöytä")) ;
AHungry p = E.AdvExistNP (SyntaxFin.mkAdv on_Prep p.name) (mkNP (mkN "nälkä")) ;
AIll p = mkCl p.name (mkA "sairas") ;
AKnow p = mkCl p.name (mkV "tietää") ;
ALike p item = mkCl p.name L.like_V2 item ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "asua")) (SyntaxFin.mkAdv (casePrep (if_then_else Case co.isExternal adessive inessive)) co.np)) ;
ALove p q = mkCl p.name (mkV2 (mkV "rakastaa") partitive) q.name ;
AMarried p = mkCl p.name (ParadigmsFin.mkAdv "naimisissa") ;
AReady p = mkCl p.name (ParadigmsFin.mkA "valmis") ;
AScared p = mkCl p.name (caseV partitive (mkV "pelottaa")) ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "puhua") partitive) lang ;
AThirsty p = E.AdvExistNP (SyntaxFin.mkAdv on_Prep p.name) (mkNP (mkN "jano")) ;
ATired p = mkCl p.name (caseV partitive (mkV "väsyttää")) ;
AUnderstand p = mkCl p.name (mkV "ymmärtää") ;
AWant p obj = mkCl p.name (mkV2 "haluta") obj ;
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))) ;
QWhatAge p = mkQS (mkQCl (E.ICompAP (mkAP L.old_A)) p.name) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "maksaa"))) ;
ItCost item price = mkCl item (mkV2 (mkV "maksaa")) price ;
PropOpen p = mkCl p.name open_Adv ;
PropClosed p = mkCl p.name closed_Adv ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("nähdään"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("nähdään"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("nähdään")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "vaimo") ;
Husband = xOf sing L.man_N ;
Son = xOf sing L.boy_N ;
Daughter = xOf sing (mkN "tytär") ;
Children = xOf plur L.child_N ;
-- week days
Monday = let d = "maanantai" in mkDay (mkPN d) (d + "sin") ;
Tuesday = let d = "tiistai" in mkDay (mkPN d) (d + "sin") ;
Wednesday = let d = "keskiviikko" in mkDay (mkPN d) (d + "isin") ;
Thursday = let d = "torstai" in mkDay (mkPN d) (d + "sin") ;
Friday = let d = "perjantai" in mkDay (mkPN d) (d + "sin") ;
Saturday = let d = "lauantai" in mkDay (mkPN d) (d + "sin") ;
Sunday = let d = "sunnuntai" in mkDay (mkPN d) (d + "sin") ;
Tomorrow = ParadigmsFin.mkAdv "huomenna" ;
-- transports
HowFar place = mkQS (mkQCl far_IAdv place.name) ;
HowFarFrom x y =
mkQS (mkQCl far_IAdv (mkCl y.name x.from)) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkCl y.name
(mkVP (mkVP x.from) t))) ;
HowFarBy place t =
mkQS (mkQCl far_IAdv (mkCl place.name t)) ;
-- mkQS (mkQCl (mkIAdv far_IAdv t) y.name) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkVP (mkVP (mkVP (mkV "päästä")) place.to) trans.by))) ;
-- pääseekö keskustaan bussilla
-- mkQS (mkQCl (E.AdvPredNP place.to L.go_V (E.PartCN (trans.name)))) ;
-- meneekö keskustaan bussia
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl (mkA (mkN "läheinen") "lähempi" "lähin") ;
TheCheapest = mkSuperl (mkA (mkN "halpa") "halvempi" "halvin") ;
TheMostExpensive = mkSuperl (mkA (mkN "kallis") "kalliimpi" "kallein") ;
TheMostPopular = mkSuperl (mkA "suosittu") ;
TheWorst = mkSuperl (mkA "huono") ;
SuperlPlace sup p = placeNP sup p ;
oper
mkNat : PN -> PN -> A ->
{lang : NP ; prop : A ; country : {np : NP ; isExternal : Bool}} = \nat,co,pro ->
{lang = mkNP nat ;
prop = pro ;
country = {np = mkNP co ; isExternal = False}
} ;
mkNatExternal : PN -> PN -> A ->
{lang : NP ; prop : A ; country : {np : NP ; isExternal : Bool}} = \nat,co,pro ->
{lang = mkNP nat ;
prop = pro ;
country = {np = mkNP co ; isExternal = True}
} ;
---- using overloaded paradigms slows down compilation dramatically
mkDay : PN -> Str -> {name : NP ; point : Adv ; habitual : Adv} = \d,s ->
let day = mkNP d in
{name = day ;
point = SyntaxFin.mkAdv (casePrep essive) day ;
habitual = ParadigmsFin.mkAdv s
} ;
mkPlace : N -> Bool -> {name : CN ; isExternal : Bool ; isPl : Bool} = \p,e -> {
name = mkCN p ;
isExternal = e ;
isPl = False
} ;
ssa = False ;
lla = True ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (E.GenNP b) a c) p ;
nameOf : NPPerson -> NP = \p -> (xOf sing L.name_N p).name ;
oper
-- do you have a table for five persons
haveForPerson : NP -> CN -> Card -> Cl = \p,a,n ->
mkCl p have_V2
---- (mkNP (E.PartCN a) ---- partitive works in questions )
(mkNP (mkNP a_Det a)
(SyntaxFin.mkAdv for_Prep (mkNP n (mkN "henki" "henkiä")))) ;
---- (SyntaxFin.mkAdv for_Prep (mkNP (mkDet n)))) ; -- 60s faster compile 25/10/2010
open_Adv = ParadigmsFin.mkAdv "avoinna" ;
closed_Adv = ParadigmsFin.mkAdv "kiinni" ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxFin.mkAdv (casePrep adessive) (mkNP n)
} ;
mkSuperl : A -> Det = \a -> SyntaxFin.mkDet the_Quant (mkOrd a) ;
far_IAdv = E.IAdvAdv L.far_Adv ;
--------------------------------------------------
-- New 30/11/2011 AR
--------------------------------------------------
lin
Thai = mkNat (mkPN "thai") (mkPN "Thaimaa") (mkA "thaimaalainen") ;
Baht = mkCN (mkN "baht" "bahteja") ;
Rice = mkCN (mkN "riisi") ;
Pork = mkCN (mkN "sika") ;
Beef = mkCN (mkN "nauta") ;
Egg = mkCN L.egg_N ;
Noodles = mkCN (mkN "nuudeli" "nuudeleita") ;
Shrimps = mkCN (mkN "katka" (mkN "rapu")) ;
Chili = mkCN (mkN "chili") ;
Garlic = mkCN (mkN "valko" (mkN "sipuli")) ;
Durian = mkCN (mkN "durian" "durianeja") ;
Mango = mkCN (mkN "mango" "mangoja") ;
Pineapple = mkCN (mkN "ananas" "ananaksia") ;
Coke = mkCN (mkN "coca-cola") ;
IceCream = mkCN (mkN "jäätelö" "jäätelöitä") ;
Salad = mkCN (mkN "salaatti") ;
OrangeJuice = mkCN (mkN "appelsiini" (mkN "mehu")) ;
Lemonade = mkCN (mkN "limsa") ;
Beach = mkPlace (mkN "uima" (mkN "ranta")) lla ;
ItsRaining = mkCl (mkVP L.rain_V0) ;
ItsCold = mkCl (mkVP L.cold_A) ;
ItsWarm = mkCl (mkVP L.warm_A) ;
ItsWindy = mkCl (mkVP (mkV "tuulla")) ;
SunShine = mkCl (mkNP the_Det L.sun_N) (mkVP (mkV "paistaa")) ;
Smoke = mkVP (mkV "tupakoida") ;
ADoctor = mkProfession (mkN "lääkäri" "lääkäreitä") ;
AProfessor = mkProfession (mkN "professori" "professoreita") ;
ALawyer = mkProfession (mkN "laki" L.man_N) ;
AEngineer = mkProfession (mkN "insinööri" "insinöörejä") ;
ATeacher = mkProfession (mkN "opettaja" "opettajia") ;
ACook = mkProfession (mkN "kokki") ;
AStudent = mkProfession (mkN "opiskelija" "opiskelijoita") ;
ABusinessman = mkProfession (mkN "liike" L.man_N) ;
oper
mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;
}

View File

@@ -0,0 +1,276 @@
-- (c) 2009 Ramona Enache and Aarne Ranta under LGPL
concrete WordsFre of Words = SentencesFre ** open
SyntaxFre,
IrregFre,
(E = ExtraFre),
(L = LexiconFre),
ParadigmsFre,
(M = MorphoFre),
(P = ParadigmsFre),
Prelude in {
lin
-- kinds
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "fromage" masculine) ;
Chicken = mkCN (mkN "poulet") ;
Coffee = mkCN (mkN "café") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "viande") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza" feminine) ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "thé") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = L.bad_A ;
Boring = mkA "ennuyeux" ;
Cheap = let bm = "bon marché" in mkA bm bm bm bm ;
Cold = L.cold_A ;
Delicious = mkA "délicieux" ;
Expensive = mkA "cher" ;
Fresh = mkA "frais" "fraîche" "frais" "fraîchement" ;
Good = L.good_A ;
Suspect = mkA "suspect" ;
Warm = L.warm_A ;
-- places
Airport = mkPlace (mkN "aéroport") dative ;
AmusementPark = mkPlace (compN (mkN "parc") ["d'attractions"]) dative ;
Bank = mkPlace (mkN "banque") dative ;
Bar = mkPlace (mkN "bar") dative ;
Cafeteria = mkPlace (mkN "cafétéria") dative ;
Center = mkPlace (mkN "centre" "centres" ParadigmsFre.masculine) dative ;
Church = mkPlace (mkN "église") dative ;
Cinema = mkPlace (mkN "cinéma" masculine) dative ;
Disco = mkPlace (mkN "discothèque" feminine) dative ;
Hospital = mkPlace (mkN "hôpital") dative ;
Hotel = mkPlace (mkN "hôtel") dative ;
Museum = mkPlace (mkN "musée" masculine) dative ;
Park = mkPlace (mkN "parc") dative ;
Parking = mkPlace (mkN "parking" masculine) dative ;
Pharmacy = mkPlace (mkN "pharmacie" feminine) dative ;
PostOffice = mkPlace (mkN "poste" feminine) dative ;
Pub = mkPlace (mkN "pub" masculine) dative ;
Restaurant = mkPlace (mkN "restaurant") dative ;
School = mkPlace (mkN "école") dative ;
Shop = mkPlace (mkN "magasin") dative ;
Station = mkPlace (mkN "gare") dative ;
Supermarket = mkPlace (mkN "supermarché" masculine) dative ;
Theatre = mkPlace (mkN "théâtre" masculine) dative ;
Toilet = mkCNPlacePl (mkCN (mkN "toilette")) dative dative;
University = mkPlace (mkN "université" feminine) dative ;
Zoo = mkPlace (mkN "zoo" masculine) dative ;
CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurant")) dative to_Prep ;
-- currencies
DanishCrown = mkCN (mkA "danois") (mkN "couronne") | mkCN (mkN "couronne") ;
Dollar = mkCN (mkN "dollar") ;
Euro = mkCN (mkN "euro") ;
Lei = mkCN (mkN "leu" "lei" masculine) ;
Leva = mkCN (mkN "lev" "leva" masculine);
NorwegianCrown = mkCN (mkA "norvégien") (mkN "couronne") | mkCN (mkN "couronne") ;
Pound = mkCN (compN (mkN "livre") ["sterling"]);
Rouble = mkCN (mkN "rouble" "rouble" masculine) ;
SwedishCrown = mkCN (mkA "suédois") (mkN "couronne") | mkCN (mkN "couronne") ;
Zloty = mkCN (mkN "zloty" "zlotych" masculine) ;
-- nationalities
Belgian = mkA "belge" ;
Belgium = mkNP (mkPN "Belgique") ;
Bulgarian = mkNat "bulgare" "Bulgarie" ;
Catalan = mkNat "catalan" "Catalogne" ;
Danish = mkNat "danois" "Danemark" ;
Dutch = mkNat "hollandais" "Holland" ;
English = mkNat "anglais" "Angleterre" ;
Finnish = mkNat "finlandais" "Finlande" ;
Flemish = mkNP (mkPN "flamand") ;
French = mkNat "français" "France" ;
German = mkNat "allemand" "Allemagne" ;
Italian = mkNat "italien" "Italie" ;
Norwegian = mkNat "norvégien" "Norvège" ;
Polish = mkNat "polonais" "Pologne" ;
Romanian = mkNat "roumain" "Roumanie" ;
Russian = mkNat "russe" "Russie" ;
Spanish = mkNat "espagnol" "Espagne" ;
Swedish = mkNat "suédois" "Suède" ;
-- means of transportation
Bike = mkTransport en_Prep L.bike_N ;
Bus = mkTransport par_Prep (mkN "bus") ;
Car = mkTransport en_Prep L.car_N ;
Ferry = mkTransport en_Prep (mkN "ferry") ;
Plane = mkTransport par_Prep L.airplane_N ;
Subway = mkTransport par_Prep (mkN "métro") ;
Taxi = mkTransport en_Prep (mkN "taxi") ;
Train = mkTransport par_Prep (mkN "train") ;
Tram = mkTransport par_Prep (mkN "tram") ;
ByFoot = P.mkAdv "à pied" ;
-- actions
AHasAge p num = mkCl p.name have_V2 (mkNP num 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 "chambre"))
(SyntaxFre.mkAdv for_Prep (mkNP num (mkN "personne")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "table"))
(SyntaxFre.mkAdv for_Prep (mkNP num (mkN "personne")))) ;
AMarried p = mkCl p.name (mkA "marié") ;
AWant p obj = mkCl p.name vouloir_V2 obj ;
ALike p item = mkCl item plaire_V2 p.name ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "parler")) lang ;
ALove p q = mkCl p.name (mkV2 (mkV "aimer")) q.name ;
AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "faim" feminine))) ;
AReady p = mkCl p.name (mkA "prêt") ;
AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "soif" feminine))) ;
ATired p = mkCl p.name (mkA "fatigué") ;
AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "peur" feminine))) ;
AIll p = mkCl p.name (mkA "malade") ;
AUnderstand p = mkCl p.name (mkV IrregFre.comprendre_V2) ;
AKnow p = mkCl p.name (mkV IrregFre.savoir_V2) ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
AHasName p name = mkCl p.name (mkV2 (reflV (mkV "appeler"))) name ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "habiter")) (SyntaxFre.mkAdv (mkPrep "en") co)) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "appeler")))) ;
QWhatAge p = mkQS (mkQCl (mkIP whichSg_IDet (mkN "âge" masculine)) p.name have_V2) ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "coûter"))) ;
ItCost item price = mkCl item (mkV2 (mkV "coûter")) price ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouPlace d = mkText (lin Text (ss ("on se voit"))) (mkPhrase (mkUtt d.at)) ;
PSeeYouDate d = mkText (lin Text (ss ("on se voit"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("on se voit")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "the wife of my son", as defined by $xOf$
-- below. Languages with productive genitives can use an equivalent of
-- "my son's wife" for non-pronouns, as e.g. in English.
Wife = xOf sing (mkN "femme") ;
Husband = xOf sing (mkN "mari") ;
Son = xOf sing (mkN "fils") ;
Daughter = xOf sing (mkN "fille") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "lundi" ;
Tuesday = mkDay "mardi" ;
Wednesday = mkDay "mercredi" ;
Thursday = mkDay "jeudi" ;
Friday = mkDay "vendredi" ;
Saturday = mkDay "samedi" ;
Sunday = mkDay "dimanche" ;
Tomorrow = ParadigmsFre.mkAdv "demain" ;
-- modifiers of places
TheBest = mkSuperl True L.good_A ;
TheClosest = mkSuperl True L.near_A ;
TheCheapest = mkSuperl False
(compADeg {s = \\_ => (M.mkAdj "bon marché" "bon marché" "bon marché" "bon marché").s ;
isPre = False ; copTyp = <> ; lock_A = <>}) ;
TheMostExpensive = mkSuperl True (mkA "cher") ;
TheMostPopular = mkSuperl True (mkA "populaire") ;
TheWorst = mkSuperl True L.bad_A ;
SuperlPlace sup kind =
let
det : Det = mkDet the_Art sup.s ;
name : NP = case sup.isPre of {
True => mkNP det kind.name ; -- le meilleur bar
False => mkNP the_Art (mkCN kind.name (mkNP det)) -- le bar le plus cher
}
in {
name = name ;
at = SyntaxFre.mkAdv kind.at name ;
to = SyntaxFre.mkAdv kind.to name
} ;
-- transports
HowFar place = mkQS (mkQCl what_distance_IAdv place.name) ;
HowFarFrom x y =
mkQS (mkQCl (E.CompIQuant which_IQuant)
(mkNP (mkNP distance_NP (SyntaxFre.mkAdv from_Prep x.name)) y.to)) ;
HowFarFromBy x y t =
mkQS (mkQCl (E.CompIQuant which_IQuant)
(mkNP (mkNP (mkNP distance_NP (SyntaxFre.mkAdv from_Prep x.name)) y.to) t)) ;
HowFarBy place t =
mkQS (mkQCl what_distance_IAdv (mkNP place.name t)) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
lin QS {s = \\_ => (E.EstcequeS (mkS (mkCl (mkCN trans.name (SyntaxFre.mkAdv for_Prep place.name))))).s} ;
-- mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
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 day (P.mkAdv d) (P.mkAdv ("le" ++ d)) ;
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i ->
mkCNPlace (mkCN p) i dative ;
open_A = P.mkA "ouvert" ;
closed_A = P.mkA "fermé" ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
mkTransport : Prep -> N -> {name : CN ; by : Adv} = \p,n -> {
name = mkCN n ;
by = E.PrepCN p n -- par train, en vélo
} ;
en_Prep = mkPrep "en" ;
par_Prep = mkPrep "par" ;
mkSuperl : Bool -> A -> {s : Ord ; isPre : Bool} = \b,a ->
{s = SyntaxFre.mkOrd a ; isPre = b} ;
what_distance_IAdv = ss "à quelle distance"**{lock_IAdv=<>};
distance_NP : NP = mkNP the_Det (mkN "distance" feminine) ;
}

View File

@@ -0,0 +1,262 @@
-- (c) 2009 Aarne Ranta under LGPL
--# -coding=latin1
concrete WordsGer of Words = SentencesGer **
open SyntaxGer, ParadigmsGer, IrregGer, (L = LexiconGer), ExtraGer, Prelude in {
lin
-- kinds of food
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "Käse" "Käse" "Käse" "Käse" "Käse" "Käse" masculine) ;
Chicken = mkCN (mkN "Huhn" "Huhn" "Huhn" "Huhn" "Hühner" "Hühner" neuter) ;
Coffee = mkCN (mkN "Kaffee" "Kaffee" "Kaffee" "Kaffee" "Kaffees" "Kaffee" masculine) ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "Fleisch" "Fleisch" "Fleisch" "Fleisch" "Fleisch" "Fleisch" neuter) ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "Pizza" "Pizzen" feminine) ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "Tee" "Tee" "Tee" "Tee" "Tees" "Tees" masculine) ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = L.bad_A ;
Cheap = mkA "billig" ;
Boring = mkA "langweilig" ;
Cold = L.cold_A ;
Delicious = mkA "lecker" ;
Expensive = mkA "teuer" ;
Fresh = mkA "frisch" ;
Good = L.good_A ;
Warm = L.warm_A ;
Suspect = mkA "verdächtig" ;
-- places
Airport = mkPlace (mkN "Flughafen" "Flughäfen" masculine) on_Prep zu_Prep ;
Church = mkPlace (mkN "Kirche") in_Prep inAcc_Prep ;
Hospital = mkPlace (mkN "Krankenhaus" "Krankenhäuser" neuter) in_Prep inAcc_Prep ;
Restaurant = mkPlace (mkN "Restaurant" "Restaurants" neuter) in_Prep inAcc_Prep ;
Station = mkPlace (mkN "Bahnhof" "Bahnhöfe" masculine) on_Prep zu_Prep ;
University = mkPlace (mkN "Universität" "Universitäten" feminine) in_Prep zu_Prep ;
AmusementPark = mkPlace (mkN "Vergnügungspark" "Vergnügungspark" "Vergnügungspark" "Vergnügungspark" "Vergnügungsparks" "Vergnügungsparks" masculine) in_Prep inAcc_Prep ;
Bank = mkPlace (mkN "Bank" "Bank" "Bank" "Bank" "Banken" "Banken" feminine) in_Prep zu_Prep ;
Bar = mkPlace (mkN "Bar" "Bar" "Bar" "Bar" "Bars" "Bars" feminine) in_Prep inAcc_Prep ;
Cafeteria = mkPlace (mkN "Cafeteria" "Cafeteria" "Cafeteria" "Cafeteria" "Cafeterien" "Cafeterien" feminine) in_Prep inAcc_Prep ;
Center = mkPlace (mkN "Zentrum" "Zentrum" "Zentrum" "Zentrum" "Zentren" "Zentren" neuter) in_Prep zu_Prep ;
Cinema = mkPlace (mkN "Kino" "Kino" "Kino" "Kino" "Kinos" "Kinos" neuter) in_Prep inAcc_Prep ;
Disco = mkPlace (mkN "Disco" "Disco" "Disco" "Disco" "Discos" "Discos" feminine) in_Prep inAcc_Prep ;
Hotel = mkPlace (mkN "Hotel" "Hotel" "Hotel" "Hotel" "Hotels" "Hotels" neuter) in_Prep inAcc_Prep ;
Museum = mkPlace (mkN "Museum" "Museum" "Museum" "Museum" "Museen" "Museen" neuter) in_Prep inAcc_Prep ;
Park = mkPlace (mkN "Park" "Park" "Park" "Park" "Parks" "Parks" masculine) in_Prep inAcc_Prep ;
Parking = mkPlace (mkN "Parkplatz" "Parkplatz" "Parkplatz" "Parkplatz" "Parkplatzen" "Parkplatzen" masculine) on_Prep zu_Prep ;
Pharmacy = mkPlace (mkN "Apotheke" "Apotheke" "Apotheke" "Apotheke" "Apotheken" "Apotheken" feminine) in_Prep zu_Prep ;
PostOffice = mkPlace (mkN "Post" "Post" "Post" "Post" "Posten" "Posten" feminine) in_Prep inAcc_Prep ;
Pub = mkPlace (mkN "Kneipe" "Kneipe" "Kneipe" "Kneipe" "Kneipen" "Kneipen" feminine) in_Prep inAcc_Prep;
School = mkPlace (mkN "Schule" "Schule" "Schule" "Schule" "Schulen" "Schule" feminine) in_Prep inAcc_Prep ;
Shop = mkPlace (mkN "Geschäft" "Geschäft" "Geschäft" "Geschäft" "Geschäfte" "Geschäfte" neuter) in_Prep inAcc_Prep ;
Supermarket = mkPlace (mkN "Supermarkt" "Supermarkt" "Supermarkt" "Supermarkt" "Supermärkten" "Supermärkte" masculine) in_Prep inAcc_Prep ;
Theatre = mkPlace (mkN "Theater" "Theater" "Theater" "Theaters" "Theatern" "Thaters" neuter) in_Prep inAcc_Prep ;
Toilet = mkPlace (mkN "Toilette" "Toilette" "Toilette" "Toilette" "Toiletten" "Toiletten" feminine) in_Prep (mkPrep "auf" accusative) ;
Zoo = mkPlace (mkN "Zoo" "Zoo" "Zoo" "Zoo" "Zoos" "Zoos" masculine) in_Prep inAcc_Prep ;
CitRestaurant cit = mkCNPlace (mkCN cit (mkN "Restaurant" "Restaurants" neuter)) in_Prep inAcc_Prep ;
-- currencies
DanishCrown = mkCN (mkA "Dänisch") (mkN "Krone" "Kronen" feminine) | mkCN (mkN "Krone" "Kronen" feminine) ;
Dollar = mkCN (mkN "Dollar" "Dollar" "Dollar" "Dollar" "Dollar" "Dollar" masculine) ;
Euro = mkCN (mkN "Euro" "Euro" "Euro" "Euro" "Euro" "Euro" neuter) ;
Lei = mkCN (mkN "Leu" "Leu" "Leu" "Leu" "Lei" "Lei" masculine) ;
SwedishCrown = mkCN (mkA "Schwedisch") (mkN "Krone" "Kronen" feminine) | mkCN (mkN "Krone" "Kronen" feminine) ;
Leva = mkCN (mkN "Lewa" "Lewa" "Lewa" "Lewa" "Lewa" "Lewa" feminine);
NorwegianCrown = mkCN (mkA "Norwegisch") (mkN "Krone" "Kronen" feminine) | mkCN (mkN "Krone" "Kronen" feminine) ;
Pound = mkCN (mkN "Pfund" "Pfund" "Pfund" "Pfund" "Pfund" "Pfund" neuter) ;
Rouble = mkCN (mkN "Rubel" "Rubel" "Rubel" "Rubel" "Rubels" "Rubels" masculine);
Zloty = mkCN (mkN "Zloty" "Zloty" "Zloty" "Zloty" "Zloty" "Zloty" masculine);
-- nationalities
Belgian = mkA "belgisch" ;
Belgium = mkNP (mkPN "Belgien") ;
Bulgarian = mkNat "Bulgarien" "Bulgarisch" "bulgarisch" ;
Catalan = mkNat "Katalonien" "Katalanisch" "katalanisch" ;
Danish = mkNat "Dänemark" "Dänisch" "dänisch" ;
Dutch = mkNat "den Niederlanden" "Niederländisch" "niederländisch" ;
English = mkNat "England" "Englisch" "englisch" ;
Finnish = mkNat "Finnland" "Finnisch" "finnisch" ;
Flemish = mkCN (mkN "Flämisch" "Flämisch" neuter) ;
French = mkNat "Frankreich" "Französisch" "französisch" ;
German = mkNat "Deutschland" "Deutsch" "deutsche" ;
Italian = mkNat "Italien" "Italienisch" "italienisch" ;
Norwegian = mkNat "Norwegen" "Norwegisch" "norwegisch" ;
Polish = mkNat "Polen" "Polnisch" "polnisch" ;
Romanian = mkNat "Rumänien" "Rumänisch" "rumänisch" ;
Russian = mkNat "Russland" "Russisch" "russisch" ;
Spanish = mkNat "Spanien" "Spanisch" "spanisch" ;
Swedish = mkNat "Schweden" "Schwedisch" "schwedisch" ;
-- actions
AHasAge p num = prop (mkCl p.name (mkNP num L.year_N)) ;
AHasName p name = prop (mkCl p.name (mkV2 heißen_V) name) ;
AHungry p = prop (mkCl p.name (mkA "hungrig")) ;
AHasChildren p num = prop (mkCl p.name have_V2 (mkNP num L.child_N)) ;
AHasRoom p num = prop (mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "Zimmer" "Zimmer" neuter))
(SyntaxGer.mkAdv for_Prep (mkNP num (mkN "Persone"))))) ;
AHasTable p num = prop (mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "Tisch"))
(SyntaxGer.mkAdv for_Prep (mkNP num (mkN "Persone"))))) ;
AIll p = prop (mkCl p.name (mkA "krank")) ;
AKnow p = prop (mkCl p.name wissen_V) ;
ALike p item = prop (mkCl p.name (mkV2 mögen_V) item) ;
ALive p co = prop (mkCl p.name (mkVP (mkVP (mkV "wohnen")) (SyntaxGer.mkAdv in_Prep co))) ;
ALove p q = prop (mkCl p.name (mkV2 (mkV "lieben")) q.name) ;
AMarried p = prop (mkCl p.name (mkA "verheiratet")) ;
AReady p = prop (mkCl p.name (mkA "bereit")) ;
AScared p = prop (mkCl p.name have_V2 (mkNP (mkN "Angst" "Angsten" feminine))) ;
ASpeak p lang = mkProp (mkCl p.name (mkV2 sprechen_V) (mkNP lang))
(mkS (mkCl p.name (mkV2 sprechen_V) (mkNP no_Quant lang))) ;
AThirsty p = prop (mkCl p.name (mkA "durstig")) ;
ATired p = prop (mkCl p.name (mkA "müde")) ;
AUnderstand p = prop (mkCl p.name (fixprefixV "ver" stehen_V)) ;
AWant p obj = prop (mkCl p.name want_VV (mkVP have_V2 obj)) ;
AWantGo p place = prop (mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to)) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name heißen_V)) ;
QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
PropOpen p = prop (mkCl p.name open_Adv) ;
PropClosed p = prop (mkCl p.name closed_Adv) ;
PropOpenDate p d = prop (mkCl p.name (mkVP (mkVP d) open_Adv)) ;
PropClosedDate p d = prop (mkCl p.name (mkVP (mkVP d) closed_Adv)) ;
PropOpenDay p d = prop (mkCl p.name (mkVP (mkVP d.habitual) open_Adv)) ;
PropClosedDay p d = prop (mkCl p.name (mkVP (mkVP d.habitual) closed_Adv)) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosten"))) ;
ItCost item price = prop (mkCl item (mkV2 (mkV "kosten")) price) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("wir sehen uns"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("wir sehen uns"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("wir sehen uns")))
(mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "Frau" "Frauen" feminine) ;
Husband = xOf sing L.man_N ;
Son = xOf sing (mkN "Sohn" "Söhne" masculine) ;
Daughter = xOf sing (mkN "Tochter" "Töchter" feminine) ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "Montag" ;
Tuesday = mkDay "Dienstag" ;
Wednesday = mkDay "Mittwoch" ;
Thursday = mkDay "Donnerstag" ;
Friday = mkDay "Freitag" ;
Saturday = mkDay "Samstag" ;
Sunday = mkDay "Sonntag" ;
Tomorrow = ParadigmsGer.mkAdv "morgen" ;
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA "billig") ;
TheMostExpensive = mkSuperl (mkA "teuer") ;
TheMostPopular = mkSuperl (mkA "beliebt") ;
TheWorst = mkSuperl (mkA "schlimm") ;
SuperlPlace sup p = placeNP sup p ;
-- means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN "Bus" "Bus" "Bus" "Bus" "Buss" "Buss" masculine) ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "Fähre" "Fähre" "Fähre" "Fähre" "Fähren" "Fähren" feminine) ;
Plane = mkTransport (mkN "Flugzeug" "Flugzeug" "Flugzeug" "Flugzeug" "Flugzeuge" "Flugzeuge" neuter) ;
Subway = mkTransport (mkN "U-Bahn" "U-Bahn" "U-Bahn" "U-Bahn" "U-Bahnen" "U-Bahnen" feminine) ;
Taxi = mkTransport (mkN "Taxi" "Taxi" "Taxi" "Taxi" "Taxis" "Taxis" neuter) ;
Train = mkTransport (mkN "Zug" "Zug" "Zug" "Zug" "Züge" "Züge" masculine) ;
Tram = mkTransport (mkN "Straßenbahn" "Straßenbahn" "Straßenbahn" "Straßenbahn" "Straßenbahnen" "Straßenbahnen" feminine) ;
ByFoot = ParadigmsGer.mkAdv "zu Fuß" ;
HowFar place = mkQS (mkQCl far_IAdv place.name) ;
HowFarFrom x y = mkQS (mkQCl far_IAdv (mkNP (mkNP y.name (SyntaxGer.mkAdv von_Prep x.name)) (ParadigmsGer.mkAdv "entfernt"))) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkCl (mkVP (SyntaxGer.mkAdv zu_Prep (mkNP (mkNP y.name (SyntaxGer.mkAdv von_Prep x.name)) t))))) ;
HowFarBy y t = mkQS (mkQCl far_IAdv (mkCl (mkVP (SyntaxGer.mkAdv zu_Prep (mkNP y.name t))))) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
oper
mkNat : Str -> Str -> Str -> {lang : CN ; prop : A ; country : NP} = \co, la, adj ->
{lang = mkCN (mkN la la neuter) ;
prop = mkA adj ; country = mkNP (mkPN co)} ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d masculine) in
{name = day ;
point = SyntaxGer.mkAdv (mkPrep "am" dative) day ; ---- am
habitual = ParadigmsGer.mkAdv (d + "s") ----
} ;
mkPlace : N -> Prep -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,at,to -> {
name = mkCN p ;
at = at ;
to = to ;
isPl = False
} ;
open_Adv = ParadigmsGer.mkAdv "geöffnet" ; ---- Adv to get right word order easily
closed_Adv = ParadigmsGer.mkAdv "geschlossen" ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
mkSuperl : A -> Det = \a -> SyntaxGer.mkDet the_Art (SyntaxGer.mkOrd a) ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxGer.mkAdv by8means_Prep (mkNP the_Det n)
} ;
far_IAdv = ss "wie weit" ** {lock_IAdv = <>} ;
}

View File

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

View File

@@ -0,0 +1,269 @@
-- (c) 2010 Aarne Ranta and Olga Caprotti under LGPL
--# -coding=latin1
concrete WordsIta of Words = SentencesIta ** open
SyntaxIta,
BeschIta,
(E = ExtraIta),
(L = LexiconIta),
(P = ParadigmsIta),
ParadigmsIta,
Prelude in {
lin
-- kinds
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "formaggio") ;
Chicken = mkCN (mkN "pollo") ;
Coffee = mkCN (mkN "caffè") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "carne" feminine) ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "tè") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = L.bad_A ;
Boring = mkA "noioso" ;
Cheap = mkA "conveniente";
Cold = L.cold_A ;
Delicious = mkA "delizioso" ;
Expensive = mkA "costoso" ;
Fresh = mkA "fresco" ;
Good = L.good_A ;
Warm = L.warm_A ;
Suspect = mkA "sospetto" ;
-- places
Airport = mkPlace (mkN "aeroporto") dative ;
AmusementPark = mkPlace (mkN "parco divertimenti") dative ;
Bank = mkPlace (mkN "banca") P.in_Prep ;
Bar = mkPlace (mkN "bar") dative ;
Cafeteria = mkPlace (mkN "mensa") P.in_Prep;
Center = mkPlace (mkN "centro") P.in_Prep;
Church = mkPlace (mkN "chiesa") P.in_Prep ;
Cinema = mkPlace (mkN "cinema" masculine) dative ;
Disco = mkPlace (mkN "discoteca") P.in_Prep;
Hospital = mkPlace (mkN "ospedale") P.in_Prep ;
Hotel = mkPlace (mkN "albergo") P.in_Prep ;
Museum = mkPlace (mkN "museo") dative ;
Park = mkPlace (mkN "parco") dative ;
Parking = mkPlace (mkN "parcheggio") dative ;
Pharmacy = mkPlace (mkN "farmacia") P.in_Prep ;
PostOffice = mkPlace (mkN "ufficio postale") dative ;
Pub = mkPlace (mkN "birreria") P.in_Prep ;
Restaurant = mkPlace (mkN "ristorante") dative ;
School = mkPlace (mkN "scuola") dative ;
Shop = mkPlace (mkN "negozio") P.in_Prep ;
Station = mkPlace (mkN "stazione" feminine) dative ;
Supermarket = mkPlace (mkN "supermercato") dative ;
Theatre = mkPlace (mkN "teatro") dative ;
Toilet = mkPlace (mkN "bagno") P.in_Prep ;
University = mkPlace (mkN "università") dative ;
Zoo = mkPlace (mkN "zoo") dative ;
CitRestaurant cit = mkCNPlace (mkCN cit (mkN "ristorante")) P.in_Prep dative ;
-- transports
HowFar place = mkQS (mkQCl how8much_IAdv (mkCl place.name (mkV "distare")));
-- -- how far is place from x
HowFarFrom x place = mkQS (mkQCl how8much_IAdv (mkCl place.name (mkVP (mkV2 (mkV "distare") from_Prep) x.name ))) ;
-- -- how far is place by t
HowFarBy place t = mkQS (mkQCl how8much_IAdv (mkCl place.name (mkVP (mkVP (mkV "distare")) t)) );
-- -- how far is place from x by t
HowFarFromBy x place t = mkQS (mkQCl how8much_IAdv (mkCl place.name (mkVP (mkVP (mkV2 (mkV "distare") from_Prep)x.name) t) ));
-- HowFarFromBy x y t = mkQS (mkQCl (mkIAdv (mkIAdv L.far_Adv (SyntaxIta.mkAdv from_Prep x.name)) t) y.name) ;
-- currencies
DanishCrown = mkCN (mkA "danese") (mkN "corona") | mkCN (mkN "corona") ;
Dollar = mkCN (mkN "dollar") ;
Euro = mkCN (mkN "Euro" "Euro" masculine) ;
Lei = mkCN (mkN "leu") ;
Leva = mkCN (mkN "lev" "lev" masculine) ;
NorwegianCrown = mkCN (mkA "norvegese") (mkN "corona") | mkCN (mkN "corona") ;
Pound = mkCN (mkN "sterlina") ;
Rouble = mkCN (mkN "rublo") ;
SwedishCrown = mkCN (mkA "svedese") (mkN "corona") | mkCN (mkN "corona") ;
Zloty = mkCN (mkN "zloty" "zlotych" masculine) ;
-- nationalities
Belgian = mkA "belga" ;
Belgium = mkNP (mkPN "Belgio") ;
Bulgarian = mkNat "bulgaro" "Bulgaria" ;
Catalan = mkNat "catalano" "Catalonia" ;
Danish = mkNat "danese" "Danimarca" ;
Dutch = mkNat "olandese" "Olanda" ;
English = mkNat "inglese" "Inghilterra" ;
Finnish = mkNat "finlandese" "Finlandia" ;
Flemish = mkNP (mkPN "fiammingo") ;
French = mkNat "francese" "Francia" ;
German = mkNat "tedesco" "Germania" ;
Italian = mkNat "italiano" "Italia" ;
Norwegian = mkNat "norvegese" "Norvegia" ;
Polish = mkNat "polacco" "Polonia" ;
Romanian = mkNat "rumeno" "Romania" ;
Russian = mkNat "russo" "Russia" ;
Spanish = mkNat "spagnolo" "Spagna" ;
Swedish = mkNat "svedese" "Svezia" ;
-- means of transportation
Bike = mkTransport (mkN "bicicletta") ;
Bus = mkTransport (mkN "autobus" "autobus" masculine) ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "traghetto") ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN "metro" feminine) ;
Taxi = mkTransport (mkN "taxi" masculine) ;
Train = mkTransport (mkN "treno") ;
Tram = mkTransport (mkN "tram") ;
ByFoot = ParadigmsIta.mkAdv "a piedi" ;
-- actions
AHasAge p num = mkCl p.name have_V2 (mkNP num 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 "camera")) (SyntaxIta.mkAdv for_Prep (mkNP num (mkN "persona")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "tavolo")) (SyntaxIta.mkAdv for_Prep (mkNP num (mkN "persona")))) ;
AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ;
AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ;
AIll p = mkCl p.name (mkA "malato") ;
AKnow p = mkCl p.name (mkV (sapere_78 "sapere")) ;
ALike p item = mkCl item (mkV2 (mkV (piacere_64 "piacere")) dative) p.name ;
ALive p co =
mkCl p.name (mkVP (mkVP (mkV "abitare")) (SyntaxIta.mkAdv P.in_Prep co)) ;
ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ;
AMarried p = mkCl p.name (mkA "sposato") ;
AReady p = mkCl p.name (mkA "pronto") ;
AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ;
AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ;
ATired p = mkCl p.name (mkA "stanco") ;
AUnderstand p = mkCl p.name (mkV "capire") ;
AWant p obj = mkCl p.name (mkV2 (mkV (volere_96 "volere"))) obj ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "chiamare")))) ;
QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ;
ItCost item price = mkCl item (mkV2 (mkV "costare")) price ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("ci vediamo"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("ci vediamo"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("ci vediamo")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "the wife of my son", as defined by $xOf$
-- below. Languages with productive genitives can use an equivalent of
-- "my son's wife" for non-pronouns, as e.g. in English.
Wife = xOf sing (mkN "moglie" feminine) ;
Husband = xOf sing (mkN "marito" masculine) ;
Son = xOf sing (mkN "figlio" masculine) ;
Daughter = xOf sing (mkN "figlia" feminine) ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "lunedì" ;
Tuesday = mkDay "martedì" ;
Wednesday = mkDay "mercoledì" ;
Thursday = mkDay "giovedì" ;
Friday = mkDay "venerdì" ;
Saturday = mkDay "sabato" ;
Sunday = mkDay "domenica" ;
Tomorrow = P.mkAdv "domani" ;
lin
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name (SyntaxIta.mkAdv for_Prep place.name)))) ;
-- modifiers of places
TheBest = mkSuperl True L.good_A ;
TheClosest = mkSuperl False L.near_A ;
TheCheapest = mkSuperl False (mkA (mkA "economico") (mkA "meno caro")) ;
TheMostExpensive = mkSuperl False (mkA "costoso") ;
TheMostPopular = mkSuperl False (mkA "alla moda") ;
TheWorst = mkSuperl True L.bad_A ;
SuperlPlace sup kind =
let
det : Det = mkDet the_Art (mkOrd sup.s) ;
name : NP = case sup.isPre of {
True => mkNP det kind.name ; -- il migliore bar
False => mkNP the_Art (mkCN (mkAP (mkOrd sup.s)) kind.name) -- il bar più caro
}
in {
name = name ;
at = SyntaxIta.mkAdv kind.at name ;
to = SyntaxIta.mkAdv kind.to name
} ;
-- 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 day (P.mkAdv d) (P.mkAdv ("di" ++ d)) ; ---- ?
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i ->
mkCNPlace (mkCN p) i dative ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = E.PrepCN P.in_Prep n
} ;
mkSuperl : Bool -> A -> {s : A ; isPre : Bool} = \b,a ->
{s = a ; isPre = b} ;
open_A = mkA "aperto" ;
closed_A = mkA "chiuso" ;
}

View File

@@ -0,0 +1,385 @@
--2 Implementations of Words, with Jpnlish as example
concrete WordsJpn of Words = SentencesJpn **
open
SyntaxJpn,
ParadigmsJpn,
(L = LexiconJpn),
(P = ParadigmsJpn),
(R = ResJpn),
-- IrregJpn,
ExtraJpn,
Prelude in {
flags coding = utf8 ;
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 "チーズ" R.Inanim) ; -- "chiizu"
Chicken = mkCN (mkN "鶏" R.Inanim "切れ" False) ; -- "tori" "kire"
Coffee = mkCN (mkN "コーヒー" R.Inanim "杯" False) ; -- "koohi" "hai" (cups of)
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "肉" R.Inanim "切れ" False) ; -- "niku" "kire"
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "ピザ" R.Inanim "枚" False) ; -- "piza" "mai" (smth flat)
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "お茶" R.Inanim "杯" False) ; -- "ocha" "hai" (cups of)
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 "安い" ; -- "yasui"
Cold = L.cold_A ;
Delicious = mkA "美味しい" ; -- "oishii"
Expensive = mkA "高い" ; -- "takai"
Fresh = mkA "新鮮な" ; -- "shinsenna"
Good = L.good_A ;
Suspect = mkA "怪しい" ; -- "ayashii"
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 "空港" "で" ; -- "kuukou" "de"
AmusementPark = mkPlace "遊園地" "で" ; -- "yuuenchi" "de"
Bank = mkPlace "銀行" "で" ; -- "ginkou" "de"
Bar = mkPlace "バー" "で" ; -- "baa" "de"
Cafeteria = mkPlace "食堂" "で" ; -- "shokudou" "de"
Center = mkPlace "センター" "で" ; -- "sentaa" "de"
Cinema = mkPlace "映画館" "で" ; -- "eigakan" "de"
Church = mkPlace "教会" "で" ; -- "kyoukai" "de"
Disco = mkPlace "ディスコ" "で" ; -- "disuko" "de"
Hospital = mkPlace "病院" "で" ; -- "byouin" "de"
Hotel = mkPlace "ホテル" "で" ; -- "hoteru" "de"
Museum = mkPlace "博物館" "で" ; -- "hakubutsukan" "de"
Park = mkPlace "公園" "で" ; -- "kouen" "de"
Parking = mkPlace "駐車場" "で" ; -- "chuushajou" "de"
Pharmacy = mkPlace "薬局" "で" ; -- "kyoukai" "de"
PostOffice = mkPlace "郵便局" "で" ; -- "yuubinkyoku" "de"
Pub = mkPlace "パブ" "で" ; -- "pabu" "de"
Restaurant = mkPlace "レストラン" "で" ; -- "resutoran" "de"
School = mkPlace "学校" "で" ; -- "gakkou" "de"
Shop = mkPlace "商店" "で" ; -- "mise" "de"
Station = mkPlace "駅" "で" ; -- "eki" "de"
Supermarket = mkPlace "スーパー" "で" ; -- "suupaa" "de"
Theatre = mkPlace "劇場" "で" ; -- "gekijou" "de"
Toilet = mkPlace "お手洗い" "で" ; -- "otearai" "de"
University = mkPlace "大学" "で" ; -- "daigaku" "de"
Zoo = mkPlace "動物園" "で" ; -- "doubutsuen" "de"
CitRestaurant cit = mkCNPlace (mkCN cit.prop (mkN "レストラン")) in_Prep to_Prep ; -- "resutoran"
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
DanishCrown = mkCur "デンマーク・クローネ" | mkCur "クローナ" ; -- "denmaaku kuroune"
Dollar = mkCur "ドル" ; -- "doru"
Euro = mkCur "ユーロ" ; -- "yuuro"
Lei = mkCur "レウ" ; -- "reu"
Leva = mkCur "レフ" ; -- "refu"
NorwegianCrown = mkCur "ノルウェー・クローネ" | mkCur "クローナ" ; -- "noruwee kuroune"
Pound = mkCur "ポンド" ; -- "pondo"
Rouble = mkCur "ルーブル" ; -- "ruuburu"
Rupee = mkCur "ルピ" ; -- "rupii"
SwedishCrown = mkCur "スウェーデン・クローナ" | mkCur "クローナ" ; -- "Suu~eeden kurouna"
Zloty = mkCur "ズロティ" ; -- "zuroti"
Yuan = mkCur "元" ; -- "gen"
-- Nationalities
Belgian = {prop = mkA "ベルギー の" ; citizenship = mkNP (mkN "ベルギー 人")} ; -- "berugii no"
Belgium = mkNP (mkPN "ベルギー") ; -- "berugii"
Bulgarian = mkNat "ブルガリア" ; -- "burugaria"
Catalan = mkNat "カタロニア" ; -- "kataronia"
Chinese = mkNat"中国" ; -- "chuugoku"
Danish = mkNat "デンマーク" ; -- "denmaaku"
Dutch = mkNat "オランダ" ; -- "oranda"
English = mkNPNationality (mkNP (mkPN "英語")) (mkNP (mkPN "イギリス")) -- "eigo"
(mkA "イギリスの") (mkNP (mkPN "イギリス人")) ;
Finnish = mkNat "フィンランド" ; -- "finrando"
Flemish = mkNP (mkPN "フラマン 語") ; -- "furaman go"
French = mkNat "フランス" ; -- "furansu"
German = mkNat "ドイツ" ; -- "doitsu"
Hindi = mkNP (mkPN "ヒンディー語") ; -- "hindii"
India = mkNP (mkPN "インド") ; -- "indo"
Indian = {prop = mkA "インドの" ; citizenship = mkNP (mkN "インド人")} ; -- "indo no"
Italian = mkNat "イタリア" ; -- "itaria"
Norwegian = mkNat "ノルウェー" ; -- "noruwee"
Polish = mkNat "ポーランド" ; -- "porando"
Romanian = mkNat "ルーマニア" ; -- "ruumania"
Russian = mkNat "ロシア" ; -- "roshia"
Spanish = mkNat "スペイン" ; -- "supein"
Swedish = mkNat "スウェーデン" ; -- "suweeden"
-- Means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN "バス") ; -- "basu"
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "フェリー") ; -- "ferii"
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN "地下鉄") ; -- "chikatetsu"
Taxi = mkTransport (mkN "タクシー") ; -- "takushii"
Train = mkTransport (mkN "電車") ; -- "densha"
Tram = mkTransport (mkN "市電") ; -- "shiden"
ByFoot = P.mkAdv "徒歩で" ; -- "toho de"
-- Actions: the predication patterns are very often language-dependent.
AHasAge p num = mkCl p.name (mkNP num (mkNounWOCounter "歳")) ;
AHasChildren p num = mkCl p.name (mkV2 "いる" "が" R.Gr2) (mkNP num L.child_N) ;
AHasName p name = mkCl (nameOf p) name ;
AHasRoom p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "部屋")) (SyntaxJpn.mkAdv for_Prep (mkNP num (mkNounWOCounter "人")))) ; -- "heya"
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "テーブル")) (SyntaxJpn.mkAdv for_Prep (mkNP num (mkNounWOCounter "人")))) ;
AHungry p = mkCl p.name (P.mkV "お腹が空いている" R.Gr1) ; -- "onaka ga suite iru"
AIll p = mkCl p.name (mkA "病気の") ;
AKnow p = mkCl p.name mkKnow ;
ALike p item = mkCl p.name (mkA2 "好きな" "が") item ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "住んでいる" R.Gr2)) (SyntaxJpn.mkAdv in_Prep co)) ; -- "sundeiru"
ALove p q = mkCl p.name (mkV2 "愛している" "を" R.Gr2) q.name ; -- "aishiteiru"
AMarried p = mkCl p.name (mkA "結婚している" "既婚の") ; -- "kekkonshiteiru" "kikonno"
AReady p = mkCl p.name L.ready_A ;
AScared p = mkCl p.name (mkA "怖い") ;
ASpeak p lang = mkCl p.name L.speak_V2 lang ;
AThirsty p = mkCl p.name (mkA "喉が乾いている" "渇した") ;
-- "nodo ga kawaiteiru" "kasshita"
ATired p = mkCl p.name (mkA "疲れている" "疲れた") ;
-- "tsukareteiru" "tsukareta"
AUnderstand p = case p.name.meaning of {
R.SomeoneElse => mkCl p.name (v2toVP L.understand_V2) ;
R.Me => mkCl p.name (mkV "分かる" R.Gr1) -- "wakaru"
} ;
AWant p obj = case (p.name).meaning of {
R.Me => mkCl p.name (mkA2 "欲しい" "が") obj ;
R.SomeoneElse => mkCl p.name (mkA2 "欲しがっている" "欲しい" "が") obj
} ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl (mkIComp whatSg_IP) (nameOf p)) ;
QWhatAge p = mkQS (mkQCl howOld_IAdv (mkCl p.name R.mkCopula)) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "かかる"))) ;
ItCost item price = mkCl item (mkV2 "かかる" "" R.Gr1) price ;
PropOpen p = mkCl p.name mkOpen ;
PropClosed p = mkCl p.name mkClosed ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP mkOpen) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP mkClosed) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP mkOpen) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP mkClosed) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (mkPhrase (mkUtt d)) (lin Text (ss ("会いましょう"))) ; -- "aimashou"
PSeeYouPlace p = mkText (mkPhrase (mkUtt p.at)) (lin Text (ss ("会いましょう"))) ; -- "aimashou"
PSeeYouPlaceDate p d =
mkText (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d)))
(lin Text (ss ("会いましょう"))) ; -- "aimashou"
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf (mkN "妻" "奥さん" R.Anim "人" False "妻たち") ; -- "tsuma" "okusan"
Husband = xOf (mkN "夫" "ご主人" R.Anim "人" False "夫たち") ; -- "otto" "goshujin"
Son = xOf (mkN "息子" "息子さん" R.Anim "人" False "息子たち") ; -- "musuko"
Daughter = xOf (mkN "娘" "お嬢さん" R.Anim "人" False "娘たち") ; -- "musume" "ojousan"
Children = xOf L.child_N ;
-- week days
Monday = mkDay "月曜日" ; -- "getsuyoubi"
Tuesday = mkDay "火曜日" ; -- "kayoubi"
Wednesday = mkDay "水曜日" ; -- "suiyoubi"
Thursday = mkDay "木曜日" ; -- "mokuyoubi"
Friday = mkDay "金曜日" ; -- "kin'youbi"
Saturday = mkDay "土曜日" ; -- "doyoubi"
Sunday = mkDay "日曜日" ; -- "nichiyoubi"
Tomorrow = P.mkAdv "明日" ; -- "ashita"
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA "安い") ; -- "yasui"
TheMostExpensive = mkSuperl (mkA "高い") ; -- "takai"
TheMostPopular = mkSuperl (mkA "盛んな") ; -- "sakanna"
TheWorst = mkSuperl L.bad_A ;
SuperlPlace sup p = placeNP sup p ;
-- transports
HowFar place = mkQS (mkQCl howFar_IAdv (mkCl place.name (mkA "遠い"))) ;
HowFarFrom x y =
mkQS (mkQCl howFar_IAdv (mkCl (mkNP y.name (SyntaxJpn.mkAdv from_Prep x.name)) (mkA "遠い"))) ;
HowFarFromBy x y t =
mkQS (mkQCl howFar_IAdv (mkCl
(mkNP y.name (SyntaxJpn.mkAdv from_Prep (mkNP x.name t))) (mkA "遠い"))) ;
HowFarBy y t = mkQS (mkQCl howFar_IAdv (mkCl (mkNP y.name t) (mkA "遠い"))) ;
WhichTranspPlace trans place =
mkQS (mkQCl (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 -> NPNationality = \co ->
mkNPNationality (mkNP (mkPN (co + "語"))) (mkNP (mkPN co))
(mkA (co + "の")) (mkNP (mkPN (co + "人"))) ; ---- mkA ...
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day : NP = mkNP (mkPN d) in
mkNPDay day (SyntaxJpn.mkAdv in_Prep day)
(SyntaxJpn.mkAdv in_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
mkCompoundPlace : Str -> Str -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \comp, p, i ->
mkCNPlace (mkCN (P.mkN (comp + p))) (P.mkPrep i) to_Prep ;
mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i ->
mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
xOf : N -> NPPerson -> NPPerson = \f,p ->
{name = mkNP the_Det (mkCN f (SyntaxJpn.mkAdv possess_Prep p.name)) ;
isPron = False ; poss = the_Quant} ; ---- poss not used
mkOpen : A = mkA "開いている" "開いた" ; -- "aiteiru"
mkClosed : A = mkA "閉まっている" "閉まった" ; -- "shimatteiru"
nameOf : NPPerson -> NP = \p -> (xOf (mkN "名前") p).name ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxJpn.mkAdv by8means_Prep (mkNP n)
} ;
mkSuperl : A -> Det = \a -> SyntaxJpn.mkDet the_Art (SyntaxJpn.mkOrd a) ;
howFar_IAdv : IAdv = lin IAdv {s = \\st => "どのくらい" ; particle = "" ; wh8re = False} ;
howOld_IAdv : IAdv = lin IAdv {s = \\st => "何歳" ; particle = "" ; wh8re = False} ;
mkCur : Str -> Currency = \c -> lin Currency (lin CN {
s = \\n,st => c ;
anim = R.Inanim ;
counter = c ;
counterReplace = True ;
counterTsu, hasAttr = False ;
object, prepositive = \\st => ""
} ) ;
mkNounWOCounter : Str -> CN = \noun -> lin CN {
s = \\n,st => noun ;
anim = R.Inanim ;
counter = noun ;
counterReplace = True ;
counterTsu, hasAttr = False ;
object, prepositive = \\st => ""
} ;
mkKnow : V = lin V {
s = table {
R.Resp => table {
(R.TPres|R.TFut) => table {
R.Pos => "知っています" ;
R.Neg => "知りません"
} ;
R.TPast => table {
R.Pos => "知っていました" ;
R.Neg => "知りませんでした"
}
} ;
R.Plain => table {
(R.TPres|R.TFut) => table {
R.Pos => "知っている" ;
R.Neg => "知らない"
} ;
R.TPast => table {
R.Pos => "知っていた" ;
R.Neg => "知らなかった"
}
}
} ;
te = table {
R.Pos => "知って" ;
R.Neg => "知らないで"
} ;
a_stem = "知ら" ;
i_stem = "知り" ;
ba = table {
R.Pos => "知れば" ;
R.Neg => "知らなければ"
} ;
needSubject = True
} ;
--------------------------------------------------
-- New 30/11/2011 AR
--------------------------------------------------
lin
Thai = mkNat "タイ" ; -- "tai"
Baht = mkCur "バーツ" ; -- "baatsu"
Rice = mkCN (mkN "ご飯") ; -- "gohan"
Pork = mkCN (mkN "豚肉") ; -- "butaniku"
Beef = mkCN (mkN "牛肉") ; -- "gyuuniku"
Egg = mkCN L.egg_N ;
Noodles = mkCN (mkN "ヌードル") ; -- "nuudoru"
Shrimps = mkCN (mkN "海老") ; -- "ebi"
Chili = mkCN (mkN "チリ") ; -- "chiri"
Garlic = mkCN (mkN "大蒜") ; -- "ninniku"
Durian = mkCN (mkN "ドリアン") ; -- "dorian"
Mango = mkCN (mkN "マンゴ") ; -- "mango"
Pineapple = mkCN (mkN "パイナップル") ; -- "painappuru"
Coke = mkCN (mkN "コーク") ; -- "kooku"
IceCream = mkCN (mkN "アイスクリーム") ; -- "aisukuriimu"
Salad = mkCN (mkN "サラダ") ; -- "sarada"
OrangeJuice = mkCN (mkN "オレンジジュース") ; -- "orenjijuusu"
Lemonade = mkCN (mkN "レモネード") ; -- "remoneedo"
Beach = mkPlace "beach" "on" ;
ItsRaining = mkCl (mkVP R.mkRain) ;
ItsCold = mkCl (mkVP L.cold_A) ;
ItsWarm = mkCl (mkVP L.warm_A) ;
ItsWindy = mkCl (mkVP (P.mkA "風が強い")) ;
SunShine = mkCl (mkNP L.sun_N) (mkVP (mkV "輝いている" R.Gr2)) ;
-- "taiyou wa kagayaite iru"
Smoke = mkVP (P.mkV "煙草を吸う" R.Gr1) ; -- "tabako o suu"
ADoctor = mkProfession (mkN "医者") ; -- "isha"
AProfessor = mkProfession (mkN "教授") ; -- "kyouju"
ALawyer = mkProfession (mkN "弁護士") ; -- "bengoshi"
AEngineer = mkProfession (mkN "技術者") ; -- "gijutsusha"
ATeacher = mkProfession (mkN "先生") ; -- "sensei"
ACook = mkProfession (mkN "料理人") ; -- "ryourinin"
AStudent = mkProfession (mkN "学生") ; -- "gakusei"
ABusinessman = mkProfession (mkN "実業家") ; -- "jitsugyouka"
oper
mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;
}

View File

@@ -0,0 +1,319 @@
--# -path=.:present
concrete WordsLav of Words = SentencesLav **
open
SyntaxLav,
ParadigmsLav,
(P = ParadigmsLav),
(L = LexiconLav),
ExtraLav,
ResLav,
Prelude,
Predef
in {
flags
coding = utf8 ;
lin
-- Kinds
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN L.cheese_N ;
Chicken = mkCN (mkN "vista") ;
Coffee = mkCN (mkN "kafija") ;
Fish = mkCN L.fish_N ;
Meat = mkCN L.meat_N ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pica") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "tēja") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- Properties
Bad = L.bad_A ;
Boring = mkA "garlaicīgs" ;
Cheap = mkA "lēts" ;
Cold = L.cold_A ;
Delicious = mkA "garšīgs" ;
Expensive = mkA "dārgs" ;
Fresh = mkA "svaigs" ;
Good = L.good_A ;
Suspect = mkA "aizdomīgs" ;
Warm = L.warm_A ;
-- Places
Airport = mkPlace "lidosta" in_Prep ;
AmusementPark = mkPlace "atrakciju parks" in_Prep ;
Bank = mkPlace "banka" in_Prep ;
Bar = mkPlace "bārs" in_Prep ;
Cafeteria = mkPlace "kafejnīca" in_Prep ;
Center = mkPlace "centrs" in_Prep ;
Cinema = mkPlace "kino" in_Prep ;
Church = mkPlace "baznīca" in_Prep ;
Disco = mkPlace "diskotēka" in_Prep ;
Hospital = mkPlace "slimnīca" in_Prep ;
Hotel = mkPlace "viesnīca" in_Prep ;
Museum = mkPlace "muzejs" in_Prep ;
Park = mkPlace "parks" in_Prep ;
Parking = mkPlace "autostāvvieta" in_Prep ;
Pharmacy = mkPlace "aptieka" in_Prep ;
PostOffice = mkPlace "pasts" in_Prep ;
Pub = mkPlace "krogs" in_Prep ;
Restaurant = mkPlace "restorāns" in_Prep ;
School = mkPlace "skola" in_Prep ;
Shop = mkPlace "veikals" in_Prep ;
Station = mkPlace "stacija" in_Prep ;
Supermarket = mkPlace "lielveikals" in_Prep ;
Theatre = mkPlace "teātris" in_Prep ;
Toilet = mkPlace "tualete" in_Prep ;
University = mkPlace "universitāte" in_Prep ;
Zoo = mkPlace "zoodārzs" in_Prep ;
CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restorāns")) in_Prep to_Prep ;
-- Currencies
DanishCrown = mkCN (mkA "dāņu") (mkN "krona") | mkCN (mkN "krona") ;
Dollar = mkCN (mkN "dolārs") ;
Euro = mkCN (mkN "eiro") ;
Lei = mkCN (mkN "leja") ;
Leva = mkCN (mkN "leva") ;
NorwegianCrown = mkCN (mkA "norvēģu") (mkN "krona") | mkCN (mkN "krona") ;
Pound = mkCN (mkN "mārciņa") ;
Rouble = mkCN (mkN "rublis") ;
SwedishCrown = mkCN (mkA "zviedru") (mkN "krona") | mkCN (mkN "krona") ;
Zloty = mkCN (mkN "zlots") ;
-- Nationalities
Belgian = mkA "beļģu" ;
Belgium = mkNP (mkPN "Beļģija") ;
Bulgarian = mkNat (mkA "bulgāru") (P.mkAdv "bulgāriski") (mkPN "Bulgārija") ;
Catalan = mkNat (mkA "kataloniešu") (P.mkAdv "kataloniski") (mkPN "Katalonija") ;
Danish = mkNat (mkA "dāņu") (P.mkAdv "dāniski") (mkPN "Dānija") ;
Dutch = mkNat (mkA "holandiešu") (P.mkAdv "holandiski") (mkPN "Nīderlande") ;
English = mkNat (mkA "angļu") (P.mkAdv "angliski") (mkPN "Anglija") ;
Finnish = mkNat (mkA "somu") (P.mkAdv "somiski") (mkPN "Somija") ;
Flemish = mkLang (mkA "flāmu") (P.mkAdv "flāmiski") ;
French = mkNat (mkA "franču") (P.mkAdv "franciski") (mkPN "Francija") ;
German = mkNat (mkA "vācu") (P.mkAdv "vāciski") (mkPN "Vācija") ;
Italian = mkNat (mkA "itāļu") (P.mkAdv "itāliski") (mkPN "Itālija") ;
Norwegian = mkNat (mkA "norvēģu") (P.mkAdv "norvēģiski") (mkPN "Norvēģija") ;
Polish = mkNat (mkA "poļu") (P.mkAdv "poliski") (mkPN "Polija") ;
Romanian = mkNat (mkA "rumāņu") (P.mkAdv "rumāniski") (mkPN "Rumānija") ;
Russian = mkNat (mkA "krievu") (P.mkAdv "krieviski") (mkPN "Krievija") ;
Spanish = mkNat (mkA "spāņu") (P.mkAdv "spāniski") (mkPN "Spānija") ;
Swedish = mkNat (mkA "zviedru") (P.mkAdv "zviedriski") (mkPN "Zviedrija") ;
-- Means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN "autobuss") ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "prāmis") ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN "metro") ;
Taxi = mkTransport (mkN "taksometrs") ;
Train = mkTransport (mkN "vilciens") ;
Tram = mkTransport (mkN "tramvajs") ;
ByFoot = P.mkAdv "kājām" ;
-- Actions
AHasAge p num = mkCl p.name have_V2 (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
AHasRoom p num = mkCl p.name have_V3 (mkNP a_Det (mkN "istaba")) (mkNP num (mkN "persona")) ;
AHasTable p num = mkCl p.name have_V3 (mkNP a_Det (mkN "galdiņš")) (mkNP num (mkN "persona")) ;
AHasName p name =
mkCl p.name (mkV2 (mkV "saukt" "saucu" "saucu" Acc) nom_Prep) name |
mkCl (nameOf p) name ;
AHungry p = mkCl p.name (mkA (mkV "izsalkt" "izsalkstu" "izsalku") active_voice) ;
AIll p = mkCl p.name (mkA "slims") ;
AKnow p = mkCl p.name (mkV "zināt" third_conjugation) ;
ALike p item = mkCl p.name (mkV2 (mkV "garšot" second_conjugation Dat) nom_Prep) item ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "dzīvot" second_conjugation)) (SyntaxLav.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name L.love_V2 q.name ;
AMarried p = mkCl p.name (mkA (mkV "precēties" third_conjugation) active_voice) ;
AReady p = mkCl p.name (mkA "gatavs") ;
AScared p =
mkCl p.name (mkV "baidīties" third_conjugation) |
mkCl p.name (mkA (mkV "nobīties" "nobīstos" "nobijos") active_voice) ;
ASpeak p lang =
mkCl p.name (mkVP (mkVP (mkV "runāt" second_conjugation)) lang.modif) |
mkCl p.name (mkV2 (mkV "runāt" second_conjugation) loc_Prep) lang.lang ;
AThirsty p = mkCl p.name (mkA (mkV "izslāpt" "izslāpstu" "izslāpu") active_voice) ;
ATired p = mkCl p.name (mkA (mkV "nogurt" "nogurstu" "noguru") active_voice) ;
AUnderstand p = mkCl p.name (mkV "saprast" "saprotu" "sapratu") ;
AWant p obj = mkCl p.name (mkV2 (mkV "vēlēties" third_conjugation)) obj ;
-- TODO: IrregLav.doties_V
AWantGo p place = mkCl p.name (mkVV (mkV "vēlēties" third_conjugation)) (mkVP (mkVP (mkV "doties" "dodos" "devos")) place.to) ;
---- mkVV by AR 28/8/2012
-- Quick & dirty, or ok?
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (mkV2 (mkV "saukt" "saucu" "saucu" Acc) nom_Prep) (mkNP (mkN [])))) ;
-- Quick & dirty
-- TODO: how8much_IAdv >>> how8many_IDet (but the word order!) or how8many_IAdv
-- mkNP a_Quant pluralNum L.year_N >>> mkNP pluralNum L.year_N
-- Cannot use have_V2 because of a different valence
QWhatAge p = mkQS (mkQCl how8much_IAdv (mkCl p.name (mkV2 (mkV "būt" Dat) gen_Prep) (mkNP the_Quant pluralNum L.year_N))) ;
-- Quick & dirty
-- TODO: item is the subject >>> use NP -> V -> Cl (changing the default word order)
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl (mkVP (mkV2 (mkV "maksāt" second_conjugation) nom_Prep) item))) ;
ItCost item price = mkCl item (mkV2 (mkV "maksāt" second_conjugation) acc_Prep) price ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("tiksimies"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("tiksimies"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d = mkText (lin Text (ss ("tiksimies"))) (mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "sieva") ;
Husband = xOf sing (mkN "vīrs") ;
Son = xOf sing (mkN "dēls") ;
Daughter = xOf sing (mkN "meita") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "pirmdiena" ;
Tuesday = mkDay "otrdiena" ;
Wednesday = mkDay "trešdiena" ;
Thursday = mkDay "ceturtdiena" ;
Friday = mkDay "piektdiena" ;
Saturday = mkDay "sestdiena" ;
Sunday = mkDay "svētdiena" ;
Tomorrow = P.mkAdv "rīt" ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA "lēts") ;
TheMostExpensive = mkSuperl (mkA "dārgs") ;
TheMostPopular = mkSuperl (mkA "populārs") ;
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 (mkCl y.name (SyntaxLav.mkAdv from_Prep x.name))) ;
HowFarFromBy x y t = mkQS (mkQCl far_IAdv (mkCl y.name (SyntaxLav.mkAdv from_Prep (mkNP x.name t)))) ;
HowFarBy y t = mkQS (mkQCl far_IAdv (mkCl y.name t)) ;
WhichTranspPlace trans place = mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place = mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
oper
mkLang : A -> Adv -> NPLanguage = \la,mo -> {
lang = mkNP (mkCN la (mkN "valoda")) ;
modif = mo
} ;
mkNat : A -> Adv -> PN -> NPNationality = \la,mo,co ->
mkNPNationality (mkLang la mo) (mkNP co) la ;
mkDay : Str -> NPDay = \d ->
mkNPDay (mkNP (mkPN d))
(P.mkAdv (Predef.tk 1 d))
(SyntaxLav.mkAdv in_Prep (mkNP the_Quant plNum (mkCN (mkN d)))) ;
--mkCompoundPlace : Str -> Str -> Prep -> {
-- name : CN ;
-- at : Prep ;
-- to : Prep ;
-- isPl : Bool
--} = \comp,p,i -> mkCNPlace (mkCN (P.mkN comp (mkN p))) i to_Prep ;
mkPlace : Str -> Prep -> {name : CN ; at : SyntaxLav.Prep ; to : SyntaxLav.Prep ; isPl : Bool} = \p,i ->
mkCNPlace (mkCN (mkN p)) i to_Prep ; ---- SyntaxLav.Prep by AR 28/8/2012
open_A = P.mkA "atvērts" ;
closed_A = P.mkA "slēgts" ;
xOf : 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 sing (mkN "vārds") p).name ;
mkTransport : N -> {
name : CN ;
by : Adv
} = \n -> {
name = mkCN n ;
by = SyntaxLav.mkAdv by8means_Prep (mkNP n)
} ;
mkSuperl : A -> Det = \a ->
SyntaxLav.mkDet the_Art (SyntaxLav.mkOrd a) ;
far_IAdv = ExtraLav.IAdvAdv (mkAdv "tālu") ;
--------------------------------------------------
-- New 30/11/2011 AR
--------------------------------------------------
lin
Thai = mkNat (mkA "taizemiešu") (mkPN "Taizeme") ;
Baht = mkCN (mkN "bats") ;
Rice = mkCN (mkN "rīss") ;
Pork = mkCN (mkN "cūkgaļa") ;
Beef = mkCN (mkN "liellops") ;
Egg = mkCN L.egg_N ;
Noodles = mkCN (mkN "nūdele") ;
Shrimps = mkCN (mkN "garnele") ;
Chili = mkCN (mkN "čili") ;
Garlic = mkCN (mkN "ķiploks") ;
Durian = mkCN (mkN "durians") ;
Mango = mkCN (mkN "mango") ;
Pineapple = mkCN (mkN "ananass") ;
Coke = mkCN (mkN "kola") ;
IceCream = mkCN (mkN "saldējums") ;
Salad = mkCN (mkN "salāts") ;
OrangeJuice = mkCN (mkA "apelsīnu") (mkN "sula") ;
Lemonade = mkCN (mkN "limonāde") ;
Beach = mkPlace "pludmale" in_Prep ;
ItsRaining = mkCl (progressiveVP (mkVP L.rain_V0)) ;
ItsCold = mkCl (mkVP L.cold_A) ;
ItsWarm = mkCl (mkVP L.warm_A) ;
ItsWindy = mkCl (mkVP (P.mkA "vējains")) ;
SunShine = mkCl (mkNP the_Det L.sun_N) (progressiveVP (mkVP (mkV "spīdēt" third_conjugation))) ;
Smoke = mkVP (P.mkV "smēķēt" second_conjugation) ;
ADoctor = mkProfession (mkN "ārsts") ;
AProfessor = mkProfession (mkN "profesors") ;
ALawyer = mkProfession (mkN "jurists") ;
AEngineer = mkProfession (mkN "inženieris") ;
ATeacher = mkProfession (mkN "skolotājs") ;
ACook = mkProfession (mkN "pavārs") ;
AStudent = mkProfession (mkN "students") ;
ABusinessman = mkProfession (mkN "uzņēmējs") ;
oper
mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;
}

View File

@@ -0,0 +1,273 @@
-- (c) 2009 Aarne Ranta under LGPL
--# -coding=latin1
concrete WordsNor of Words = SentencesNor **
open SyntaxNor, ParadigmsNor, IrregNor, (L = LexiconNor), ExtraNor, StructuralNor, Prelude in {
lin
-- kinds of food
Apple = mkCN (mkN "eple" "eplet" "epler" "eplene") ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "ost" "osten" "oster" "ostene") ;
Chicken = mkCN (mkN "kylling" "kyllingen" "kyllinger" "kyllingene") ;
Coffee = mkCN (mkN "kaffe" "kaffet" "kaffen" "kaffene") ; -- av kaffe ?
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "kjøtt" "kjøttet" "kjøtt" "kjøtta") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza" "pizzaen" "pizzaer" "pizzaene") ; -- av pizza ?
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "te" "teen" "teer" "teene") ; -- av te ?
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = L.bad_A ;
Cheap = mkA "billig" ;
Boring = mkA "kjedelig" ;
Cold = L.cold_A ;
Delicious = mkA "deilig" ;
Expensive = mkA "dyr" ;
Fresh = mkA "fersk" ;
Good = L.good_A ;
Suspect = mkA "suspekt" "suspekt" ;
Warm = L.warm_A ;
-- places
Airport = mkPlace (mkN "flyplass" "flyplassen" "flyplasser" "flyplassene") "på" "til";
AmusementPark = mkPlace (mkN "fornøyelsespark" "fornøyelsesparken" "fornøyelsesparker" "fornøyelsesparkene") "i" "til";
Bank = mkPlace (mkN "bank" "banken" "banker" "bankene") "i" "til";
Bar = mkPlace (mkN "bar" "baren" "barer" "barene") "i" "til"; -- ?? check forms
Cafeteria = mkPlace (mkN "kafeteria" "kafeterian" "kafeterier" "kafeteriene") "i" "til";
Center = mkPlace (mkN "sentrum" "sentrum" "sentre" "sentrene") "i" "til";
Cinema = mkPlace (mkN "kino" "kino" "kinoer" "kinoene") "på" "på";
Church = mkPlace (mkN "kirke" "kirka" "kirker" "kirkene") "i" "til";
Disco = mkPlace (mkN "diskotek" "diskoteket" "diskoteker" "diskotekene") "på" "på";
Hospital = mkPlace (mkN "sykehus" "sykehuset" "sykehus" "sykehusa") "på" "til";
Hotel = mkPlace (mkN "hotel" "hotellet" "hoteller" "hotellene") "på" "til";
Museum = mkPlace (mkN "museum" "museet" "museer" "museene") "i" "til";
Park = mkPlace (mkN "park" "parken" "parker" "parkene") "i" "til";
Parking = mkPlace (mkN "parkeringsplass" "parkeringsplassen" "parkeringsplasser" "parkeringplassene") "på" "til";
Pharmacy = mkPlace (mkN "apotek" "apoteket" "apoteker" "apotekene") "på" "til";
PostOffice = mkPlace (mkN "postkontor" "postkontoret" "postkontorer" "postkontorene") "på" "til";
Pub = mkPlace (mkN "pub" "puben" "puber" "pubene") "på" "til";
Restaurant = mkPlace (mkN "restaurant" "restauranten" "restauranter" "restaurantene") "på" "til";
School = mkPlace (mkN "skole" "skola" "skoler" "skolene") "i" "til";
Shop = mkPlace (mkN "butikk" "butikken" "butikker" "butikkene") "i" "til";
Station = mkPlace (mkN "stasjon" "stasjonen" "stasjoner" "stasjonene") "på" "til";
Supermarket = mkPlace (mkN "supermarked" "supermarkedet" "supermarkeder" "supermarkedene") "på" "til";
Theatre = mkPlace (mkN "teater" "teatret" "teatre" "teatrene") "på" "til";
Toilet = mkPlace (mkN "toalett" "toalettet" "toaletter" "toalettene") "på" "på";
University = mkPlace (mkN "universitet" "universitetet" "universitet" "universiteta") "i" "til";
Zoo = mkPlace (mkN "dyrepark" "dyreparken" "dyreparker" "dyreparkene") "på" "til";
CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurant" "restauranten" "restauranter" "restaurantene")) on_Prep to_Prep ;
-- currencies
DanishCrown = mkCN (mkA "dansk") (mkN "krone" "krona" "kroner" "kronene") | mkCN (mkN "krone" "krona" "kroner" "kronene") ;
Dollar = mkCN (mkN "dollar" "dollaren" "dollar" "dollar") ; -- i dollar ?
Euro = mkCN (mkN "euro" "euroen" "euro" "euro") ; -- i euro
Lei = mkCN (mkN "leu" "leu" "leis" "leis") ; -- den leis ?
Leva = mkCN (mkN "lev" "lev" "leva" "leva") ; -- det leva ?
NorwegianCrown = mkCN (mkA "norsk") (mkN "krone" "krona" "kroner" "kronene") | mkCN (mkN "krone" "krona" "kroner" "kronene") ;
Pound = mkCN (mkN "pund" "pundet" "pund" "punda") ; -- i pounds ?
Rouble = mkCN (mkN "rubel" "rubelen" "rubler" "rublene") ; -- av rubler ?
SwedishCrown = mkCN (mkA "svensk") (mkN "krone" "krona" "kroner" "kronene") | mkCN (mkN "krone" "krona" "kroner" "kronene") ;
Zloty = mkCN (mkN "zloty" "zloty" "zloty" "zloty") ; -- i/den zloty ?
-- nationalities
Belgian = mkA "belgisk" ;
Belgium = mkNP (mkPN "Belgia") ;
Bulgarian = mkNat "bulgarsk" "Bulgaria" ;
Catalan = mkNat "katalansk" "Katalonia" ;
Danish = mkNat "dansk" "Danmark" ;
Dutch = mkNat "nederlandsk" "Nederland" ;
English = mkNat "engelsk" "England" ;
Finnish = mkNat "finsk" "Finland" ;
Flemish = mkNP (mkPN "flamsk") ;
French = mkNat "fransk" "Frankrike" ;
German = mkNat "tysk" "Tyskland" ;
Italian = mkNat "italiensk" "Italia" ;
Norwegian = mkNat "norsk" "Norge" ;
Polish = mkNat "polsk" "Polen" ;
Romanian = mkNat "rumensk" "Romania" ;
Russian = mkNat "russisk" "Russland" ;
Spanish = mkNat "spansk" "Spania" ;
Swedish = mkNat "svensk" "Sverige" ;
-- Means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN "buss" "bussen" "busser" "bussene") ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "ferge" "fergen" "ferger" "fergene") ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN "undergrunnsbane" "undergrunnsbanen" "undergrunnsbaner" "undergrunnsbanene") ; -- check ?
Taxi = mkTransport (mkN "drosje" "drosja" "drosjer" "drosjene") ;
Train = mkTransport (mkN "tog" "toget" "tog" "toga") ;
Tram = mkTransport (mkN "trikk" "trikken" "trikker" "trikkene") ;
ByFoot = ParadigmsNor.mkAdv "til fots" ;
-- actions
AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasName p name = mkCl p.name (mkV2 hete_V) name ;
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 "rom" "rommet" "rommene" "romma"))
(SyntaxNor.mkAdv for_Prep (mkNP num (mkN "person" "personen" "personer" "personene")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "bord" "bordet" "bord" "borda"))
(SyntaxNor.mkAdv for_Prep (mkNP num (mkN "person" "personen" "personer" "personene")))) ;
AHungry p = mkCl p.name (mkA "sulten" "sultet" "sultne") ;
AIll p = mkCl p.name (mkA "syk") ;
AKnow p = mkCl p.name vite_V ;
ALike p item = mkCl p.name (dirV2 (mk2V "like" "likte")) item ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "bor")) (SyntaxNor.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (dirV2 (regV "elske")) q.name ;
AMarried p = mkCl p.name (mkA "gift") ;
AReady p = mkCl p.name (mkA "klar") ;
AScared p = mkCl p.name (mkA "redd") ;
ASpeak p lang = mkCl p.name (dirV2 (regV "snakke")) lang ;
AThirsty p = mkCl p.name (mkA "tørstig") ;
ATired p = mkCl p.name (mkA "sliten") ;
AUnderstand p = mkCl p.name (irregV "forstå" "forstod" "forstått") ;
AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 hete_V)) ;
QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "koste"))) ;
ItCost item price = mkCl item (mkV2 (mkV "koste")) price ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("vi ses")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "kone" "kona" "koner" "konene") ;
Husband = xOf sing L.man_N ;
Son = xOf sing (mkN "sønn" "sønnen" "sønner" "sønnene") ;
Daughter = xOf sing (mkN "datter" "datteren" "døtre" "døtrene") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "mandag" ;
Tuesday = mkDay "tirsdag" ;
Wednesday = mkDay "onsdag" ;
Thursday = mkDay "torsdag" ;
Friday = mkDay "fredag" ;
Saturday = mkDay "lørdag" ;
Sunday = mkDay "søndag" ;
Tomorrow = ParadigmsNor.mkAdv "i morgen" ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA "billig") ;
TheMostExpensive = mkSuperl (mkA "dyr") ;
TheMostPopular = mkSuperl (mkA "populær") ;
TheWorst = mkSuperl L.bad_A ;
SuperlPlace sup p = placeNP sup p ;
-- transports
HowFar place =
mkQS (mkQCl far_IAdv (mkCl (mkVP place.to))) ;
HowFarFrom x y =
mkQS (mkQCl far_IAdv (mkCl (mkVP (mkVP y.to)
(SyntaxNor.mkAdv from_Prep x.name)))) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkCl (mkVP (mkVP (mkVP y.to)
(SyntaxNor.mkAdv from_Prep x.name)) t))) ;
HowFarBy place t =
mkQS (mkQCl far_IAdv (mkCl (mkVP (mkVP place.to) t))) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
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 day (SyntaxNor.mkAdv on_Prep day)
(SyntaxNor.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
mkPlace : N -> Str -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i,t ->
mkCNPlace (mkCN p) (mkPrep i) (mkPrep t) ;
open_A = mkA "åpen" "åpent";
closed_A = mkA "stengt" "stengt";
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePersonNor n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
mkSuperl : A -> Det = \a -> mkDet the_Art (mkOrd a) ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxNor.mkAdv by8means_Prep (mkNP the_Det n)
} ;
far_IAdv = ExtraNor.IAdvAdv (ParadigmsNor.mkAdv "langt") ;
how8much_IAdv : IAdv = ss "hvor mye" ** {lock_IAdv = <>};
relativePersonNor : GNumber -> CN -> (Num -> NP -> CN -> NP) -> NPPerson -> NPPerson =
\n,x,f,p ->
let num = if_then_else Num n plNum sgNum in {
name = case p.isPron of {
True => PossNPPron (mkNP the_Quant num x) p.name ;
_ => f num p.name x
} ;
isPron = False ;
poss = mkQuant he_Pron -- not used because not pron
} ;
}

View File

@@ -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 ! Bare ++ "ترین" ; n = Sg ; isNum = False ; mod = Bare} ;
-- 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};
}

View File

@@ -0,0 +1,354 @@
--2 Implementations of Words, with Polish as example
concrete WordsPol of Words = SentencesPol **
open
ResPol,
SyntaxPol,
(L = LexiconPol),
(Q = QuestionPol),
(N = NounPol),
MorphoPol,
Prelude in {
flags
optimize =values ; coding =utf8 ;
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 L.cheese_N ;
Chicken = mkCN kurczak ;
Coffee = mkCN kawa;
Fish = mkCN L.fish_N ;
Meat = mkCN L.meat_N ;
Milk = mkCN L.milk_N ;
Pizza = mkCN pizza;
Salt = mkCN L.salt_N ;
Tea = mkCN herbata ;
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 (mkRegAdj "nudny" "nudniejszy" "nudno" "nudniej" );
Cheap = mkA (mkRegAdj "tani" "tańszy" "tanio" "taniej" );
Cold = L.cold_A ;
Delicious = mkA (mkRegAdj "pyszny" "pyszniejszy" "pysznie" "pyszniej") ;
Expensive = mkA (mkRegAdj "drogi" "droższy" "drogo" "drożej" );
Fresh = mkA (mkRegAdj "świeży" "świeższy" "świeżo" "świeżej" );
Good = L.good_A ;
Suspect = mkA (mkCompAdj "podejrzany" "podejrzanie" );
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 = mkPlaceNa lotnisko ;
AmusementPark = mkPlaceDo ["wesołe miasteczko"] ["wesołego miasteczka"] ["wesołym miasteczku"] Neut;
Bank = mkPlaceDo "bank" "banku" "banku" (Masc Inanimate);
Bar = mkPlaceDo "bar" "baru" "barze" (Masc Inanimate);
Cafeteria = mkPlaceDo "stołówka" "stołówki" "stołówce" Fem;
Center = mkPlaceDo "centrum" "centrum" "centrum" Neut;
Cinema = mkPlaceDo "kino" "kina" "kinie" Neut ;
Church = mkPlaceDo "kościół" "kościoła" "kościele" (Masc Inanimate);
Disco = mkPlaceNa "dyskoteka" "dyskotekę" "dyskotece" Fem ;
Hospital = mkPlaceDo "szpital" "szpitala" "szpitalu" (Masc Inanimate);
Hotel = mkPlaceDo "hotel" "hotelu" "hotelu" (Masc Inanimate) ;
Museum = mkPlaceDo "muzeum" "muzeum" "muzeum" Neut ;
Park = mkPlaceDo "park" "parku" "parku" (Masc Inanimate) ;
Parking = mkPlaceNa "parking" "parking" "parkingu" (Masc Inanimate) ;
Pharmacy = mkPlaceDo "apteka" "apteki" "aptece" Fem ;
PostOffice = mkPlaceNa "poczta" "pocztę" "poczcie" Fem ;
Pub = mkPlaceDo "pub" "pubu" "pubie" (Masc Inanimate) ;
Restaurant = mkPlaceDo L.restaurant_N;
School = mkPlaceDo L.school_N;
Shop = mkPlaceDo "sklep" "sklepu" "sklepie" (Masc Inanimate) ;
Station = mkPlaceNa "stacja" "stację" "stacji" Fem ;
Supermarket = mkPlaceDo "supermarket" "supermarketu" "supermarkecie" (Masc Inanimate) ;
Theatre = mkPlaceDo "teatr" "teatru" "teatrze" (Masc Inanimate) ;
Toilet = mkPlaceDo "toaleta" "toalety" "toalecie" Fem ;
University = mkPlaceNa L.university_N;
Zoo = mkPlaceDo "zoo" "zoo" "zoo" Neut ;
CitRestaurant cit = { name=(mkCN cit.prop (mkCN L.restaurant_N));
at = { s="w"; c=LocPrep; lock_Prep = <> }; to = {s="do"; c=GenPrep; lock_Prep = <>}; isPl = False };
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
DanishCrown = mkCN (mkCurrency "korona duńska" "korony duńskie" "koron duńskich" Fem);
Dollar = mkCN dolar ;
Euro = mkCN (mkCurrency "euro" "euro" "euro" Neut);
Lei = mkCN (mkCurrency "leja" "leje" "lei" Fem);
Leva = mkCN (mkCurrency "lew" "lewy" "lewów" (Masc Animate));
NorwegianCrown = mkCN (mkCurrency "korona norweska" "korony norweskie" "koron norweskich" Fem);
Pound = mkCN (mkCurrency "funt" "funty" "funtów" (Masc Animate));
Rouble = mkCN (mkCurrency "rubel" "ruble" "rubli" (Masc Animate));
SwedishCrown = mkCN (mkCurrency "korona szwedzka" "korony szwedzkie" "koron szwedzkich" Fem);
Zloty = mkCN (mkCurrency "złoty" "złote" "złotych" (Masc Animate));
-- Nationalities
-- język, po języku, obywatelstwo, kraj, obywatelem, obywatelami, obywatelką
Belgian = {prop=mkA (mkCompAdj "belgijski"); citizenMSg="Belgiem"; citizenMPl="Belgami"; citizenF="Belgijką"};
Belgium = mkNP belgia ;
Bulgarian = mkNat "bułgarski" ["po bułgarsku"] "bułgarski" bulgaria "Bułgarem" "Bułgarami" "Bułgarką";
Catalan = mkNat "kataloński" ["po katalońsku"] "kataloński" katalonia "Katalończykiem" "Katalończykami" "Katalonką";
Danish = mkNat "duński" ["po duńsku"] "duński" katalonia "Duńczykiem" "Duńczykami" "Dunką";
Dutch = mkNat "holenderski" ["po holendersku"] "holenderski" holandia "Holendrem" "Holendrami" "Holenderką";
English = mkNat "angielski" ["po angielsku"] "angielski" anglia "Anglikiem" "Anglikami" "Angielką";
Finnish = mkNat "fiński" ["po fińsku"] "finladzki" finlandia "Finem" "Finami" "Finką";
Flemish = mkA (mkCompAdj "flamandzki" ["po flamandzku"]);
French = mkNat "francuski" ["po francusku"] "francuski" francja "Framcuzem" "Francuzami" "Francuzką";
German = mkNat "niemiecki" ["po niemiecku"] "niemiecki" niemcy "Niemcem" "Niemcami" "Niemką";
Italian = mkNat "włoski" ["po włosku"] "włoski" wlochy "Włochem" "Włochami" "Włoszką";
Norwegian = mkNat "norweski" ["po norwesku"] "norweski" norwegia "Norwegiem" "Norwegami" "Norweszką";
Polish = mkNat "polski" ["po polsku"] "polski" polska "Polakiem" "Polakami" "Polką";
Romanian = mkNat "rumuński" ["po rumuńsku"] "rumuński" rumunia "Rumunem" "Rumunami" "Rumunką";
Russian = mkNat "rosyjski" ["po rosyjsku"] "rosyjski" rosja "Rosjaninem" "Rosjanami" "Rosjanką";
Spanish = mkNat "hiszpański" ["po hiszpańsku"] "hiszpański" hiszpania "Hiszpanem" "Hiszpanami" "Hiszpanką";
Swedish = mkNat "szwedzki" ["po szwedzku"] "szwedzki" szwecja "Szwedem" "Szwedami" "Szwedką";
-- Means of transportation
Bike = {cn = mkCN L.bike_N ; verb="jedzie" };
Bus = mkTransport "autobus" "autobusem" (Masc Inanimate) "jedzie";
Car = {cn = mkCN L.car_N ; verb="jedzie" };
Ferry = mkTransport "prom" "promem" (Masc Inanimate) "płynie";
Plane = {cn = mkCN L.airplane_N ; verb="leci" };
Subway = mkTransport "metro" "metrem" Neut "jedzie";
Taxi = mkTransport "taksówka" "taksówką" Fem "jedzie";
Train = mkTransport "pociąg" "pociągiem" (Masc Inanimate) "jedzie";
Tram = mkTransport "tramwaj" "tramwajem" (Masc Inanimate) "jedzie";
ByFoot = ss "pieszo" ** {lock_Adv = <>};
-- Actions: the predication patterns are very often language-dependent.
AHasAge p num = mkCl p.name have_V2 (mkNP (mkDet 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 (mkN (mkNTable0950 "pokój") (Masc Inanimate))) (SyntaxPol.mkAdv for_Prep (mkNP num (L.person_N)))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (L.table_N)) (SyntaxPol.mkAdv for_Prep (mkNP num (L.person_N)))) ;
AHasName p name = mkCl p.name (mkVP (mkComplicatedVerb (mkMonoVerb "być" conj1 Imperfective) name.nom));
AHungry p = mkCl p.name (mkA (mkRegAdj "głodny" "głodniejszy" "głodno" "głodniej" )) ;
AIll p = mkCl p.name (mkA (mkCompAdj "chory")) ;
AKnow p = mkCl p.name (mkVP (mkMonoVerb "wiedzieć" conj103 Imperfective)) ;
ALike p item = mkCl p.name (L.like_V2) item ;
ALive p co = mkCl p.name (mkVP (mkComplicatedVerb (mkMonoVerb "mieszkam" conj98 Imperfective) ("w" ++ co.dep!LocPrep)));
ALove p q = mkCl p.name (L.love_V2) q.name ;
AMarried p = mkCl p.name (case p.name.gn of {
MascPersSg|MascAniSg|MascInaniSg|MascPersPl=> mkCompAdj "żonaty";
_=>mkCompAdj "zamężny"}) ;
AReady p = mkCl p.name (L.ready_A) ;
AScared p = mkCl p.name (mkReflVerb (mkMonoVerb "bać" conjbac Imperfective)) ;
ASpeak p lang = mkCl p.name (mkVP (mkComplicatedVerb (mkMonoVerb "mówić" conj72 Imperfective) lang.advpos)) ;
AThirsty p = mkCl p.name (mkVP (mkComplicatedVerb (mkMonoVerb "chcieć" conj45 Imperfective) ["pić"]));
ATired p = mkCl p.name (mkA (mkCompAdj "zmęczony")) ;
AUnderstand p = mkCl p.name (mkVP (mkV "rozumieć" conj101 "zrozumieć" conj101)) ;
AWant p obj = mkCl p.name (dirV2 (mkMonoVerb "chcieć" conj45 Imperfective)) obj ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkComplicatedVerb (mkV1 "iść" conj41a "pójść" conj42) place.to.s)) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name
(mkVP (mkComplicatedVerb (mkMonoVerb "mieć" conj100 Imperfective) ["na imię"]))));
QWhatAge p = mkQS (mkQCl howmany_IAdv (mkCl p.name
(mkVP (mkComplicatedVerb (mkMonoVerb "mieć" conj100 Imperfective) ["lat"]))));
HowMuchCost item = { s="ile" ++
(mkMonoVerb "kosztować" conj53 Imperfective).si!(VFinM (extract_num!item.gn) P3) ++ item.nom;
lock_QS=<> } ;
ItCost item price = mkCl item (dirV2 (mkMonoVerb "kosztować" conj53 Imperfective) ) price ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
PropOpenDate p d = mkCl p.name (mkAP d open_A) ;
PropClosedDate p d = mkCl p.name (mkAP d closed_A) ;
PropOpenDay p d = mkCl p.name (mkAP (ss d.hab) open_A) ;
PropClosedDay p d = mkCl p.name (mkAP (ss d.hab) closed_A) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("do zobaczenia"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("do zobaczenia"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("do zobaczenia")))
(mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ;
--
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
--
Wife p = xOf p N.NumSg L.wife_N ;
Husband p = xOf p N.NumSg L.husband_N ;
Son p = xOf p N.NumSg (mkPer "syn" "syna" "syna" (Masc Personal)) ;
Daughter p = xOf p N.NumSg (mkPer "córka" "córki" "córkę" Fem );
Children p = xOf p N.NumPl L.child_N ;
-- week days
Monday = { name="poniedziałek"; hab=["w poniedziałki"]; adv=["w poniedziałek"] } ;
Tuesday = { name="wtorek"; hab=["we wtorki"]; adv=["we wtorek"] } ;
Wednesday = { name="środa"; hab=["we środy"]; adv=["we środę"] } ;
Thursday = { name="czwartek"; hab=["w czwartki"]; adv=["w czwartek"] } ;
Friday = { name="piątek"; hab=["w piątki"]; adv=["w piątek"] } ;
Saturday = { name="sobota"; hab=["w soboty"]; adv=["w sobotę"] } ;
Sunday = { name="niedziela"; hab=["w niedziele"]; adv=["w niedzielę"] } ;
Tomorrow = (ss "jutro") ** {lock_Adv = <>} ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA (mkRegAdj "tani" "tańszy" "tanio" "taniej") );
TheMostExpensive = mkSuperl (mkA (mkRegAdj "drogi" "droższy" "drogo" "drożej" ) );
TheMostPopular = mkSuperl (mkA (mkRegAdj "popularny" "popularniejszy" "popularnie" "popularniej" ) ) ;
TheWorst = mkSuperl L.bad_A ;
SuperlPlace sup p = placeNP sup p ;
-- transports
HowFar place = mkQS (Q.QuestIComp (Q.CompIAdv far_IAdv) place.name) ;
--jak daleko jest z cenrum do hotelu
HowFarFrom x y = { s=["jak daleko jest z"] ++ x.name.dep!GenPrep ++ y.to.s; lock_QS=<> };
--jak daleko jest pieszo z centrum do hotelu
HowFarFromBy x y t =
{ s=["jak daleko jest"] ++ t.s ++ "z" ++ x.name.dep!GenPrep ++ y.to.s; lock_QS=<> };
HowFarBy y t =
{ s=["jak daleko jest"] ++ t.s ++ y.to.s; lock_QS=<> };
WhichTranspPlace trans place =
{ s= ktory ! AF (cast_gennum!<trans.cn.g,Sg>) Nom ++ trans.cn.s!Sg!Nom ++ trans.verb ++ place.to.s; lock_QS=<> };
IsTranspPlace trans place =
{ s= ["czy jest stąd"] ++ trans.cn.s!Sg!Nom ++ place.to.s; lock_QS=<> };
-- auxiliaries
oper kurczak = mkN (mkNTable0173 "kurczak") (Masc Animate) ;
oper kawa = mkN (mkNTable0021 "kawa") (Fem) ;
oper pizza = mkN (mkNTable0175 "pizza") (Fem) ;
oper herbata = mkN (mkNTable0026 "herbata") (Fem) ;
oper lotnisko = mkN (mkNTable0265 "lotnisko") (Neut) ;
oper lilja = mkN (mkNTable0060 "lilia") (Fem) ;
oper niemcy = mkN (mkNTable0387 "Niemcy") (Plur) ;
oper wlochy = mkN (mkNTable0482 "Włochy") (Plur) ;
oper belgia = mkN (mkNTable0005 "Belgia") (Fem) ;
oper bulgaria = mkN (mkNTable0005 "Bułgaria") (Fem) ;
oper katalonia = mkN (mkNTable0005 "Katalonia") (Fem) ;
oper dania = mkN (mkNTable0055 "Dania") (Fem) ;
oper anglia = mkN (mkNTable0005 "Anglia") (Fem) ;
oper holandia = mkN (mkNTable0005 "Holandia") (Fem) ;
oper finlandia = mkN (mkNTable0005 "Finlandia") (Fem) ;
oper francja = mkN (mkNTable0005 "Francja") (Fem) ;
oper norwegia = mkN (mkNTable0005 "Norwegia") (Fem) ;
oper polska = mkN (mkNTable0041 "Polska") (Fem) ;
oper rumunia = mkN (mkNTable0032 "Rumunia") (Fem) ;
oper rosja = mkN (mkNTable0005 "Rosja") (Fem) ;
oper hiszpania = mkN (mkNTable0032 "Hiszpania") (Fem) ;
oper szwecja = mkN (mkNTable0005 "Szwecja") (Fem) ;
oper pokoj = mkN (mkNTable0526 "pokój") (Masc Inanimate) ;
oper dolar = mkN (mkNTable0064 "dolar") (Masc Animate) ;
oper
mkA : Adj -> A = \adj -> adj ** { lock_A = <> };
mkPlaceDo = overload {
mkPlaceDo : N -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \n -> {
name = mkCN n; at = { s="w"; c=LocPrep; lock_Prep = <> }; to = {s="do"; c=GenPrep; lock_Prep = <>}; isPl = False };
mkPlaceDo : Str -> Str -> Str -> Gender -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \nom,gen,loc,g -> {
name = mkCN {
s = table {SF Sg Nom => nom; SF Sg Gen => gen; SF Sg Loc => loc; _ => ["not implemented"]};
g = g;
lock_N=<>
};
at = { s="w"; c=LocPrep; lock_Prep = <> }; to = {s="do"; c=GenPrep; lock_Prep = <>}; isPl = False };
};
mkPlaceNa = overload {
mkPlaceNa : N -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \n -> {
name = mkCN n; at = { s="na"; c=LocPrep; lock_Prep = <> }; to = {s="na"; c=AccPrep; lock_Prep = <>}; isPl = False };
mkPlaceNa : Str -> Str -> Str -> Gender -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \nom,acc,loc,g -> {
name = mkCN {
s = table {SF Sg Nom => nom; SF Sg Acc => acc; SF Sg Loc => loc; _ => ["not implemented"]};
g = g;
lock_N=<>
};
at = { s="na"; c=LocPrep; lock_Prep = <> }; to = {s="na"; c=AccPrep; lock_Prep = <>}; isPl = False };
};
mkTransport : Str -> Str -> Gender -> Str -> {cn:CN; verb:Str} = \nom,instr,g,verb -> {
cn = {
s = \\n,c => case <n,c> of {<Sg,Nom> => nom; <Sg,Instr> => instr; _ => ["not implemented"]};
g = g;
lock_CN=<>
};
verb=verb
};
mkCitizen = overload {
mkCitizen : Str -> N = \s -> {
s = table {SF Sg Instr => s; _ => ["not implemented"]};
g = Fem;
lock_N=<>
};
mkCitizen : Str -> Str -> N = \inst, instpl -> {
s = table {SF Sg Instr => inst; SF Pl Instr => instpl; _ => ["not implemented"]};
g = Masc Personal;
lock_N=<>
};
};
mkPer : Str -> Str -> Str -> Gender -> N = \nom,gen,acc,g -> {
s = table {SF Sg Nom => nom; SF Sg Gen => gen; SF Sg Acc => acc; _ => ["not implemented"]};
g = g;
lock_N=<>
};
mkCurrency : Str -> Str -> Str -> Gender -> N = \nom,nompl,genpl,g -> {
s = table {SF Sg Nom => nom; SF Pl (Nom|Acc) => nompl; SF Pl Gen => genpl; _ => ["not implemented"]};
g = g;
lock_N=<>
};
mkNat : Str -> Str -> Str -> N -> Str -> Str -> Str ->
{ lang: A; prop: A; country: NP; citizenMSg:Str; citizenMPl: Str; citizenF:Str } =
\lang,ladv,prop,country,citiMsg, citiMpl, citiF -> {
lang = mkA (mkCompAdj lang ladv); prop = mkA (mkCompAdj prop);
country=mkNP country; citizenMSg=citiMsg; citizenMPl=citiMpl; citizenF=citiF };
open_A : A = (mkA (mkCompAdj "otwarty"));
closed_A : A = (mkA (mkCompAdj "zamknięty"));
xOf : NPPerson -> Num -> N -> NPPerson = \p,num,n ->
{ name = case p.isPron of {
True => mkNP (mkDet p.poss num) n;
False => mkNP (mkNP (mkDet a_Quant num) n) ({s=p.name.dep!GenNoPrep; lock_Adv=<>})
};
isPron = False;
poss = p.poss }; --it is not used, because it is not a pron
mkSuperl : A -> Det = \a -> SyntaxPol.mkDet the_Art (SyntaxPol.mkOrd a) ;
far_IAdv : IAdv = (ss ["jak daleko"]) ** {lock_IAdv = <>};
howmany_IAdv : IAdv = (ss ["ile"]) ** {lock_IAdv = <>};
}

View File

@@ -0,0 +1,277 @@
--# -path=.:../../dist/build/rgl/alltenses
-- (c) 2010 Ramona Enache under LGPL
concrete WordsRon of Words = SentencesRon ** open
SyntaxRon, ResRon, Prelude,
(P = ParadigmsRon),
(L = LexiconRon),
BeschRon,
ExtraRon in {
flags coding=utf8 ;
lin
-- kinds
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN L.cheese_N ;
Chicken = mkCN (P.mkN "pui" "pui" P.masculine) ;
Coffee = mkCN (P.mkN "cafea") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (P.mkN "carne" "cărnuri" "cărni") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (P.mkN "pizză") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (P.mkNR "ceai") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- qualities
Bad = L.bad_A ;
Boring = P.mkA "plictisitor" "plictisitoare" "plictisitori" "plictisitoare" ;
Cheap = P.mkA "ieftin" ;
Cold = L.cold_A ;
Delicious = P.mkA "delicios" "delcioasă" "delicioşi" "delicioase" ;
Expensive = P.mkA "scump" "scumpă" "scumpi" "scumpe" ;
Fresh = P.mkA "proaspăt" "proaspătă" "proaspeţi" "proaspete" ;
Good = L.good_A ;
Suspect = P.mkA "suspect" ;
Warm = L.warm_A ;
-- places
Airport = mkPlace (P.mkNR "aeroport") at_Prep ;
AmusementPark = mkCNPlace (mkCN (mkCN (P.mkNR "parc")) (mkAdv by8means_Prep (mkNP (P.mkPN "distracții")))) in_Prep to_Prep;
Bank = mkPlace (P.mkN "bancă" "bănci") at_Prep ;
Bar = mkPlace (P.mkNR "bar") at_Prep ;
Cafeteria = mkPlace (P.mkN "cantină" "cantine") in_Prep ;
Center = mkCNPlace (mkCN (P.mkN "centru" "centre" )) in_Prep in_Prep;
Church = mkPlace (P.mkN "biserică" "biserici") at_Prep ;
Cinema = mkPlace (P.mkNR "cinematograf") at_Prep ;
Disco = mkPlace (P.mkN "discotecă" "discoteci" ) at_Prep ;
Hospital = mkPlace (P.mkN "spital") at_Prep ;
Hotel = mkPlace (P.mkNR "hotel") at_Prep ;
Museum = mkPlace (P.mkN "muzeu" "muzee") at_Prep ;
Park = mkPlace (P.mkNR "parc") in_Prep ;
Parking = mkPlace (P.mkN "parcare" "parcări") in_Prep ;
Pharmacy = mkPlace (P.mkN "farmacie" "farmacii" P.feminine) at_Prep;
PostOffice = mkPlace (P.mkN "poștă" "poște") at_Prep ;
Pub = mkPlace (P.mkNR "pub") in_Prep ;
Restaurant = mkPlace (P.mkN "restaurant") at_Prep ;
School = mkPlace (P.mkN "şcoală" "şcoli") at_Prep ;
Shop = mkPlace (P.mkN "magazin") at_Prep ;
Station = mkPlace (P.mkN "gară" "gări") at_Prep ;
Supermarket = mkPlace (P.mkNR "supermarket") at_Prep ;
Theatre = mkPlace (P.mkN "teatru" "teatre") at_Prep ;
Toilet = mkPlace (P.mkN "toaletă") at_Prep ;
University = mkPlace (P.mkN "universitate") at_Prep ;
Zoo = {name = mkCN (P.mkA "zoologic") (P.mkN "grădină" "grădini");
to = to_Prep; at = at_Prep; isPl = False };
CitRestaurant cit = mkCNPlace (mkCN cit.prop (P.mkN "restaurant" "restaurante")) in_Prep to_Prep;
-- currencies
DanishCrown = mkCN (P.mkA "danez") (P.mkN "coroană") ;
Dollar = mkCN (P.mkN "dolar" P.masculine) ;
Euro = mkCN (P.mkN "euro" "euro" P.masculine) ;
Lei = mkCN (P.mkN "leu" "lei") ;
Leva = mkCN (P.mkN "levă" "leve") ;
NorwegianCrown = mkCN (P.mkA "norvegian") (P.mkN "coroană") ;
Pound = mkCN (P.mkA "sterlin") (P.mkN "liră") ;
Rouble = mkCN (P.mkN "rublă" "ruble") ;
SwedishCrown = mkCN (P.mkA "suedez") (P.mkN "coroană") ;
Zloty = mkCN (P.mkN "zlot" P.masculine) ;
-- nationalities
Belgian = mkCitizenshipRon (P.mkA "belgian" "belgiană" "belgieni" "belgiene") "belgian" "belgiancă" "belgieni" "belgience" ;
Belgium = mkNP (P.mkPN "Belgia") ;
Bulgarian = mkCompNat "bulgar" "Bulgaria" "bulgăresc" "bulgar" "bulgăroaică" "bulgari" "bulgăroaice";
Catalan = mkSimpSimpNat "catalan" "Catalonia" ;
Danish = mkSimpSimpNat "danez" "Danemarca" ;
Dutch = mkSimpSimpNat "olandez" "Olanda" ;
English = mkNat "englez" "Anglia" "englez" "englezoaică" "englezi" "englezoaice" ;
Finnish = mkSimpSimpNat "finlandez" "Finlanda" ;
Flemish = mkNP (P.mkPN "flamandă") ;
French = mkCompNat "francez" "Franţa" "franțuzesc" "francez" "franțuzoaică" "francezi" "franțuzoaice";
German = mkCompNat "german" "Germania" "nemțesc" "neamț" "nemțoaică" "nemți" "nemțoaice";
Italian = mkSimpNat "italian" "Italia" "italian" "italiancă" "italieni" "italience" ;
Norwegian = mkSimpSimpNat "norvegian" "Norvegia";
Polish = mkSimpSimpNat "polonez" "Polonia" ;
Romanian = mkNat "român" "România" "român" "româncă" "români" "românce" ;
Russian = mkNat "rus" "Rusia" "rus" "rusoaică" "ruși" "rusoaice";
Spanish = mkSimpSimpNat "spaniol" "Spania" ;
Swedish = mkSimpSimpNat "suedez" "Suedia" ;
-- means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (P.mkN "autobuz" "autobuze") ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (P.mkNR "feribot") ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (P.mkNR "metrou") ;
Taxi = mkTransport (P.mkNR "taxi") ;
Train = mkTransport (P.mkNR "tren") ;
Tram = mkTransport (P.mkN "tramvai" "tramvaie") ;
ByFoot = P.mkAdv "pe jos" ;
HowFar place = mkQS (mkQCl how8much_IAdv (mkDestination place.name)) ;
HowFarFrom x y = mkQS (mkQCl how8much_IAdv (mkNP (mkDestination y.name) (SyntaxRon.mkAdv from_Prep x.name))) ;
HowFarFromBy x y t =
mkQS (mkQCl how8much_IAdv (mkNP (mkNP (mkDestination y.name) (SyntaxRon.mkAdv from_Prep x.name)) t)) ;
HowFarBy y t = mkQS (mkQCl how8much_IAdv (mkNP (mkDestination y.name) t)) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name (mkDestination place.name)))) ;
-- actions
AHasAge p num = mkCl p.name have_V2 (mkNP num 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 (P.mkN "cameră")) (SyntaxRon.mkAdv for_Prep (mkNP num (P.mkN "persoană")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (P.mkN "masa" "mese")) (SyntaxRon.mkAdv for_Prep (mkNP num (P.mkN "persoană")))) ;
AHasName p name = mkCl p.name (P.mmkV2 (mkRVAcc (v_besch119 "numi")) (P.noPrep P.Nom)) name ;
AHungry p = DatSubjCl p.name (mkVP (mkNP (P.mkN "foame"))) ;
AIll p = mkCl p.name (P.mkA "bolnav") ;
AKnow p = mkCl p.name (v_besch122 "şti") ;
ALike p item = DatSubjCompCl p.name (mkVP (v_besch71 "plăcea")) item ;
ALive p co =
mkCl p.name (mkVP (mkVP (v_besch121 "locui")) (SyntaxRon.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (P.dirV2 (P.mkV "iubi")) q.name ;
AMarried p = mkCl p.name (P.mkA "căsătorit") ;
AReady p = mkCl p.name (P.mkA "gata" "gata" "gata" "gata") ;
AScared p = mkCl p.name (P.mkA "speriat") ;
ASpeak p lang = mkCl p.name (P.mmkV2 (P.mkV "vorbi") (P.noPrep P.Nom)) lang ;
AThirsty p = DatSubjCl p.name (mkVP (mkNP (P.mkN "sete"))) ;
ATired p = mkCl p.name (P.mkA "obosit") ;
AUnderstand p = mkCl p.name (v_besch83 "înţelege") ;
AWant p obj = mkCl p.name (P.mmkV2 (v_besch74 "vrea") (P.noPrep P.Nom)) obj ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (AccSubjCl p.name (mkVP (v_besch29 "chema")))) ;
QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (v_besch18 "costa"))) ;
ItCost item price = mkCl item (P.mmkV2 (v_besch18 "costa") (P.noPrep P.Nom)) price ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text {s = ("ne" ++ "vedem")}) (mkPhrase (mkUtt d)) ;
PSeeYouPlaceDate p d =
mkText (lin Text { s = ("ne" ++ "vedem")})
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
PSeeYouPlace p = mkText (lin Text {s = ("ne" ++ "vedem")}) (mkPhrase (mkUtt p.at)) ;
-- Relations are expressed as "my wife" or "the wife of my son", as defined by $xOf$
-- below. Languages with productive genitives can use an equivalent of
-- "my son's wife" for non-pronouns, as e.g. in English.
Wife = xOf sing (P.mkN "soţie") ;
Husband = xOf sing (P.mkN "soţ" "soţi") ;
Son = xOf sing (P.mkN "fiu" "fii") ;
Daughter = xOf sing (P.mkN "fiică" "fiice") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "luni" ;
Tuesday = mkDay "marţi" ;
Wednesday = mkDay "miercuri" ;
Thursday = mkDay "joi" ;
Friday = mkDay "vineri" ;
Saturday = mkDay "sâmbătă" ;
Sunday = mkDay "duminică" ;
Tomorrow = P.mkAdv "mâine" ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (P.mkA "ieftin") ;
TheMostExpensive = mkSuperl (P.mkA "scump") ;
TheMostPopular = mkSuperl (P.mkA "popular") ;
TheWorst = mkSuperl L.bad_A ;
SuperlPlace sup p = placeNP sup p ;
oper
closed_A : A = P.mkA "închis" ;
open_A : A = P.mkA "deschis" ;
-- auxiliaries
mkSimpSimpNat : Str -> Str -> NPNationalityRon = \nat, co ->
mkSimpNat nat co nat (nat + "a") (nat + "i") (nat+"e");
mkSimpNat : Str -> Str -> Str -> Str -> Str -> Str -> NPNationalityRon = \nat,co, citMS, citFS, citMP, citFP -> let adj = P.mkA nat in
mkNPNationalityRon (mkNP (P.mkPN (nat+"a"))) (mkNP (P.mkPN co)) adj citMS citFS citMP citFP ;
mkNat : Str -> Str -> Str -> Str -> Str -> Str -> NPNationalityRon = \nat,co, citMS, citFS, citMP, citFP -> let adj = P.mkA (nat+"esc") in
mkNPNationalityRon (mkNP (P.mkPN (nat+"a"))) (mkNP (P.mkPN co)) adj citMS citFS citMP citFP ;
mkCompNat : Str -> Str -> Str -> Str -> Str -> Str -> Str -> NPNationalityRon = \nat,co, adj, citMS, citFS, citMP, citFP -> let a = P.mkA adj in
mkNPNationalityRon (mkNP (P.mkPN (nat+"a"))) (mkNP (P.mkPN co)) a citMS citFS citMP citFP ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (P.mkPN d P.Feminine) ;
ad = {s = d; lock_Adv=<>} in
mkNPDay day ad ad; ---- difference is enforced by additional constructions
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (refCN x) p ;
-- auxiliaries
oper
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i -> {
name = mkCN p ;
at = i ; isPl = False ;
to = to_Prep -- in Romanian, most of the time they would be the same
} ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxRon.mkAdv with_Prep (mkNP the_Det n)
} ;
mkSuperl : A -> Det = \a -> mkDet the_Art (SyntaxRon.mkOrd a) ;
mkDestination : NP -> NP = \np -> heavyNP {s = \\c => "pâna la"++np.indForm ;
a = np.a; hasClit = HasRef False;
ss = "pâna la"++np.indForm} ** {lock_NP =<>};
}

View File

@@ -0,0 +1,275 @@
-- (C) 2009 Aarne Ranta under LGPL
concrete WordsRus of Words = SentencesRus **
open SyntaxRus, (P = ParadigmsRus), (L = LexiconRus), ExtraRus, (R = ResRus), Prelude in {
flags coding = utf8 ;
lin
-- kinds of food
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN L.cheese_N ;
Chicken = mkCN (P.mkN "курица") ;
Coffee = mkCN (P.mkIndeclinableNoun "кофе" P.masculine P.inanimate) ;
Fish = mkCN L.fish_N ;
Meat = mkCN (P.mkN "мясо") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (P.mkN "пицца") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (P.mkN "чай") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = P.mkA "плохой" ;
Cheap = P.mkA "дешевый" ;
Boring = P.mkA "скучный" ;
Cold = L.cold_A ;
Delicious = P.mkA "вкусный" ;
Expensive = P.mkA "дорогой" ;
Fresh = P.mkA "свежий" ;
Good = L.good_A ;
Suspect = P.mkA "подозрительный" ;
Warm = L.warm_A ;
-- places
Airport = mkPlace "аэропорт" in_Prep ;
AmusementPark = mkPlace2 "развлечения" "парк" in_Prep;
Bank = mkPlace "банк" in_Prep ;
Bar = mkPlace "бар" in_Prep ;
Cafeteria = mkPlace "кафетерий" in_Prep ;
Center = mkPlace "центр" in_Prep ;
Church = mkPlace "церковь" in_Prep ;
Cinema = mkPlace "кино" in_Prep ;
Disco = mkPlace "дискотека" on_Prep ;
Hospital = mkPlace "больница" in_Prep ;
Hotel = mkPlace "отель" in_Prep ;
Museum = mkPlace "музей" in_Prep ;
Park = mkPlace "парк" in_Prep ;
Parking = mkPlace "автостоянка" on_Prep ;
Pharmacy = mkPlace "аптека" in_Prep ;
PostOffice = mkPlace "почта" on_Prep ;
Pub = mkPlace "паб" in_Prep ;
Restaurant = mkPlace "ресторан" in_Prep ;
Shop = mkPlace "магазин" in_Prep ;
School = mkPlace "школа" in_Prep ;
Station = mkPlace "станция" on_Prep ;
Supermarket = mkPlace "супермаркет" in_Prep ;
Theatre = mkPlace "театр" in_Prep ;
Toilet = mkPlace "туалет" in_Prep ;
University = mkPlace "университет" in_Prep ;
Zoo = mkPlace "зоопарк" in_Prep ;
CitRestaurant cit =
mkCNPlace (mkCN cit (P.mkN "ресторан")) in_Prep to2_Prep ;
-- currencies
DanishCrown = mkCN (P.mkA "датский") (P.mkN "крона" P.inanimate) ;
Dollar = mkCN (P.mkN "доллар" P.inanimate) ;
Euro = mkCN (P.mkIndeclinableNoun "евро" P.neuter P.inanimate) ;
Lei = mkCN (P.mkN "лей" P.inanimate) ;
Leva = mkCN (P.mkN "лев" P.inanimate) ;
NorwegianCrown = mkCN (P.mkA "норвежский") (P.mkN "крона" P.inanimate) ;
Pound = mkCN (P.mkN "фунт" P.inanimate);
Rouble = mkCN (P.mkN "рубль" P.inanimate) ;
SwedishCrown = mkCN (P.mkA "шведский") (P.mkN "крона" P.inanimate) ;
Zloty = mkCN (P.mkN "злотый" P.inanimate) ;
-- Nationalities
-- Belgian = mkNat "бельгийский" (P.mkPN "Бельгия" P.feminine P.singular P.inanimate) ;
Bulgarian = mkNat "болгарский" (P.mkPN "Болгария" P.feminine P.singular P.animate) ;
Catalan = mkNat "каталонский" (P.mkPN "Каталония" P.feminine P.singular P.animate) ;
Danish = mkNat "датский" (P.mkPN "Дания" P.feminine P.singular P.animate) ;
Dutch = mkNat "нидерландский" (P.mkPN "Нидерланды" P.neuter P.plural P.inanimate) ;
English = mkNat "английский" (P.mkPN "Англия" P.feminine P.singular P.animate) ;
Finnish = mkNat "финский" (P.mkPN "Финляндия" P.feminine P.singular P.animate) ;
-- Flemish = mkNat "фландрийский" (P.mkPN "Фландрия" P.feminine P.singular P.animate) ;
French = mkNat "французский" (P.mkPN "Франция" P.feminine P.singular P.animate) ;
German = mkNat "немецкий" (P.mkPN "Германия" P.feminine P.singular P.animate) ;
Italian = mkNat "итальянский" (P.mkPN "Италия" P.feminine P.singular P.animate) ;
Norwegian = mkNat "норвежский" (P.mkPN "Норвегия" P.feminine P.singular P.animate) ;
Polish = mkNat "польский" (P.mkPN "Польша" P.feminine P.singular P.animate) ;
Romanian = mkNat "румынский" (P.mkPN "Румыния" P.feminine P.singular P.animate) ;
Russian = mkNat "русский" (P.mkPN "Россия" P.feminine P.singular P.animate) ;
Spanish = mkNat "испанский" (P.mkPN "Испания" P.feminine P.singular P.inanimate) ;
Swedish = mkNat "шведский" (P.mkPN "Швеция" P.feminine P.singular P.animate) ;
-- Means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (P.mkN "автобус") ;
Car = mkTransport (P.mkN "автомобиль");
Ferry = mkTransport (P.mkN "паром") ;
Plane = mkTransport (P.mkN "самолет") ;
Subway = mkTransport (P.mkIndeclinableNoun "метро" P.neuter P.inanimate) ;
Taxi = mkTransport (P.mkIndeclinableNoun "такси" P.neuter P.inanimate) ;
Tram = mkTransport (P.mkN "трамвай") ;
Train = mkTransport (P.mkN "поезд") ;
ByFoot = P.mkAdv "пешком" ;
-- actions
-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasAge p num = mkCl (mkVP be_V3 (mkNP num L.year_N) p.name) ;
AHasName p name = mkCl (mkVP (P.mkV3 name_is_V "" "" P.nominative P.accusative) name p.name) ;
AHasChildren p num = mkCl (mkVP have_V3 (mkNP num L.child_N) p.name) ;
AHasRoom p num = mkCl (mkVP have2_V3
(mkNP (mkNP a_Det (P.mkN "номер"))
(SyntaxRus.mkAdv for_Prep (mkNP num (L.man_N)))) p.name) ;
AHasTable p num = mkCl (mkVP have2_V3
(mkNP (mkNP a_Det (P.mkN "стол"))
(SyntaxRus.mkAdv for_Prep (mkNP num (L.man_N)))) p.name) ;
AHungry p = mkCl p.name (P.mkA "голодный") ;
AIll p = mkCl p.name (P.mkA "больной") ;
AKnow p = mkCl p.name (P.regV P.imperfective P.first "зна" "ю" "знал" "знай" "знать" ) ;
ALike p item = mkCl item (P.mkV2 (P.mkV P.imperfective "нравлюсь" "нравишься" "нравится" "нравимся" "нравитесь" "нравятся" "нравился" "нравься" "нравиться") [] P.dative) p.name ;
ALive p co = mkCl p.name (mkVP (mkVP (P.regV P.imperfective P.firstE "жив" "у" "жил" "живи" "жить")) (SyntaxRus.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (P.dirV2 (P.regV P.imperfective P.second "люб" "лю" "любил" "люби" "любить" )) q.name ;
-- AMarried p = mkCl p.name (P.mkA "женатый") ;
AMarried p = let status = case p.name.g of {
R.PGen R.Masc => P.mkAdv "женат" ;
_ => P.mkAdv "замужем"
} in mkCl p.name status ;
AReady p = mkCl p.name (P.mkA "готовый") ;
AScared p = mkCl p.name (P.mkV P.imperfective "боюсь" "боишься" "боится" "боимся" "бойтесь" "боятся" "боялся" "бойся" "бояться") ;
ASpeak p lang = mkCl p.name (P.mkV2 (P.regV P.imperfective P.secondA "говор" "ю" "говорил" "говори" "говорить") "на" P.prepositional) lang ;
AThirsty p = mkCl p.name want_VV (mkVP (P.regV P.imperfective P.firstE "пь" "ю" "пил" "пей" "пить" )) ;
ATired p = mkCl p.name (P.mkA "уставший" R.Rel) ;
AUnderstand p = mkCl p.name (P.regV P.imperfective P.first "понима" "ю" "понимал" "понимай" "понимать") ;
AWant p obj = mkCl p.name (P.dirV2 (P.regV P.imperfective P.mixed "хо" "чу" "хотел" "хоти" "хотеть")) obj ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP (P.mkV P.perfective "пошёл" "пошёл" "пошёл" "пошли" "пошли" "пошли" "пошёл" "пойди" "пойти")) place.to) ;
--AWantGo p place = mkCl p.name want_VV (mkVP (mkVP (P.mkV P.imperfective "иду" "идёшь" "идёт" "идём" "идёте" "идут" "шёл" "иди" "идти")) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl (mkVP (P.mkV2 name_is_V "" P.accusative) p.name))) ;
QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name);
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item cost_V)) ;
ItCost item price = mkCl item (P.mkV2 cost_V "" P.accusative) price ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("увидимся"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p =
mkText (lin Text (ss ("увидимся"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("увидимся")))
(mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (P.mkN "жена" P.animate) ;
Husband = xOf sing (P.mkN "муж" P.animate) ;
Son = xOf sing (P.mkN "сын" P.animate) ;
Daughter = xOf sing (P.mkN "дочь" "дочери" "дочери" "дочь" "дочерью" "дочери" "дочь" "дочери" "дочерей" "дочерям" "дочерей" "дочерьми" "дочерях" P.feminine P.animate) ;
-- Daughter = xOf sing E.daughter_N ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "понедельник" P.masculine ;
Tuesday = mkDay "вторник" P.masculine ;
Wednesday = mkDay "среда" P.feminine ;
Thursday = mkDay "четверг" P.masculine ;
Friday = mkDay "пятница" P.feminine ;
Saturday = mkDay "суббота" P.feminine ;
Sunday = mkDay "воскресенье" P.neuter ;
Tomorrow = P.mkAdv "завтра" ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (P.mkA "дешевый") ;
TheMostExpensive = mkSuperl (P.mkA "дорогой") ;
TheMostPopular = mkSuperl (P.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 (SyntaxRus.mkAdv from_Prep x.name))) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkNP (mkNP y.name (SyntaxRus.mkAdv from_Prep x.name)) t)) ;
HowFarBy y t = mkQS (mkQCl far_IAdv (mkNP y.name t)) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
oper
mkNat : Str -> PN -> NPNationality = \la,co ->
mkNPNationality (mkNP (mkCN (P.mkA la) (P.mkN "язык"))) (mkNP co) (P.mkA la) ;
mkDay : Str -> P.Gender -> {name : NP ; point : Adv ; habitual : Adv} =
\d,g -> mkNPDay (mkNP (P.mkPN d g P.singular P.inanimate)) (mkAdv (P.mkPrep "в" P.accusative) (mkNP (P.mkPN d g P.singular P.inanimate)))
---- (mkAdv on_Prep (mkNP (P.mkPN d)))
(mkAdv (P.mkPrep "по" P.dative) (mkNP a_Quant plNum (mkCN (P.mkN d)))) ;
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- mkCNPlace (mkCN p) (P.mkPrep i P.prepositional) to_Prep ;
mkPlace : Str -> Prep -> {name : CN ; at : Prep ; to : Prep ; isPl : Bool} = \p,i ->
mkCNPlace (mkCN (P.mkN p)) i to_Prep;
mkPlace2 : Str -> Str -> Prep -> {name : CN ; at : Prep ; to : Prep ; isPl : Bool} = \p,p2,i ->
mkCNPlace (mkCN (P.mkN2 (P.mkN p2)) (mkNP (P.mkN p))) i to_Prep;
open_A = P.mkA "открытый";
closed_A = P.mkA "закрытый";
cost_V = P.regV P.imperfective P.secondA "сто" "ю" "стоил" "стой" "стоить" ;
name_is_V = P.mkV P.imperfective "зову" "зовëшь" "зовут" "зовëм" "зовëте" "зовут" "звал" "зови" "звать" ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (mkNP the_Quant a c) (SyntaxRus.mkAdv possess_Prep b)) p ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxRus.mkAdv on_Prep (mkNP the_Det n)
} ;
far_IAdv = ss "как далеко" ** {lock_IAdv = <>} ;
long_IAdv = ss "как долго" ** {lock_IAdv = <>};
mkSuperl : A -> Det = \a -> SyntaxRus.mkDet the_Art (SyntaxRus.mkOrd a) ;
}

View File

@@ -0,0 +1,281 @@
--2 Implementations of Words, with English as example
concrete WordsSnd of Words = SentencesSnd **
open
SyntaxSnd,
-- CommonHindustani,
ParadigmsSnd,
(L = LexiconSnd),
(P = ParadigmsSnd),
MorphoSnd,
-- IrregSnd,
ExtraSnd,
Prelude in {
flags coding = utf8 ;
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 (mkN03 "پنير") ;
Chicken = mkCN (mkN04 "ڪڪڙ") ;
Coffee = mkCN (mkN03 "ڪافي") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN03 "گوشت") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN12 "پيزا") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN09 "چانھ") ;
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 (mkN09 "هوٽل")) in_Prep to_Prep ;
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
DanishCrown = mkCN (mkA "ڊينش") (mkCN (mkN03 "ڪراؤن")) | mkCN (mkN03 "ڪراؤن") ;
Dollar = mkCN (mkN03 "ڊالر") ;
Euro = mkCN (mkN12 "يورو") ; -- to prevent euroes
Lei = mkCN (mkN03 "لي") ;
Leva = mkCN (mkN12 "ليوا") ;
NorwegianCrown = mkCN (mkA "نارويجين") (mkCN (mkN03 "ڪراؤن")) | mkCN (mkN03 "ڪراؤن") ;
Pound = mkCN (mkN03 "پاؤنڊ") ;
Rouble = mkCN (mkN03 "روبل") ;
SwedishCrown = mkCN (mkA "سويڊش") (mkCN (mkN03 "ڪراؤن")) | mkCN (mkN03 "ڪراؤن") ;
Zloty = mkCN (mkN03 "زلوٽي") ;
-- Nationalities
Belgian = mkA "بيلجين" ;
Belgium = mkNP (mkPN "بيلجيم") ;
Bulgarian = mkNat "بلغارين" "بلغاريا" ;
-- Catalan = mkNPNationality (mkNP (mkPN "كیٹالان")) (mkNP (mkPN "كاٹالان")) (mkA "كاٹالانین") ;
Danish = mkNat "ڊينش" "ڊينمارڪ" ;
-- Dutch = mkNPNationality (mkNP (mkPN "ڊچ")) (mkNP the_Quant (mkN14 "نيدرلئنڊ")) (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 (mkN09 "بس" ) ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN09 "فيري") ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN12 "سب وي") ;
Taxi = mkTransport (mkN09 "ٽئڪسي") ;
Train = mkTransport (mkN09 "ريل گاڏي") ;
Tram = mkTransport (mkN09 "ٽرام") ;
ByFoot = P.mkAdv "پيادو" ;
-- Actions: the predication patterns are very often language-dependent.
-- AHasAge p num = mkCl p.name (mkNP (mkNP num L.year_N) (ParadigmsSnd.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 (mkN01 "ڪمرو")) (SyntaxSnd.mkAdv for_Prep (mkNP num (mkN03 "شخص")))) ;
-- AHasTable p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN04 "ميز")) (SyntaxSnd.mkAdv for_Prep (mkNP num (mkN03 "شخص")))) ;
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 "ڄاڻڻ") ;

View File

@@ -0,0 +1,301 @@
-- (c) 2010 Aarne Ranta and Olga Caprotti under LGPL
concrete WordsSpa of Words = SentencesSpa ** open
SyntaxSpa,
BeschSpa,
(E = ExtraSpa),
(L = LexiconSpa),
(P = ParadigmsSpa),
(S = SyntaxSpa),
ParadigmsSpa,
StructuralSpa,
Prelude in {
flags coding = utf8 ;
lin
-- kinds
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "queso") ;
Chicken = mkCN (mkN "pollo") ;
Coffee = mkCN (mkN "café" "cafés" masculine) ;
Fish = mkCN (mkN "pescado") ;
Meat = mkCN (mkN "carne" feminine) ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "té" "tés" masculine) ;
Water = mkCN (mkN "agua") ;
Wine = mkCN L.wine_N ;
-- properties
Bad = L.bad_A ;
Boring = mkA "aburrido" ;
Cheap = cheap_A ;
Cold = L.cold_A ;
Delicious = mkA "delicioso" ;
Expensive = expensive_A ;
Fresh = mkA "fresco" ;
Good = L.good_A ;
Warm = mkA "caliente" ;
Suspect = mkA "sospechoso" ;
-- places
Airport = mkPlace (mkN "aeropuerto") in_Prep ;
AmusementPark = mkPlace (compN (mkN "parque") ["de atracciones"]) in_Prep ;
Bank = mkPlace (mkN "banco") in_Prep ;
Bar = mkPlace (mkN "bar") in_Prep ;
Cafeteria = mkPlace (mkN "cafetería") in_Prep;
Center = mkPlace (mkN "centro") in_Prep;
Church = mkPlace (mkN "iglesia") in_Prep ;
Cinema = mkPlace (mkN "cine") in_Prep ;
Disco = mkPlace (mkN "discoteca") in_Prep;
Hospital = mkPlace (mkN "hospital") in_Prep ;
Hotel = mkPlace (mkN "hotel") in_Prep ;
Museum = mkPlace (mkN "museo") in_Prep ;
Park = mkPlace (mkN "parque") in_Prep ;
Parking = mkPlace (mkN "aparcamiento") in_Prep ;
Pharmacy = mkPlace (mkN "farmacia") in_Prep ;
PostOffice = mkPlace (compN (mkN "oficina") ["de correos"]) in_Prep ;
Pub = mkPlace (mkN "pub" "pubs" masculine) in_Prep ;
Restaurant = mkPlace (mkN "restaurante") in_Prep ;
School = mkPlace (mkN "escuela") in_Prep ;
Shop = mkPlace (mkN "tienda") in_Prep ;
Station = mkPlace (mkN "estación" feminine) in_Prep ;
Supermarket = mkPlace (mkN "supermercado") in_Prep ;
Theatre = mkPlace (mkN "teatro") in_Prep ;
Toilet = mkPlace (mkN "baño") in_Prep ;
University = mkPlace (mkN "universidad" feminine) in_Prep ;
Zoo = mkPlace (mkN "zoo") in_Prep ;
CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurante")) in_Prep to_Prep ;
-- currencies
DanishCrown = mkCN (mkA "daneso") (mkN "corona") | mkCN (mkN "corona") ;
Dollar = mkCN (mkN "dólar") ;
Euro = mkCN (mkN "euro") ;
Lei = mkCN (mkN "leu") ;
Leva = mkCN (mkN "lev" "lev" masculine) ;
NorwegianCrown = mkCN (mkA "noruego") (mkN "corona") | mkCN (mkN "corona") ;
Pound = mkCN (mkN "libra") | mkCN (mkA "esterlino") (mkN "libra") ;
Rouble = mkCN (mkN "rublo") ;
SwedishCrown = mkCN (mkA "sueco") (mkN "corona") | mkCN (mkN "corona") ;
Zloty = mkCN (mkN "zloty" "zlotys" masculine) ;
-- nationalities
Belgian = mkA "belga" ;
Belgium = mkNP (mkPN "Bélgica") ;
Bulgarian = mkNat (mkA "búlgaro") "búlgaro" "Bulgaria" ;
Catalan = mkNat (mkA "catalán") "catalán" "Cataluña" ;
Danish = mkNat (mkA "danés") "danés" "Dinamarca" ;
Dutch = mkNat (mkA "neerlandés") "neerlandés" "Holanda" ;
English = mkNat (mkA "inglés") "inglés" "Inglaterra" ;
Finnish = mkNat (mkA "finlandés") "finés" "Finlandia" ;
Flemish = mkNP (mkPN "flamenco") ;
French = mkNat (mkA "francés") "francés" "Francia" ;
German = mkNat (mkA "alemán") "alemán" "Alemania" ;
Italian = mkNat (mkA "italiano") "italiano" "Italia" ;
Norwegian = mkNat (mkA "noruego") "noruego" "Noruega" ;
Polish = mkNat (mkA "polaco") "polaco" "Polonia" ;
Romanian = mkNat (mkA "rumano") "rumano" "Rumanía" ;
Russian = mkNat (mkA "ruso") "ruso" "Rusia" ;
Spanish = mkNat (mkA "español" "española") "español" "España" ;
Swedish = mkNat (mkA "sueco") "sueco" "Suecia" ;
-- means of transportation
Bike = mkTransport (mkN "bicicleta") ;
Bus = mkTransport (mkN "autobús" "autobuses" masculine) ;
Car = mkTransport L.car_N | mkTransport (mkN "coche") ;
Ferry = mkTransport (mkN "ferry") | mkTransport (mkN "transbordador") ;
Plane = mkTransport (mkN "avión" "aviones" masculine) ;
Subway = mkTransport (mkN "metro") ;
Taxi = mkTransport (mkN "taxi" masculine) ;
Train = mkTransport (mkN "tren") ;
Tram = mkTransport (mkN "tranvía") ;
ByFoot = P.mkAdv "a pie" ;
-- actions
AHasAge p num = mkCl p.name have_V2 (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num (mkN "hijo")) ;
AHasRoom p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "habitación" feminine)) (S.mkAdv for_Prep (mkNP num (mkN "persona")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "mesa")) (S.mkAdv for_Prep (mkNP num (mkN "persona")))) ;
AHasName p name = mkCl p.name (mkV2 (reflV (mkV "llamar"))) name ;
AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "hambre" feminine))) ;
AIll p = mkCl p.name stateCopula (mkAP (mkA "enfermo")) ;
AKnow p = mkCl p.name (mkV (saber_71 "saber")) ;
ALike p item = mkCl item (mkV2 (mkV ("gustar")) dative) p.name ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "vivir")) (S.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (mkV2 (mkV "amar")) q.name ;
AMarried p = mkCl p.name stateCopula (mkAP (mkA "casado")) ;
AReady p = mkCl p.name stateCopula (mkAP (mkA "listo")) ;
AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "miedo"))) ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "hablar")) lang ;
AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sed" feminine))) ;
ATired p = mkCl p.name stateCopula (mkAP (mkA "cansado")) ;
AUnderstand p = mkCl p.name (mkV (defender_29 "entender")) ;
AWant p obj = mkCl p.name (mkV2 (mkV (querer_64 "querer"))) obj ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "llamar")))) ;
QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costar" "cuesto"))) ;
ItCost item price = mkCl item (mkV2 (mkV "costar" "cuesto")) price ;
PropOpen p = mkCl p.name stateCopula (mkAP open_A) ;
PropClosed p = mkCl p.name stateCopula (mkAP closed_A) ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP stateCopula (mkAP open_A)) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP stateCopula (mkAP closed_A)) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP stateCopula (mkAP open_A)) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP stateCopula (mkAP closed_A)) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("nos vemos"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("nos vemos"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("nos vemos")))
(mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ;
-- Relations are expressed as "my wife" or "the wife of my son", as defined by $xOf$
-- below. Languages with productive genitives can use an equivalent of
-- "my son's wife" for non-pronouns, as e.g. in English.
Wife = xOf sing (mkN "esposa" feminine) ;
Husband = xOf sing (mkN "marido" masculine) ;
Son = xOf sing (mkN "hijo" masculine) ;
Daughter = xOf sing (mkN "hija" feminine) ;
Children = xOf plur (mkN "hijo") ;
-- week days
Monday = mkDay "lunes" ;
Tuesday = mkDay "martes" ;
Wednesday = mkDay "miércoles" ;
Thursday = mkDay "jueves" ;
Friday = mkDay "viernes" ;
Saturday = mkDay "sábado" ;
Sunday = mkDay "domingo" ;
Tomorrow = P.mkAdv "mañana" ;
-- transports
--a qué distancia está PLACE
HowFar place = mkQS (mkQCl what_distance_IAdv (mkCl place.name placeCopula) );
--a qué distancia está X de Y
HowFarFrom x y = mkQS (mkQCl what_distance_IAdv
(mkCl y.name (mkVP (mkVP placeCopula)
(S.mkAdv from_Prep x.name))));
-- "a qué distancia está X de Y con T"
-- x,y: Place ; t: ByTransport
HowFarFromBy x y t = mkQS (mkQCl what_distance_IAdv
(mkCl y.name (mkVP
(mkVP (mkVP placeCopula)
(S.mkAdv from_Prep x.name))
t)));
-- "a qué distancia está Y con T"
-- y: Place ; t: ByTransport
HowFarBy y t = mkQS (mkQCl what_distance_IAdv
(mkCl y.name (mkVP (mkVP placeCopula) t)));
oper
what_distance_IAdv = ss "a qué distancia"**{lock_IAdv=<>};
placeCopula = mkV (estar_2 "estar") ;
lin
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name (SyntaxSpa.mkAdv for_Prep place.name)))) ;
-- modifiers of places
------------------------------------------------------------------
-- Common adjectives like "good" or "bad" come before the noun,
-- but most of them come after. So, when making a superlative
-- place, we have to know in which place it belongs.
--
-- The lincat of Superlative is defined in SentencesSpa as a type
-- OrdSuperlative, consisting of {ord: Ord ; isPre: Bool}.
--
-- The function mkSuperl returns an OrdSuperlative. SuperlPlace
-- takes two parameters, OrdSuperlative and PlaceKind, and gives
-- them to placeNPSuperl (defined in SentencesSpa).
-- In placeNPSuperl the value of isPre determines whether the
-- superlative is placed before or after the noun.
------------------------------------------------------------------
TheBest = mkSuperl L.good_A True;
TheClosest = mkSuperl L.near_A False;
TheCheapest = mkSuperl cheap_A False ;
TheMostExpensive = mkSuperl expensive_A False ;
TheMostPopular =
let popular = mkA "popular"
in mkSuperl popular False ;
TheWorst = mkSuperl L.bad_A True ;
SuperlPlace sup p = placeNPSuperl sup p ;
-- auxiliaries
oper
mkNat : A -> Str -> Str -> NPNationality = \nat,lang,co ->
mkNPNationality (mkNP (mkPN lang)) (mkNP (mkPN co)) nat ;
-- not the most elegant solution, but it works
mkDay : Str -> NPDay = \d ->
case last d of {
"s" => mkNPDay (mkNP (mkN d)) (P.mkAdv d) (P.mkAdv ("los" ++ d)) ;
_ => mkNPDay (mkNP (mkN d)) (P.mkAdv d) (P.mkAdv ("los" ++ d + "s"))
} ;
mkPlace : N -> Prep -> CNPlace = \p,i ->
mkCNPlace (mkCN p) i dative ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = S.mkAdv with_Prep (mkNP n)
} ;
mkSuperl : A -> Bool -> OrdSuperlative = \a,bool ->
let ord : Ord = S.mkOrd a in {
ord = ord ;
isPre = bool ;
} ;
-- for adjectives that express temporary state
stateCopula = mkVA (mkV (estar_2 "estar")) ;
cheap_A = mkA "barato" ;
expensive_A = mkA "caro" ;
open_A = mkA "abierto" ;
closed_A = mkA "cerrado" ;
}

View File

@@ -0,0 +1,302 @@
-- (c) 2010 Aarne Ranta under LGPL
--# -coding=latin1
concrete WordsSwe of Words = SentencesSwe **
open SyntaxSwe, ParadigmsSwe, IrregSwe, (L = LexiconSwe), ExtraSwe, Prelude in {
lin
-- kinds of food
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "ost") ;
Chicken = mkCN (mkN "kyckling") ;
Coffee = mkCN (mkN "kaffe" neutrum) ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "kött" "kött") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "te" neutrum) ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = L.bad_A ;
Cheap = mkA "billig" ;
Boring = mkA "tråkig" ;
Cold = L.cold_A ;
Delicious = mkA "läcker" ;
Expensive = mkA "dyr" ;
Fresh = mkA "färsk" ;
Good = L.good_A ;
Suspect = mkA "suspekt" "suspekt" ;
Warm = L.warm_A ;
-- places
Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
AmusementPark = mkPlace (mkN "nöjespark" "nöjesparker") "i" ;
Bank = mkPlace (mkN "bank" "banker") "i" ;
Bar = mkPlace (mkN "bar" "barer") "i" ;
Cafeteria = mkPlace (mkN "café" "café") "på" ;
Center = mkPlace (mkN "innerstad" "innerstäder") "på" ; ----
Church = mkPlace (mkN "kyrka") "i" ;
Cinema = mkPlace (mkN "bio" "bion" "biografer" "biograferna") "på" ; ---- ?
Disco = mkPlace (mkN "diskotek" "diskotek") "på" ;
Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
Hotel = mkPlace (mkN "hotell" "hotell") "på" ;
Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
Park = mkPlace (mkN "park" "parker") "i" ;
Parking = mkPlace (mkN "parkering") "på" ;
Pharmacy = mkPlace (mkN "apotek" "apotek") "i" ;
PostOffice = mkPlace (mkN "post" "poster") "på" ;
Pub = mkPlace (mkN "pub") "på" ;
Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
Shop = mkPlace (mkN "affär" "affärer") "i" ;
School = mkPlace (mkN "skola") "på" ;
Station = mkPlace (mkN "station" "stationer") "på" ;
Supermarket = mkPlace (mkN "snabbköp" "snabbköp") "på" ;
Theatre = mkPlace (mkN "teater" "teatrar") "på" ;
Toilet = mkPlace2 (mkN "toalett" "toaletter") "på" "på" ;
University = mkPlace (mkN "universitet" "universitet") "på" ;
Zoo = mkPlace (mkN "djurpark" "djurparker") "i" ;
CitRestaurant cit =
mkCNPlace (mkCN cit (mkN "restaurang" "restauranger")) on_Prep to_Prep ;
-- currencies
DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ;
Dollar = mkCN (mkN "dollar" "dollar") ;
Euro = mkCN (mkN "euro" "euro") ;
Lei = mkCN (mkN "lei" "lei") ;
Leva = mkCN (mkN "leva" "leva") ;
NorwegianCrown = mkCN (mkA "norsk") (mkN "krona") | mkCN (mkN "krona") ;
Pound = mkCN (mkN "pund" "pund") ; ---- ett pund ?
Rouble = mkCN (mkN "rubel" "rubeln" "rubel" "rubeln") ; ---- ?
Rupee = mkCN (mkN "rupee" "rupee") ; ----
SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ;
Zloty = mkCN (mkN "zloty" "zloty") ;
Yuan = mkCN (mkN "yuan" "yuan") ;
-- nationalities
Belgian = mkA "belgisk" ;
Belgium = mkNP (mkPN "Belgien") ;
Bulgarian = mkNat "bulgarisk" "Bulgarien" ;
Catalan = mkNat "katalansk" "Katalonien" ;
China = mkNat "kinesisk" "Kina" ;
Danish = mkNat "dansk" "Danmark" ;
Dutch = mkNat "nederländsk" "Nederländerna" ;
English = mkNat "engelsk" "England" ;
Finnish = mkNat "finsk" "Finland" ;
Flemish = mkNP (mkPN "flamländska") ;
French = mkNat "fransk" "Frankrike" ;
German = mkNat "tysk" "Tyskland" ;
Hindi = mkNP (mkPN "hindi") ;
Indian = mkA "indisk" ;
India = mkNP (mkPN "Indien") ;
Italian = mkNat "italiensk" "Italien" ;
Norwegian = mkNat "norsk" "Norge" ;
Polish = mkNat "polsk" "Polen" ;
Romanian = mkNat "rumänsk" "Rumänien" ;
Russian = mkNat "rysk" "Ryssland" ;
Spanish = mkNat "spansk" "Spanien" ;
Swedish = mkNat "svensk" "Sverige" ;
-- means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN "buss") ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "färja") ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN "tunnelbana") ;
Taxi = mkTransport (mkN "taxi" "taxin" "taxibilar" "taxibilarna") ; ----
Train = mkTransport L.train_N ;
Tram = mkTransport (mkN "spårvagn") ;
ByFoot = ParadigmsSwe.mkAdv "till fots" ;
-- actions
AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ;
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 "rum" "rum"))
(SyntaxSwe.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "bord" "bord"))
(SyntaxSwe.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
AHungry p = mkCl p.name (mkA "hungrig") ;
AIll p = mkCl p.name (mkA "sjuk") ;
AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxSwe.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
AMarried p = mkCl p.name (mkA "gift") ;
AReady p = mkCl p.name (mkA "färdig") ;
AScared p = mkCl p.name (mkA "rädd") ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
AThirsty p = mkCl p.name (mkA "törstig") ;
ATired p = mkCl p.name (mkA "trött") ;
AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ;
AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ;
QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("vi ses")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "fru" "fruar") ;
Husband = xOf sing L.man_N ;
Son = xOf sing (mkN "son" "söner") ;
Daughter = xOf sing (mkN "dotter" "döttrar") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "måndag" ;
Tuesday = mkDay "tisdag" ;
Wednesday = mkDay "onsdag" ;
Thursday = mkDay "torsdag" ;
Friday = mkDay "fredag" ;
Saturday = mkDay "lördag" ;
Sunday = mkDay "söndag" ;
Tomorrow = ParadigmsSwe.mkAdv "imorgon" ;
-- transports
HowFar place =
mkQS (mkQCl far_IAdv (mkCl (mkVP place.to))) ;
HowFarFrom x y =
mkQS (mkQCl far_IAdv (mkCl (mkVP (mkVP y.to)
(SyntaxSwe.mkAdv from_Prep x.name)))) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkCl (mkVP (mkVP (mkVP y.to)
(SyntaxSwe.mkAdv from_Prep x.name)) t))) ;
HowFarBy place t =
mkQS (mkQCl far_IAdv (mkCl (mkVP (mkVP place.to) t))) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA "billig") ;
TheMostExpensive = mkSuperl (mkA "dyr") ;
TheMostPopular = mkSuperl (mkA "populär") ;
TheWorst = mkSuperl L.bad_A ;
SuperlPlace sup p = placeNP sup p ;
oper
mkNat : Str -> Str -> NPNationality = \nat,co ->
mkNPNationality (mkNP (mkPN (nat + "a"))) (mkNP (mkPN co)) (mkA nat) ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d) in
mkNPDay day (SyntaxSwe.mkAdv on_Prep day)
(SyntaxSwe.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep ; isPl : Bool} = \p,i ->
mkCNPlace (mkCN p) (mkPrep i) to_Prep ;
mkPlace2 : N -> Str -> Str -> {name : CN ; at : Prep ; to : Prep ; isPl : Bool} =
\p,i,t -> mkCNPlace (mkCN p) (mkPrep i) (mkPrep t) ;
open_A = mkA "öppen" "öppet" ;
closed_A = mkA "stängd" "stängt" ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxSwe.mkAdv with_Prep (mkNP n)
} ;
mkSuperl : A -> Det = \a -> mkDet the_Art (mkOrd a) ;
far_IAdv = ExtraSwe.IAdvAdv L.far_Adv ;
--------------------------------------------------
-- New 30/11/2011 AR
--------------------------------------------------
lin
Thai = mkNPNationality (mkNP (mkPN "thai")) (mkNP (mkPN "Thailand")) (mkA "thailändsk") ;
Baht = mkCN (mkN "baht" "baht") ;
Rice = mkCN (mkN "ris" "ris") ;
Pork = mkCN (mkN "fläsk" "fläsk") ;
Beef = mkCN (mkN "nötkött" "nötkött") ;
Egg = mkCN L.egg_N ;
Noodles = mkCN (mkN "nudel" "nudlar") ;
Shrimps = mkCN (mkN "räka") ;
Chili = mkCN (mkN "chili" "chilier") ;
Garlic = mkCN (mkN "vitlök") ;
Durian = mkCN (mkN "durian" "durianer") ;
Mango = mkCN (mkN "mango" "mangoer") ;
Pineapple = mkCN (mkN "ananas" "ananaser") ;
Coke = mkCN (mkN "kola") ;
IceCream = mkCN (mkN "glass") ;
Salad = mkCN (mkN "sallad" "sallader") ;
OrangeJuice = mkCN (mkN "apelsinjuice" "apelsinjuicer") ;
Lemonade = mkCN (mkN "läsk") ;
Beach = mkPlace (mkN "badstrand" "badstränder") "på" ;
ItsRaining = mkCl (mkVP L.rain_V0) ;
ItsCold = mkCl (mkVP L.cold_A) ;
ItsWarm = mkCl (mkVP L.warm_A) ;
ItsWindy = mkCl (mkVP (mkV "blåser")) ;
SunShine = mkCl (mkNP the_Det L.sun_N) (skina_V) ;
Smoke = mkVP (mkV "röker") ;
ADoctor = mkProfession (mkN "läkare" "läkare") ;
AProfessor = mkProfession (mkN "professor" "professorer") ;
ALawyer = mkProfession (mkN "jurist" "jurister") ;
AEngineer = mkProfession (mkN "ingenjör" "ingenjörer") ;
ATeacher = mkProfession (mkN "lärare" "lärare") ;
ACook = mkProfession (mkN "kock") ;
AStudent = mkProfession (mkN "student" "srudenter") ;
ABusinessman = mkProfession (mkN "affärsman" "affärsmannen" "affärsmän" "affärsmännen") ;
oper
mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name (mkVP (CompBareCN (mkCN n))) ;
}

View File

@@ -0,0 +1,319 @@
concrete WordsTha of Words = SentencesTha **
open
SyntaxTha,
ParadigmsTha,
(P = ParadigmsTha),
(R = ResTha),
(L = LexiconTha),
Prelude in {
flags coding = utf8 ;
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 L.cheese_N ;
Chicken = mkCN (mkN "ไก่") ;
Coffee = mkCN (mkN (R.thword "กา" "แฟ")) ;
Fish = mkCN L.fish_N ;
Meat = mkCN L.meat_N ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN (R.thword "พิซ" "ซา") "ถาด") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "ชา") ;
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 (R.thword "น่า" "เบื่อ") ;
Cheap = mkA (R.thword "รา" "คา" "ถูก") ;
Cold = L.cold_A ;
Delicious = mkA "อร่อย" ;
Expensive = mkA "แพง" ;
Fresh = mkA "สด" ;
Good = mkA "ดี" ;
Suspect = mkA (R.thword "สง" "สัย") ;
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 (placeN (R.thword "สนาม" "บิน")) ;
AmusementPark = mkPlace (placeN (R.thword "สวน" "สนุก")) ;
Bank = mkPlace (placeN (R.thword "ธนา" "คาร")) ;
Bar = mkPlace (placeN (R.thword "บาร์")) ;
Cafeteria = mkPlace (placeN (R.thword "โรง" "อา" "หาร")) ;
Center = mkPlace (placeN (R.thword "ศูนย์" "กลาง")) ;
Cinema = mkPlace (placeN (R.thword "โรง" "หนัง")) ;
Church = mkPlace (placeN (R.thword "โบส" "ถ์")) ;
Disco = mkPlace (placeN (R.thword "ดิส" "โก้")) ;
Hospital = mkPlace (placeN (R.thword "โรง" "พยา" "บาล")) ;
Hotel = mkPlace (placeN (R.thword "โรง" "แรม")) ;
Museum = mkPlace (placeN (R.thword "พิ" " พิธ" "ภัณ" "ฑ์")) ;
Park = mkPlace (placeN (R.thword "สวน")) ;
Parking = mkPlace (placeN (R.thword "ที่" "จอด" "รถ")) ;
Pharmacy = mkPlace (placeN (R.thword "ร้าน" "ขาย" "ยา")) ;
PostOffice = mkPlace (placeN (R.thword "ไปร" "ษณี" "ย์")) ;
Pub = mkPlace (placeN (R.thword "ร้าน" "เหล้า")) ;
Restaurant = mkPlace L.restaurant_N ;
School = mkPlace L.school_N ;
Shop = mkPlace L.shop_N ;
Station = mkPlace (placeN (R.thword "สถา" "นี")) ;
Supermarket = mkPlace (placeN (R.thword "ซุป" "เปอ" "ร์" "มา" "เก็ต")) ;
Theatre = mkPlace (placeN (R.thword "โรง" "ละ" "คร")) ;
Toilet = mkPlace (placeN (R.thword "ห้อง" "น้ำ")) ;
University = mkPlace L.university_N ;
Zoo = mkPlace (placeN (R.thword "สวน" "สัต" "ว์")) ;
CitRestaurant cit = mkCNPlace (mkCN cit L.restaurant_N) at_Prep noPrep ;
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
DanishCrown = mkCN (mkA (R.thword "เดน" "มาร์ค")) (mkN "โครน") | mkCurrency "โครน" ; ---#
Dollar = mkCurrency (R.thword "ดอล" "ล่า" "ห์") ;
Euro = mkCurrency (R.thword "ยู" "โร") ;
Lei = mkCurrency "ลี" ;
Leva = mkCurrency (R.thword "ลี" "วา") ;
NorwegianCrown = mkCN (mkA (R.thword "นอร" "เว" "ย์")) (mkN "โครน") | mkCurrency "โครน" ;
Pound = mkCurrency (R.thword "ปอน" "ด์") ;
Rouble = mkCurrency (R.thword "รู" "เบิล") ;
SwedishCrown = mkCN (mkA (R.thword "สวี" "ดิช")) (mkN "โครน") | mkCurrency "โครน" ;
Zloty = mkCurrency (R.thword "สะ" "ลอ" "ตี้") ;
-- Nationalities
Belgian = mkA (R.thword "เบล" "เยี่ยน") ;
Belgium = mkNP (mkPN (R.thword "เบล" "เยี่ยม")) ;
Bulgarian = mkNat (R.thword "บัล" "แก" "เรียน") ;
Catalan = mkNat (R.thword "คะ" "ตะ" "ลัน") ;
Danish = mkNat (R.thword "เดน" "นิช") ;
Dutch = mkNat (R.thword "ดัทช์") ;
English = mkNat (R.thword "อัง" "กฤษ") ;
Finnish = mkNat (R.thword "ฟิน" "นิช") ;
Flemish = mkNP (mkPN (R.thword "เฟลม" "มิช")) ;
French = mkNat (R.thword "ฝรั่ง" "เศส") ;
German = mkNat (R.thword "เยอร" "มัน") ;
Italian = mkNat (R.thword "อิ" "ตา" "เลียน") ;
Norwegian = mkNat (R.thword "นอร" "เวย์" "เจี้ยน") ;
Polish = mkNat (R.thword "โป" "ลิช") ;
Romanian = mkNat (R.thword "โร" "มา" "เนียน") ;
Russian = mkNat (R.thword "รัส" "เซียน") ;
Spanish = mkNat (R.thword "สแปน" "นิช") ;
Swedish = mkNat (R.thword "สวี" "ดิช") ;
-- Means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN (R.thword "รถ" "เม" "ล์")) ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN (R.thword "เรือ" "เฟอ" "รี่")) ;
Plane = mkTransport L.airplane_N ;
Subway = mkTransport (mkN (R.thword "รถ" "ไฟ" "ใต้" "ดิน")) ;
Taxi = mkTransport (mkN (R.thword "รถ" "แท็ก" "ซี่")) ;
Train = mkTransport L.train_N ;
Tram = mkTransport (mkN (R.thword "รถ" "ราง")) ;
ByFoot = P.mkAdv (R.thword "ด้วย" "การ" "เดิน") ;
-- Actions: the predication patterns are very often language-dependent.
AHasAge p num = mkCl p.name (mkNP (mkNP num L.year_N) (ParadigmsTha.mkAdv (R.thword "อา" "ยุ"))) ;
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 "ห้อง")) (SyntaxTha.mkAdv for_Prep (mkNP num (mkN "หมาย" "เลข")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "โต๊ะ")) (SyntaxTha.mkAdv for_Prep (mkNP num (mkN "ตัว" "ที่")))) ;
AHasName p name = mkCl p.name (mkV2 "ชื่อ") name ; ---
AHungry p = mkCl p.name (mkA (R.thword "หิว" "ข้าว")) ;
AIll p = mkCl p.name (mkA (R.thword "เจ็บ" "ปวย")) ;
AKnow p = mkCl p.name <lin V L.know_V2 : V> ;
ALike p item = mkCl p.name (mkV2 (mkV "ชอบ")) item ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV (R.thword "อา" "ศัย" "อยู่"))) (SyntaxTha.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name L.love_V2 q.name ;
AMarried p = mkCl p.name (mkAP L.married_A2) ;
AReady p = mkCl p.name L.ready_A ;
AScared p = mkCl p.name (mkA "กลัว") ;
ASpeak p lang = mkCl p.name L.speak_V2 lang ;
AThirsty p = mkCl p.name (mkA (R.thword "กระ" "หาย" "น้ำ")) ;
ATired p = mkCl p.name (mkA "เหนื่อย") ;
AUnderstand p = mkCl p.name (mkV (R.thword "เข้า" "ใจ")) ;
AWant p obj = mkCl p.name (mkV2 (mkV (R.thword "ต้อง" "การ"))) obj ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 "ชื่อ")) ; ---
QWhatAge p = mkQS (mkQCl (mkIComp how8much_IAdv) (mkNP p.name (ParadigmsTha.mkAdv (R.thword "อา" "ยุ")))) ; --- Adv
HowMuchCost item = mkQS (mkQCl (mkIComp how8much_IAdv) item) ;
ItCost item price = mkCl item (mkV2 (R.thword "เป็น" "รา" "คา")) price ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss (R.thword "เจอ" "กัน"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss (R.thword "เจอ" "กัน" "ที่"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss (R.thword "เจอ" "กัน" "ที่")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "มย วิฝเ" or "มย สoณส วิฝเ", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "ตหเ วิฝเ oฝ มย สoน" for non-pronouns.
Wife = xOf (R.thword "ภร" "รยา") ; -- polite
Husband = xOf (R.thword "สา" "มี") ; -- polite
--- Wife = xOf "เมีย" ; ---- familiar
--- Husband = xOf "ผัว" ; ---- familiar
Son = xOf (R.thword "ลูก" "ชาย") ;
Daughter = xOf (R.thword "ลูก" "สาว") ;
Children = xOf L.child_N.s ; ----
-- week days
Monday = mkDay (R.thword "วัน" "จั" "นท" "ร์") ;
Tuesday = mkDay (R.thword "วัน" "อัง" "คาร") ;
Wednesday = mkDay (R.thword "วัน" "พุธ") ;
Thursday = mkDay (R.thword "วัน" "พฤ" "หัส" "บดี") ;
Friday = mkDay (R.thword "วัน" "ศุกร์") ;
Saturday = mkDay (R.thword "วัน" "เสาร์") ;
Sunday = mkDay (R.thword "วัน" "อา" "ทิตย์") ;
Tomorrow = P.mkAdv (R.thword "วัน" "พรุ่ง" "นี้") ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA (R.thword "รา" "คา" "ถูก")) ;
TheMostExpensive = mkSuperl (mkA "แพง") ;
TheMostPopular = mkSuperl (mkA (R.thword "โด่ง" "ดัง")) ;
TheWorst = mkSuperl L.bad_A ;
SuperlPlace sup p = placeNP sup p ;
-- transports
HowFar place = mkQS (mkQCl howFar.howfar place.name) ; ---- (mkNP place.name howFar.far)) ;
HowFarFrom x y =
mkQS (mkQCl howFar.how (mkCl (mkNP y.name howFar.far) (lin AP (R.thbind from_Prep x.name)))) ; --- no yuu
HowFarFromBy x y t =
mkQS (mkQCl howFar.how (mkCl (mkNP y.name howFar.far)
(lin AP (R.thbind from_Prep (mkNP x.name t))))) ;
-- mkQS (mkQCl howFar.how (mkCl (mkNP y.name howFar.far)
-- (SyntaxTha.mkAdv from_Prep (mkNP x.name t)))) ;
HowFarBy y t = mkQS (mkQCl howFar.how (mkCl (mkNP y.name howFar.far) <t : AP>)) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN (mkCN trans.name (mkSC (mkVP L.go_V))) place.to))) ;
-- auxiliaries
oper
-- thpron = R.thpron ;
mkNat : Str -> NPNationality = \nat ->
mkNPNationality (mkNP (mkCN (mkA nat) L.language_N)) (mkNP (mkCN (mkA nat) L.country_N)) (mkA nat) ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = lin NP (ss d) in
mkNPDay day (SyntaxTha.mkAdv noPrep day)
(SyntaxTha.mkAdv noPrep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
mkPlace : N -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p ->
mkCNPlace (mkCN p) at_Prep noPrep ;
open_A = P.mkA "เปิด" ;
closed_A = P.mkA "ปิด" ;
xOf : Str -> NPPerson -> NPPerson = \f,p ->
{name = mkNP the_Det (mkCN (personN f) (SyntaxTha.mkAdv possess_Prep p.name)) ;
isPron = False ; poss = the_Quant} ; ---- poss not used
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxTha.mkAdv (mkPrep "โดย") (mkNP n)
} ;
mkSuperl : A -> Det = \a -> SyntaxTha.mkDet the_Art (SyntaxTha.mkOrd a) ;
mkCurrency : Str -> CN = \s -> mkCN (mkN [] s) ; ---- just a classifier
howFar : {howfar : IComp ; far : Adv ; how : IAdv} = { --- to avoid yuu
howfar = lin IComp (ss ("ไกล" + "เท่า" + "ไร")) ; far = lin Adv (ss ("ไกล" + "เท่า" + "ไร")) ; how = lin IAdv (ss [])
} ;
at_Prep = mkPrep "ที่" ;
noPrep = mkPrep [] ;
--------------------------------------------------
-- New 30/11/2011 AR
--------------------------------------------------
lin
Thai = mkNat "ไทย" ;
Baht = mkCurrency "บาท" ;
Rice = mkCN (mkN ("ข้าว")) ;
Pork = mkCN (mkN ("หมู")) ;
Beef = mkCN (mkN ("เนื้อ")) ;
Egg = mkCN L.egg_N ;
Noodles = mkCN (mkN (R.thword "ก๋วย" "เตี๋ยว")) ;
Shrimps = mkCN (mkN ("กุ้ง")) ;
Chili = mkCN (mkN "พริก") ;
Garlic = mkCN (mkN (R.thword "กะ" "เทียม")) ;
Durian = mkCN (mkN (R.thword "ทุ" "เรียน")) ;
Mango = mkCN (mkN (R.thword "มะ" "ม่วง")) ;
Pineapple = mkCN (mkN (R.thword "สับ" "ปะ" "รด")) ;
Coke = mkCN (mkN ("โค้ก")) ;
IceCream = mkCN (mkN (R.thword "ไอ" "ศ" "กรีม")) ;
Salad = mkCN (mkN "สลัด") ;
OrangeJuice = mkCN (mkN (R.thword "น้ำ" "ส้ม" "คั้น")) ;
Lemonade = mkCN (mkN (R.thword "น้ำ" "มะ" "นาว")) ;
Beach = mkPlace (placeN (R.thword "หาด")) ;
ItsRaining = mkCl (mkVP L.rain_V0) ;
ItsCold = mkCl (mkVP L.cold_A) ;
ItsWarm = mkCl (mkVP L.warm_A) ;
ItsWindy = mkCl (mkVP (P.mkA (R.thword "ลม" "จัด"))) ;
SunShine = mkCl (mkNP the_Det L.sun_N) (mkVP (R.regV (R.thword "ฉาย" "แสง"))) ;
Smoke = mkVP (P.mkV (R.thword "สูบ" "บุ" "รี")) ;
ADoctor = mkProfession (P.personN "หมอ") ;
AProfessor = mkProfession (P.personN (R.thword "อา" "จารย์")) ;
ALawyer = mkProfession (P.personN (R.thword "มัก" "กฎ" "หมาย")) ;
AEngineer = mkProfession (P.personN (R.thword "วิ" "ศวกร")) ;
ATeacher = mkProfession (P.personN "ครู") ;
ACook = mkProfession (P.personN (R.thword "ภัก" "ษกาน")) ;
AStudent = mkProfession (P.personN (R.thword "นัก" "ศึก" "ษา")) ;
ABusinessman = mkProfession (P.personN (R.thword "ฝู้" "ประ" "กอบ" "การ")) ;
oper
mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;
}

View File

@@ -0,0 +1,280 @@
--2 Implementations of Words, with English as example
concrete WordsUrd of Words = SentencesUrd **
open
SyntaxUrd,
CommonHindustani,
ParadigmsUrd,
(L = LexiconUrd),
(P = ParadigmsUrd),
-- IrregUrd,
ExtraUrd,
Prelude in {
flags coding = utf8 ;
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) (ParadigmsUrd.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 "كمرہ")) (SyntaxUrd.mkAdv for_Prep (mkNP num (P.mkN "شخص" "شخص" "شخص" "اشخاص" "اشخاص" "شخصو" masculine)))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "میز")) (SyntaxUrd.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)) (SyntaxUrd.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.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 ["كی قیمت"]))) ;
-- HowMuchCost item = mkQS (mkQCl howMuch_IAdv (mkNP cost_Predet (modNP 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) ;
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 "می وiفع" or "می سon'س وiفع", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "تہع وiفع 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 (SyntaxUrd.mkAdv from_Prep x.name))) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkNP (mkNP y.name (SyntaxUrd.mkAdv from_Prep x.name)) t)) ;
HowFarBy y t = mkQS (mkQCl far_IAdv (mkNP y.name t)) ;
WhichTranspPlace trans place =
mkQS (mkQCl (SyntaxUrd.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
-- let day = (mkNP (mkCN (mkN d))) in
mkNPDay (mkNP (mkCN (mkN d))) (SyntaxUrd.mkAdv to_Prep (mkNP (mkCN (mkN d))))
(SyntaxUrd.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 : SentencesUrd.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 = SyntaxUrd.mkAdv by8means_Prep (mkNP n)
} ;
-- mkSuperl : A -> Det = \a -> SyntaxUrd.mkDet the_Art (SyntaxUrd.mkOrd a) ;
mkSuperl : A -> Det = \a -> lin Det { s = \\n,g,c => a.s ! n ! g ! c ! Superl ; n = Sg } ;
far_IAdv = ExtraUrd.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};
}