1
0
forked from GitHub/gf-rgl

Merge pull request #317 from inariksit/hungarian

Hungarian
This commit is contained in:
Inari Listenmaa
2020-04-28 14:59:29 +02:00
committed by GitHub
35 changed files with 1549 additions and 964 deletions

View File

@@ -6,19 +6,24 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
-- : A -> AP ;
PositA a = emptyAP ** {
s = a.s ! Posit
s = \\n,c =>
let adj : Noun = (a ** {s = a.s ! Posit}) in
caseFromStem glue adj c n ;
} ;
-- : A -> NP -> AP ;
ComparA a np = emptyAP ** {
s = a.s ! Compar ;
compar = np.s ! Ade ;
ComparA a np = UseComparA a ** {
compl = \\n => applyAdp (caseAdp Ade) np ;
-- compl = applyAdp (prepos Nom "mint") np ;
} ;
-- : A2 -> NP -> AP ; -- married to her
ComplA2 a2 np = emptyAP ** {
s = a2.s ! Posit ;
compar = np.s ! a2.c2.c ++ a2.c2.s
ComplA2 a2 np = let ap : AP = PositA a2 in ap ** {
s = case a2.isPost of {False => ap.s ; _ => \\_,_ => []} ;
compl = \\n => applyAdp a2.c2 np
++ case a2.isPost of {
True => ap.s ! n ! Nom ;
False => [] } ;
} ;
-- : A2 -> AP ; -- married to itself
@@ -29,13 +34,15 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
-- : A -> AP ; -- warmer
UseComparA a = emptyAP ** {
s = a.s ! Compar ;
s = \\n,c =>
let adj : Noun = (a ** {s = a.s ! Compar}) in
caseFromStem glue adj c n ;
} ;
-- : CAdv -> AP -> NP -> AP ; -- as cool as John
CAdvAP adv ap np = ap ** {
s = \\n => adv.s ++ ap.s ! n ;
compar = ap.compar ++ adv.p ++ np.s ! Nom
s = \\n,c => adv.s ++ ap.s ! n ! c ;
compl = \\n => ap.compl ! n ++ adv.p ++ applyAdp (caseAdp Nom) np ;
} ;
-- The superlative use is covered in $Ord$.
@@ -53,7 +60,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
-- : AdA -> AP -> AP ;
AdAP ada ap = ap ** {
s = \\af => ada.s ++ ap.s ! af ;
s = \\n,c => ada.s ++ ap.s ! n ! c ;
} ;
@@ -61,7 +68,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
-- : AP -> Adv -> AP ; -- warm by nature
AdvAP ap adv = ap ** {
s = \\af => ap.s ! af ++ adv.s ;
s = \\n,c => ap.s ! n ! c ++ adv.s ;
} ;
}

View File

@@ -12,7 +12,8 @@ lin
-- : Prep -> NP -> Adv ;
PrepNP prep np = {
s = prep.pr ++ np.s ! prep.c ++ prep.s ;
s = applyAdp prep np ;
isPre = False ;
} ;
-- Adverbs can be modified by 'adadjectives', just like adjectives.

View File

@@ -1,4 +1,4 @@
concrete CatHun of Cat = CommonX ** open ResHun, Prelude in {
concrete CatHun of Cat = CommonX - [Adv] ** open ResHun, Prelude in {
flags optimize=all_subs ;
@@ -58,7 +58,7 @@ concrete CatHun of Cat = CommonX ** open ResHun, Prelude in {
-- ``` Predet (QuantSg | QuantPl Num) Ord
-- as defined in NounHun.
CN = ResHun.Noun ;
CN = ResHun.CNoun ;
NP = ResHun.NounPhrase ;
Pron = ResHun.Pronoun ; --Pronouns need enough info to turn it into NP or Quant.
Det = ResHun.Determiner ;
@@ -66,7 +66,7 @@ concrete CatHun of Cat = CommonX ** open ResHun, Prelude in {
Quant = ResHun.Quant ;
Num = ResHun.Num ;
Ord = {
s : Number => Str ; -- Number => Case => Str ; -- Ord can come from AP and become AP again
s : Number => Case => Str ; -- Ord can come from AP and become AP again
n : Number -- Ord can come from Num, which has inherent number
} ;
DAP = ResHun.Determiner ;
@@ -78,7 +78,7 @@ concrete CatHun of Cat = CommonX ** open ResHun, Prelude in {
Card = ResHun.Numeral ;
Numeral = ResHun.Numeral ;
Digits = {s : CardOrd => Str ; n : Number} ;
Digits = {s : CardOrd => Str} ;
@@ -118,4 +118,9 @@ concrete CatHun of Cat = CommonX ** open ResHun, Prelude in {
N3 = ResHun.Noun ;
PN = ResHun.NounPhrase ;
Adv = {s : Str ; isPre : Bool} ;
linref
CN = linCN ;
}

View File

@@ -3,36 +3,48 @@ concrete ConjunctionHun of Conjunction =
-- Adverb and other simple {s : Str} types.
lincat
[Adv],[AdV],[IAdv],[S] = {s1,s2 : Str} ;
[AdV],[IAdv],[S] = {s1,s2 : Str} ;
lin
BaseAdv, BaseAdV, BaseIAdv, BaseS = twoSS ;
ConsAdv, ConsAdV, ConsIAdv, ConsS = consrSS comma ;
ConjAdv, ConjAdV, ConjIAdv, ConjS = conjunctDistrSS ;
BaseAdV, BaseIAdv, BaseS = twoSS ;
ConsAdV, ConsIAdv, ConsS = consrSS comma ;
ConjAdV, ConjIAdv, ConjS = conjunctDistrSS ;
lincat
[Adv] = {s1,s2 : Str ; isPre : Bool} ;
lin
BaseAdv x y = y ** twoSS x y ;
ConsAdv x xs = xs ** consrSS comma x xs ;
ConjAdv co xs = xs ** conjunctDistrSS co xs ;
-- Adjectival phrases
lincat
[AP] = {s1,s2 : Number => Str} ;
[AP] = {s1,s2 : Number => Case => Str} ;
lin
BaseAP x y =
-- Don't try to have discontinuous comparative forms
let xCont : AP = x ** {s = \\n => x.s ! n ++ x.compar} ;
yCont : AP = y ** {s = \\n => y.s ! n ++ y.compar} ;
in twoTable Number xCont yCont ;
let xCont : AP = x ** {s = \\n,c => x.s ! n ! c ++ x.compl ! n} ;
yCont : AP = y ** {s = \\n,c => y.s ! n ! c ++ y.compl ! n} ;
in twoTable2 Number Case xCont yCont ;
ConsAP a as =
let aCont : AP = a ** {s = \\n => a.s ! n ++ a.compar} ;
in consrTable Number comma aCont as ;
ConjAP co as = conjunctDistrTable Number co as ** {compar = []} ;
let aCont : AP = a ** {s = \\n,c => a.s ! n ! c ++ a.compl ! n} ;
in consrTable2 Number Case comma aCont as ;
ConjAP co as = conjunctDistrTable2 Number Case co as ** {compl = \\_ => []} ;
-- Noun phrases
lincat
[NP] = ResHun.BaseNP ** {s1,s2 : Case => Str} ;
[NP] = ResHun.BaseNP ** {s1,s2 : Possessor => Case => Str} ;
lin
BaseNP x y = twoTable Case x y ** y ;
ConsNP x xs = consrTable Case comma x xs ** xs ;
ConjNP co xs = conjunctDistrTable Case co xs ** xs ** {agr = <P3,co.n>};
BaseNP x y = twoTable2 Possessor Case x y ** y ;
ConsNP x xs = xs ** consrTable2 Possessor Case comma x xs ;
ConjNP co xs = conjunctDistrTable2 Possessor Case co xs ** xs ** {
agr = <P3, case xs.agr.p2 of {
Pl => Pl ;
_ => co.n }>
} ;
-- Relative sentences
lincat

View File

@@ -9,10 +9,10 @@ concrete GrammarHun of Grammar =
RelativeHun,
ConjunctionHun,
PhraseHun,
TextX,
TextX - [Adv],
StructuralHun,
IdiomHun,
TenseX
TenseX - [Adv]
** {
flags startcat = Phr ; unlexer = text ; lexer = text ;

View File

@@ -8,93 +8,93 @@ concrete LexiconHun of Lexicon = CatHun **
lin airplane_N = mkN "repülőgép" "repülőgépet" ;
-- lin alas_Interj = mkInterj "" ;
-- lin already_Adv = mkA "" ;
lin animal_N = mkN "állat" ;
lin animal_N = mkN "állat" "állatot" ;
-- lin answer_V2S = mkV2S "válasz" ;
lin apartment_N = mkN "lakás" ;
lin apartment_N = mkN "lakás" "lakást" ;
lin apple_N = mkN "alma" ;
lin art_N = mkN "müvészet" ;
lin art_N = mkN "művészet" "művészetet" ;
-- lin ashes_N = mkN "" ;
-- lin ask_V2Q = mkV2 "" ;
----
-- B
lin baby_N = mkN "bébi" ;
lin baby_N = mkN "bébi" "bébit" ;
-- lin back_N = mkN "" ;
lin bad_A = mkA "rossz" ;
lin bank_N = mkN "bank" ;
lin bank_N = mkN "bank" "bankot" ;
-- lin bark_N = mkN "" ;
lin beautiful_A = mkA "szép" ;
-- lin become_VA = mkVA "" ;
lin beer_N = mkN "sör" "sört" ;
-- lin beg_V2V = mkV2 "" ;
lin belly_N = mkN "has" ;
lin belly_N = mkN "has" "hasat" ;
lin big_A = mkA "nagy" ;
lin bike_N = mkN "bicikli" ;
lin bird_N = mkN "madár" ;
lin bike_N = mkN "bicikli" "biciklit";
lin bird_N = mkN "madár" "madarat";
-- lin bite_V2 = mkV2 "" ;
lin black_A = mkA "fekete" ;
lin blood_N = mkN "vér" ;
lin blood_N = mkN "vér" "vért";
-- lin blow_V = mkV "" ;
lin blue_A = mkA "kék" ;
lin boat_N = mkN "hajó" ;
lin boat_N = mkN "hajó" "hajót" "hajók" "hajója" ;
-- lin bone_N = mkN "" ;
-- lin boot_N = mkN "" ;
-- lin boss_N = mkN "" ;
lin book_N = mkN "könyv" ;
lin book_N = mkN "könyv" "könyvet" ;
lin boy_N = mkN "fiú" ;
lin bread_N = mkN "kenyér" ;
lin bread_N = mkN "kenyér" "kenyeret";
lin break_V2 = mkV2 "szünet" ;
lin breast_N = mkN "mell" ;
lin breast_N = mkN "mell" "mellet" ;
-- lin breathe_V = mkV "" ;
-- lin broad_A = mkA "" ;
-- lin brother_N2 = mkN "öccsém" ; (possessive form?)
lin brown_A = mkA "barna" ;
-- lin burn_V = mkV "" ;
lin butter_N = mkN "vaj" ;
lin butter_N = mkN "vaj" "vajat" ;
-- lin buy_V2 = mkV2 "" ;
----
-- C
lin camera_N = mkN "fényképezőgép" ;
lin camera_N = mkN "fényképezőgép" "fényképezőgépet";
-- lin cap_N = mkN "" ;
lin car_N = mkN "autó" ;
lin carpet_N = mkN "szőnyeg" ;
lin cat_N = mkN "macska" ;
lin ceiling_N = mkN "plafon" ;
lin chair_N = mkN "szék" ;
lin cheese_N = mkN "sajt" ;
lin child_N = mkN "gyerek" ;
lin church_N = mkN "templom" ;
lin city_N = mkN "város" ;
lin car_N = mkN "autó" "autót" ;
lin carpet_N = mkN "szőnyeg" "szőnyeget" ;
lin cat_N = mkN "macska" "macskát";
lin ceiling_N = roof_N ;
lin chair_N = mkN "szék" "széket";
lin cheese_N = mkN "sajt" "sajtot" ;
lin child_N = mkN "gyerek" "gyereket" ;
lin church_N = mkN "templom" "templomot" ;
lin city_N = mkN "város" "várost" ;
lin clean_A = mkA "tiszta" ;
lin clever_A = mkA "okos" ;
lin close_V2 = mkV2 "közel" ;
lin cloud_N = mkN "felhö" ;
lin coat_N = mkN "kabát" ;
lin cloud_N = mkN "felhő" "felhőt" ;
lin coat_N = mkN "kabát" "kabátot" ;
lin cold_A = mkA "hideg" ;
-- lin come_V = mkV "" ;
lin computer_N = mkN "számítógép" ;
lin computer_N = mkN "számítógép" "számítógépet" ;
lin correct_A = mkA "igaz" ;
-- lin count_V2 = mkV2 "" ;
lin country_N = mkN "ország" ;
lin cousin_N = mkN "unokatestvér" ; --short "unoka"
lin country_N = mkN "ország" "országot" "országok" "országa" ;
lin cousin_N = mkN "unokatestvér" "unokatestvért"; --short "unoka"
lin cow_N = mkN "tehén" ;
-- lin cut_V2 = mkV2 "" ;
--
-- ----
-- -- D
--
lin day_N = mkN "nap" ;
lin day_N = mkN "nap" "napot" ;
-- lin die_V = mkV "" ;
-- lin dig_V = mkV "" ;
-- lin dirty_A = mkA "" ;
-- lin distance_N3 = mkN "" ;
-- lin do_V2 = mkV2 do_V ;
lin doctor_N = mkN "orvos" ;
lin dog_N = mkN "kutya" ;
lin door_N = mkN "ajtó" ;
lin doctor_N = mkN "orvos" "orvost";
lin dog_N = mkN "kutya" "kutyát";
lin door_N = mkN "ajtó" "ajtót" ;
-- lin drink_V2 = mkV2 "" ;
-- lin dry_A = mkA "" ;
-- lin dull_A = mkA "" ;
@@ -103,94 +103,95 @@ lin door_N = mkN "ajtó" ;
----
-- E
lin ear_N = mkN "fül" ;
lin earth_N = mkN "föld" ;
lin ear_N = mkN "fül" "fület";
lin earth_N = mkN "föld" "földet";
-- lin eat_V2 = mkV2 "" ;
lin egg_N = mkN "tojás" ;
lin egg_N = mkN "tojás" "tojást" ;
lin empty_A = mkA "üres" ;
lin enemy_N = mkN "ellenség" ;
lin eye_N = mkN "szem" ;
lin enemy_N = mkN "ellenség" "ellenséget" ;
lin eye_N = mkN "szem" "szemet";
----
-- F
lin factory_N = mkN "gyár" ;
lin factory_N = mkN "gyár" "gyárat" ;
-- lin fall_V = mkV "" ;
-- lin far_Adv = mkA "" ;
lin fat_N = mkN "kövér" ;
lin father_N2 = mkN2 "apa" ;
lin fat_N = mkN "kövér" "kövéret";
lin father_N2 = mkN2 (mkN "apa" "apát") ;
-- lin fear_V2 = mkV2 "" ;
-- lin fear_VS = mkVS "" ;
lin feather_N = mkN "madártoll" ;
lin feather_N = mkN "madártoll" "madártollat";
-- lin fight_V2 = mkV2 "" ;
-- lin find_V2 = mkV2 "" ;
lin fingernail_N = mkN "köröm" ;
lin fire_N = mkN "tűz" ;
lin fish_N = mkN "hal" ;
lin fingernail_N = mkN "köröm" "körmöt";
lin fire_N = mkN "tűz" "tüzet" ;
lin fish_N = mkN "hal" "halat" ;
-- lin float_V = mkV "" ;
lin floor_N = mkN "padló" ;
lin floor_N = mkN "padló" "padlót" ;
-- lin flow_V = mkV "" ;
lin flower_N = mkN "vírág" ;
lin flower_N = mkN "virág" "virágot" "virágok" "virága" ;
lin fly_V = mkV "repül" ;
lin fog_N = mkN "köd" ;
lin foot_N = mkN "láb" ; --same as leg, to specify "lábfej"
lin forest_N = mkN "erdő" ;
lin fog_N = mkN "köd" "ködöt" "ködön" "ködhöz" "ködök"
"köde" "ködünk" "ködei" ;
lin foot_N = leg_N ; --same as leg, to specify "lábfej"
lin forest_N = mkN "erdő" "erdőt" ;
-- lin forget_V2 = mkV2 "" ;
-- lin freeze_V = mkV "" ;
lin fridge_N = mkN "hűtő" ;
lin friend_N = mkN "barát" ;
lin fruit_N = mkN "gyümölcs" ;
lin fridge_N = mkN "hűtő" "hűtőt" ;
lin friend_N = mkN "barát" "barátot" ;
lin fruit_N = mkN "gyümölcs" "gyümölcsöt" "gyümölcsök" "gyümölcse" ;
lin full_A = mkA "tele" ;
-- --lin fun_AV
----
-- G
lin garden_N = mkN "kert" ;
lin girl_N = mkN "lány" ;
lin garden_N = mkN "kert" "kertet" ;
lin girl_N = mkN "lány" "lányt";
-- lin give_V3 = mkV3 "" ;
lin glove_N = mkN "kesztyű" ;
lin glove_N = mkN "kesztyű" "kesztyűt" ;
-- lin go_V = mkV "" ;
lin gold_N = mkN "arany" ;
lin gold_N = mkN "arany" "aranyat" ;
lin good_A = mkA "jó" ;
lin grammar_N = mkN "nyelvtan" ;
lin grass_N = mkN "fű" ;
lin grammar_N = mkN "nyelvtan" "nyelvtant";
lin grass_N = mkN "fű" "füvet";
lin green_A = mkA "zöld" ;
----
-- H
lin hair_N = mkN "haj" ;
lin hand_N = mkN "kéz" ;
lin hair_N = mkN "haj" "hajat" ;
lin hand_N = mkN "kéz" "kezet" ;
-- lin harbour_N = mkN "" ;
lin hat_N = mkN "kalap" ;
lin hat_N = mkN "kalap" "kalapot" ;
-- lin hate_V2 = mkV2 "" ;
lin head_N = mkN "fej" ;
lin head_N = mkN "fej" "fejet";
-- lin hear_V2 = mkV2 "" ;
lin heart_N = mkN "szív" ;
lin heart_N = mkN "szív" "szívet";
lin heavy_A = mkA "nehéz" ;
-- lin hill_N = mkN "" ;
-- lin hit_V2 = mkV2 "" ;
-- lin hold_V2 = mkV2 "" ;
-- lin hope_VS = mkV "" ;
-- lin horn_N = mkN "" ;
lin horse_N = mkN "ló" ;
lin horse_N = mkN "ló" "lovat";
lin hot_A = mkA "forró" ;
lin house_N = mkN "ház" ;
lin house_N = mkN "ház" "házat" ;
-- lin hunt_V2 = mkV2 "" ;
lin husband_N = mkN "férj" ;
lin husband_N = mkN "férj" "férjet";
--------
-- I - K
lin ice_N = mkN "jég" ;
lin industry_N = mkN "ipar" ;
lin iron_N = mkN "vas" ;
lin ice_N = mkN "jég" "jeget" ;
lin industry_N = mkN "ipar" "ipart" ;
lin iron_N = mkN "vas" "vasat" ;
-- lin john_PN = mkPN "" ;
-- lin jump_V = mkV "" ;
-- lin kill_V2 = mkV2 "" ;
lin king_N = mkN "király" ;
lin knee_N = mkN "térd" ;
lin king_N = mkN "király" "királyt" ;
lin knee_N = mkN "térd" "térdet";
-- lin know_V2 = mkV2 "" ;
-- lin know_VQ = mkVQ "" ;
-- lin know_VS = mkV "" ;
@@ -199,15 +200,15 @@ lin knee_N = mkN "térd" ;
----
-- L
lin lake_N = mkN "tó" ;
lin lamp_N = mkN "lámpa" ;
lin language_N = mkN "nyelv" ;
lin lake_N = mkN "tó" "tavat" ;
lin lamp_N = mkN "lámpa" "lámpát";
lin language_N = mkN "nyelv" "nyelvet";
-- lin laugh_V = mkV "" ;
lin leaf_N = mkN "levél" ;
lin leaf_N = mkN "levél" "levelet";
-- lin learn_V2 = mkV2 "" ;
lin leather_N = mkN "bőr" ;
lin leather_N = mkN "bőr" "bőrt";
-- lin leave_V2 = mkV2 "" ;
lin leg_N = mkN "láb" ;
lin leg_N = mkN "láb" "lábat";
-- lin lie_V = mkV "" ;
-- lin like_V2 = mkV2 "" ;
-- lin listen_V2 = mkV2 "" ;
@@ -216,7 +217,7 @@ lin leg_N = mkN "láb" ;
-- lin long_A = mkA "" ;
-- lin lose_V2 = mkV2 "" ;
-- lin louse_N = mkN "" ;
lin love_N = mkN "szerelem" ;
lin love_N = mkN "szerelem" "szerelmet";
-- lin love_V2 = mkV2 "" ;
----
@@ -224,46 +225,46 @@ lin love_N = mkN "szerelem" ;
lin man_N = mkN "férfi" "ak" harmA ; -- force plural allomorph and a-harmony
lin married_A2 = mkA2 "házas" Ins ;
lin meat_N = mkN "hús" ;
lin milk_N = mkN "tej" ;
lin moon_N = mkN "hold" ;
lin mother_N2 = mkN2 "anya" ;
lin mountain_N = mkN "hegy" ;
lin mouth_N = mkN "száj" ;
lin music_N = mkN "zene" ;
lin meat_N = mkN "hús" "húst";
lin milk_N = mkN "tej" "tejet" ;
lin moon_N = mkN "hold" "holdat" ;
lin mother_N2 = mkN2 (mkN "anya" "anyát") ;
lin mountain_N = mkN "hegy" "hegyet";
lin mouth_N = mkN "száj" "szájat" ;
lin music_N = mkN "zene" "zenét";
----
-- N
lin name_N = mkN "név" "nevet" ;
lin narrow_A = mkA "keskeny" ; --also "szűk"
lin narrow_A = mkA "keskeny" "keskenyet"; --also "szűk"
lin near_A = mkA "közel" ;
lin neck_N = mkN "nyak" ;
lin neck_N = mkN "nyak" "nyakat";
lin new_A = mkA "új" ;
lin newspaper_N = mkN "újság" ;
lin night_N = mkN "éjszak" ; --also shortened to "éj" ("este" more for evening)
lin nose_N = mkN "orr" ;
lin newspaper_N = mkN "újság" "újságot" ;
lin night_N = mkN "éjszaka" "éjszakát"; --also shortened to "éj" ("este" more for evening)
lin nose_N = mkN "orr" "orrot" ;
lin now_Adv = mkAdv "most" ;
lin number_N = mkN "szám" ;
lin number_N = mkN "szám" "számot" ;
--
-- --------
-- -- O - P
--
--
lin oil_N = mkN "olaj" ;
lin oil_N = mkN "olaj" "olajat" ; -- TODO olajok or olajak?
lin old_A = mkA "öreg" ; --also "idős"
-- lin open_V2 = mkV2 "" ;
-- lin paint_V2A = mkV2A "" ;
lin paper_N = mkN "papír" ;
lin paper_N = mkN "papír" "papírt" "papírok" "papírja" ;
-- lin paris_PN = mkPN "Paris" ;
lin peace_N = mkN "béke" ;
lin pen_N = mkN "toll" ;
lin person_N = mkN "ember" ;
lin planet_N = mkN "bolygó" ;
lin plastic_N = mkN "műanyag" ;
lin peace_N = mkN "béke" "békét";
lin pen_N = mkN "toll" "tollat" ;
lin person_N = mkN "ember" "embert";
lin planet_N = mkN "bolygó" "bolygót" ;
lin plastic_N = mkN "műanyag" "műanyagot" ;
-- lin play_V = mkV "" ;
lin policeman_N = mkN "rendőr" ; --the police "rendőrség"
lin priest_N = mkN "pap" ;
lin policeman_N = mkN "rendőr" "rendőrt"; --the police "rendőrség"
lin priest_N = mkN "pap" "papot" ;
-- lin pull_V2 = mkV2 "" ;
-- lin push_V2 = mkV2 "" ;
-- lin put_V2 = mkV2 "" ;
@@ -271,42 +272,42 @@ lin priest_N = mkN "pap" ;
-- --------
-- -- Q - R
--
lin queen_N = mkN "kírálynő" ;
lin question_N = mkN "kérdés" ;
lin radio_N = mkN "rádió" ;
lin rain_N = mkN "eső" ;
lin queen_N = mkN "kírálynő" "kírálynőt" ;
lin question_N = mkN "kérdés" "kérdést" ;
lin radio_N = mkN "rádió" "rádiót" ;
lin rain_N = mkN "eső" "esőt" ;
-- lin rain_V0 = mkV "" ;
-- lin read_V2 = mkV2 "" ;
lin ready_A = mkA "kész" ;
lin reason_N = mkN "ok" ;
lin reason_N = mkN "ok" "okot" ;
lin red_A = mkA "piros" ;
lin religion_N = mkN "vallás" ;
lin restaurant_N = mkN "étterem" ;
lin river_N = mkN "folyó" ;
lin road_N = mkN "út" ;
lin rock_N = mkN "szikla" ;
lin roof_N = mkN "plafon" ;
lin root_N = mkN "gyökér" ;
lin rope_N = mkN "kötél" ;
lin religion_N = mkN "vallás" "vallást";
lin restaurant_N = mkN "étterem" "éttermet";
lin river_N = mkN "folyó" "folyót" ;
lin road_N = mkN "út" "utat" ;
lin rock_N = mkN "szikla" "sziklát";
lin roof_N = mkN "plafon" "plafont" "plafonok" "plafonja" ;
lin root_N = mkN "gyökér" "gyökeret";
lin rope_N = mkN "kötél" "kötelet";
-- lin rotten_A = mkA "" ;
-- lin round_A = mkA "" ;
-- lin rub_V2 = mkV2 "" ;
lin rubber_N = mkN "gumi" ;
lin rule_N = mkN "szabály" ;
lin rubber_N = mkN "gumi" "gumit";
lin rule_N = mkN "szabály" "szabályt" ;
-- lin run_V = mkV "" ;
----
-- S
lin salt_N = mkN "só" ;
lin sand_N = mkN "homok" ;
lin salt_N = mkN "só" "sót" ;
lin sand_N = mkN "homok" "homokot" ;
-- lin say_VS = mkVS "" ;
lin school_N = mkN "iskola" ;
lin science_N = mkN "tudomány" ;
lin school_N = mkN "iskola" "iskolát";
lin science_N = mkN "tudomány" "tudományt" ;
-- lin scratch_V2 = mkV2 "" ;
lin sea_N = mkN "tenger" ;
lin sea_N = mkN "tenger" "tengert";
lin see_V2 = mkV2 "lát" ;
lin seed_N = mkN "mag" ;
lin seed_N = mkN "mag" "magot" ;
-- lin seek_V2 = mkV2 "" ;
-- lin sell_V3 = mkV3 "" ;
-- lin send_V3 = mkV3 "" ;
@@ -314,42 +315,43 @@ lin seed_N = mkN "mag" ;
-- lin sharp_A = mkA "" ;
-- lin sheep_N = mkN "" fem ;
-- lin ship_N = mkN "" ;
lin shirt_N = mkN "ing" ; --shirt like t-shirt or the more formal?
lin shoe_N = mkN "cipő" ;
lin shop_N = mkN "üzlet" ;
lin shirt_N = mkN "ing" "inget"; --shirt like t-shirt or the more formal?
lin shoe_N = mkN "cipő" "cipőt" ;
lin shop_N = mkN "üzlet" "üzletet";
lin short_A = mkA "rövid" ; --in short text, if human length then "alacsony"
lin silver_N = mkN "ezüst" ;
lin silver_N = mkN "ezüst" "ezüstöt" "ezüstön" "ezüsthöz" "ezüstök"
"ezüstje" "ezüstünk" "ezüstjei" ;
-- lin sing_V = mkV "" ;
-- lin sister_N = mkN "" ;
-- lin sit_V = mkV "" ;
lin skin_N = mkN "bőr" ;
lin sky_N = mkN "ég" ;
lin skin_N = mkN "bőr" "bőrt";
lin sky_N = mkN "ég" "eget" ;
-- lin sleep_V = mkV "" ;
lin small_A = mkA "kicsi" ;
lin small_A = mkA "kicsi" "kicsit";
-- lin smell_V = mkV "" ;
lin smoke_N = mkN "füst" ;
lin smoke_N = mkN "füst" "füstet";
lin smooth_A = mkA "sima" ;
lin snake_N = mkN "kígyó" ;
lin snow_N = mkN "hó" ;
lin sock_N = mkN "zokni" ;
lin song_N = mkN "dal" ;
lin snake_N = mkN "kígyó" "kígyót" ;
lin snow_N = mkN "hó" "havat" ;
lin sock_N = mkN "zokni" "zoknit";
lin song_N = mkN "dal" "dalt" ;
-- lin speak_V2 = mkV2 "" ;
-- lin spit_V = mkV "" ;
-- lin split_V2 = mkV2 "" ;
-- lin squeeze_V2 = mkV2 "" ;
-- lin stab_V2 = mkV2 "" ;
-- lin stand_V = mkV "" ;
lin star_N = mkN "csillag" ;
lin steel_N = mkN "acél" ;
lin stick_N = mkN "rúd" ;
lin stone_N = mkN "kő";
lin star_N = mkN "csillag" "csillagot" ;
lin steel_N = mkN "acél" "ok" harmA ;
lin stick_N = mkN "rúd" "rudat" ;
lin stone_N = mkN "kő" "követ" ;
-- lin stop_V = mkV "" ;
-- lin stove_N = mkN "" ;
lin straight_A = mkA "egyenes" ;
lin student_N = mkN "diák" ;
lin straight_A = mkA "egyenes";
lin student_N = mkN "diák" "diákot" ;
lin stupid_A = mkA "buta" ; --also "hülye"
-- lin suck_V2 = mkV2 "" ;
lin sun_N = mkN "nap" ; --same as day
lin sun_N = mkN "nap" "napot"; --same as day
-- lin swell_V = mkV "" ;
-- lin swim_V = mkV "" ;
@@ -357,23 +359,23 @@ lin sun_N = mkN "nap" ; --same as day
-- T
lin table_N = mkN "asztal" ;
lin tail_N = mkN "farok" ;
lin table_N = mkN "asztal" "asztalt";
lin tail_N = mkN "farok" "farkot";
lin talk_V3 = mkV3 "beszél" ;
-- lin teach_V2 = mkV2 "" ;
lin teacher_N = mkN "tanár" ;
lin television_N = mkN "tévé" ; --also "televízió" but not used
lin teacher_N = mkN "tanár" "tanárt" ;
lin television_N = mkN "tévé" "tévét" ; --also "televízió" but not used
lin thick_A = mkA "vastag" ;
lin thin_A = mkA "vekony" ;
-- lin think_V = mkV "" ;
-- lin throw_V2 = mkV2 "" ;
-- lin tie_V2 = mkV2 "" ;
lin today_Adv = mkAdv "ma" ;
lin tongue_N = mkN "nyelv" ; --same as language
lin tooth_N = mkN "fog" ;
lin train_N = mkN "vonat" ;
lin tongue_N = mkN "nyelv" "nyelvet"; --same as language
lin tooth_N = mkN "fog" "fogat" ;
lin train_N = mkN "vonat" "vonatot" ;
-- lin travel_V = mkV "" ;
lin tree_N = mkN "fa" ;
lin tree_N = mkN "fa" "fát";
-- lin turn_V = mkV "" ;
--------
@@ -382,8 +384,8 @@ lin tree_N = mkN "fa" ;
lin ugly_A = mkA "csúf" ;
-- lin uncertain_A = mkA "" ;
-- lin understand_V2 = mkV2 "" ;
lin university_N = mkN "egyetem" ;
lin village_N = mkN "falu" ;
lin university_N = mkN "egyetem" "egyetemet";
lin village_N = mkN "falu" "falut" "falvak";
-- lin vomit_V = mkV2 "" ;
--------
@@ -391,28 +393,27 @@ lin village_N = mkN "falu" ;
-- lin wait_V2 = mkV2 "" ;
-- lin walk_V = mkV "" ;
lin war_N = mkN "háború" ;
lin war_N = mkN "háború" "háborút" ;
lin warm_A = mkA "meleg" ;
-- lin wash_V2 = mkV2 "" ;
-- lin watch_V2 = mkV2 "" ;
lin water_N = mkN "víz" ;
lin water_N = mkN "víz" "vizet" ;
lin wet_A = mkA "nedves" ;
lin white_A = mkA "fehér" ;
lin wide_A = mkA "széles" ;
lin wife_N = mkN "feleség" ;
lin wife_N = mkN "feleség" "feleséget" ;
-- lin win_V2 = mkV2 "" ;
lin wind_N = mkN "szél" ;
lin window_N = mkN "ablak" ;
lin wine_N = mkN "bor" ;
lin wing_N = mkN "szárny" ;
lin wind_N = mkN "szél" "szelet" ;
lin window_N = mkN "ablak" "ablakot" ;
lin wine_N = mkN "bor" "bort";
lin wing_N = mkN "szárny" "szárnyat";
-- lin wipe_V2 = mkV2 "" ;
--lin woman_N = mkN "nő" "k" harmO ;
lin woman_N = mkN "nő" "nőket" ;
lin woman_N = mkN "nő" "nőt" ;
-- lin wonder_VQ = mkVQ "" ;
lin wood_N = mkN "fa" ; --same as tree
lin worm_N = mkN "féreg" ; --also "kukac"
-- lin write_V2 = mkV2 "" ;
lin year_N = mkN "év" ;
lin wood_N = mkN "fa" "fát"; --same as tree
lin worm_N = mkN "féreg" "férget"; --also "kukac"
lin write_V2 = mkV2 (mkV "írok" "írsz" "ír" "írunk" "írtok" "írnak" "írni") ;
lin year_N = mkN "év" "évet";
lin yellow_A = mkA "sárga" ;
lin young_A = mkA "fiatal" ;

View File

@@ -1,4 +1,5 @@
concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
concrete NounHun of Noun = CatHun ** open
ResHun, Prelude, Coordination in {
flags optimize=all_subs ;
@@ -7,20 +8,39 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
--2 Noun phrases
-- : Det -> CN -> NP
DetCN det cn = emptyNP ** det ** {
s = \\c => det.s ! Nom ++ cn.s ! det.n ! c ;
DetCN det cn = emptyNP ** cn ** det ** {
s = \\p,c =>
let possessed : Str = caseFromPossStem cn det c ;
standalone : Str = caseFromStem glue cn c det.n ;
in case det.caseagr of {
True => det.s ! c ;
False => det.s ! Nom
} ++ case <p,det.dt> of {
<_, DetPoss _>
=> possessed ;
<NoPoss, _>
=> standalone ;
<Poss per rnum, _>
=> let pron : Pronoun = pronTable ! <per,rnum> ; -- Possessor's number
dnum : CatHun.Num = case det.n of { -- Possessed's number
Sg => NumSg ; Pl => NumPl } ;
in caseFromPossStem cn (DetQuant (PossPron pron) dnum) c
} ++ cn.compl ! det.n ! c ;
agr = <P3,det.n> ;
objdef = dt2objdef det.dt ;
} ;
-- : PN -> NP ;
UsePN pn = pn ;
-- : Pron -> NP ;
UsePron pron = pron ;
UsePron pron = pron ** {
s = \\_ => pron.s ;
} ;
-- : Predet -> NP -> NP ; -- only the man
PredetNP predet np = np ** {
s = \\c => predet.s ++ np.s ! c ;
s = \\p,c => predet.s ++ np.s ! p ! c ;
} ;
-- A noun phrase can also be postmodified by the past participle of a
@@ -32,28 +52,33 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
-- : NP -> Adv -> NP ; -- Paris today
AdvNP np adv = np ** {
s = \\c => np.s ! c ++ adv.s ;
} ;
s = \\p,c => case adv.isPre of {
True => adv.s ++ np.s ! p ! c ;
False => np.s ! p ! c ++ adv.s } ;
} ;
-- : NP -> Adv -> NP ; -- boys, such as ..
ExtAdvNP np adv = np ** {
s = \\c => np.s ! c ++ bindComma ++ adv.s ;
} ;
s = \\p,c => np.s ! p ! c ++ bindComma ++ adv.s ;
} ;
-- : NP -> RS -> NP ; -- Paris, which is here
RelNP np rs = np ** {
s = \\c => np.s ! c ++ bindComma ++ rs.s ! np.agr.p2 ! c ;
} ;
s = \\p,c => np.s ! p ! c ++ bindComma ++ rs.s ! np.agr.p2 ! c ;
} ;
-- Determiners can form noun phrases directly.
-- : Det -> NP ;
DetNP det = emptyNP ** {
s = det.sp ;
DetNP det = emptyNP ** det ** {
s = \\p => det.sp ;
agr = <P3,det.n> ;
} ;
-- : CN -> NP ;
MassNP cn = emptyNP ** {
s = \\c => cn.s ! Sg ! c ;
s = \\p,c => caseFromStem glue cn c Sg ++ -- TODO add possessors
cn.compl ! Sg ! c ;
agr = <P3,Sg> ;
} ;
@@ -63,20 +88,27 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
-- quantifier and an optional numeral can be discerned.
-- : Quant -> Num -> Det ;
DetQuant quant num = quant ** num ** {
s = \\c => case <isNum num,quant.isIndefArt> of {
<True,True> => [] ; -- don't output "a 2 cars"
_ => quant.s ! num.n ! c }
++ num.s ! Attrib ; -- TODO: add inflection table in numbers
sp = \\c => quant.sp ! num.n ! c
++ num.s ! Indep ;
} ;
DetQuant quant num = let n = num2number num.n in
quant ** num ** {
s = \\c => case <isNum num,isIndefArt quant> of {
<True,True> => [] ; -- don't output "a 2 cars"
_ => quant.s ! n ! c }
++ num.s ! Attrib ; -- TODO: add inflection table in numbers
sp = \\c => case <isNum num,isIndefArt quant> of {
<True,True> => [] ;
_ => quant.sp ! n ! c }
++ num.s ! Indep ;
n = n ;
dt = qt2dt quant.qt ;
} ;
-- : Quant -> Num -> Ord -> Det ; -- these five best
DetQuantOrd quant num ord =
let theseFive = DetQuant quant num in theseFive ** {
s = \\c => theseFive.s ! c ++ ord.s ! num.n ;
sp = \\c => theseFive.sp ! c ++ ord.s ! num.n ;
let theseFive = DetQuant quant num ;
n = num2number num.n ;
in theseFive ** {
s = \\c => theseFive.s ! c ++ ord.s ! n ! Nom ;
sp = \\c => theseFive.sp ! c ++ ord.s ! n ! Nom ;
} ;
-- Whether the resulting determiner is singular or plural depends on the
@@ -87,17 +119,16 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
-- the inherent number.
NumSg = baseNum ;
NumPl = baseNum ** {n = Pl} ;
NumPl = baseNum ** {n = NoNum Pl} ;
-- : Card -> Num ;
NumCard card = card ** {
n = Sg -- Numerals take noun in Sg: e.g. öt város, literally 'five city'
n = IsNum -- Numerals take noun in Sg: e.g. öt város, literally 'five city'
} ;
-- : Digits -> Card ;
NumDigits dig = dig ** {
s = \\place => dig.s ! NCard ;
numtype = IsNum ;
} ;
-- : Numeral -> Card ;
@@ -117,7 +148,9 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
-}
-- : A -> Ord ;
OrdSuperl a = {
s = a.s ! Superl ;
s = \\n,c =>
let adj : Noun = (a ** {s = a.s ! Superl}) in
caseFromStem glue adj c n ;
n = Sg -- ?? is this meaningful?
} ;
@@ -127,32 +160,33 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
-- OrdNumeralSuperl num a = num ** { } ;
-- : Quant
DefArt = {
DefArt = mkQuant "a" "a" ** {
s,
sp = \\_,_ => pre {"a" ; "az" / v } ;
isIndefArt = False ;
objdef = Def ;
qt = DefQuant ;
} ;
-- : Quant
IndefArt = {
s,
sp = \\n,_ => case n of {Sg => "egy" ; Pl => []} ;
isIndefArt = True ;
objdef = Indef ;
IndefArt = mkQuant "egy" [] ** {
s = \\n,_ => case n of {Sg => "egy" ; Pl => []} ;
sp = \\n,_ => case n of {Sg => "egy" ; Pl => "sok"} ;
qt = IndefArticle ;
} ;
-- : Pron -> Quant
-- PossPron pron =
-- let p = pron.poss ;
-- in DefArt ** {
-- } ;
PossPron pron = pron ** {
s,sp = \\_ => pron.s ;
qt = QuantPoss (agr2pstem pron.agr) ;
caseagr = False ;
} ;
--2 Common nouns
-- : N -> CN
-- : N2 -> CN ;
UseN,UseN2 = \n -> n ;
UseN,UseN2 = \n -> n ** {
compl = \\_,_ => [] ;
} ;
-- : N2 -> NP -> CN ;
-- ComplN2 n2 np =
@@ -169,18 +203,20 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
-- : AP -> CN -> CN
AdjCN ap cn = cn ** {
s = \\n,c => ap.s ! Sg ++ cn.s ! n ! c ++ ap.compar
s = \\nc => ap.s ! Sg ! Nom ++ cn.s ! nc ;
compl = \\n,c => ap.compl ! n ++ cn.compl ! n ! c ;
} ;
-- : CN -> RS -> CN ;
RelCN cn rs = cn ** {
s = \\n,c => cn.s ! n ! c ++ rs.s ! n ! c
compl = \\n,c => cn.compl ! n ! c ++ rs.s ! n ! c
} ;
-- : CN -> Adv -> CN ;
AdvCN cn adv = cn ** {
s = \\n,c => cn.s ! n ! c ++ adv.s
} ;
AdvCN cn adv = case adv.isPre of {
True => AdjCN (invarAP adv.s) cn ;
False => cn ** {compl = \\n,c => cn.compl ! n ! c ++ adv.s}
} ;
-- Nouns can also be modified by embedded sentences and questions.
-- For some nouns this makes little sense, but we leave this for applications
@@ -195,14 +231,15 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
-- : CN -> NP -> CN ; -- city Paris (, numbers x and y)
ApposCN cn np = cn ** {
s = \\n,c => cn.s ! n ! c ++ np.s ! Nom
compl = \\n,c => cn.compl ! n ! c ++ np.s ! NoPoss ! Nom
} ;
--2 Possessive and partitive constructs
-- : PossNP : CN -> NP -> CN ;
-- PossNP cn np = cn ** {
-- } ;
-- compl = \\n,c => cn.compl ! n ! c ++ np.s ! Poss P3 n ! c -- TODO check
-- } ;
-- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples
-- PartNP cn np = cn ** {

View File

@@ -1,7 +1,7 @@
resource NounMorphoHun = ParamHun ** open Prelude, Predef in {
oper
Noun = {s : Number => Case => Str} ;
Noun = {s : NumCaseStem => Str ; h : Harm} ;
-- Paradigm functions
-- http://www.cse.chalmers.se/~aarne/articles/smart-preprint.pdf
@@ -12,32 +12,17 @@ oper
-- Apply mkNoun to the lengthened stem "almá" or "kefé"
nAlmá : Noun = mkNoun almá ;
in {s = \\n,c => case <n,c> of {
in nAlmá ** {
s = \\nc => case nc of {
-- Singular nominative uses the given form, e.g. "alma" or "kefe"
<Sg,Nom> => alma ;
SgNom => alma ;
PossdSg_PossrP3 => almá + "j" ;
-- The rest of the forms are formed with the regular constructor,
-- using "almá" or "kefé" as the stem.
_ => nAlmá.s ! n ! c
} ;
} ;
-- Handles words like "madár, nyár, név, bogár" with shortened stem vowel in plural
-- No special <Sg,Sup> case here
dMadár : (nom : Str) -> (acc : Str) -> Noun = \madár,madarat ->
let madara = init madarat ;
nMadara = mkNounHarm (getHarm madara) "k" madara ;
nMadár = mkNoun madár ;
in {s = \\n,c => case <n,c> of {
-- All plural forms and Sg Acc use the "madara"/"neve" stem
<Pl,_>|<Sg,Acc> => nMadara.s ! n ! c ;
-- The rest of the forms are formed with the regular constructor,
-- using "madár"/"név" as the stem.
_ => nMadár.s ! n ! c
} ;
} ;
_ => nAlmá.s ! nc }
} ;
--Handles words like "ló, lé, kő" which are "lovak, levek, kövek" in plural.
--Also handles "tó, hó" which are "tavak, havak" in plural!
@@ -48,18 +33,52 @@ oper
nLov = mkNoun lov ;
nLova = mkNoun lova ;
nLó = mkNoun ló ;
in {s = \\n,c => case <n,c> of {
in nLova ** {
s = \\nc => case nc of {
-- All plural forms and Sg Acc, Sg Sup use the "lova" stem
<Pl,_>| <Sg,Acc> => nLova.s ! n ! c ;
<Sg,Sup> => nLov.s ! n ! c ;
-- All plural forms and Sg Acc use the "lova" stem
PlStem | SgAccStem
=> nLova.s ! nc ;
-- The rest of the forms are formed with the regular constructor,
-- using "ló" as the stem.
_ => nLó.s ! n ! c
SgSup | -- Sg Sup has vowel o/ö, not a/e
PossdSg_PossrP3 -- Consonant stem before P3 suffixes
=> nLov.s ! nc ;
PossdSg_PossrPl1 -- Round vowel, part of Pl1 suffix
=> lov + harm "u" "ü" ! nLov.h ;
PossdPl => lova + "i" ;
-- The rest of the forms are formed with the regular constructor,
-- using "ló" as the stem.
_ => nLó.s ! nc }
} ;
-- NB. Relevant arguments are Sg Nom, Pl Nom.
-- Third argument prevents accidental application of this paradigm
-- handles words like: falu, daru, tetű -> falvak, darvak, tetvek
dFalu : (nomsg,_,nompl : Str) -> Noun = \falu,_,falvak ->
let falva = init falvak ;
nFalva = mkNoun falva ;
nFalu = mkNoun falu ;
in nFalu ** {
s = \\nc => case nc of {
-- All plural forms use the "falva" stem
PlStem => nFalva.s ! nc ;
-- The plural morpheme before possessive suffixes is i
PossdPl => nFalu.s ! nc + "i" ;
-- The form before P3 possessive suffixes: faluj|a, faluj|uk
-- Forms before other possessive suffixes follow SgAccStem.
PossdSg_PossrP3 => nFalu.s ! nc + "j" ;
-- The rest of the forms are formed with the regular constructor,
-- using "falu" as the stem.
_ => nFalu.s ! nc }
} ;
} ;
} ;
--Handles words like "gyomor, majom, retek" which are "gyomrot, majmot, retket" in accusative (wovel dropping base)
--More examples: "ajak, bokor, cukor, csokor, eper, fészek, fodor, gödör, haszon, iker, izom, kölyök, köröm, méreg, piszok, sarok, selyem, szeder, szobor, takony, terem, titok, torok, torony, tükör, vödör" ->
@@ -72,64 +91,256 @@ oper
majm = init majmo ;
nMajmo = mkNoun majmo ;
nMajom = mkNoun majom ;
in {s = \\n,c => case <n,c> of {
-- All plural forms and Sg Acc and Sg Sup use the "majmo" stem
<Pl,_> | <Sg,Acc> => nMajmo.s ! n ! c ;
<Sg,Sup> => nMajmo.s ! n ! c ;
in nMajmo ** {
s = \\nc => case nc of {
-- The rest of the forms are formed with the regular constructor,
-- using "majom" as the stem.
_ => nMajom.s ! n ! c
} ;
} ;
SgSup -- All plural forms and Sg Acc and Sg Sup use the "majmo" stem
| PlStem
| SgAccStem => nMajmo.s ! nc ;
-- The plural morpheme before possessive suffixes: majmai
PossdPl => majm + harm "a" "e" ! nMajmo.h + "i" ;
-- The form before P3 possessive suffixes: majm|a, majm|uk
-- Forms before other possessive suffixes follow SgAccStem.
PossdSg_PossrP3 => majm ;
-- The rest of the forms are formed with the regular constructor,
-- using "majom" as the stem.
_ => nMajom.s ! nc
}
} ;
-- Handles regular wovel ending words, with j added in possesive forms
-- Examples: "hajó, hajója, zseni, zsenije, kestyű, kestyűje"
dHajó : (nom : Str) -> (acc : Str) -> Noun = \hajó,hajót ->
let nHajó = mkNoun hajó ;
hajój = hajó + "j" ;
h = nHajó.h ;
in nHajó ** {
s = \\nc => case nc of {
-- hajó|nk, zseni|nk
PossdSg_PossrPl1 => hajó ;
-- hajój|a, zsenij|e
PossdSg_PossrP3 => hajój ;
PossdPl => case hajó of {
_ + "i" => hajój + harm "a" "e" ! h + "i" ; -- zsenij|ei
_ => hajó + "i" } ; -- hajó|i
-- The rest of the forms are formed with the regular constructor
_ => nHajó.s ! nc
}
} ;
-- Opposite to dVirág: unexpected j after consonant
dPlafon : (nom : Str) -> (acc : Str) -> Noun = \plafon,plafont ->
let nPlafon = regNounNomAcc plafon plafont ;
h = nPlafon.h ;
in nPlafon ** {
s = \\nc => case nc of {
PossdSg_PossrPl1 => plafon + harm "u" "ü" ! h ;
PossdSg_PossrP3 => plafon + "j" ;
PossdPl => plafon + harm "jai" "jei" ! h ;
_ => nPlafon.s ! nc
}
} ;
-- Opposite to dPlafon: regular paradigm puts j, but these words don't have it.
dVirág : (nom : Str) -> (acc : Str) -> Noun = \virág,virágot ->
let nVirág = regNounNomAcc virág virágot ;
h = nVirág.h ;
in nVirág ** {
s = \\nc => case nc of {
PossdSg_PossrPl1 => virág + harm "u" "ü" ! h ;
PossdSg_PossrP3 => virág ;
PossdPl => virág + harm "a" "e" ! h + "i" ;
_ => nVirág.s ! nc }
} ;
-- Handles many possesive forms
dToll : (nom : Str) -> (acc : Str) -> Noun = \toll,tollat ->
let tolla = init tollat ;
nTolla = mkNoun tolla ;
nToll = mkNoun toll ;
napj = case andB (ifTok Bool toll tolla True False)
(notB (vowFinal tolla)) of {
True => toll ; -- sör, sör|t -> sör|e
-- király, király|t -> király|a
-- NB. plafon, papír with dPlafon
False => case tolla of {
-- hegy, hegy|et -> hegy|e
_ + ("ty"|"gy"|"ny"|"j"|"ly"|"m"|"h")
+ ("e"|"a"|"ö"|"o") => init tolla ;
-- ház, ház|at -> ház|a
_ + #c + ("a"|"e") => init tolla ;
-- orr, orr|ot -> orr|a
-- TODO fails for gyümölcs, gyümölcs|öt -> gyümölcs|e
-- I don't know what this list means /IL
_ + #v + ("sz"|"z"|"s"|"zs"|"j"|"ly"|"l"|"r"|"n"|"ny"
|"ssz"|"zz"|"ss"|"ll"|"rr"|"nn"|"ns"|"nsz"|"nz")
+ ("o"|"ö") => init tolla ;
-- nap, nap|ot -> napj|a
-- bank, bank|ot -> bankj|a
-- kabát, kabát|ot -> kabátj|a (diák, barát, újság …)
-- NB. virág, ország with dVirág (virág|ot -> virág|a)
_ + #c + ("o"|"ö") => init tolla + "j" ;
-- háború, háború|t -> háborúj|a
_ => tolla + "j" }
} ;
in nTolla ** {
s = \\nc => case nc of {
-- All plural forms and Sg Acc use the "tolla" stem
PlStem | SgAccStem => nTolla.s ! nc ;
PossdSg_PossrPl1 => napj + harm "u" "ü" ! nToll.h ;
PossdSg_PossrP3 => napj ;
-- The plural morpheme before possessive suffixes: madarai
PossdPl => napj + harm "a" "e" ! nToll.h + "i" ;
-- The rest of the forms are formed with the regular constructor,
-- using "toll" as the stem.
_ => nToll.s ! nc
}
} ;
-- Handles words like "madár, nyár, név, bogár" with shortened stem vowel in plural.
dMadár : (nom : Str) -> (acc : Str) -> Noun = \madár,madarat ->
let madara = init madarat ;
madar = init madara ;
nMadara = mkNoun madara ;
nMadár = mkNoun madár ;
in nMadara ** {
s = \\nc => case nc of {
-- All plural forms and Sg Acc use the "tolla" stem
PlStem | SgAccStem => nMadara.s ! nc ;
PossdSg_PossrPl1 => madar + harm "u" "ü" ! nMadara.h ;
PossdSg_PossrP3 => madar ;
-- The plural morpheme before possessive suffixes: madarai
PossdPl => madara + "i" ;
-- The rest of the forms are formed with the regular constructor,
-- using "toll" as the stem.
_ => nMadár.s ! nc
}
} ;
-- More words not covered by current paradigms:
-- https://cl.lingfil.uu.se/~bea/publ/megyesi-hungarian.pdf
-- TODO: falu ~ falva-k (v-case)
-- TODO: teher ~ terhet (consonant-crossing)
-- TODO: do we need possessive forms? e.g. fiú ~ fia{m,d,tok}
-- regNoun is a /smart paradigm/: it takes one or a couple of forms,
-- Worst case constructor: takes all stems
worstCaseNoun : (x1,_,_,_,_,_,_,x8 : Str) -> Harm -> Noun =
\nomsg,accsg,supsg,allsg,nompl,possdSg_possrP3sg,possdSg_PossrPl1,possdPl,h ->
let sgstem = tk 3 allsg ; -- remove -hoz/hez/höz
sginsstem : Str = case vowFinal sgstem of {
True => sgstem + "v" ;
False => duplicateLast sgstem } ;
in {s = table {
SgNom => nomsg ;
SgSup => supsg ;
SgAll => allsg ;
SgStem => sgstem ;
SgAccStem => init accsg ; -- remove t; same stem used for other forms
SgInsStem => sginsstem ;
PlStem => nompl ;
PossdSg_PossrP3 => init possdSg_possrP3sg ; -- remove -a/e
PossdSg_PossrPl1 => tk 2 possdSg_PossrPl1 ; -- remove -nk
PossdPl => possdPl } ;
h = h ;
} ;
-- All regNoun* are /smart paradigms/: they take one or a couple of forms,
-- and decides which (non-smart) paradigm is the most likely to match.
regNounNomAcc : (nom : Str) -> (acc : Str) -> Noun = \n,a ->
case <n,a> of {
-- alma, almát
<_ + "a", _ + "át">
|<_ + "e" ,_ + "ét"> => dAlma n a ;
regNoun4 : (nomsg, accsg, nompl, possdSg_possrP3sg : Str) -> Noun =
\nsg,asg,npl,possd -> case possd of {
_ + #v + "j" + ("a"|"e") => dHajó nsg asg ;
_ + #c + "j" + ("a"|"e") => dPlafon nsg asg ;
_ + #c + ("a"|"e") => dVirág nsg asg ;
<_ + "á" + #c, -- madár, madarat
_ + "a" + #c + #v + "t">
-- Fall back to 3-argument smart paradigm
_ => regNounNomAccPl nsg asg npl
} ;
|<_ + "é" + #c, -- név, nevet
_ + "e" + #c + #v + "t">
regNounNomAccPl : (nomsg, accsg, nompl : Str) -> Noun = \nsg,asg,npl ->
case <nsg,asg,npl> of {
<_ + ("u"|"ú"|"ü"|"ű"|"ó"), -- falu, falut, falvak ; szó, szót, szavak
_ + ("u"|"ú"|"ü"|"ű"|"ó") + "t",
_ + "v" + #v + "k"> => dFalu nsg asg npl ;
|<_ + "í" + #c, -- víz, vizet
_ + "i" + #c + #v + "t"> => dMadár n a ;
-- Fall back to 2-argument smart paradigm
_ => regNounNomAcc nsg asg
} ;
regNounNomAcc : (nom : Str) -> (acc : Str) -> Noun = \n,a ->
case <n,a> of {
<_ + #v + #c, -- majom, majmot
_ + #c + #v + "t"> => dMajom n a ;
-- Stem 1: Sg Nom
-- Stem 2: Everything else
-- alma, almát
<_ + "a", _ + "át">
|<_ + "e" ,_ + "ét"> => dAlma n a ;
-- Stem 1: Sg Nom
-- Stem 2: Sg Gen, Sg Sup, Pl *
<_ + #shortv + #c, -- majom, majmot
_ + #c + #shortv + "t"> => dMajom n a ;
<_ + "ó", -- ló, lovat
_ + "o" + #c + #v + "t">
-- Stem 1: Sg Nom
-- Stem 2: Sg Sup
-- Stem 3: Sg Gen, Pl *
<_ + "ó", -- ló, lovat
_ + "o" + #c + #v + "t">
|<_ + "ő", -- kő, követ
_ + "ö" + #c + #v + "t">
|<_ + "ó", -- tó, tavat
_ + "a" + #c + #v + "t">
|<_ + "é", -- lé, levet
_ + "e" + #c + #v + "t"> => dLó n a ;
|<_ + "ő", -- kő, követ
_ + "ö" + #c + #v + "t">
_ => mkNoun n
} ;
|<_ + "ű", -- fű, füvet
_ + "ü" + #c + #v + "t">
|<_ + "é", -- lé, levet
_ + "e" + #c + #v + "t"> => dLó n a ;
-- Stem 1 == Stem 2 == Stem 3
-- j in PossdSg_PossrP3 but not elsewhere: gumi -> gumi|nk, gumij|a
<_ + "i", -- gumi, gumit:
_ + "it"> => dHajó n a ;
-- Stem 1: Sg Nom, Sg * - [Gen]
-- Stem 2: Sg Gen, Pl *
<_ + "á" + #c, _ + "a" + #c + "at">
|<_ + "é" + #c,_ + "e" + #c + ("et"|"at")> => dMadár n a ;
_ => dToll n a
} ;
-- 1-argument smart paradigm
-- Here we guess the genitive form and give it to appropriate 2-arg paradigm
regNoun : Str -> Noun = \sgnom -> case sgnom of {
_ + ("a"|"e") => dAlma sgnom (lengthen sgnom + "t") ;
#c + ("á"|"é") + #c => mkNoun sgnom ;
_ + ("á"|"é") + #c => dMadár sgnom (név2nevet sgnom) ;
_ + ("ó"|"é"|"ő"|"ű") => dLó sgnom (ló2lovat sgnom) ;
_ + #v + #c + #v + #c => dMajom sgnom (majom2majmo sgnom);
-- Words like nyár, név need to use 2-arg smart paradigm
(#c|"")+("á"|"é")+ #c => mkNoun sgnom ;
_ + ("ság"|"ség"|"gás"|"gés") -- source: https://en.wikisource.org/wiki/Simplified_Grammar_of_the_Hungarian_Language/Nouns
=> mkNoun sgnom ;
_ + ("á"|"é") + #c => dToll sgnom (név2nevet sgnom) ;
-- _ + ("ó"|"é"|"ő"|"ű") => dLó sgnom (ló2lovat sgnom) ;
-- _ + #v + #c + #v + #c => dMajom sgnom (majom2majmo sgnom);
_ => mkNoun sgnom -- Fall back to the regular paradigm
} where {
név2nevet : Str -> Str = \név ->
@@ -158,12 +369,10 @@ regNounNomAcc : (nom : Str) -> (acc : Str) -> Noun = \n,a ->
} ;
--TODO: Special cases (enter these words manually to not complicate the paradigms):
--dTó: szó special case which fulfills the plural cases but not the <Sg,Acc> or <Sg,Sup> case ("szót" not "szavat")
--dLó: special case <Sg,Sup> "lén" not "leven"
--dLó: <Sg,Sup> also "kövön" not "köven", but that is due to H_e, which is needed for "köveket" so it's conflicting
--endCaseConsAcc: "falat, fület, várat, könnyet",
--also special in superessive case "falon, fülek, vizen"
--pattern matching in regNoun: one-syllable words that in fact belong to dMadár: "nyár, név"
--------------------------------------------------------------------------------
-- Following code by EG in 2009 (?), comments and some additions by IL 2020
@@ -176,12 +385,24 @@ oper
-- Vowels as a pattern.
v : pattern Str = #("a" | "e" | "i" | "o" | "u" | "ö" | "ü" |
"á" | "é" | "í" | "ó" | "ú" | "ő" | "ű") ;
shortv : pattern Str = #("a" | "e" | "i" | "o" | "u" | "ö" | "ü") ;
back : pattern Str = #("a" | "á" | "o" | "ó" | "u" | "ú") ;
front_rounded : pattern Str = #("ö" | "ő" | "ü" | "ű") ;
-- front and back rounded
-- rounded : pattern Str = #("ö" | "ő" | "ü" | "ű" | "o" | "ó" | "u" | "ú")
c : pattern Str = #("b"|"c"|"d"|"f"|"g"|"h"|"j"|"k"|"l"|"m"|
"n"|"p"|"q"|"r"|"s"|"t"|"v"|"w"|"x"|"z"|
"cs"|"dz"|"gy"|"ly"|"ny"|"sz"|"ty"|"zs"|
"dzs") ;
dupl : pattern Str = #("bb"|"cc"|"dd"|"ff"|"gg"|"hh"|"jj"|"kk"|"ll"|"mm"|
"nn"|"pp"|"qq"|"rr"|"ss"|"tt"|"vv"|"ww"|"xx"|"zz"|
"ddzs"|"ccs"|"ddz"|"ggy"|"lly"|"nny"|"ssz"|"tty"|"zzs") ;
-- Only single consonants
unigraph : pattern Str = #("b"|"c"|"d"|"f"|"g"|"h"|"j"|"k"|"l"|"m"|
"n"|"p"|"q"|"r"|"s"|"t"|"v"|"w"|"x"|"z") ;
@@ -194,14 +415,15 @@ oper
duplicateLast : Str -> Str = \str -> case str of {
x + "dzs" => x + "ddzs" ;
x + "ny" => x + "nny" ; -- takony : takonnyal
x + "cs" => x + "ccs" ;
x + "dz" => x + "ddz" ;
x + "gy" => x + "ggy" ;
x + "ly" => x + "lly" ;
x + "ny" => x + "nny" ;
x + "sz" => x + "ssz" ;
x + "ty" => x + "tty" ;
x + "zs" => x + "zzs" ;
x + #dupl => str ; -- Don't duplicate already long consonant
-- Base case: just duplicate the single letter
x + s@? => x + s + s } ;
@@ -237,8 +459,8 @@ oper
-- Function to get a harmony from a string
getHarm : Str -> Harm = \s -> case s of {
_ + ("a" | "á" | "o" | "ó" | "u" | "ú") + _ => H_a ;
_ + ("ö" | "ő" | "ü") + _ => H_o ;
_ + #back + _ => H_a ;
_ + #front_rounded + (#c|"") + (#c|"") => H_o ;
_ => H_e
} ;
@@ -255,48 +477,33 @@ oper
harm1 : Str -> HarmForms = \i -> harm i i ;
-- Variant of case forms when the noun stem ends in consonant.
endCaseCons : Case -> HarmForms = \c -> case c of {
Nom => harm1 [] ;
Acc => harm3 "ot" "et" "öt" ;
Dat => harm "nak" "nek" ;
Ill => harm "ba" "be" ;
Ine => harm "ban" "ben" ;
Ela => harm "ból" "ből" ;
All => harm3 "hoz" "hez" "höz" ;
Ade => harm "nál" "nél" ;
Abl => harm "tól" "től" ;
Sub => harm "ra" "re" ;
Sup => harm3 "on" "en" "ön" ;
Del => harm "ról" "ről" ;
Cau => harm1 "ért" ;
Ins => harm "al" "el" ;
Tra => harm "á" "é"
-- Ess => harm "stul" "stül" ; -- Essive-modal 'with <the noun> and its parts'
-- Ter => harm1 "ig" ; -- Terminative 'as far as <the noun>'
-- For => harm1 "ként" ; -- Formal 'as <the noun>'
-- Tem => harm1 "kor" -- Temporal 'at <numeral>'. Only used with numerals.
endCaseCons : NumCaseStem -> HarmForms = \c -> case c of {
SgSup => harm3 "on" "en" "ön" ;
SgAccStem => harm3 "o" "e" "ö" ;
SgAll => harm3 "hoz" "hez" "höz" ;
PossdPl => harm1 "i" ; -- TODO figure out allomorphs
_ => harm1 []
} ;
-- Variant where accusative has the allomorph -at
endCaseConsAccAt : Case -> HarmForms = \c -> case c of {
Acc => harm3 "at" "et" "öt" ;
endCaseConsAccAt : NumCaseStem -> HarmForms = \c -> case c of {
SgAccStem => harm3 "a" "e" "ö" ;
_ => endCaseCons c
} ;
-- Variant where accusative has the allomorph -t for consonants
-- Examples: "pénz, bor, orr, szín, lány, kés, dal"
endCaseConsAcc : Case -> HarmForms = \c -> case c of {
Acc => harm1 "t" ;
endCaseConsAcc : NumCaseStem -> HarmForms = \c -> case c of {
SgAccStem => harm1 "" ;
_ => endCaseCons c
} ;
-- Variant of case forms when the noun stem ends in vowel.
endCaseVow : Case -> HarmForms = \c -> case c of {
Acc => harm1 "t" ;
Sup => harm1 "n" ;
Ins => harm "val" "vel" ;
Tra => harm "vá" "vé" ;
endCaseVow : NumCaseStem -> HarmForms = \c -> case c of {
SgAccStem => harm1 "" ;
SgSup => harm1 "n" ;
SgInsStem => harm1 "v" ;
-- Other forms are shared with endCaseCons.
_ => endCaseCons c
} ;
@@ -323,38 +530,68 @@ oper
mkNounHarm : Harm -> (plural : Str) -> Str -> Noun = mkNounHarmAcc True ;
mkNounHarmAcc : (useAt : Bool) -> Harm -> (plural : Str) -> Str -> Noun = \useAt,h,plural,w ->
let endCaseSg : Case -> HarmForms = case <useAt, w> of {
<_,_ + #v> => endCaseVow ;
<_,_ + #v + ("sz"|"z"|"s"|"zs"|"j"
|"ly"|"l"|"r"|"n"|"ny"|"ssz"|"zz"
|"ss"|"ll"|"rr"|"nn"|"ns"|"nsz"
|"nz")> => endCaseConsAcc ;
<True,_> => endCaseConsAccAt ;
_ => endCaseCons } ;
endCasePl : Case -> HarmForms = case <plural, useAt> of {
<"ak",_> => endCaseConsAccAt ;
<_,True> => endCaseConsAccAt ;
_ => endCaseCons } ;
let endCaseSg : NumCaseStem -> HarmForms =
case <useAt, w> of {
<_,_ + #v> => endCaseVow ;
<_,_ + #v + ("sz"|"z"|"s"|"zs"|"j"|"ly"|"l"|"r"|"n"|"ny"|"ssz"
|"zz"|"ss"|"ll"|"rr"|"nn"|"ns"|"nsz"|"nz")> => endCaseConsAcc ;
<True,_> => endCaseConsAccAt ;
_ => endCaseCons } ;
-- Last consonant doubles before instrumental and translative
duplConsStem : Str = case vowFinal w of {
True => w ;
False => duplicateLast w } ;
-- Noun is {s : Number => Case => Str}, we construct nested tables.
in {s = table {
Sg => table {
-- Double the last letter (if consonant) before Ins, Tra
c@(Ins|Tra) => duplConsStem + endCaseSg c ! h ;
c@_ => w + endCaseSg c ! h } ;
-- Noun is {s : NumCaseStem => Str}
in {h = h ;
s = table {
-- Before Sg Ins, Tra:
-- * Double the last letter if consonant
-- * Add v if vowel (comes from endCaseSg)
SgInsStem => duplConsStem + endCaseSg SgInsStem ! h ;
Pl => table {
-- Double the plural k before Ins, Tra
c@(Ins|Tra) => w + plural + "k" + endCasePl c ! h ;
-- endCaseCons, because we only use -k as plural morpheme.
-- Possessive forms with allomorph -i are handled separately.
PlStem => w + plural ;
-- endCaseCons, because we only use -k as plural morpheme.
-- If we add possessive forms with allomorph -i, then revise.
c@_ => w + plural + endCasePl c ! h }
}
} ;
-- All other singular forms and stems
c => w + endCaseSg c ! h } ;
} ;
-- This is used in ResHun.caseFromStem, which makes NP out of CN.
-- Ns only have stems, and these forms are attached to the stems.
endCase : Case -> HarmForms = \c -> case c of {
Nom => harm1 [] ;
Acc => harm "at" "et" ; -- NB. this is only used for plural acc!
Dat => harm "nak" "nek" ;
Ade => harm "nál" "nél" ;
Sup => harm3 "on" "en" "ön" ;
Ine => harm "ban" "ben" ;
Ela => harm "ból" "ből" ;
Ins => harm "al" "el" ;
Tra => harm "á" "é" ;
All => harm3 "hoz" "hez" "höz" ;
Abl => harm "tól" "től" ;
Sub => harm "ra" "re" ;
Del => harm "ról" "ről" ;
Cau => harm1 "ért" ;
Ill => harm "ba" "be"
-- Ess => harm "stul" "stül" ; -- Essive-modal 'with <the noun> and its parts'
-- Ter => harm1 "ig" ; -- Terminative 'as far as <the noun>'
-- For => harm1 "ként" ; -- Formal 'as <the noun>'
-- Tem => harm1 "kor" -- Temporal 'at <numeral>'. Only used with numerals.
} ;
endCasePossVow : Case -> HarmForms = \c -> case c of {
Acc => harm1 "t" ;
Sup => harm1 "n" ;
Tra => harm "vá" "vé" ;
Ins => harm "val" "vel" ;
_ => endCase c
} ;
}

View File

@@ -18,8 +18,11 @@ oper
--2 Nouns
mkN : overload {
mkN : (sgnom : Str) -> N ; -- Predictable nouns from singular nominative. Accusative vowel is o for back harmony. No stem lowering (TODO better explanation/examples)
mkN : (sgnom : Str) -> (sggen : Str) -> N ; -- Singular nominative and accusative. Takes care of cases like … TODO example
mkN : (sgnom : Str) -> N ; -- Predictable nouns from singular nominative. Accusative vowel is o/ö, no stem lowering. Use: `mkN "nap"` for nap, napot.
mkN : (sgnom, sggen : Str) -> N ; -- Singular nominative and accusative. Use: `mkN "név" "nevet"`
mkN : (sgnom, sggen, plnom : Str) -> N ; -- Singular nominative, singular accusative, plural nominative. Use: `mkN "falu" "falut" "falvak"`
mkN : (sgnom, sggen, plnom, sgnom_possdSg3 : Str) -> N ; -- Singular nominative, singular accusative, plural nominative, singular nominative possessed by 3rd person singular. Use: `mkN "virág" "virágot" "virágok" "virága"` (would give "virágja" otherwise)
mkN : (férfi : Str) -> (harm : Harmony) -> (ak : Str) -> N ; -- Noun with unpredictable vowel harmony and plural allomorph
} ;
@@ -32,7 +35,8 @@ oper
--2 Adjectives
mkA : overload {
mkA : (adj : Str) -> A ; -- Regular adjective, given in ??? form
mkA : (sgnom : Str) -> A ; -- Regular adjective, given in singular nominative
mkA : (sgnom, sgacc : Str) -> A ; -- Singular nominative and accusative
-- mkA : (kiga : Str) -> (jakda : A) -> A ; -- Compound adjective, e.g. 키가 작다 'short', literally 'height (is) small'. 키가 'height' given as string, 작다 'small' given as preconstructed A.
} ;
@@ -88,7 +92,7 @@ oper
} ;
prePrep : Str -> Case -> Prep -- Preposition
= \s,c -> lin Prep {pr=s ; s=[] ; c=c} ;
= \s,c -> lin Prep (ResHun.prepos c s) ;
casePrep : Case -> Prep ; -- No postposition, only case
@@ -99,7 +103,7 @@ oper
-- lin Subj { } ;
mkAdv : Str -> Adv
= \s -> lin Adv {s = s} ;
= \s -> lin Adv {s = s ; isPre=False} ;
mkAdV : Str -> AdV
= \s -> lin AdV {s = s} ;
@@ -125,6 +129,15 @@ oper
mkN : Str -> Str -> N =
\n,a-> lin N (regNounNomAcc n a) ;
mkN : Str -> Str -> Str -> N =
\n,a,pln-> lin N (regNounNomAccPl n a pln) ;
mkN : (x1,_,_,x4 : Str) -> N =
\n,a,pln,possd -> lin N (regNoun4 n a pln possd) ;
mkN : (x1,_,_,_,_,_,_,x8 : Str) -> N =
\a,b,c,d,e,f,g,h -> lin N (worstCaseNoun a b c d e f g h (getHarm a)) ;
mkN : Str -> Harmony -> N =
\s,h -> lin N (mkNounHarm h (pluralAllomorph s) s) ;
@@ -145,25 +158,29 @@ oper
} ;
mkA = overload {
mkA : (adj : Str) -> A = \s -> lin A (mkAdj s) ;
mkA : (sgnom : Str) -> A = \s -> lin A (mkAdj s) ;
mkA : (sgnom,sgacc : Str) -> A = \n,a ->
lin A (mkAdj2 n (regNounNomAcc n a)) ;
-- mkA : (kiga : Str) -> (jakda : A) -> A = \kiga,jakda ->
-- jakda ** {s = \\af => kiga ++ jakda.s ! af} ;
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = casePrep Nom} ;
mkA2 : A -> A2 = \a -> a ** {c2 = casePrep Nom ; isPost = False} ;
mkA2 : Str -> Prep -> A2 = \s,p ->
lin A2 {s = (mkAdj s).s ; c2 = p} ;
lin A2 ((mkAdj s) ** {c2 = p ; isPost = False}) ;
mkA2 : Str -> Case -> A2 = \s,c ->
lin A2 {s = (mkAdj s).s ; c2 = casePrep c} ;
lin A2 ((mkAdj s) ** {c2 = casePrep c ; isPost = False}) ;
mkA2 : A -> Prep -> A2 = \a,p ->
lin A2 (a ** {c2 = p}) ;
lin A2 (a ** {c2 = p ; isPost = False}) ;
} ;
mkV = overload {
mkV : (sg3 : Str) -> V = \v -> lin V (mkVerb v) ;
-- mkV : (nore : Str) -> (hada : V) -> V = \nore,hada -> hada ** {
-- s = \\vf => nore + hada.s ! vf} ;
mkV : (x1,_,_,_,_,_,x7 : Str) -> V = \sg1,sg2,sg3,pl1,pl2,pl3,inf ->
lin V (mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3 inf) ;
} ;
copula = ResHun.copula ;
@@ -182,13 +199,13 @@ oper
mkPrep = overload {
mkPrep : (e : Str) -> Prep
= \str -> lin Prep (ResHun.mkPrep str) ;
= \str -> lin Prep (ResHun.nomAdp str) ;
mkPrep : Str -> Case -> Prep
= \str,c -> lin Prep (ResHun.mkPrep str ** {c = c}) ;
= \str,c -> lin Prep (ResHun.caseAdp c str) ;
} ;
casePrep : Case -> Prep
= \c -> lin Prep (ResHun.mkPrep [] ** {c = c}) ;
= \c -> lin Prep (ResHun.caseAdp c) ;
--------------------------------------------------------------------------------
}

View File

@@ -1,31 +1,109 @@
resource ParamHun = ParamX ** open Prelude in {
--------------------------------------------------------------------------------
-- Generic
oper
if_then_Pol : Polarity -> Str -> Str -> Str = \p,t,f ->
case p of {Pos => t ; Neg => f } ;
--------------------------------------------------------------------------------
-- Phonology
--------------------------------------------------------------------------------
-- Morphophonology
--------------------------------------------------------------------------------
-- Quant
param
QuantType =
IndefArticle -- Needed to prevent "a 2 cars"
| IndefQuant -- Not IndefArt, not poss, not def
| DefQuant
| QuantPoss PossStem -- Which possessive stem it takes
;
DetType =
DefDet -- distinction between Article and Other no longer needed
| IndefDet -- still need def or indef
| DetPoss PossStem -- Sill need to know which stem it takes if Poss
;
-- Singular stems. Plural is always same, no need to add here.
PossStem = dSg_rSg1P2 | dSg_rP3 Number | dSg_rPl1 ;
oper
-- standard trick to prevent "a one car"
isIndefArt : {qt : QuantType} -> Bool = \quant ->
case quant.qt of {
IndefArticle => True ;
_ => False
} ;
dt2objdef : DetType -> ObjDef = \dt -> case dt of {
IndefDet => Indef ;
_ => Def
} ;
objdef2dt : ObjDef -> DetType = \od -> case od of {
Def => DefDet ;
Indef => IndefDet
} ;
qt2dt : QuantType -> DetType = \qt -> case qt of {
QuantPoss x => DetPoss x ;
DefQuant => DefDet ;
_ => IndefDet
} ;
agr2pstem : Person*Number -> PossStem = \pn ->
case <pn.p1,pn.p2> of {
<P1,Pl> => dSg_rPl1 ;
<P3,n> => dSg_rP3 n ;
_ => dSg_rSg1P2
} ;
--------------------------------------------------------------------------------
-- Nouns
param
Case = Nom | Acc | Dat
-- | PossStem -- TODO: Stem where possessive suffixes attach?
| Ill | Ine | Ela | All | Ade | Abl | Sub | Sup | Del -- Locatives
| Cau -- Causal-final 'for the purpose of, for the reason that'
| Ins -- Instrumental
| Tra -- Translative
-- | Ess | Ter | For
-- | Tem -- Temporal, e.g. hatkor six oclock (from hat 6)
;
NumCaseStem =
SgNom | SgAccStem | SgSup -- These may use 2-3 different stems
-- May have irregular vowel in suffix
| SgAll -- May have irregular vowel in suffix
| SgInsStem -- Instrumental and translative: -v after vowels
| SgStem -- Rest of the cases in Sg
| PlStem -- Rest of the cases in Pl
| PossdSg_PossrP3 -- Possessed item is Sg, possessor is Sg or Pl P3
| PossdSg_PossrPl1 -- Possessed item is Sg, possessor is Pl P1
| PossdPl -- Possessed item in plural, any possessor.
; -- Rest of poss forms use SgAccStem
Case =
Nom | Acc | Dat
-- | Ill -- Locatives
| Ine
| Ela
| All
| Ade
-- | Abl
-- | Sub
| Sup
-- | Del
-- | Cau -- Causal-final 'for the purpose of, for the reason that'
| Ins -- Instrumental
| Tra -- Translative
-- | Ess | Ter | For
-- | Tem -- Temporal, e.g. hatkor six oclock (from hat 6)
;
SubjCase = SCNom | SCDat ; -- Limited set of subject cases
Possessor = NoPoss | Poss Person Number ;
oper
caseTable : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> Case=>Str =
@@ -33,18 +111,18 @@ oper
Nom => n ;
Acc => a ;
Dat => d ;
Ill => il ;
Ins => ins ;
Tra => tra ;
Sup => sup ;
Ine => ine ;
Ela => el ;
All => al ;
Ade => ad ;
Abl => ab ;
Sub => sub ;
Sup => sup ;
Del => del ;
Cau => ca ;
Ins => ins ;
Tra => tra } ;
Ill => il ;
Cau => ca } ;
sc2case : SubjCase -> Case = \sc ->
case sc of {
@@ -52,6 +130,45 @@ oper
SCDat => Dat
} ;
case2str : Case -> Str = \c -> case c of {
Nom => "Nom" ;
Acc => "Acc" ;
Dat => "Dat" ;
Ins => "Ins" ;
Tra => "Tra" ;
Sup => "Sup" ;
Ine => "Ine" ;
Ela => "Ela" ;
All => "All" ;
Ade => "Ade" ;
Abl => "Abl" ;
Sub => "Sub" ;
Del => "Del" ;
Ill => "Ill" ;
Cau => "Cau" } ;
ncstem2str : NumCaseStem -> Str = \nc -> case nc of {
SgNom => "SgNom" ;
SgAccStem => "SgAccStem" ;
SgSup => "SgSup" ;
SgAll => "SgAll" ;
SgInsStem => "SgInsStem" ;
SgStem => "SgStem" ;
PlStem => "PlStem" ;
PossdSg_PossrP3 => "PossdSg_PossrP3" ;
PossdSg_PossrPl1 => "PossdSg_PossrPl1" ;
PossdPl => "PossdPl"
} ;
possessor2str : Possessor -> Str = \p -> case p of {
NoPoss => "NoPoss" ;
Poss P1 Sg => "Poss P1 Sg" ;
Poss P2 Sg => "Poss P2 Sg" ;
Poss P3 Sg => "Poss P3 Sg" ;
Poss P1 Pl => "Poss P1 Pl" ;
Poss P2 Pl => "Poss P2 Pl" ;
Poss P3 Pl => "Poss P3 Pl"
} ;
--------------------------------------------------------------------------------
-- Numerals
@@ -61,13 +178,16 @@ param
CardOrd = NOrd | NCard ; -- Not used yet
NumType = NoNum | IsDig | IsNum ;
NumType = NoNum Number | IsNum ;
oper
isNum : {numtype : NumType} -> Bool = \nt -> case nt.numtype of {
NoNum => False ;
_ => True
isNum : {n : NumType} -> Bool = \n -> case n.n of {
IsNum => True ;
_ => False
} ;
num2number : NumType -> Number = \n ->
case n of {NoNum x => x ; IsNum => Sg} ;
--------------------------------------------------------------------------------
-- Adjectives
@@ -88,13 +208,13 @@ param
VForm =
VInf
| VFin Person Number ;
| VPres Person Number ;
oper
agr2vf : Person*Number -> VForm = \pn ->
case <pn.p1,pn.p2> of {
<p,n> => VFin p n
<p,n> => VPres p n
} ;
--------------------------------------------------------------------------------

View File

@@ -12,12 +12,12 @@ concrete PhraseHun of Phrase = CatHun ** open Prelude, ResHun in {
UttImpPol = UttImpSg ;
-}
UttIP,
UttNP = \np -> {s = np.s ! Nom} ;
UttNP = \np -> {s = np.s ! NoPoss ! Nom} ;
UttVP vp = {s = vp.obj ++ vp.adv ++ vp.s ! VInf} ;
UttAdv adv = adv ;
UttCN cn = {s = cn.s ! Sg ! Nom} ;
UttCN cn = {s = linCN cn} ;
UttCard n = {s = n.s ! Indep} ;
UttAP ap = {s = ap.s ! Sg ++ ap.compar} ;
UttAP ap = {s = ap.s ! Sg ! Nom ++ ap.compl ! Sg} ;
UttInterj i = i ;
NoPConj = {s = []} ;

View File

@@ -13,6 +13,63 @@ resource ResHun = NounMorphoHun ** open Prelude, Predef in {
-- Noun morphology is in NounMorphoHun
oper
CNoun : Type = Noun ** {
compl : Number => Case => Str ;
} ;
mkCaseNoun : Str -> Number => Case => Str = \s ->
\\n,c => caseFromStem (\a,b -> a+b) (mkNoun s) c n ;
mkCaseNoun2 : (n,a : Str) -> Number => Case => Str = \no,ac ->
\\n,c => caseFromStem (\a,b -> a+b) (regNounNomAcc no ac) c n ;
caseFromStem : (Str->Str->Str) -> Noun -> Case -> Number -> Str = \bind,cn,cas,n ->
let applyCase' : NumCaseStem -> Str = applyCase bind cas cn in
case <n,cas> of {
<Sg,Nom> => cn.s ! SgNom ;
<Sg,Acc> => bind (cn.s ! SgAccStem) "t" ;
<Sg,Sup> => cn.s ! SgSup ;
<Sg,All> => cn.s ! SgAll ;
<Pl,Nom> => cn.s ! PlStem ; -- don't use applyCase', it adds a BIND which breaks everything!
<Sg,Ins|Tra> => applyCase' SgInsStem ;
<Pl,Ins|Tra> => bind (bind (cn.s ! PlStem) "k") (endCase cas ! cn.h) ;
<Sg,_> => applyCase' SgStem ;
<Pl,_> => applyCase' PlStem
} ;
caseFromPossStem : CNoun -> Determiner -> Case -> Str = \cn,det,cas ->
let st : PossStem = case det.dt of {
DetPoss x => x ;
_ => Predef.error "caseFromPossStem: Not possessive Det" } ;
casetable : Case->HarmForms = case <det.n,st> of {
-- P3 Sg possessive suffix ends in vowel, others in consonant.
<Sg, dSg_rP3 Sg> => endCasePossVow ;
_ => endCase } ;
stem : NumCaseStem = case det.n of {
Pl => PossdPl ;
Sg => case st of {
dSg_rP3 _ => PossdSg_PossrP3 ;
dSg_rPl1 => PossdSg_PossrPl1 ;
dSg_rSg1P2 => SgAccStem }
} ;
-- possessive suffix e.g. "their cats-3pl" is just k. not uk/ük
-- possessive suffix e.g. "her cat-3sg" is ∅, we store
suf = case <det.n,st> of {
<Pl, dSg_rP3 Pl> => "k" ;
<Pl, dSg_rP3 Sg> => "" ;
_ => det.poss ! cn.h } ;
in case <cas,det.n,st> of {
-- Possessor is P3 Sg, possessed is plural, case is Nom:
-- just use the stored PossdPl stem, e.g. 'madarai'
<Nom, Pl, dSg_rP3 Sg> => cn.s ! PossdPl ;
-- Any number of possr or possd, case Nom = empty case ending
<Nom> => glue (cn.s ! stem) suf ;
-- Other forms have non-empty poss. suffix and case ending
_ => applyCaseSuf suf cas cn stem casetable
} ;
BaseNP : Type = {
agr : Person*Number ;
objdef : ObjDef ;
@@ -20,70 +77,164 @@ oper
} ;
NounPhrase : Type = BaseNP ** {
s : Case => Str ;
s : Possessor => Case => Str ;
} ;
emptyNP : NounPhrase = {
s = \\_ => [] ;
s = \\_,_ => [] ;
agr = <P3,Sg> ;
objdef = Indef ;
empty = [] ;
} ;
indeclNP : Str -> NounPhrase = \s -> emptyNP ** {s = \\c => s} ;
indeclNP : Str -> NounPhrase = \s -> emptyNP ** {s = \\p,c => s} ;
defNP : Str -> Number -> NounPhrase = \s,n -> emptyNP ** {
s = (mkNoun s).s ! n ;
s = \\c => mkCaseNoun s ! n ;
n = n ;
objdef = Def ;
} ;
linCN : CNoun -> Str = \cn -> cn.s ! SgNom ++ cn.compl ! Sg ! Nom ;
--------------------------------------------------------------------------------
-- Pronouns
Pronoun : Type = NounPhrase ** {
--poss : Str ; -- for PossPron : Pron -> Quant
Pronoun : Type = BaseNP ** {
s : Case => Str ;
poss : HarmForms ; -- for PossPron : Pron -> Quant
} ;
possForms : Person*Number => HarmForms = \\agr => case agr of {
<P1,Sg> => harm1 "m" ;
<P2,Sg> => harm1 "d" ;
<P3,Sg> => harm "a" "e" ; --TODO: wovel cases with "ja"? See verb forms below
<P1,Pl> => harm1 "nk" ; -- u/ü/other vowel in stem
<P2,Pl> => harm "tok" "tök" ;
<P3,Pl> => harm "uk" "ük"
} ;
pronTable : Person*Number => Pronoun = \\agr => case agr of {
<P1,Sg> => emptyNP ** {
s = caseTable "én" "engem" "nekem"
"belém" "bennem" "belőlem" -- inner locatives
"hozzám" "nálam" "tőlem" -- outer locatives
"rám" "rajtam" "rólam" -- outer locatives
"értem" -- Causative
"velem" -- Instrumental
nonExist ; -- Translative
agr = agr ;
objdef = Def ;
poss = possForms ! agr } ;
<P2,Sg> => emptyNP ** {
s = caseTable "te" "teged" "neked"
"beléd" "benned" "belőled"
"hozzád" "nálad" "tőled"
"rád" "rajtad" "rólad"
"érted" -- Causative
"veled" -- Instrumental
nonExist ; -- Translative
agr = agr ;
objdef = Def ;
poss = possForms ! agr } ;
<P3,Sg> => emptyNP ** {
s = caseTable "ő" "őt" "neki"
"belé" "benne" "belőle"
"hozzá" "nála" "tőle"
"rá" "rajta" "róla"
"érte" -- Causative
"vele" -- Instrumental
nonExist ; -- Translative
objdef = Def ;
poss = possForms ! agr } ;
<P1,Pl> => emptyNP ** {
s = caseTable "mi" "minket" "nekünk"
"belénk" "bennünk" "belőlünk"
"hozzánk" "nálunk" "tőlünk"
"ránk" "rajtunk" "rólunk"
"értünk" -- Causative
"velünk" -- Instrumental
nonExist ; -- Translative
agr = agr ;
objdef = Def ;
poss = possForms ! agr } ;
<P2,Pl> => emptyNP ** {
s = caseTable "ti" "titeket" "nektek"
"belétek" "bennetek" "belőletek"
"hozzátok" "nálatok" "tőletek"
"rátok" "rajtatok" "rólatok"
"értetek" -- Causative
"veletek" -- Instrumental
nonExist ; -- Translative
agr = agr ;
objdef = Def ;
poss = possForms ! agr } ;
<P3,Pl> => emptyNP ** {
s = caseTable "ők" "őket" "nekik"
"beléjük" "bennük" "belőlük"
"hozzájuk" "náluk" "tőlük"
"rájuk" "rajtuk" "róluk"
"értük" -- Causative
"velük" -- Instrumental
nonExist ; -- Translative
agr = agr ;
objdef = Def ;
poss = possForms ! agr }
} ;
--------------------------------------------------------------------------------
-- Det, Quant, Card, Ord
BaseQuant : Type = {
poss : HarmForms ; -- Quants made by PossPron need this, empty for others
caseagr : Bool ; -- If it agrees in case: "azoknak a nőknek" vs. "sok nőknek"
} ;
-- Quant has variable number:
-- e.g. this_Quant has both "this" and "these"
Quant : Type = {
Quant : Type = BaseQuant ** {
s, -- form that comes before noun: "{this} car"
sp : Number => Case => Str ; -- independent form, "I like {this}" (DetNP)
isIndefArt : Bool ; -- standard trick to prevent "a one car"
objdef : ObjDef ; -- How V2 agrees if NP with this Det is an object
qt : QuantType ;
} ;
mkQuant : (s,sp : Str) -> Quant = \s,sp -> {
s = (mkNoun s).s ;
sp = (mkNoun sp).s ;
isIndefArt = False ;
objdef = Def ;
s = mkCaseNoun s ;
sp = mkCaseNoun sp ;
qt = DefQuant ;
caseagr = True ;
poss = harm1 [] ;
} ;
-- Det is formed in DetQuant : Quant -> Num -> Det
-- so it has an inherent number.
Determiner : Type = {
Determiner : Type = BaseQuant ** {
s,
sp : Case => Str ;
n : Number ;
numtype : NumType ; -- Whether its Num component is digit, numeral or Sg/Pl
objdef : ObjDef ; -- How V2 agrees if NP with this Det is an object
dt : DetType ;
} ;
mkDet : (s : Str) -> ObjDef -> Number -> Determiner = \s,d,n -> {
mkDet : (s : Str) -> ObjDef -> Number -> Bool -> Determiner = \s,d,n,ca -> {
s,
sp = (mkNoun s).s ! n ;
sp = mkCaseNoun s ! n ;
n = n ;
numtype = NoNum ;
objdef = d ;
caseagr = ca ;
dt = objdef2dt d ;
poss = harm1 [] ;
} ;
mkDet2 : (n,a : Str) -> ObjDef -> Number -> Bool -> Determiner = \no,ac,d,n,ca ->
let reg : Determiner = mkDet no d n ca
in reg ** {
s,sp = mkCaseNoun2 no ac ! n ;
} ;
-- No need for number:
-- https://en.wikisource.org/wiki/Simplified_Grammar_of_the_Hungarian_Language/Nouns
-- "Nouns are used in the singular only, if preceded by a numeral or any other
-- word expressing quantity; as két ember, two men; sok fa, many trees."
Numeral : Type = {
s : Place => Str ; -- Independent or attribute
numtype : NumType ; -- Digit, numeral or Sg/Pl : makes a difference in many languages
-- TODO add ordinal
} ;
@@ -92,13 +243,12 @@ oper
Noun.gf: NumCard : Card -> Num ;
-}
Num : Type = Numeral ** {
n : Number ; -- Singular or plural
n : NumType ; -- Singular, plural or numeral
} ;
baseNum : Num = {
s = \\_ => [] ;
n = Sg ;
numtype = NoNum
n = NoNum Sg ;
} ;
--------------------------------------------------------------------------------
@@ -111,9 +261,27 @@ oper
c : Case ;
} ;
mkPrep : Str -> Adposition = \str -> {s=str ; c=Nom ; pr=[]} ;
nomAdp : Str -> Adposition = \s -> postpos Nom s ;
caseAdp = overload {
caseAdp : Case -> Adposition = \c -> postpos c [] ;
caseAdp : Case -> Str -> Adposition = \c,s -> postpos c s ;
} ;
postpos : Case -> Str -> Adposition = \c,s-> {s=s ; c=c ; pr=[]} ;
prepos : Case -> Str -> Adposition = \c,s -> {s=[] ; c=c ; pr=s} ;
emptyAdp : Adposition = nomAdp [] ;
applyAdp : Adposition -> NounPhrase -> Str = \adp,np ->
adp.pr ++ np.s ! NoPoss ! adp.c ++ adp.s ;
applyCase : (Str->Str->Str) -> Case -> Noun -> NumCaseStem -> Str =
\bind,cas,cn,stem -> bind (cn.s ! stem) (endCase cas ! cn.h) ;
applyCaseSuf : Str -> Case -> CNoun -> NumCaseStem -> (Case -> HarmForms) -> Str =
\suf,cas,cn,stem,casetable ->
glue (glue (cn.s ! stem) suf) (casetable cas ! cn.h) ;
emptyAdp : Adposition = mkPrep [] ;
------------------
-- Conj
@@ -135,34 +303,40 @@ oper
-- Adjectives
AdjPhrase : Type = {
s : Number => Str ;
compar : Str -- Discontinuous: Én *nagyobb* vagyok *nálad*.
s : Number => Case => Str ;
compl : Number => Str -- Discontinuous comparative: Én nagyobb vagyok nálad.
-- This depends on Number to allow postmodifier APs.
} ;
emptyAP : AdjPhrase = {
s = \\_ => [] ;
compar = [] ;
s = \\_,_ => [] ;
compl = \\_ => [] ;
} ;
Adjective : Type = {
s : Degree => Number => Str
} ;
Adjective2 : Type = Adjective ** {
c2 : Adposition ;
s : Degree => NumCaseStem => Str ;
h : Harm ;
} ;
mkAdj : Str -> Adjective = \sg -> {
s = \\d,n =>
let adj = case d of {
Compar => comparAdj sg ;
Superl => "leg" + comparAdj sg ;
_ => sg } ;
plural = case n of {
Sg => [] ;
Pl => pluralAdj adj }
in adj + plural
Adjective2 : Type = Adjective ** {
c2 : Adposition ;
isPost : Bool ; -- put adjective past the thing it modifies
} ;
mkAdj : Str -> Adjective = \sgnom -> mkAdj2 sgnom (regNoun sgnom) ;
mkAdj2 : Str -> Noun -> Adjective = \sgnom,adjAsNoun -> adjAsNoun ** {
s = \\d =>
let adj : Noun = case d of {
Compar => mkNoun (comparAdj sgnom) ;
Superl => mkNoun ("leg" + comparAdj sgnom) ;
_ => adjAsNoun } ;
in adj.s ;
} ;
invarAP : Str -> AdjPhrase = \s -> emptyAP ** {s = \\_,_ => s} ;
-- https://en.wikisource.org/wiki/Simplified_Grammar_of_the_Hungarian_Language/Adjectives
comparAdj : Str -> Str = \stem ->
case stem of {
@@ -236,7 +410,7 @@ oper
vtov2 : Verb -> Verb2 = \v -> v ** {
s = table {
Def => let vDef : Verb = mkVerbReg endingsDef (v.s ! VInf) (v.s ! VFin P3 Sg)
Def => let vDef : Verb = mkVerbReg endingsDef (v.s ! VInf) (v.s ! VPres P3 Sg)
in vDef.s ;
Indef => v.s } ;
c2 = Acc
@@ -259,12 +433,12 @@ oper
\sg1,sg2,sg3,pl1,pl2,pl3,inf -> {
s = table {
VInf => inf ;
VFin P1 Sg => sg1 ;
VFin P2 Sg => sg2 ;
VFin P3 Sg => sg3 ;
VFin P1 Pl => pl1 ;
VFin P2 Pl => pl2 ;
VFin P3 Pl => pl3
VPres P1 Sg => sg1 ;
VPres P2 Sg => sg2 ;
VPres P3 Sg => sg3 ;
VPres P1 Pl => pl1 ;
VPres P2 Pl => pl2 ;
VPres P3 Pl => pl3
} ;
sc = SCNom
} ;
@@ -286,7 +460,7 @@ oper
-- VP
VerbPhrase : Type = Verb ** {
obj : Str ;
obj : Str ; -- Person*Number => Str, if we want open word order in have_V2
adv : Str ;
c2 : Case ; -- for RelSlash
} ; -- TODO more fields
@@ -296,7 +470,8 @@ oper
} ;
useV : Verb -> VerbPhrase = \v -> v ** {
obj,adv = [] ;
obj = [] ;
adv = [] ;
c2 = Acc ; -- TODO check
} ;
@@ -304,15 +479,6 @@ oper
adv = [] ;
} ;
insertObj : VPSlash -> NounPhrase -> VerbPhrase = \vps,np -> vps ** {
obj = np.s ! vps.c2 ;
-- If verb's subject case is Dat and object Nom, verb agrees with obj.
s = \\vf => case <vps.sc,vps.c2> of {
<SCDat,Nom> => vps.s ! np.objdef ! agr2vf np.agr ;
_ => vps.s ! np.objdef ! vf } ;
} ;
insertAdv : VerbPhrase -> SS -> VerbPhrase = \vp,adv -> vp ** {adv = adv.s} ;
insertAdvSlash : VPSlash -> SS -> VPSlash = \vps,adv -> vps ** {adv = adv.s} ;
@@ -337,9 +503,10 @@ oper
s = \\t,a,p => let subjcase : Case = case vp.sc of {
SCNom => Nom ;
SCDat => Dat }
in np.s ! subjcase
in np.s ! NoPoss ! subjcase
++ if_then_Pol p [] "nem"
++ vp.s ! agr2vf np.agr
++ vp.obj
++ vp.obj -- ! np.agr
++ vp.adv
++ np.empty -- standard trick for prodrop+metavariable problem
} ;
@@ -349,10 +516,6 @@ oper
RP : Type = {s : Number => Case => Str} ;
RClause : Type = {s : Tense => Anteriority => Polarity => Number => Case => Str} ;
np2rp : NounPhrase -> RP ** {agr : Person*Number} = \np -> np ** {
s = \\n => np.s ;
} ;
relVP : RP -> VerbPhrase -> RClause = \rp -> relVP' (rp ** {agr=<P3,Sg>}) ;
relVP' : RP ** {agr : Person*Number} -> VerbPhrase -> RClause = \rp,vp -> {
@@ -360,9 +523,10 @@ oper
SCNom => Nom ;
SCDat => Dat }
in rp.s ! n ! subjcase
++ vp.obj
++ if_then_Pol p [] "nem"
++ vp.obj -- ! <rp.agr.p1,n>
++ vp.adv
++ vp.s ! VFin rp.agr.p1 n -- variable by number
++ vp.s ! VPres rp.agr.p1 n -- variable by number
} ;
relSlash : RP -> ClSlash -> RClause = \rp,cls -> {

View File

@@ -61,16 +61,20 @@ lin most_Predet = {s = ""} ;
-}
--lin every_Det =
lin few_Det = mkDet "kevés" Def Sg ; -- TODO check
lin many_Det = mkDet "sok" Def Sg ; -- TODO check
lin few_Det = mkDet "kevés" Indef Sg False ;
lin many_Det = mkDet "sok" Indef Sg False ;
--lin much_Det =
lin somePl_Det = mkDet "néhány" Indef Sg ;
lin someSg_Det = mkDet "néhány" Indef Sg ;
lin someSg_Det,
somePl_Det = mkDet2 "néhány" "néhányat" Indef Sg False ;
--lin no_Quant =
lin that_Quant = mkQuant "az" "az" ;
lin this_Quant = mkQuant "ez" "ez" ;
lin that_Quant =
let az : Quant = mkQuant "az" "az" ;
in az ** {s = \\n,c => az.s ! n ! c ++ pre {"a" ; "az" / v }} ;
lin this_Quant =
let ez : Quant = mkQuant "ez" "ez" ;
in ez ** {s = \\n,c => ez.s ! n ! c ++ pre {"a" ; "az" / v }} ;
{-lin which_IQuant =
@@ -90,25 +94,25 @@ lin something_NP = defNP "valami" Sg ;
-- List of postpositions requiring case:
-- https://en.wiktionary.org/wiki/Appendix:Hungarian_postpositions#Postpositions_Requiring_Case
lin above_Prep = mkPrep "fölött" ;
lin above_Prep = nomAdp "fölött" ;
-- lin after_Prep = mkPrep ""
-- lin before_Prep = mkPrep "" ;
-- lin behind_Prep = mkPrep "" ;
-- lin between_Prep = = mkPrep "" ;
lin by8agent_Prep = mkPrep "által" ;
lin by8means_Prep = casePrep Ins ;
lin by8agent_Prep = nomAdp "által" ;
lin by8means_Prep = caseAdp Ins ;
-- lin during_Prep = mkPrep ;
-- lin except_Prep = mkPrep ;
-- lin for_Prep = mkPrep "" ;
lin for_Prep = caseAdp Dat ;
-- lin from_Prep = mkPrep "" ;
-- lin in8front_Prep = mkPrep "" ;
lin in_Prep = casePrep Ine ;
lin on_Prep = casePrep Ade ;
lin in_Prep = caseAdp Ine ;
lin on_Prep = caseAdp Sup ;
-- lin part_Prep = casePrep ;
-- lin possess_Prep = -- Suffix attaches to possessee, not possessor
-- lin through_Prep = mkPrep ;
lin to_Prep = casePrep All ;
lin under_Prep = mkPrep "alatt" ;
lin to_Prep = caseAdp All ;
lin under_Prep = nomAdp "alatt" ;
-- lin with_Prep = mkPrep "" ;
-- lin without_Prep = mkPrep "" ;
@@ -118,76 +122,14 @@ lin under_Prep = mkPrep "alatt" ;
-- Pronouns are closed class, no constructor in ParadigmsHun.
-- it_Pron =
i_Pron = emptyNP ** {
s = caseTable "én" "engem" "nekem"
"belém" "bennem" "belőlem" -- inner locatives
"hozzám" "nálam" "tőlem" -- outer locatives
"rám" "rajtam" "rólam" -- outer locatives
"értem" -- Causative
"velem" -- Instrumental
nonExist ; -- Translative
agr = <P1,Sg> ;
objdef = Def ;
poss = "em" ;
} ;
i_Pron = pronTable ! <P1,Sg> ;
youPol_Pron,
youSg_Pron = emptyNP ** {
s = caseTable "te" "teged" "neked"
"beléd" "benned" "belőled"
"hozzád" "nálad" "tőled"
"rád" "rajtad" "rólad"
"érted" -- Causative
"veled" -- Instrumental
nonExist ; -- Translative
agr = <P2,Sg> ;
objdef = Def ;
poss = "d" ;
} ;
youSg_Pron = pronTable ! <P2,Sg> ;
he_Pron,
she_Pron = emptyNP ** {
s = caseTable "ő" "őt" "neki"
"belé" "benne" "belőle"
"hozzá" "nála" "tőle"
"rá" "rajta" "róla"
"érte" -- Causative
"vele" -- Instrumental
nonExist ; -- Translative
objdef = Def ;
} ;
we_Pron = emptyNP ** {
s = caseTable "mi" "minket" "nekünk"
"belénk" "bennünk" "belőlünk"
"hozzánk" "nálunk" "tőlünk"
"ránk" "rajtunk" "rólunk"
"értünk" -- Causative
"velünk" -- Instrumental
nonExist ; -- Translative
agr = <P1,Pl> ;
objdef = Def ;
} ;
youPl_Pron = emptyNP ** {
s = caseTable "ti" "titeket" "nektek"
"belétek" "bennetek" "belőletek"
"hozzátok" "nálatok" "tőletek"
"rátok" "rajtatok" "rólatok"
"értetek" -- Causative
"veletek" -- Instrumental
nonExist ; -- Translative
agr = <P2,Pl> ;
objdef = Def ;
} ;
they_Pron = emptyNP ** {
s = caseTable "ők" "őket" "nekik"
"beléjük" "bennük" "belőlük"
"hozzájuk" "náluk" "tőlük"
"rájuk" "rajtuk" "róluk"
"értük" -- Causative
"velük" -- Instrumental
nonExist ; -- Translative
agr = <P3,Pl> ;
objdef = Def ;
} ;
she_Pron = pronTable ! <P3,Sg> ;
we_Pron = pronTable ! <P1,Pl> ;
youPl_Pron = pronTable ! <P2,Pl> ;
they_Pron = pronTable ! <P3,Pl> ;
--lin whatPl_IP = ;
--lin whatSg_IP = :

View File

@@ -18,22 +18,22 @@ lin
oper
mkPN : Str -> NounPhrase = \s -> emptyNP ** {
s = \\_ => s ;
s = \\_,_ => s ;
} ;
lin
-- : CN -> Int -> NP
CNIntNP cn i = NH.MassNP (cn ** {
s = \\n,c => cn.s ! n ! c ++ i.s}) ;
compl = \\n,c => cn.compl ! n ! c ++ i.s}) ;
-- : Det -> CN -> [Symb] -> NP ; -- (the) (2) numbers x and y
CNSymbNP det cn xs =
let cnSymb : CN = cn ** {s = \\n,c => cn.s ! n ! c ++ xs.s}
let cnSymb : CN = cn ** {compl = \\n,c => cn.compl ! n ! c ++ xs.s}
in NH.DetCN det cnSymb ;
-- : CN -> Card -> NP ; -- level five ; level 5
CNNumNP cn i = NH.MassNP (cn ** {
s = \\n,c => cn.s ! n ! c ++ i.s ! Indep}) ;
compl = \\n,c => cn.compl ! n ! c ++ i.s ! Indep}) ;
-- : Symb -> S ;
SymbS sy = sy ;
@@ -42,7 +42,7 @@ lin
SymbNum sy = baseNum ** {s = \\_ => sy.s} ;
-- : Symb -> Ord ;
SymbOrd sy = {s = \\n => sy.s ; n=Pl} ;
SymbOrd sy = {s = \\n,c => sy.s ; n=Pl} ;
lincat
Symb, [Symb] = SS ;

View File

@@ -1,4 +1,5 @@
concrete VerbHun of Verb = CatHun ** open ResHun, AdverbHun, Prelude in {
concrete VerbHun of Verb = CatHun **
open ResHun, AdverbHun, NounHun, Prelude in {
lin
@@ -63,7 +64,7 @@ lin
} ;
-}
-- : VPSlash -> NP -> VP
ComplSlash = ResHun.insertObj ;
ComplSlash = insertObj ;
{-
-- : VV -> VPSlash -> VPSlash ;
-- Just like ComplVV except missing subject!
@@ -109,25 +110,31 @@ lin
-- : AP -> Comp ;
CompAP ap = UseCopula ** {
s = \\vf => case vf of {
VFin P3 n => ap.s ! n ;
VFin _ n => ap.s ! n ++ copula.s ! vf ;
_ => ap.s ! Sg ++ copula.s ! vf}
++ ap.compar ;
VPres P3 n => ap.s ! n ! Nom ++ ap.compl ! n ;
VPres _ n => ap.s ! n ! Nom ++ copula.s ! vf ++ ap.compl ! n ;
_ => ap.s ! Sg ! Nom ++ copula.s ! vf ++ ap.compl ! Sg } ;
} ;
-- : CN -> Comp ;
CompCN cn = UseCopula ** {
s = \\vf => case vf of {
VFin P3 n => cn.s ! n ! Nom ;
VFin _ n => cn.s ! n ! Nom ++ copula.s ! vf ;
_ => cn.s ! Sg ! Nom ++ copula.s ! vf} ;
VPres P3 n => cn.s ! SgNom -- TODO
++ cn.compl ! n ! Nom ;
VPres _ n => cn.s ! SgNom -- TODO
++ cn.compl ! n ! Nom
++ copula.s ! vf ;
_ => cn.s ! SgNom
++ cn.compl ! Sg ! Nom
++ copula.s ! vf} ;
} ;
-- : NP -> Comp ;
CompNP np = UseCopula ** {
s = \\vf => case vf of {
VFin P3 _ => np.s ! Nom ;
_ => np.s ! Nom ++ copula.s ! vf } ;
VPres P3 _ => np.s ! NoPoss ! Nom ;
_ => np.s ! NoPoss ! Nom ++ copula.s ! vf } ;
} ;
-- : Adv -> Comp ;
@@ -138,4 +145,24 @@ lin
-- : VP -- Copula alone;
UseCopula = useV copula ;
oper
insertObj : ResHun.VPSlash -> NounPhrase -> VerbPhrase = \vps,np -> vps ** {
obj = case <vps.sc,vps.c2> of {
<SCDat,Nom> => [] ;
_ => np.s ! NoPoss ! vps.c2 } ;
s = \\vf =>
-- If verb's subject case is Dat and object Nom, verb agrees with obj.
case <vps.sc,vps.c2> of { -- have_V2 needs its object possessed by the subject
<SCDat,Nom> =>
let agr : Person*Number = case vf of {
VPres p n => <p,n> ;
_ => <P3,Sg> } ;
in np.s ! Poss agr.p1 agr.p2 ! vps.c2
++ vps.s ! np.objdef ! agr2vf np.agr ;
-- Default case: Verb agrees in person and number with subject
_ => vps.s ! np.objdef ! vf } ;
} ;
}

View File

@@ -1,17 +1,16 @@
-- LangEng: I have a cat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a have_V2) (DetCN (DetQuant IndefArt NumSg) (UseN cat_N)))))) NoVoc
LangHun: nekem van egy macskám
LangHun: nekem van egy macská &+ m
-- LangEng: I have the cat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a have_V2) (DetCN (DetQuant DefArt NumSg) (UseN cat_N)))))) NoVoc
LangHun: nekem megvan a macska
LangHun: nekem van a macská &+ m
--In this case we don't have to use plural
-- LangEng: I have many cats
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a have_V2) (DetCN many_Det (UseN cat_N)))))) NoVoc
LangHun: nekem van sok macskám
LangHun: nekem van sok macská &+ m
-- LangEng: I have some cats
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a have_V2) (DetCN somePl_Det (UseN cat_N)))))) NoVoc
LangHun: nekem van néhány macskám
-- "néhány" better translation than "némely"
LangHun: nekem van néhány macská &+ m

View File

@@ -0,0 +1,39 @@
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant this_Quant NumSg) (UseN apple_N)))))) NoVoc
LangEng: I see this apple
LangHun: én látom ezt az almá &+ t
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant this_Quant NumPl) (UseN apple_N)))))) NoVoc
LangEng: I see these apples
LangHun: én látom ezeket az almákat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant that_Quant NumPl) (AdjCN (PositA red_A) (UseN apple_N))))))) NoVoc
LangEng: I see those red apples
LangHun: én látom azokat a piros almákat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetNP (DetQuant this_Quant NumSg)))))) NoVoc
LangEng: I see this
LangHun: én látom ezt
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetNP (DetQuant this_Quant NumPl)))))) NoVoc
LangEng: I see these
LangHun: én látom ezeket
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN somePl_Det (UseN apple_N)))))) NoVoc
LangEng: I see some apples
LangHun: én látok néhány almá &+ t
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN somePl_Det (AdjCN (PositA red_A) (UseN apple_N))))))) NoVoc
LangEng: I see some red apples
LangHun: én látok néhány piros almá &+ t
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetNP somePl_Det))))) NoVoc
LangEng: I see some
LangHun: én látok néhányat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN few_Det (AdjCN (PositA red_A) (UseN apple_N))))))) NoVoc
LangEng: I see few red apples
LangHun: én látok kevés piros almá &+ t
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN many_Det (AdjCN (PositA red_A) (UseN apple_N))))))) NoVoc
LangEng: I see many red apples
LangHun: én látok sok piros almá &+ t

View File

@@ -1,364 +0,0 @@
---------------------
-- Noun inflection --
---------------------
-- Beer
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN beer_N))
LangEng: under the beer
LangHun: a sör alatt
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN beer_N))
LangEng: in the beer
LangHun: a sörben
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumSg) (UseN beer_N))
LangEng: on the beer
LangHun: a sörnél
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumSg) (UseN beer_N))
# LangEng: of the beer
# LangHun: a söré
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumSg) (UseN beer_N))
LangEng: to the beer
LangHun: a sörhöz
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumPl) (UseN beer_N))
LangHun: a sörökben
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumPl) (UseN beer_N))
LangHun: a söröknél
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumPl) (UseN beer_N))
# LangHun: a söröké
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumPl) (UseN beer_N))
LangHun: a sörökhöz
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumPl) (UseN beer_N))
LangHun: a sörök alatt
--látom not látok
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (UseN beer_N)))))) NoVoc
LangEng: I see the beer
LangHun: én látom a sört
--söröket not sörököt
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumPl) (UseN beer_N)))))) NoVoc
LangEng: I see the beers
LangHun: én látom a söröket
-- Woman
-- nő-nőt, not *nő-növet
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN woman_N))
LangEng: under the woman
LangHun: a nő alatt
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN woman_N))
LangEng: in the woman
LangHun: a nőben
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumSg) (UseN woman_N))
LangEng: on the woman
LangHun: a nőnél
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumSg) (UseN woman_N))
# LangEng: of the woman
# LangHun: a nőé
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumSg) (UseN woman_N))
LangEng: to the woman
LangHun: a nőhöz
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumPl) (UseN woman_N))
LangHun: a nőkben
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumPl) (UseN woman_N))
LangHun: a nőknél
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumPl) (UseN woman_N))
# LangHun: a nőké
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumPl) (UseN woman_N))
LangHun: a nőkhöz
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumPl) (UseN woman_N))
LangHun: a nők alatt
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (UseN woman_N)))))) NoVoc
LangEng: I see the woman
LangHun: én látom a nőt
--nőket not nőköt
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumPl) (UseN woman_N)))))) NoVoc
LangEng: I see the women
LangHun: én látom a nőket
-- Apple
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN apple_N))
LangEng: under the apple
LangHun: az alma alatt
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN apple_N))
LangEng: in the apple
LangHun: az almában
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumSg) (UseN apple_N))
LangEng: on the apple
LangHun: az almánál
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumSg) (UseN apple_N))
# LangEng: of the apple
# LangHun: az almáé
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumSg) (UseN apple_N))
LangEng: to the apple
LangHun: az almához
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumPl) (UseN apple_N))
LangHun: az almákban
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumPl) (UseN apple_N))
LangHun: az almáknál
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumPl) (UseN apple_N))
# LangHun: az almáké
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumPl) (UseN apple_N))
LangHun: az almákhoz
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumPl) (UseN apple_N))
LangHun: az almák alatt
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (UseN apple_N)))))) NoVoc
LangEng: I see the apple
LangHun: én látom az almát
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumPl) (UseN apple_N)))))) NoVoc
LangEng: I see the apples
LangHun: én látom az almákat
-- Bird
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN bird_N))
LangEng: under the bird
LangHun: a madár alatt
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN bird_N))
LangEng: in the bird
LangHun: a madárban
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumSg) (UseN bird_N))
LangEng: on the bird
LangHun: a madárnál
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumSg) (UseN bird_N))
# LangEng: of the bird
# LangHun: a madáré
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumSg) (UseN bird_N))
LangEng: to the bird
LangHun: a madárhoz
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumPl) (UseN bird_N))
LangHun: a madarakban
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumPl) (UseN bird_N))
LangHun: a madaraknál
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumPl) (UseN bird_N))
# LangHun: a madaraké
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumPl) (UseN bird_N))
LangHun: a madarakhoz
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumPl) (UseN bird_N))
LangHun: a madarak alatt
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (UseN bird_N)))))) NoVoc
LangEng: I see the bird
LangHun: én látom a madarat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumPl) (UseN bird_N)))))) NoVoc
LangEng: I see the birds
LangHun: én látom a madarakat
-- Name
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN name_N))
LangEng: under the name
LangHun: a név alatt
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN name_N))
LangEng: in the name
LangHun: a névben
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumSg) (UseN name_N))
LangEng: on the name
LangHun: a névnél
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumSg) (UseN name_N))
# LangEng: of the name
# LangHun: a névé
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumSg) (UseN name_N))
LangEng: to the name
LangHun: a névhez
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumPl) (UseN name_N))
LangHun: a nevekben
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumPl) (UseN name_N))
LangHun: a neveknél
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumPl) (UseN name_N))
# LangHun: a neveké
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumPl) (UseN name_N))
LangHun: a nevekhez
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumPl) (UseN name_N))
LangHun: a nevek alatt
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (UseN name_N)))))) NoVoc
LangEng: I see the name
LangHun: én látom a nevet
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumPl) (UseN name_N)))))) NoVoc
LangEng: I see the names
LangHun: én látom a neveket
-- Man
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN man_N))
LangEng: under the man
LangHun: a férfi alatt
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN man_N))
LangEng: in the man
LangHun: a férfiban
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumSg) (UseN man_N))
LangEng: on the man
LangHun: a férfinál
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumSg) (UseN man_N))
# LangEng: of the man
# LangHun: a férfié
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumSg) (UseN man_N))
LangEng: to the man
LangHun: a férfihoz
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumPl) (UseN man_N))
LangHun: a férfiakban
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumPl) (UseN man_N))
LangHun: a férfiaknál
# Lang: PrepNP possess_Prep (DetCN (DetQuant DefArt NumPl) (UseN man_N))
# LangHun: a férfiaké
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumPl) (UseN man_N))
LangHun: a férfiakhoz
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumPl) (UseN man_N))
LangHun: a férfiak alatt
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (UseN man_N)))))) NoVoc
LangEng: I see the man
LangHun: én látom a férfit
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumPl) (UseN man_N)))))) NoVoc
LangEng: I see the men
LangHun: én látom a férfiakat
-- Horse
Lang: PrepNP by8means_Prep (DetCN (DetQuant DefArt NumSg) (UseN horse_N))
LangEng: by the horse
LangHun: a lóval
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN horse_N))
LangEng: in the horse
LangHun: a lóban
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumSg) (UseN horse_N))
LangEng: on the horse
LangHun: a lónál
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumSg) (UseN horse_N))
LangEng: to the horse
LangHun: a lóhoz
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN horse_N))
LangEng: under the horse
LangHun: a ló alatt
Lang: PrepNP by8means_Prep (DetCN (DetQuant DefArt NumPl) (UseN horse_N))
LangEng: by the horses
LangHun: a lovakkal
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumPl) (UseN horse_N))
LangEng: in the horses
LangHun: a lovakban
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumPl) (UseN horse_N))
LangEng: on the horses
LangHun: a lovaknál
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumPl) (UseN horse_N))
LangEng: to the horses
LangHun: a lovakhoz
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumPl) (UseN horse_N))
LangEng: under the horses
LangHun: a lovak alatt
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (UseN horse_N)))))) NoVoc
LangEng: I see the horse
LangHun: én látom a lovat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumPl) (UseN horse_N)))))) NoVoc
LangEng: I see the horses
LangHun: én látom a lovakat
-- Stone
Lang: PrepNP by8means_Prep (DetCN (DetQuant DefArt NumSg) (UseN stone_N))
LangHun: a kővel
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN stone_N))
LangHun: a kőben
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumSg) (UseN stone_N))
LangHun: a kőnél
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumSg) (UseN stone_N))
LangHun: a kőhöz
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN stone_N))
LangHun: a kő alatt
Lang: PrepNP by8means_Prep (DetCN (DetQuant DefArt NumPl) (UseN stone_N))
LangHun: a kövekkel
Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumPl) (UseN stone_N))
LangHun: a kövekben
Lang: PrepNP on_Prep (DetCN (DetQuant DefArt NumPl) (UseN stone_N))
LangHun: a köveknél
Lang: PrepNP to_Prep (DetCN (DetQuant DefArt NumPl) (UseN stone_N))
LangHun: a kövekhez
Lang: PrepNP under_Prep (DetCN (DetQuant DefArt NumPl) (UseN stone_N))
LangHun: a kövek alatt
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (UseN stone_N)))))) NoVoc
LangEng: I see the stone
LangHun: én látom a követ
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumPl) (UseN stone_N)))))) NoVoc
LangEng: I see the stones
LangHun: én látom a köveket

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN apple_N)
LangHun: alma
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN apple_N)))
LangHun: én látok egy almá &+ t
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN apple_N))
LangHun: egy almán
Lang: DetCN (DetQuant IndefArt NumPl) (UseN apple_N)
LangHun: almák
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN apple_N)))
LangHun: én látok almákat
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN apple_N))
LangHun: egy almához
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN apple_N))
LangHun: almákhoz
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN apple_N)
LangHun: TODO

View File

@@ -0,0 +1,25 @@
--This constructor also takes care of szó <Sg,Acc> or <Sg,Sup> case ("szót" not "szavat")
Lang: MassNP (UseN village_N)
LangHun: falu
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN village_N)))
LangHun: én látok egy falut
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN village_N))
LangHun: egy falun
Lang: DetCN (DetQuant IndefArt NumPl) (UseN village_N)
LangHun: falvak
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN village_N)))
LangHun: én látok falvakat
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN village_N))
LangHun: egy faluhoz
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN village_N))
LangHun: falvakhoz
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN village_N)
LangHun: TODO

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN man_N)
LangHun: férfi
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN man_N)))
LangHun: én látok egy férfi &+ t
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN man_N))
LangHun: egy férfin
Lang: DetCN (DetQuant IndefArt NumPl) (UseN man_N)
LangHun: férfiak
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN man_N)))
LangHun: én látok férfiakat
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN man_N))
LangHun: egy férfihoz
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN man_N))
LangHun: férfiakhoz
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN man_N)
LangHun: TODO

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN grass_N)
LangHun: fű
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN grass_N)))
LangHun: én látok egy füvet
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN grass_N))
LangHun: egy füvön
Lang: DetCN (DetQuant IndefArt NumPl) (UseN grass_N)
LangHun: füvek
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN grass_N)))
LangHun: én látok füveket
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN grass_N))
LangHun: egy fűhöz
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN grass_N))
LangHun: füvekhez
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN grass_N)
LangHun: TODO

View File

@@ -0,0 +1,9 @@
i ../../LangHun.gf
l -treebank MassNP (UseN PLACEHOLDER)
l -treebank PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN PLACEHOLDER)))
l -treebank PrepNP on_Prep (MassNP (UseN PLACEHOLDER))
l -treebank DetCN (DetQuant IndefArt NumPl) (UseN PLACEHOLDER)
l -treebank PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN PLACEHOLDER)))
l -treebank PrepNP to_Prep (MassNP (UseN PLACEHOLDER))
l -treebank PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN PLACEHOLDER))
l -treebank DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN PLACEHOLDER)

View File

@@ -0,0 +1,26 @@
-- Julia's comments:
-- dLó: <Sg,Sup> also "kövön" not "köven", but that is due to H_e, which is needed for "köveket" so it's conflicting
Lang: MassNP (UseN stone_N)
LangHun: kő
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN stone_N)))
LangHun: én látok egy követ
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN stone_N))
LangHun: egy kövön
Lang: DetCN (DetQuant IndefArt NumPl) (UseN stone_N)
LangHun: kövek
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN stone_N)))
LangHun: én látok köveket
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN stone_N))
LangHun: egy kőhöz
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN stone_N))
LangHun: kövekhez
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN stone_N)
LangHun: TODO

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN horse_N)
LangHun: ló
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN horse_N)))
LangHun: én látok egy lovat
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN horse_N))
LangHun: egy lovon
Lang: DetCN (DetQuant IndefArt NumPl) (UseN horse_N)
LangHun: lovak
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN horse_N)))
LangHun: én látok lovakat
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN horse_N))
LangHun: egy lóhoz
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN horse_N))
LangHun: lovakhoz
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN horse_N)
LangHun: TODO

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN bird_N)
LangHun: madár
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN bird_N)))
LangHun: én látok egy madarat
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN bird_N))
LangHun: egy madáron
Lang: DetCN (DetQuant IndefArt NumPl) (UseN bird_N)
LangHun: madarak
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN bird_N)))
LangHun: én látok madarakat
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN bird_N))
LangHun: egy madárhoz
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN bird_N))
LangHun: madarakhoz
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN bird_N)
LangHun: TODO

View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
sed "s/PLACEHOLDER/$1_N/g" < inflection_placeholder.gfs > inflection_concrete.gfs
gf --run < inflection_concrete.gfs > $2-new.gftest # don't override the existing ones
rm inflection_concrete.gfs

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN name_N)
LangHun: név
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN name_N)))
LangHun: én látok egy nevet
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN name_N))
LangHun: egy néven
Lang: DetCN (DetQuant IndefArt NumPl) (UseN name_N)
LangHun: nevek
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN name_N)))
LangHun: én látok neveket
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN name_N))
LangHun: egy névhez
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN name_N))
LangHun: nevekhez
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN name_N)
LangHun: TODO

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN woman_N)
LangHun: nő
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN woman_N)))
LangHun: én látok egy nőt
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN woman_N))
LangHun: egy nőn
Lang: DetCN (DetQuant IndefArt NumPl) (UseN woman_N)
LangHun: nők
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN woman_N)))
LangHun: én látok nőket
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN woman_N))
LangHun: egy nőhöz
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN woman_N))
LangHun: nőkhöz
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN woman_N)
LangHun: TODO

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN love_N)
LangHun: szerelem
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN love_N)))
LangHun: én látok egy szerelmet
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN love_N))
LangHun: egy szerelmen
Lang: DetCN (DetQuant IndefArt NumPl) (UseN love_N)
LangHun: szerelmek
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN love_N)))
LangHun: én látok szerelmeket
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN love_N))
LangHun: egy szerelemhez
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN love_N))
LangHun: szerelmekhez
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN love_N)
LangHun: TODO

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN beer_N)
LangHun: sör
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN beer_N)))
LangHun: én látok egy sört
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN beer_N))
LangHun: egy sörön
Lang: DetCN (DetQuant IndefArt NumPl) (UseN beer_N)
LangHun: sörök
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN beer_N)))
LangHun: én látok söröket
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN beer_N))
LangHun: egy sörhöz
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN beer_N))
LangHun: sörökhöz
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN beer_N)
LangHun: TODO

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN lake_N)
LangHun: tó
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN lake_N)))
LangHun: én látok egy tavat
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN lake_N))
LangHun: egy tavon
Lang: DetCN (DetQuant IndefArt NumPl) (UseN lake_N)
LangHun: tavak
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN lake_N)))
LangHun: én látok tavakat
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN lake_N))
LangHun: egy tóhoz
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN lake_N))
LangHun: tavakhoz
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN lake_N)
LangHun: TODO

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN water_N)
LangHun: víz
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN water_N)))
LangHun: én látok egy vízt
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN water_N))
LangHun: egy vízen
Lang: DetCN (DetQuant IndefArt NumPl) (UseN water_N)
LangHun: vízek
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN water_N)))
LangHun: én látok vízeket
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN water_N))
LangHun: egy vízhez
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN water_N))
LangHun: vízekhez
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN water_N)
LangHun: TODO

View File

@@ -0,0 +1,23 @@
Lang: MassNP (UseN year_N)
LangHun: év
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN year_N)))
LangHun: én látok egy évet
Lang: PrepNP on_Prep (DetCN (DetQuant IndefArt NumSg) (UseN year_N))
LangHun: egy éven
Lang: DetCN (DetQuant IndefArt NumPl) (UseN year_N)
LangHun: évek
Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumPl) (UseN year_N)))
LangHun: én látok éveket
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN year_N))
LangHun: egy évhez
Lang: PrepNP to_Prep (DetCN (DetQuant IndefArt NumPl) (UseN year_N))
LangHun: évekhez
Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN year_N)
LangHun: TODO

View File

@@ -6,39 +6,39 @@
-- LangEng: I see a man that flies
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseV fly_V))))))))) NoVoc
LangHun: én látok egy férfit ami repül
LangHun: én látok egy férfi &+ t ami repül
-- LangEng: I see the man that flies
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseV fly_V))))))))) NoVoc
LangHun: én látom a férfit ami repül
LangHun: én látom a férfi &+ t ami repül
-- LangEng: I see the man that sees a cat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN cat_N))))))))))) NoVoc
LangHun: én látom a férfit ami egy macskát lát
LangHun: én látom a férfi &+ t ami egy macská &+ t lát
-- LangEng: I see the man that sees the cat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (UseN cat_N))))))))))) NoVoc
LangHun: én látom a férfit ami a macskát látja
LangHun: én látom a férfi &+ t ami a macská &+ t látja
-- LangEng: I see the man that has a cat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a have_V2) (DetCN (DetQuant IndefArt NumSg) (UseN cat_N))))))))))) NoVoc
LangHun: én látom a férfit aminek egy macskája van
LangHun: én látom a férfi &+ t aminek egy macskáj &+ a van
-- LangEng: I see the man that has the cat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a have_V2) (DetCN (DetQuant DefArt NumSg) (UseN cat_N))))))))))) NoVoc
LangHun: én látom a férfit aminek megvan a macska
LangHun: én látom a férfi &+ t aminek megvan a macska
-- vet inte riktigt hur jag ska tänka med "the cat", tyckte det kändes mer rätt med "meg-" konstruktionen
-- LangEng: I see the cat that flies and that is red
-- Do we need copula in "is red" or is it still fine without?
-- This constructor repeats amit, we have other constructors that don't. I think we don't need it
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (RelCN (UseN cat_N) (ConjRS and_Conj (BaseRS (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseV fly_V))) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseComp (CompAP (PositA red_A))))))))))))) NoVoc
LangHun: én látom a macskát ami repül és piros
LangHun: én látom a macská &+ t ami repül és piros
--skulle dock byta plats på "piros" och "repül"
-- LangEng: I see the man that flies and that has a cat
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (RelCN (UseN man_N) (ConjRS and_Conj (BaseRS (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseV fly_V))) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a have_V2) (DetCN (DetQuant IndefArt NumSg) (UseN cat_N))))))))))))) NoVoc
LangHun: én látom a férfit ami repül és aminek egy macskája van
LangHun: én látom a férfi &+ t ami repül és aminek egy macskáj &+ a van
-------------------------------------------------------------
@@ -47,26 +47,26 @@ LangHun: én látom a férfit ami repül és aminek egy macskája van
-- LangEng: I see the man that the cat sees
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant DefArt NumSg) (UseN cat_N)) (SlashV2a see_V2)))))))))) NoVoc
LangHun: én látom a férfit amit a macska lát
LangHun: én látom a férfi &+ t amit a macska lát
-- LangEng: I see a man that the cat sees
-- Should this be "amit a macska lát"? Yes
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN man_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant DefArt NumSg) (UseN cat_N)) (SlashV2a see_V2)))))))))) NoVoc
LangHun: én látok egy férfit amit a macska lát
LangHun: én látok egy férfi &+ t amit a macska lát
--These last cases not corrected due to "van" confusion
-- LangEng: I see a cat that the man has
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN cat_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant DefArt NumSg) (UseN man_N)) (SlashV2a have_V2)))))))))) NoVoc
LangHun: én látok egy macskát amit a férfinak van
LangHun: én látok egy macská &+ t amit a férfi &+ nak van
-- LangEng: I see the cat that the man has
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (RelCN (UseN cat_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant DefArt NumSg) (UseN man_N)) (SlashV2a have_V2)))))))))) NoVoc
LangHun: én látom a macskát amit a férfinak van
LangHun: én látom a macská &+ t amit a férfi &+ nak van
-- LangEng: I see the cat that the man has and that flies
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumSg) (RelCN (UseN cat_N) (ConjRS and_Conj (BaseRS (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant DefArt NumSg) (UseN man_N)) (SlashV2a have_V2)))) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseV fly_V))))))))))) NoVoc
LangHun: én látom a macskát amit a férfinak van és amit repül
LangHun: én látom a macská &+ t amit a férfi &+ nak van és amit repül
-- LangEng: I am redder than the cats that those women have
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (UseComp (CompAP (ComparA red_A (DetCN (DetQuant DefArt NumPl) (RelCN (UseN cat_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant that_Quant NumPl) (UseN woman_N)) (SlashV2a have_V2)))))))))))) NoVoc
LangHun: én pirosabb vagyok a macskáknál amik azoknak nőknek vannak
LangHun: én pirosabb vagyok a macskák &+ nál amik azoknak a nők &+ nek vannak