diff --git a/src/turkish/CatTur.gf b/src/turkish/CatTur.gf index dfac6989f..4a1a08d61 100644 --- a/src/turkish/CatTur.gf +++ b/src/turkish/CatTur.gf @@ -13,9 +13,9 @@ concrete CatTur of Cat = CommonX - [CAdv,AdN] ** open ResTur, HarmonyTur, Prelud CN = {s : Number => Case => Str; gen : Number => Agr => Str; h : Harmony} ; NP = {s : Case => Str ; h : Harmony; a : Agr} ; - VP = {s : VForm => Str; compl : Str} ; + VP = {s : Aspect => VForm => Str; compl : Str} ; VPSlash = Verb ** {compl : Str; c : Prep} ; - Comp = {s : VForm => Str; compl : Str} ; + Comp = {s : Aspect => VForm => Str; compl : Str} ; Pron = ResTur.Pron ; Det = {s : Str; n : Number; useGen : UseGen} ; @@ -59,6 +59,6 @@ concrete CatTur of Cat = CommonX - [CAdv,AdN] ** open ResTur, HarmonyTur, Prelud linref V2 = \v -> v.s ++ v.c.s ; - VP = \vp -> vp.compl ++ vp.s ! VInf Pos ; + VP = \vp -> vp.compl ++ vp.s ! Perf ! VInf Pos ; } diff --git a/src/turkish/DocumentationTur.gf b/src/turkish/DocumentationTur.gf index d928ac0c9..0c74b8063 100644 --- a/src/turkish/DocumentationTur.gf +++ b/src/turkish/DocumentationTur.gf @@ -97,37 +97,39 @@ lin oper inflVerb : Verb -> Str = \v -> (heading2 ("Şimdiki zaman") ++ - finite Pres ++ + finite Perf Pres ++ + finite Imperf Pres ++ heading2 ("Geçmiş zaman") ++ --# notpresent - finite Past ++ --# notpresent + finite Perf Past ++ --# notpresent + finite Imperf Past ++ --# notpresent heading2 ("Gelecek zaman") ++ --# notpresent - finite Fut ++ --# notpresent + finite Perf Fut ++ --# notpresent heading2 ("Emir kipi") ++ frameTable ( tr (th "tekil" ++ th "çoğul") ++ - tr (td (tbl ! VImp Pos Sg) ++ - td (tbl ! VImp Pos Pl)) + tr (td (tbl ! Perf ! VImp Pos Sg) ++ + td (tbl ! Perf ! VImp Pos Pl)) ) ++ heading2 ("Eylemlik") ++ - paragraph (tbl ! VInf Pos)) + paragraph (tbl ! Perf ! VInf Pos)) where { - tbl : VForm => Str = mkVerbForms v ; + tbl : Aspect => VForm => Str = mkVerbForms v ; - finite : Tense -> Str = \t -> + finite : Aspect -> Tense -> Str = \asp,t -> frameTable ( tr (th "" ++ th "tekil" ++ th "çoğul") ++ tr (th "1." ++ - td (tbl ! VFin t Pos {n=Sg; p=P1}) ++ - td (tbl ! VFin t Pos {n=Pl; p=P1})) ++ + td (tbl ! asp ! VFin t Pos {n=Sg; p=P1}) ++ + td (tbl ! asp ! VFin t Pos {n=Pl; p=P1})) ++ tr (th "2." ++ - td (tbl ! VFin t Pos {n=Sg; p=P2}) ++ - td (tbl ! VFin t Pos {n=Pl; p=P2})) ++ + td (tbl ! asp ! VFin t Pos {n=Sg; p=P2}) ++ + td (tbl ! asp ! VFin t Pos {n=Pl; p=P2})) ++ tr (th "3." ++ - td (tbl ! VFin t Pos {n=Sg; p=P3}) ++ - td (tbl ! VFin t Pos {n=Pl; p=P3})) + td (tbl ! asp ! VFin t Pos {n=Sg; p=P3}) ++ + td (tbl ! asp ! VFin t Pos {n=Pl; p=P3})) ) ; } ; } diff --git a/src/turkish/ExtendTur.gf b/src/turkish/ExtendTur.gf index e8a2689e2..379ce9167 100644 --- a/src/turkish/ExtendTur.gf +++ b/src/turkish/ExtendTur.gf @@ -7,7 +7,7 @@ concrete ExtendTur of Extend = CatTur ** open ResTur, SuffixTur, Predef in { a = {n=num.n; p=P3} ; } ; - UttVPShort vp = {s = vp.s ! VInf Pos} ; + UttVPShort vp = {s = vp.s ! Perf ! VInf Pos} ; TPastSimple = {s = []} ** {t = Past} ; --# notpresent diff --git a/src/turkish/IdiomTur.gf b/src/turkish/IdiomTur.gf index 6f091333b..cc4449051 100644 --- a/src/turkish/IdiomTur.gf +++ b/src/turkish/IdiomTur.gf @@ -1,4 +1,4 @@ -concrete IdiomTur of Idiom = CatTur ** open Prelude, ResTur in { +concrete IdiomTur of Idiom = CatTur ** open Prelude, ResTur, SuffixTur in { lin ImpersCl _ = variants {} ; @@ -8,7 +8,10 @@ lin CleftNP _ _ = variants {} ; CleftAdv _ _ = variants {} ; ImpPl1 _ = variants {} ; - ProgrVP _ = variants {} ; + + ProgrVP vp = vp ** { + s = \\asp,vform => vp.s ! Imperf ! vform + } ; } diff --git a/src/turkish/NounTur.gf b/src/turkish/NounTur.gf index 1ba918415..28121f952 100644 --- a/src/turkish/NounTur.gf +++ b/src/turkish/NounTur.gf @@ -195,7 +195,7 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, ParamX, PPartNP np v2 = { s = \\c => np.s ! c - ++ mkVerbForms v2 ! VFin Past Pos np.a --# notpresent + ++ mkVerbForms v2 ! Perf ! VFin Past Pos np.a --# notpresent ; h = np.h ; a = np.a diff --git a/src/turkish/ParadigmsTur.gf b/src/turkish/ParadigmsTur.gf index 8745971d3..bca8d9d6d 100644 --- a/src/turkish/ParadigmsTur.gf +++ b/src/turkish/ParadigmsTur.gf @@ -252,10 +252,10 @@ resource ParadigmsTur = open VBase Soft => softBase ; VProg => progBase ; VFuture => futBase ; - VPass => case last base of { - #vowel => base + "n" ; - "l" => base + suffixStr h passiveInSuffix ; - _ => base + suffixStr h passiveIlSuffix + VPass => case last softBase of { + #vowel => softBase + "n" ; + "l" => softBase + suffixStr h passiveInSuffix ; + _ => softBase + suffixStr h passiveIlSuffix } } ; aoristType = aoristType ; diff --git a/src/turkish/PhraseTur.gf b/src/turkish/PhraseTur.gf index d555e597d..a58677b5e 100644 --- a/src/turkish/PhraseTur.gf +++ b/src/turkish/PhraseTur.gf @@ -16,7 +16,7 @@ concrete PhraseTur of Phrase = CatTur ** open Prelude, ResTur in { -- The following have been somewhat tested and seem to be working fine -- to some extent. UttNP np = {s = np.s ! Nom} ; - UttVP vp = {s = vp.s ! VInf Pos} ; + UttVP vp = {s = vp.s ! Perf ! VInf Pos} ; UttAP ap = {s = ap.s ! Sg ! Nom} ; UttCN n = {s = n.s ! Sg ! Nom} ; UttS s = {s = s.s} ; diff --git a/src/turkish/ResTur.gf b/src/turkish/ResTur.gf index ae95c9acb..75d0f000b 100644 --- a/src/turkish/ResTur.gf +++ b/src/turkish/ResTur.gf @@ -36,6 +36,9 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur, SuffixTur in { -- For $Verb$. param + Aspect = + Perf | Imperf ; + VForm = VInf Polarity | VImp Polarity Number @@ -107,26 +110,45 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur, SuffixTur in { a = {n = n; p = p} } ; - mkVerbForms : Verb -> VForm => Str = - \v -> table { - VInf Pos => v.s ; + mkVerbForms : Verb -> Aspect => VForm => Str = + \v -> \\asp => + table { + VInf Pos => case asp of { + Perf => v.s ; + Imperf => v.stems ! VBase Soft ++ BIND ++ + suffixStr v.h progrSuffix + + suffixStr progrHar infinitiveSuffix + } ; VInf Neg => v.stems ! VBase Soft ++ BIND ++ suffixStr v.h negativeSuffix + - suffixStr v.h infinitiveSuffix ; - VImp p n => v.stems ! VBase Soft ++ - case of { - => [] ; - => BIND ++ - suffixStr v.h negativeSuffix ; - => BIND ++ - suffixStr v.h p2PlImperSuffix ; - => BIND ++ - suffixStr v.h negativeSuffix + - (let negHar = mkHar (case v.h.vow of { - I_Har | U_Har => I_Har ; - Ih_Har | Uh_Har => Ih_Har - }) SVow - in suffixStr negHar p2PlImperSuffix) + case asp of { + Perf => suffixStr v.h infinitiveSuffix ; + Imperf => suffixStr negHar progrSuffix + + suffixStr progrHar infinitiveSuffix + } ; + VImp p n => case asp of { + Perf => v.stems ! VBase Soft ++ + case of { + => [] ; + => BIND ++ + suffixStr v.h negativeSuffix ; + => BIND ++ + suffixStr v.h p2PlImperSuffix ; + => BIND ++ + suffixStr v.h negativeSuffix + + suffixStr negHar p2PlImperSuffix + } ; + Imperf => v.stems ! VBase Soft ++ BIND ++ + case of { + => suffixStr v.h progrSuffix ; + => suffixStr v.h negativeSuffix + + suffixStr negHar progrSuffix ; + => suffixStr v.h progrSuffix + + suffixStr progrHar p2PlImperSuffix ; + => suffixStr v.h negativeSuffix + + suffixStr negHar progrSuffix + + suffixStr progrHar p2PlImperSuffix + } } ; VFin t p agr => let presHar = mkHar (case v.h.con of { @@ -137,28 +159,40 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur, SuffixTur in { SVow => v.h.vow }) (SCon Soft) ; pastHar = mkHar v.h.vow SVow ; + pastIHar= mkHar U_Har SVow ; futSoft = (verbSuffixes ! agr).stemT ; futHar = mkHar (case v.h.vow of { I_Har | U_Har => I_Har ; Ih_Har | Uh_Har => Ih_Har }) (SCon futSoft) ; - negHar = mkHar (case v.h.vow of { - I_Har | U_Har => I_Har ; - Ih_Har | Uh_Har => Ih_Har - }) SVow ; presNegHar = mkHar negHar.vow (SCon Soft) in case p of { Pos => case t of { - Pres => v.stems ! VBase Soft ++ BIND ++ - suffixStr v.h (case v.aoristType of { - SgSylConReg => aoristErSuffix ; - _ => aoristIrSuffix - }) + - suffixStr presHar (verbSuffixes ! agr) ; - Past => v.stems ! VBase Hard ++ BIND ++ - suffixStr v.h pastSuffix + - suffixStr pastHar (verbSuffixes ! agr) ; + Pres => case asp of { + Perf => v.stems ! VBase Soft ++ BIND ++ + suffixStr v.h (case v.aoristType of { + SgSylConReg => aoristErSuffix ; + _ => aoristIrSuffix + }) + + suffixStr presHar (verbSuffixes ! agr) ; + Imperf => v.stems ! VProg ++ BIND ++ + suffixStr v.h progrSuffix + + suffixStr progrHar (verbSuffixes ! agr) + } ; + Past => case asp of { + Perf => v.stems ! VBase Hard ++ BIND ++ + suffixStr v.h pastSuffix + + suffixStr pastHar (verbSuffixes ! agr) ; + Imperf => v.stems ! VProg ++ BIND ++ + suffixStr v.h progrSuffix + + case agr of { + {n=Pl; p=P3} => suffixStr progrHar (verbSuffixes ! agr) + + suffixStr (mkHar Ih_Har (SCon Soft)) pastSuffix ; + _ => suffixStr progrHar pastSuffix + + suffixStr pastIHar (verbSuffixes ! agr) + } + } ; Fut => v.stems ! VFuture ++ BIND ++ suffixStr v.h (case futSoft of { Soft => softFutureSuffix ; @@ -169,17 +203,30 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur, SuffixTur in { suffixStr v.h (condCopulaSuffixes ! agr) } ; Neg => case t of { - Pres => v.stems ! VBase Hard ++ BIND ++ - suffixStr v.h negativeSuffix + - case agr of { - {n=Sg; p=P1} => suffixStr negHar (verbSuffixes ! agr) ; - {n=Pl; p=P1} => suffixStr negHar p1PlAoristSuffix ; - _ => suffixStr negHar aoristIzSuffix + suffixStr presNegHar (verbSuffixes ! agr) + Pres => case asp of { + Perf => v.stems ! VBase Hard ++ BIND ++ + suffixStr v.h negativeSuffix + + case agr of { + {n=Sg; p=P1} => suffixStr negHar (verbSuffixes ! agr) ; + {n=Pl; p=P1} => suffixStr negHar p1PlAoristSuffix ; + _ => suffixStr negHar aoristIzSuffix + suffixStr presNegHar (verbSuffixes ! agr) + } ; + Imperf => v.stems ! VBase Soft ++ BIND ++ + tk 1 (suffixStr v.h negativeSuffix) + + suffixStr v.h progrSuffix + + suffixStr progrHar (verbSuffixes ! agr) + } ; + Past => case asp of { + Perf => v.stems ! VBase Hard ++ BIND ++ + suffixStr v.h negativeSuffix + + suffixStr negHar pastSuffix + + suffixStr negHar (verbSuffixes ! agr) ; + Imperf => v.stems ! VBase Soft ++ BIND ++ + tk 1 (suffixStr v.h negativeSuffix) + + suffixStr v.h progrSuffix + + suffixStr progrHar pastSuffix + + suffixStr pastIHar (verbSuffixes ! agr) } ; - Past => v.stems ! VBase Hard ++ BIND ++ - suffixStr v.h negativeSuffix + - suffixStr negHar pastSuffix + - suffixStr negHar (verbSuffixes ! agr) ; Fut => v.stems ! VBase Hard ++ BIND ++ suffixStr v.h negativeSuffix + suffixStr negHar (case (verbSuffixes ! agr).stemT of { @@ -192,7 +239,14 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur, SuffixTur in { suffixStr negHar (condCopulaSuffixes ! agr) } } - } ; + } + where { + negHar = mkHar (case v.h.vow of { + I_Har | U_Har => I_Har ; + Ih_Har | Uh_Har => Ih_Har + }) SVow ; + progrHar = mkHar U_Har (SCon Soft) + } ; mkDet : Str -> Number -> UseGen -> {s : Str; n : Number; useGen : UseGen} = \s, n, ug -> {s = s; n = n; useGen = ug} ; diff --git a/src/turkish/SentenceTur.gf b/src/turkish/SentenceTur.gf index 05c3ca945..47e1a3c77 100644 --- a/src/turkish/SentenceTur.gf +++ b/src/turkish/SentenceTur.gf @@ -1,7 +1,7 @@ concrete SentenceTur of Sentence = CatTur ** open Prelude, ResTur in { lin - PredVP np vp = {s = \\t,p => np.s ! Nom ++ vp.compl ++ vp.s ! VFin t p np.a} ; + PredVP np vp = {s = \\t,p => np.s ! Nom ++ vp.compl ++ vp.s ! Perf ! VFin t p np.a} ; PredSCVP sc vp = variants {} ; @@ -22,7 +22,7 @@ concrete SentenceTur of Sentence = CatTur ** open Prelude, ResTur in { EmbedQS _ = variants {} ; EmbedS _ = variants {} ; - ImpVP vp = {s = \\p,n => vp.compl ++ vp.s ! VImp p n + ImpVP vp = {s = \\p,n => vp.compl ++ vp.s ! Perf ! VImp p n } ; AdvS _ _ = variants {} ; diff --git a/src/turkish/SuffixTur.gf b/src/turkish/SuffixTur.gf index 6ee92c0ab..564627da8 100644 --- a/src/turkish/SuffixTur.gf +++ b/src/turkish/SuffixTur.gf @@ -85,7 +85,7 @@ resource SuffixTur = open Prelude, Predef, HarmonyTur in { pastSuffix : Suffix = regSuffix "di" "di" ; inferentSuffix : Suffix = regSuffix "miş" "miş" ; -- Vowel "o" does not obey harmony rules so assume that "iyor" is a one syllable word (see oper oneSylParser) - presentSuffix : Suffix = regSuffix "iyor" "iyor" ; + progrSuffix : Suffix = regSuffix "iyor" "iyor" ; aoristIrSuffix : Suffix = regSuffix "ir" "r" ; aoristErSuffix : Suffix = regSuffix "er" "r" ; aoristIzSuffix : Suffix = regSuffix "iz" "z" ; diff --git a/src/turkish/VerbTur.gf b/src/turkish/VerbTur.gf index 6d3d2dcc4..c38d75fda 100644 --- a/src/turkish/VerbTur.gf +++ b/src/turkish/VerbTur.gf @@ -31,8 +31,10 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur CompCN _ = variants {} ; CompNP np = { - s = table { - VFin Pres p agr => np.s ! Nom ++ + s = \\asp,vform => + case of { + + => np.s ! Nom ++ case of { <{n=Sg; p=P3},Pos> => [] ; <{n=Sg; p=P3},Neg> => BIND ++ suffixStr np.h negativeSuffix ; @@ -44,25 +46,28 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur }) SVow in suffixStr negHar (verbSuffixes ! agr)) } ; - VFin Past p agr => np.s ! Nom ++ BIND ++ + + => np.s ! Nom ++ BIND ++ case p of { Pos => [] ; Neg => suffixStr np.h negativeSuffix } + suffixStr np.h (alethicCopulaSuffixes ! agr) ; - vform => np.s ! Nom ++ - mkVerbForms olmak_V ! vform + _ => np.s ! Nom ++ + mkVerbForms olmak_V ! asp ! vform } ; compl = [] } ; CompAP ap = { - s = table { - VInf p => ap.s ! Sg ! Nom ++ - mkVerbForms olmak_V ! (VInf p) ; - VImp p n => ap.s ! n ! Nom ++ - mkVerbForms olmak_V ! (VImp p n) ; - VFin Pres p agr => ap.s ! agr.n ! Nom ++ + s = \\asp,vform => + case of { + <_,VInf p> => ap.s ! Sg ! Nom ++ + mkVerbForms olmak_V ! asp ! (VInf p) ; + <_,VImp p n> => ap.s ! n ! Nom ++ + mkVerbForms olmak_V ! asp ! (VImp p n) ; + => + ap.s ! agr.n ! Nom ++ case of { <{n=Sg; p=P3},Pos> => [] ; <{n=Sg; p=P3},Neg> => BIND ++ suffixStr ap.h negativeSuffix ; @@ -76,14 +81,16 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur } in suffixStr negHar (verbSuffixes ! agr)) } ; - VFin Past p agr => ap.s ! agr.n ! Nom ++ BIND ++ + => + ap.s ! agr.n ! Nom ++ BIND ++ case p of { Pos => [] ; Neg => suffixStr ap.h negativeSuffix } + suffixStr ap.h (alethicCopulaSuffixes ! agr) ; - VFin t p agr => ap.s ! agr.n ! Nom ++ - mkVerbForms olmak_V ! (VFin t p agr) + <_,VFin t p agr> => + ap.s ! agr.n ! Nom ++ + mkVerbForms olmak_V ! asp ! (VFin t p agr) } ; compl = [] } ; @@ -101,7 +108,7 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur } ; AdVVP adv vp = vp ** { - s = \\vf => adv.s ++ vp.s ! vf ; + s = \\asp,vf => adv.s ++ vp.s ! asp ! vf ; } ; AdvVPSlash vp adv = vp ** {