From 65a05d223b8ab282014f0507a943d9a01d472b77 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Mon, 8 Jul 2024 21:58:00 +0200 Subject: [PATCH] various extensions in Turkish --- src/turkish/AdverbTur.gf | 2 +- src/turkish/AllTurAbs.gf | 3 +- src/turkish/CatTur.gf | 9 ++--- src/turkish/DocumentationTur.gf | 10 ++++-- src/turkish/ExtendTur.gf | 2 ++ src/turkish/NounTur.gf | 11 ++++++- src/turkish/ParadigmsTur.gf | 58 ++++++++++++++++++++------------- src/turkish/PhraseTur.gf | 6 ++-- src/turkish/ResTur.gf | 25 +++++++------- src/turkish/SentenceTur.gf | 8 ++--- src/turkish/StructuralTur.gf | 18 +++++----- src/turkish/SuffixTur.gf | 6 +++- src/turkish/VerbTur.gf | 25 ++++++++------ 13 files changed, 112 insertions(+), 71 deletions(-) diff --git a/src/turkish/AdverbTur.gf b/src/turkish/AdverbTur.gf index 8d0e81863..eed43fd27 100644 --- a/src/turkish/AdverbTur.gf +++ b/src/turkish/AdverbTur.gf @@ -18,6 +18,6 @@ concrete AdverbTur of Adverb = CatTur ** open ResTur, Prelude in { SubjS s1 s2 = {s = s1.s ++ s2.subord} ; - PositAdvAdj _ = variants {} ; + PositAdvAdj a = {s = a.adv} ; } diff --git a/src/turkish/AllTurAbs.gf b/src/turkish/AllTurAbs.gf index cf6a96250..49d2b47b0 100644 --- a/src/turkish/AllTurAbs.gf +++ b/src/turkish/AllTurAbs.gf @@ -1,5 +1,6 @@ --# -path=.:../abstract:../common:prelude abstract AllTurAbs = - Lang + Lang, + Extend ** {} ; diff --git a/src/turkish/CatTur.gf b/src/turkish/CatTur.gf index c81ce41cd..75bb793d6 100644 --- a/src/turkish/CatTur.gf +++ b/src/turkish/CatTur.gf @@ -7,15 +7,15 @@ concrete CatTur of Cat = CommonX - [CAdv,AdN] ** open ResTur, HarmonyTur, Prelud S = {s, subord : Str} ; Cl = {s : Tense => Str; subord : Str} ; - + Imp = {s : Number => Str} ; -- Noun CN = {s : Number => Case => Str; gen : Number => Agr => Str; h : Harmony} ; NP = {s : Case => Str ; h : Harmony; a : Agr} ; - VP = Verb ; - VPSlash = VP ** {c : Prep} ; - Comp = VP ; + VP = Verb ** {compl : Str} ; + VPSlash = Verb ** {compl : Str; c : Prep} ; + Comp = Verb ; Pron = ResTur.Pron ; Det = {s : Str; n : Number; useGen : UseGen} ; @@ -60,5 +60,6 @@ concrete CatTur of Cat = CommonX - [CAdv,AdN] ** open ResTur, HarmonyTur, Prelud linref V = \v -> v.s ! VInfinitive ; V2 = \v -> v.s ! VInfinitive ++ v.c.s ; + VP = \vp -> vp.compl ++ vp.s ! VInfinitive ; } diff --git a/src/turkish/DocumentationTur.gf b/src/turkish/DocumentationTur.gf index 6e222bb56..c62243d2d 100644 --- a/src/turkish/DocumentationTur.gf +++ b/src/turkish/DocumentationTur.gf @@ -71,7 +71,8 @@ lin Gen => "tamlayan" ; Loc => "bulunma" ; Ablat => "ayrılma" ; - Abess _ => "" + Abess _ => "" ; + Instr => "" }) ; s3= "" } ; @@ -104,7 +105,12 @@ oper heading2 ("Gelecek zaman") ++ finite VFuture ++ heading2 ("Emir kipi") ++ - paragraph (v.s ! VImperative) ++ + frameTable ( + tr (th "tekil" ++ + th "çoğul") ++ + tr (td (v.s ! VImperative Sg) ++ + td (v.s ! VImperative Pl)) + ) ++ heading2 ("Eylemlik") ++ paragraph (v.s ! VInfinitive) ++ heading2 ("Ulaç") ++ diff --git a/src/turkish/ExtendTur.gf b/src/turkish/ExtendTur.gf index 195f1bc52..f10f7c872 100644 --- a/src/turkish/ExtendTur.gf +++ b/src/turkish/ExtendTur.gf @@ -9,4 +9,6 @@ concrete ExtendTur of Extend = CatTur ** open ResTur in { TPastSimple = {s = []} ** {t = Past} ; --# notpresent + PositAdVAdj a = {s = a.s ! Sg ! Nom} ; + } diff --git a/src/turkish/NounTur.gf b/src/turkish/NounTur.gf index 1f23ac08b..f5f9d8fca 100644 --- a/src/turkish/NounTur.gf +++ b/src/turkish/NounTur.gf @@ -10,7 +10,11 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, Prelude case det.useGen of { NoGen => \\c => det.s ++ cn.s ! det.n ! c ; YesGen a => \\c => det.s ++ cn.gen ! det.n ! a ; - UseIndef => \\c => det.s ++ cn.s ! det.n ! c + UseIndef => \\c => let c' = case c of { + Acc => Nom ; + c => c + } + in det.s ++ cn.s ! det.n ! c' } ; h = cn.h ; a = agrP3 det.n @@ -104,6 +108,11 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, Prelude s = \\_,_ => "TODO"; gen = \\_, _ => "TODO"; h = f.h + }; + Instr => { + s = \\_,_ => "TODO"; + gen = \\_, _ => "TODO"; + h = f.h } }; diff --git a/src/turkish/ParadigmsTur.gf b/src/turkish/ParadigmsTur.gf index b8dd6ba8c..eff2f1cac 100644 --- a/src/turkish/ParadigmsTur.gf +++ b/src/turkish/ParadigmsTur.gf @@ -85,14 +85,14 @@ resource ParadigmsTur = open mkV2 = overload { -- sormak - mkV2 : V -> V2 = \verb -> verb ** lin V2 {c = noPrep} ; + mkV2 : V -> V2 = \verb -> verb ** lin V2 {c = mkPrep [] Acc} ; -- (bir şeyden) korkmak mkV2 : V -> Prep -> V2 = \verb,c -> verb ** lin V2 {c = c} ; } ; mkV3 = overload { -- (birine bir şeyi) satmak - mkV3 : V -> V3 = \verb -> verb ** lin V3 {c1 = noPrep; c2 = noPrep} ; + mkV3 : V -> V3 = \verb -> verb ** lin V3 {c1 = mkPrep [] Acc; c2 = mkPrep [] Dat} ; -- (biri ile bir şeyi) konuşmak mkV3 : V -> Prep -> Prep -> V3 = \verb,c1,c2 -> verb ** lin V3 {c1 = c1; c2 = c2} ; @@ -128,7 +128,7 @@ resource ParadigmsTur = open -- worst case function -- parameters: all singular cases of base, base of genitive table, plural -- form of base and harmony of base - mkNoun : (nom,acc,dat,gen,loc,abl,abessPos,abessNeg,gens,plural : Str) + mkNoun : (nom,acc,dat,gen,loc,abl,abessPos,abessNeg,instr,gens,plural : Str) -> Harmony -> N ; @@ -172,6 +172,8 @@ resource ParadigmsTur = open mkA : Str -> Str -> HarVowP -> A ; } ; + irregAdv : A -> Str -> A ; + mkAS : A -> AS ; mkAV : A -> AV ; @@ -284,8 +286,10 @@ resource ParadigmsTur = open addSuffix pastBase pastHar (verbSuffixes ! agr) ; VFuture agr => addSuffix futureTable futHar (verbSuffixes ! agr) ; - VImperative => + VImperative Sg => base ; + VImperative Pl => + addSuffix base har p2PlImperSuffix ; VInfinitive => inf ; Gerund _ Acc => @@ -321,7 +325,7 @@ resource ParadigmsTur = open } ; -- Implementation of noun paradigms - mkNoun sn sa sd sg sl sabl sgabPos sgabNeg sgs pln har = + mkNoun sn sa sd sg sl sabl sgabPos sgabNeg si sgs pln har = let plHar = getHarmony pln ; in lin N { @@ -334,7 +338,8 @@ resource ParadigmsTur = open Loc => sl ; Ablat => sabl ; Abess Pos => sgabPos ; - Abess Neg => sgabNeg + Abess Neg => sgabNeg ; + Instr => si } ; Pl => table { Abess Pos => addSuffix sgabPos plHar plSuffix; @@ -364,15 +369,16 @@ resource ParadigmsTur = open in mkNoun sn (addSuffix sg irHar accSuffix) - (addSuffix sg irHar datSuffix) + (addSuffix sg irHar datSuffix) (addSuffix sg har genSuffix) (addSuffix sn har locSuffix) - (addSuffix sn har ablatSuffix) - (addSuffix sn har abessPosSuffix) - (addSuffix sn har abessNegSuffix) - sg - pln - har ; + (addSuffix sn har ablatSuffix) + (addSuffix sn har abessPosSuffix) + (addSuffix sn har abessNegSuffix) + (addSuffix sn har instrSuffix) + sg + pln + har ; regN sn = let har = getHarmony sn ; @@ -382,14 +388,15 @@ resource ParadigmsTur = open mkNoun sn (addSuffix bt har accSuffix) (addSuffix bt har datSuffix) - (addSuffix bt har genSuffix) - (addSuffix bt har locSuffix) - (addSuffix bt har ablatSuffix) - (addSuffix bt har abessPosSuffix) - (addSuffix bt har abessNegSuffix) - (bt ! Soft) - pln - har ; + (addSuffix bt har genSuffix) + (addSuffix bt har locSuffix) + (addSuffix bt har ablatSuffix) + (addSuffix bt har abessPosSuffix) + (addSuffix bt har abessNegSuffix) + (addSuffix bt har instrSuffix) + (bt ! Soft) + pln + har ; regPN sn = makePN sn sn ; @@ -405,6 +412,7 @@ resource ParadigmsTur = open (addSuffix bn har ablatSuffix) (addSuffix bn har abessPosSuffix) (addSuffix bn har abessNegSuffix) + (addSuffix bn har instrSuffix) by pln har ; @@ -446,7 +454,8 @@ resource ParadigmsTur = open Loc => addSuffix sn sgHar locSuffixN ; --tereyağında Ablat => addSuffix sn sgHar ablatSuffixN ; --tereyağından Abess Pos => sgAbessPos ; --tereyağlı - Abess Neg => sgAbessNeg --tereyağsız + Abess Neg => sgAbessNeg ; --tereyağsız + Instr => addSuffix sn sgHar instrSuffix } ; Pl => table { Nom => pn ;--tereyağları @@ -456,7 +465,8 @@ resource ParadigmsTur = open Loc => addSuffix pn plHar locSuffixN ; --tereyağlarında Ablat => addSuffix pn plHar ablatSuffixN ; --tereyağlarından Abess Pos => addSuffix sgAbessPos plHar abessPosSuffix ; --tereyağlılar - Abess Neg => addSuffix sgAbessNeg plHar abessNegSuffix --tereyağsızlar + Abess Neg => addSuffix sgAbessNeg plHar abessNegSuffix ; --tereyağsızlar + Instr => addSuffix pn plHar instrSuffix } } ; gen = case ct of { @@ -510,6 +520,8 @@ resource ParadigmsTur = open mkA : (base, base1 : Str) -> (ih_har : HarVowP) -> A = \base,base1,ih_har -> (irregN_h base base ih_har) ** lin A {adv = addSuffix base (mkHar ih_har (getHarConP base)) adjAdvSuffix}; } ; + irregAdv : A -> Str -> A = \a,adv -> a ** {adv = adv}; + mkAS v = v ; mkAV v = v ; diff --git a/src/turkish/PhraseTur.gf b/src/turkish/PhraseTur.gf index cbd0203ee..ad15fedd1 100644 --- a/src/turkish/PhraseTur.gf +++ b/src/turkish/PhraseTur.gf @@ -5,9 +5,9 @@ concrete PhraseTur of Phrase = CatTur ** open Prelude, ResTur in { -- The following are utterly untested. -- Currently, they should be treated as just implementation stubs. UttQS qs = {s = qs.s} ; - UttImpSg pol imp = {s = imp.s} ; - UttImpPl pol imp = {s = imp.s} ; - UttImpPol pol imp = {s = imp.s} ; + UttImpSg pol imp = {s = imp.s ! Sg} ; + UttImpPl pol imp = {s = imp.s ! Pl} ; + UttImpPol pol imp = {s = imp.s ! Pl} ; UttIP ip = {s = ip.s} ; UttIAdv iadv = iadv ; UttCard n = {s = n.s ! Sg ! Nom} ; diff --git a/src/turkish/ResTur.gf b/src/turkish/ResTur.gf index 8c6f74963..cc649007a 100644 --- a/src/turkish/ResTur.gf +++ b/src/turkish/ResTur.gf @@ -8,7 +8,7 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in { coding=utf8 ; param - Case = Nom | Acc | Dat | Gen | Loc | Ablat | Abess Polarity ; + Case = Nom | Acc | Dat | Gen | Loc | Ablat | Abess Polarity | Instr ; Species = Indef | Def ; Contiguity = Con | Sep ; --Concatenate or Separate @@ -41,7 +41,7 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in { | VProg Agr | VPast Agr | VFuture Agr - | VImperative + | VImperative Number | VInfinitive | Gerund Number Case | VNoun Number Case @@ -63,8 +63,8 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in { CardOrd = NCard | NOrd ; oper - mkPron : (ben,beni,bana,banin,bende,benden,benli,bensiz:Str) -> Number -> Person -> Pron = - \ben,beni,bana,benim,bende,benden,benli,bensiz,n,p -> { + mkPron : (ben,beni,bana,banin,bende,benden,benli,bensiz,benimle:Str) -> Number -> Person -> Pron = + \ben,beni,bana,benim,bende,benden,benli,bensiz,benimle,n,p -> { s = table { Nom => ben ; Acc => beni ; @@ -73,7 +73,8 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in { Loc => bende ; Ablat => benden ; Abess Pos => benli ; - Abess Neg => bensiz + Abess Neg => bensiz ; + Instr => benimle } ; h = getHarmony ben ; a = {n=n; p=p} ; @@ -92,15 +93,15 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in { a = {n = n; p = p} } ; - mkClause : Str -> Agr -> Verb -> {s : Tense => Str; subord : Str} = - \np, a, v -> { + mkClause : Str -> Agr -> Str -> Verb -> {s : Tense => Str; subord : Str} = + \np, a, compl, v -> { s = table { - Pres => np ++ v.s ! VPres a ; - Past => np ++ v.s ! VPast a ; - Fut => np ++ v.s ! VFuture a ; + Pres => np ++ compl ++ v.s ! VPres a ; + Past => np ++ compl ++ v.s ! VPast a ; + Fut => np ++ compl ++ v.s ! VFuture a ; Cond => "TODO" } ; - subord = np ++ v.s ! VNoun a.n Nom + subord = np ++ compl ++ v.s ! VNoun a.n Nom } ; mkDet : Str -> Number -> UseGen -> {s : Str; n : Number; useGen : UseGen} = @@ -109,7 +110,7 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in { attachMe : Verb -> {s : Str} = \v -> let - s : Str = v.s ! VImperative + s : Str = v.s ! VImperative Sg in case s of { (_ + #vowel + _ )* + (_ + #frontVowel + _) => ss (s ++ "me") ; diff --git a/src/turkish/SentenceTur.gf b/src/turkish/SentenceTur.gf index 218a46800..72eb10153 100644 --- a/src/turkish/SentenceTur.gf +++ b/src/turkish/SentenceTur.gf @@ -2,7 +2,7 @@ concrete SentenceTur of Sentence = CatTur ** open Prelude, ResTur in { lin - PredVP np vp = mkClause (np.s ! Nom) np.a vp ; + PredVP np vp = mkClause (np.s ! Nom) np.a vp.compl vp ; PredSCVP sc vp = variants {} ; @@ -23,9 +23,9 @@ concrete SentenceTur of Sentence = CatTur ** open Prelude, ResTur in { EmbedQS _ = variants {} ; EmbedS _ = variants {} ; - - ImpVP _ = variants {} ; - + + ImpVP vp = {s = \\n => vp.compl ++ vp.s ! VImperative n} ; + AdvS _ _ = variants {} ; UseSlash _ = variants {} ; diff --git a/src/turkish/StructuralTur.gf b/src/turkish/StructuralTur.gf index 62db6591a..0a1d53125 100644 --- a/src/turkish/StructuralTur.gf +++ b/src/turkish/StructuralTur.gf @@ -8,25 +8,25 @@ concrete StructuralTur of Structural = CatTur ** lin he_Pron = - mkPron "o" "onu" "ona" "onun" "onda" "ondan" "onlu" "onsuz" Sg P3 ; + mkPron "o" "onu" "ona" "onun" "onda" "ondan" "onlu" "onsuz" "onunlu" Sg P3 ; i_Pron = mkPron "ben" "beni" "bana" "benim" - "bende" "benden" "benli" "bensiz" + "bende" "benden" "benli" "bensiz" "benimle" Sg P1 ; it_Pron = - mkPron "o" "onu" "ona" "onun" "onda" "ondan" "onlu" "onsuz" Sg P3 ; + mkPron "o" "onu" "ona" "onun" "onda" "ondan" "onlu" "onsuz" "onunlu" Sg P3 ; she_Pron = - mkPron "o" "onu" "ona" "onun" "onda" "ondan" "onlu" "onsuz" Sg P3 ; + mkPron "o" "onu" "ona" "onun" "onda" "ondan" "onlu" "onsuz" "onunlu" Sg P3 ; that_Quant = mkQuant "o" ; they_Pron = mkPron "onlar" "onları" "onlara" "onların" "onlarda" "onlardan" "onlarlı" - "onlarsız" Pl P3 ; + "onlarsız" "onlarınli" Pl P3 ; this_Quant = mkQuant "bu" ; @@ -35,16 +35,16 @@ concrete StructuralTur of Structural = CatTur ** mkQuant "hiç" ; we_Pron = - mkPron "biz" "bizi" "bize" "bizim" "bizde" "bizden" "bizli" "bizsiz" Pl P1 ; + mkPron "biz" "bizi" "bize" "bizim" "bizde" "bizden" "bizli" "bizsiz" "bizimle" Pl P1 ; youSg_Pron = - mkPron "sen" "seni" "sana" "senin" "sende" "senden" "senli" "sensiz" Sg P2 ; + mkPron "sen" "seni" "sana" "senin" "sende" "senden" "senli" "sensiz" "seninle" Sg P2 ; youPl_Pron = - mkPron "siz" "sizi" "size" "sizin" "sizde" "sizden" "sizli" "sizsiz" Pl P2 ; + mkPron "siz" "sizi" "size" "sizin" "sizde" "sizden" "sizli" "sizsiz" "sizinle" Pl P2 ; youPol_Pron = - mkPron "siz" "sizi" "size" "sizin" "sizde" "sizden" "sizli" "sizsiz" Pl P2 ; + mkPron "siz" "sizi" "size" "sizin" "sizde" "sizden" "sizli" "sizsiz" "sizinle" Pl P2 ; with_Prep = mkPrep [] (Abess Pos) ; diff --git a/src/turkish/SuffixTur.gf b/src/turkish/SuffixTur.gf index 7bd64934b..171ee9bd6 100644 --- a/src/turkish/SuffixTur.gf +++ b/src/turkish/SuffixTur.gf @@ -62,6 +62,7 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in { ablatSuffix : Suffix = regSuffix "den" "den" ; abessPosSuffix : Suffix = regSuffix "li" "li" ; abessNegSuffix : Suffix = regSuffix "siz" "siz" ; + instrSuffix : Suffix = regSuffix "la" "la" ; -- following 4 suffixes has other forms used after genSgP3Suffix accSuffixN : Suffix = regSuffix "i" "ni" ; datSuffixN : Suffix = regSuffix "e" "ne" ; @@ -96,6 +97,8 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in { p2PlVerbalSuffix : Suffix = regSuffix21 "siniz" "niz" ; p3PlVerbalSuffix : Suffix = regSuffix "ler" "ler" ; + p2PlImperSuffix : Suffix = regSuffix "in" "yin" ; + p1SgAlethicCopulaSuffix : Suffix = regSuffix "dim" "ydim" ; p2SgAlethicCopulaSuffix : Suffix = regSuffix "din" "ydin" ; p3SgAlethicCopulaSuffix : Suffix = regSuffix "di" "ydi" ; @@ -127,7 +130,8 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in { Loc => locSuffix ; Ablat => ablatSuffix ; Abess Pos => abessPosSuffix ; - Abess Neg => abessNegSuffix + Abess Neg => abessNegSuffix ; + Instr => instrSuffix } ; genSuffixes : Agr => Suffix = diff --git a/src/turkish/VerbTur.gf b/src/turkish/VerbTur.gf index 1523c7e6a..7436799e3 100644 --- a/src/turkish/VerbTur.gf +++ b/src/turkish/VerbTur.gf @@ -1,8 +1,8 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur in { lin - UseV v = v ; - SlashV2a v = lin VP v ; + UseV v = lin VP (v ** {compl = []}) ; + SlashV2a v = v ** {compl = []} ; Slash2V3 v = variants {} ; Slash3V3 v = variants {} ; @@ -13,20 +13,20 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur SlashVV v = variants {} ; SlashV2VNP = variants {} ; - ComplSlash vps np = { - s = \\ vf => vps.c.s ++ np.s ! vps.c.c ++ vps.s ! vf ; + ComplSlash vps np = vps ** { + compl = vps.compl ++ vps.c.s ++ np.s ! vps.c.c ; } ; -- TODO: test this and fix. - ComplVS vs s = { - s = \\vf => s.subord ++ vs.s ! vf + ComplVS vs s = vs ** { + compl = s.subord } ; ComplVA _ _ = variants {} ; ComplVV _ _ = variants {} ; ComplVQ _ _ = variants {} ; - UseComp comp = comp ; + UseComp comp = comp ** {compl = []} ; CompCN _ = variants {} ; CompNP ap = lin VP { @@ -65,9 +65,14 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur CompAdv _ = variants {} ; ReflVP = variants {} ; - - AdvVP = variants {} ; - AdVVP = variants {} ; + + AdvVP vp adv = vp ** { + compl = vp.compl ++ adv.s ; + } ; + + AdVVP adv vp = vp ** { + s = \\vf => adv.s ++ vp.s ! vf ; + } ; PassV2 = variants {} ; }