diff --git a/src/turkish/AdverbTur.gf b/src/turkish/AdverbTur.gf
index eed43fd27..5ff6c0655 100644
--- a/src/turkish/AdverbTur.gf
+++ b/src/turkish/AdverbTur.gf
@@ -12,11 +12,11 @@ concrete AdverbTur of Adverb = CatTur ** open ResTur, Prelude in {
} ;
-- TODO: inflect the subject to genitive.
- ComparAdvAdjS cadv a s = {
+ ComparAdvAdjS cadv a s = variants {} ; {- {
s = s.subord ++ cadv.s ++ a.s ! Sg ! Nom
- } ;
+ } ; -}
- SubjS s1 s2 = {s = s1.s ++ s2.subord} ;
+ SubjS s1 s2 = variants {} ; -- {s = s1.s ++ s2.subord} ;
PositAdvAdj a = {s = a.adv} ;
diff --git a/src/turkish/CatTur.gf b/src/turkish/CatTur.gf
index 75bb793d6..991810edf 100644
--- a/src/turkish/CatTur.gf
+++ b/src/turkish/CatTur.gf
@@ -4,18 +4,18 @@ concrete CatTur of Cat = CommonX - [CAdv,AdN] ** open ResTur, HarmonyTur, Prelud
lincat
- S = {s, subord : Str} ;
+ S = {s : Str} ;
- Cl = {s : Tense => Str; subord : Str} ;
- Imp = {s : Number => Str} ;
+ Cl = {s : Tense => Polarity => Str} ;
+ Imp = {s : Polarity => Number => Str} ;
-- Noun
CN = {s : Number => Case => Str; gen : Number => Agr => Str; h : Harmony} ;
NP = {s : Case => Str ; h : Harmony; a : Agr} ;
- VP = Verb ** {compl : Str} ;
- VPSlash = Verb ** {compl : Str; c : Prep} ;
- Comp = Verb ;
+ VP = {s : VForm => Str; compl : Str} ;
+ VPSlash = {s : VForm => Str; compl : Str; c : Prep} ;
+ Comp = {s : VForm => Str; compl : Str} ;
Pron = ResTur.Pron ;
Det = {s : Str; n : Number; useGen : UseGen} ;
@@ -58,8 +58,7 @@ 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 ;
+ V2 = \v -> v.s ++ v.c.s ;
+ VP = \vp -> vp.compl ++ vp.s ! VInf Pos ;
}
diff --git a/src/turkish/ConjunctionTur.gf b/src/turkish/ConjunctionTur.gf
index 75557ab36..1a448aadc 100644
--- a/src/turkish/ConjunctionTur.gf
+++ b/src/turkish/ConjunctionTur.gf
@@ -4,7 +4,6 @@ concrete ConjunctionTur of Conjunction =
lin
ConjS conj ss = {
s = linCoord []!conj.sep ++ ss.s!conj.sep ++ conj.s ++ ss.s!4;
- subord = linCoord []!conj.sep ++ ss.subord!conj.sep ++ conj.s ++ ss.subord!4;
} ;
ConjNP conj ss = {
@@ -14,10 +13,8 @@ concrete ConjunctionTur of Conjunction =
} ;
BaseS x y = {s = table {4 => y.s; _ => x.s};
- subord = table {4 => y.subord; _ => x.subord};
} ;
ConsS x xs = {s = table {4 => xs.s!4; t => x.s++linCoord bindComma!t++xs.s!t};
- subord = table {4 => xs.subord!4; t => x.subord++linCoord bindComma!t++xs.subord!t} ;
} ;
BaseNP x y =
@@ -89,7 +86,7 @@ concrete ConjunctionTur of Conjunction =
BaseRS _ _ = variants {} ;
lincat
- [S] = {s,subord : Ints 4 => Str} ;
+ [S] = {s : Ints 4 => Str} ;
[Adv] = {s : Ints 4 => Str} ;
[AdV] = {s : Ints 4 => Str} ;
[NP] = {s : Case => Ints 4 => Str; h : Harmony; a : Agr} ;
diff --git a/src/turkish/DocumentationTur.gf b/src/turkish/DocumentationTur.gf
index c62243d2d..03de5becc 100644
--- a/src/turkish/DocumentationTur.gf
+++ b/src/turkish/DocumentationTur.gf
@@ -1,6 +1,6 @@
--# -path=.:../abstract:../common
concrete DocumentationTur of Documentation = CatTur ** open
- ResTur,
+ ResTur, Prelude,
HTML in {
lincat
@@ -97,52 +97,37 @@ lin
oper
inflVerb : Verb -> Str = \v ->
(heading2 ("Şimdiki zaman") ++
- finite VPres ++
- tag "br" ++
- finite VProg ++
+ finite Pres ++
heading2 ("Geçmiş zaman") ++
- finite VPast ++
+ finite Past ++
heading2 ("Gelecek zaman") ++
- finite VFuture ++
+ finite Fut ++
heading2 ("Emir kipi") ++
frameTable (
tr (th "tekil" ++
th "çoğul") ++
- tr (td (v.s ! VImperative Sg) ++
- td (v.s ! VImperative Pl))
+ tr (td (tbl ! VImp Pos Sg) ++
+ td (tbl ! VImp Pos Pl))
) ++
heading2 ("Eylemlik") ++
- paragraph (v.s ! VInfinitive) ++
- heading2 ("Ulaç") ++
- nounForm Gerund ++
- heading2 ("Ad") ++
- nounForm VNoun)
+ paragraph (tbl ! VInf Pos))
where {
- finite : (Agr -> VForm) -> Str = \f ->
+ tbl : VForm => Str = mkVerbForms v ;
+
+ finite : Tense -> Str = \t ->
frameTable (
tr (th "" ++
th "tekil" ++
th "çoğul") ++
tr (th "1." ++
- td (v.s ! f {n=Sg; p=P1}) ++
- td (v.s ! f {n=Pl; p=P1})) ++
+ td (tbl ! VFin t Pos {n=Sg; p=P1}) ++
+ td (tbl ! VFin t Pos {n=Pl; p=P1})) ++
tr (th "2." ++
- td (v.s ! f {n=Sg; p=P2}) ++
- td (v.s ! f {n=Pl; p=P2})) ++
+ td (tbl ! VFin t Pos {n=Sg; p=P2}) ++
+ td (tbl ! VFin t Pos {n=Pl; p=P2})) ++
tr (th "3." ++
- td (v.s ! f {n=Sg; p=P3}) ++
- td (v.s ! f {n=Pl; p=P3}))
- ) ;
-
- nounForm : (Number -> Case -> VForm) -> Str = \f ->
- frameTable (
- tr (th "" ++ th "tekil" ++ th "çoğul") ++
- tr (th "yalın" ++ td (v.s ! f Sg Nom) ++ td (v.s ! f Pl Nom)) ++
- tr (th "belirtme" ++ td (v.s ! f Sg Acc) ++ td (v.s ! f Pl Acc)) ++
- tr (th "yönelme" ++ td (v.s ! f Sg Dat) ++ td (v.s ! f Pl Dat)) ++
- tr (th "bulunma" ++ td (v.s ! f Sg Loc) ++ td (v.s ! f Pl Loc)) ++
- tr (th "ayrılma" ++ td (v.s ! f Sg Ablat) ++ td (v.s ! f Pl Ablat)) ++
- tr (th "tamlayan" ++ td (v.s ! f Sg Gen) ++ td (v.s ! f Pl Gen))
+ td (tbl ! VFin t Pos {n=Sg; p=P3}) ++
+ td (tbl ! VFin t Pos {n=Pl; p=P3}))
) ;
} ;
}
diff --git a/src/turkish/NounTur.gf b/src/turkish/NounTur.gf
index f5f9d8fca..1ba918415 100644
--- a/src/turkish/NounTur.gf
+++ b/src/turkish/NounTur.gf
@@ -1,6 +1,6 @@
--# -path=.:../abstract:../common:../../prelude
-concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, Prelude in {
+concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, ParamX, Prelude in {
flags optimize=all_subs ;
@@ -194,7 +194,9 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, Prelude
} ;
PPartNP np v2 = {
- s = \\c => np.s ! c ++ v2.s ! (VPast np.a);
+ s = \\c => np.s ! c
+ ++ mkVerbForms v2 ! 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 eff2f1cac..bb95f1f71 100644
--- a/src/turkish/ParadigmsTur.gf
+++ b/src/turkish/ParadigmsTur.gf
@@ -60,13 +60,6 @@ resource ParadigmsTur = open
mkVS : V -> VS = \verb -> verb ;
mkVQ : V -> VQ = \verb -> verb ;
- -- worst-case function
- -- bases of all forms are required.
- makeVerb : (mek,inf,base,presBase,pastBase,aoristBase : Str)
- -> (futureBase : Softness => Str )
- -> Harmony
- -> V ;
-
-- make a regular verb
-- supply infinitive, softened infinitive, future infinitive forms and
-- aorist type
@@ -234,8 +227,8 @@ resource ParadigmsTur = open
auxillaryVerb prefix verb con =
case con of {
- Sep => lin V {s = \\t => prefix ++ verb.s ! t} ;
- Con => lin V {s = \\t => prefix + verb.s ! t}
+ Sep => lin V {s = prefix ++ verb.s; stems : VStem => Str = \\t => prefix ++ verb.stems ! t; h = verb.h; aoristType = verb.aoristType} ;
+ Con => lin V {s = prefix + verb.s; stems : VStem => Str = \\t => prefix + verb.stems ! t; h = verb.h; aoristType = verb.aoristType}
} ;
regV inf = regVerb inf inf inf (getAoristType (tk 3 inf)) ;
@@ -243,86 +236,25 @@ resource ParadigmsTur = open
irregV_aor inf aorT = regVerb inf inf inf aorT ;
regVerb inf softInf futInf aoristType =
- let base = (tk 3 inf) ;
- softBase = (tk 3 softInf) ;
- futBase = (tk 3 futInf) ;
- har = getHarmony base ;
- softness = getSoftness base ;
- futureBase = addSuffix futBase har futureSuffix ;
- softFutureBase = addSuffix futBase har softFutureSuffix ;
- pastBase = addSuffix base har pastSuffix ;
- futureTable =
- table {
- Soft => softFutureBase ;
- Hard => futureBase
- } ;
- aoristBase =
- case aoristType of {
- SgSylConReg => addSuffix softBase har aoristErSuffix ;
- _ => addSuffix softBase har aoristIrSuffix
- } ;
+ let base = tk 3 inf ;
+ softBase = tk 3 softInf ;
+ futBase = tk 3 futInf ;
progBase =
- case (getHarConP base) of {
- SVow => addSuffix (tk 1 base) (getHarmony (tk 1 base)) presentSuffix ;
- _ => addSuffix softBase har presentSuffix
- } ;
- in makeVerb (init inf) inf base progBase pastBase aoristBase futureTable har;
-
- makeVerb mek inf base progBase pastBase aoristBase futureTable har =
- let
- futht = getHarVowP (futureTable ! Hard) ;
- pastHar = {vow = har.vow ; con = SVow} ;
- futHar = {vow = futht ; con = (SCon Soft)} ;
- aorHar = {vow = getHarVowP aoristBase ; con = (SCon Soft)} ;
- in
- lin V {
- s =
- table {
- VPres agr =>
- addSuffix aoristBase aorHar (verbSuffixes ! agr) ;
- VProg agr =>
- addSuffix progBase progHar (verbSuffixes ! agr) ;
- VPast agr =>
- addSuffix pastBase pastHar (verbSuffixes ! agr) ;
- VFuture agr =>
- addSuffix futureTable futHar (verbSuffixes ! agr) ;
- VImperative Sg =>
- base ;
- VImperative Pl =>
- addSuffix base har p2PlImperSuffix ;
- VInfinitive =>
- inf ;
- Gerund _ Acc =>
- case aorHar.vow of {
- Ih_Har => mek + "si" ;
- I_Har => mek + "sı" ;
- U_Har => "TODO" ;
- Uh_Har => "TODO"
- } ;
- Gerund _ _ => mek ;
- VNoun n Gen =>
- case aorHar.vow of {
- Ih_Har => base + "tiği" ;
- I_Har => base + "tığı" ;
- U_Har => base + "duğu" ;
- Uh_Har => base + "düğü"
- } ;
- VNoun n Ablat =>
- case aorHar.vow of {
- Ih_Har => base + "tıktan" ;
- I_Har => base + "tıktan" ;
- U_Har => base + "duktan" ;
- Uh_Har => base + "dükten"
- } ;
- VNoun n _ =>
- case aorHar.vow of {
- Ih_Har => base + "(TODO: makeVerb)" ;
- I_Har => base + "(TODO: makeVerb)" ;
- U_Har => base + "(TODO: makeVerb)" ;
- Uh_Har => base + "(TODO: makeVerb)"
- }
- } ;
- } ;
+ case getHarConP base of {
+ SVow => tk 1 base ;
+ _ => softBase
+ }
+ in lin V {
+ s = inf ;
+ stems = table {
+ VBase Hard => base ;
+ VBase Soft => softBase ;
+ VProg => progBase ;
+ VFut => futBase
+ } ;
+ aoristType = aoristType ;
+ h = getHarmony base
+ } ;
-- Implementation of noun paradigms
mkNoun sn sa sd sg sl sabl sgabPos sgabNeg si sgs pln har =
@@ -636,14 +568,6 @@ resource ParadigmsTur = open
mkQuant : Str -> Quant = \s -> lin Quant {s=s; useGen = NoGen} ;
- param
- AoristType =
- PlSyl -- more than one syllable, takes -ir
- | SgSylConIrreg -- one syllable ending with consonant, but takes -ir
- -- (here is the list: al-, bil-, bul-, dur-, gel-, gör-,
- -- kal-, ol-, öl-, var-, ver-, vur-, san- )
- | SgSylConReg ; -- one syllable ending with consonant, takes -er
-
oper
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
diff --git a/src/turkish/PhraseTur.gf b/src/turkish/PhraseTur.gf
index ad15fedd1..d555e597d 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 ! Sg} ;
- UttImpPl pol imp = {s = imp.s ! Pl} ;
- UttImpPol pol imp = {s = imp.s ! Pl} ;
+ UttImpSg pol imp = {s = imp.s ! pol.p ! Sg} ;
+ UttImpPl pol imp = {s = imp.s ! pol.p ! Pl} ;
+ UttImpPol pol imp = {s = imp.s ! pol.p ! Pl} ;
UttIP ip = {s = ip.s} ;
UttIAdv iadv = iadv ;
UttCard n = {s = n.s ! Sg ! Nom} ;
@@ -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 ! VInfinitive} ;
+ UttVP vp = {s = vp.s ! 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 cc649007a..a8daadbf8 100644
--- a/src/turkish/ResTur.gf
+++ b/src/turkish/ResTur.gf
@@ -1,6 +1,6 @@
--# -path=.:../abstract:../common:../../prelude
-resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in {
+resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur, SuffixTur in {
--2 For $Noun$
@@ -37,16 +37,26 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in {
param
VForm =
- VPres Agr
- | VProg Agr
- | VPast Agr
- | VFuture Agr
- | VImperative Number
- | VInfinitive
- | Gerund Number Case
- | VNoun Number Case
+ VInf Polarity
+ | VImp Polarity Number
+ | VFin Tense Polarity Agr
;
+ param
+ VStem =
+ VBase Softness
+ | VProg
+ | VFuture
+ ;
+
+ param
+ AoristType =
+ PlSyl -- more than one syllable, takes -ir
+ | SgSylConIrreg -- one syllable ending with consonant, but takes -ir
+ -- (here is the list: al-, bil-, bul-, dur-, gel-, gör-,
+ -- kal-, ol-, öl-, var-, ver-, vur-, san- )
+ | SgSylConReg ; -- one syllable ending with consonant, takes -er
+
param
ConjType = Infix | Mixfix ;
@@ -54,7 +64,10 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in {
oper
Verb : Type = {
- s : VForm => Str
+ s : Str ;
+ stems : VStem => Str ;
+ aoristType : AoristType ;
+ h : Harmony
} ;
--2 For $Numeral$
@@ -93,31 +106,150 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in {
a = {n = n; p = p}
} ;
- mkClause : Str -> Agr -> Str -> Verb -> {s : Tense => Str; subord : Str} =
- \np, a, compl, v -> {
- s = table {
- 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 ++ compl ++ v.s ! VNoun a.n Nom
- } ;
+ mkVerbForms : Verb -> VForm => Str =
+ \v -> table {
+ VInf Pos => v.s ;
+ 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)
+ } ;
+ VFin t p agr =>
+ let presHar = mkHar (case v.h.con of {
+ SCon _ => case v.aoristType of {
+ SgSylConReg => Ih_Har ;
+ _ => v.h.vow
+ } ;
+ SVow => v.h.vow
+ }) (SCon Soft) ;
+ pastHar = mkHar v.h.vow 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) ;
+ Fut => v.stems ! VFuture ++ BIND ++
+ suffixStr v.h (case futSoft of {
+ Soft => softFutureSuffix ;
+ Hard => futureSuffix
+ }) +
+ suffixStr futHar (verbSuffixes ! agr) ;
+ Cond => v.stems ! VBase Hard ++ BIND ++
+ 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)
+ } ;
+ 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 {
+ Soft => softFutureSuffix ;
+ Hard => futureSuffix
+ }) +
+ suffixStr futHar (verbSuffixes ! agr) ;
+ Cond => v.stems ! VBase Hard ++ BIND ++
+ suffixStr v.h negativeSuffix +
+ suffixStr negHar (condCopulaSuffixes ! agr)
+ }
+ }
+ } ;
mkDet : Str -> Number -> UseGen -> {s : Str; n : Number; useGen : UseGen} =
\s, n, ug -> {s = s; n = n; useGen = ug} ;
- attachMe : Verb -> {s : Str} =
- \v ->
- let
- s : Str = v.s ! VImperative Sg
- in
- case s of {
- (_ + #vowel + _ )* + (_ + #frontVowel + _) => ss (s ++ "me") ;
- (_ + #vowel + _)* + (_ + #backVowel + _) => ss (s ++ "ma")
- } ;
-
linCoord : Str -> Ints 4 => Str ;
linCoord comma = table {0 => "hem"; 1=>"ya"; 2=>"ne"; 3=>comma; 4=>[]} ;
+ caseSuffixes : Case => Suffix =
+ table {
+ Nom => empSuffix ;
+ Acc => accSuffix ;
+ Dat => datSuffix ;
+ Gen => genSuffix ;
+ Loc => locSuffix ;
+ Ablat => ablatSuffix ;
+ Abess Pos => abessPosSuffix ;
+ Abess Neg => abessNegSuffix ;
+ Instr => instrSuffix
+ } ;
+
+ genSuffixes : Agr => Suffix =
+ table {
+ {n=Sg; p=P1} => genSgP1Suffix ;
+ {n=Sg; p=P2} => genSgP2Suffix ;
+ {n=Sg; p=P3} => genSgP3Suffix ;
+ {n=Pl; p=P1} => genPlP1Suffix ;
+ {n=Pl; p=P2} => genPlP2Suffix ;
+ {n=Pl; p=P3} => genPlP3Suffix
+ } ;
+
+ verbSuffixes : Agr => Suffix =
+ table {
+ {n=Sg; p=P1} => p1SgVerbalSuffix ;
+ {n=Sg; p=P2} => p2SgVerbalSuffix ;
+ {n=Sg; p=P3} => empSuffix ;
+ {n=Pl; p=P1} => p1PlVerbalSuffix ;
+ {n=Pl; p=P2} => p2PlVerbalSuffix ;
+ {n=Pl; p=P3} => p3PlVerbalSuffix
+ } ;
+
+ alethicCopulaSuffixes : Agr => Suffix =
+ table {
+ {n=Sg; p=P1} => p1SgAlethicCopulaSuffix ;
+ {n=Sg; p=P2} => p2SgAlethicCopulaSuffix ;
+ {n=Sg; p=P3} => p3SgAlethicCopulaSuffix ;
+ {n=Pl; p=P1} => p1PlAlethicCopulaSuffix ;
+ {n=Pl; p=P2} => p2PlAlethicCopulaSuffix ;
+ {n=Pl; p=P3} => p3PlAlethicCopulaSuffix
+ } ;
+
+ condCopulaSuffixes : Agr => Suffix =
+ table {
+ {n=Sg; p=P1} => p1SgCondCopulaSuffix ;
+ {n=Sg; p=P2} => p2SgCondCopulaSuffix ;
+ {n=Sg; p=P3} => p3SgCondCopulaSuffix ;
+ {n=Pl; p=P1} => p1PlCondCopulaSuffix ;
+ {n=Pl; p=P2} => p2PlCondCopulaSuffix ;
+ {n=Pl; p=P3} => p3PlCondCopulaSuffix
+ } ;
+
}
diff --git a/src/turkish/SentenceTur.gf b/src/turkish/SentenceTur.gf
index 72eb10153..05c3ca945 100644
--- a/src/turkish/SentenceTur.gf
+++ b/src/turkish/SentenceTur.gf
@@ -1,16 +1,14 @@
concrete SentenceTur of Sentence = CatTur ** open Prelude, ResTur in {
lin
-
- PredVP np vp = mkClause (np.s ! Nom) np.a vp.compl vp ;
+ PredVP np vp = {s = \\t,p => np.s ! Nom ++ vp.compl ++ vp.s ! VFin t p np.a} ;
PredSCVP sc vp = variants {} ;
-- TODO: Check how correct this is.
- EmbedVP vp = {s = (vp.s ! Gerund Sg Acc)} ;
+ EmbedVP vp = variants {} ; -- {s = (vp.s ! Gerund Sg Acc)} ;
- -- TODO: rudimentary implementation; revise this.
- UseCl temp pol cl = {s = temp.s ++ cl.s ! temp.t; subord=cl.subord} ;
+ UseCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! pol.p} ;
UseQCl _ _ = variants {} ;
@@ -24,7 +22,8 @@ concrete SentenceTur of Sentence = CatTur ** open Prelude, ResTur in {
EmbedQS _ = variants {} ;
EmbedS _ = variants {} ;
- ImpVP vp = {s = \\n => vp.compl ++ vp.s ! VImperative n} ;
+ ImpVP vp = {s = \\p,n => vp.compl ++ vp.s ! VImp p n
+ } ;
AdvS _ _ = variants {} ;
diff --git a/src/turkish/StructuralTur.gf b/src/turkish/StructuralTur.gf
index 0a1d53125..f6d89801d 100644
--- a/src/turkish/StructuralTur.gf
+++ b/src/turkish/StructuralTur.gf
@@ -203,17 +203,11 @@ concrete StructuralTur of Structural = CatTur **
why_IAdv = {s = "neden"} ;
where_IAdv = {s = "nerede"} ;
- can8know_VV = {
- s = \\_ => "(TODO: can8know_VV)"
- } ;
+ can8know_VV = variants {} ;
- can_VV = {
- s = \\_ => "(TODO: can_VV)"
- } ;
+ can_VV = variants {} ;
- must_VV = {
- s = \\_ => "(TODO: must_VV)"
- } ;
+ must_VV = variants {} ;
not_Predet = {
s = "(TODO: not_Predet)"
@@ -241,7 +235,7 @@ concrete StructuralTur of Structural = CatTur **
-- TODO: this depends on the linearization for `ComplVV` and is really a
-- morphological construct so it might be a bit tricky to implement.
- want_VV = { s = \\_ => "(TODO: want_VV)" } ;
+ want_VV = variants {} ;
whatPl_IP = { s = "neler" } ;
diff --git a/src/turkish/SuffixTur.gf b/src/turkish/SuffixTur.gf
index 171ee9bd6..695410fff 100644
--- a/src/turkish/SuffixTur.gf
+++ b/src/turkish/SuffixTur.gf
@@ -10,7 +10,7 @@
--# -path=.:../abstract:../common:../../prelude
-resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in {
+resource SuffixTur = open Prelude, Predef, HarmonyTur in {
flags
coding=utf8 ;
@@ -62,7 +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" ;
+ instrSuffix : Suffix = regSuffix "le" "le" ;
-- following 4 suffixes has other forms used after genSgP3Suffix
accSuffixN : Suffix = regSuffix "i" "ni" ;
datSuffixN : Suffix = regSuffix "e" "ne" ;
@@ -79,6 +79,8 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in {
-- see the comment at makeNoun operation in ParadigmsTur.gf
genPlP3Suffix : Suffix = regSuffix "i" "i" ;
+ negativeSuffix : Suffix = regSuffix "me" "me" ;
+
-- Tense Suffixes
pastSuffix : Suffix = regSuffix "di" "di" ;
inferentSuffix : Suffix = regSuffix "miş" "miş" ;
@@ -86,8 +88,10 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in {
presentSuffix : Suffix = regSuffix "iyor" "iyor" ;
aoristIrSuffix : Suffix = regSuffix "ir" "r" ;
aoristErSuffix : Suffix = regSuffix "er" "r" ;
+ aoristIzSuffix : Suffix = regSuffix "iz" "z" ;
futureSuffix : Suffix = regSuffix2 "ecek" "yecek" ;
- softFutureSuffix : Suffix = regSuffix2 "eceğ" "yeceğ" ;
+ softFutureSuffix: Suffix = regSuffix2 "eceğ" "yeceğ" ;
+
-- Person Suffixes for Verbs
p1SgVerbalSuffix : Suffix = regSuffix "im" "m" ;
@@ -97,7 +101,8 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in {
p2PlVerbalSuffix : Suffix = regSuffix21 "siniz" "niz" ;
p3PlVerbalSuffix : Suffix = regSuffix "ler" "ler" ;
- p2PlImperSuffix : Suffix = regSuffix "in" "yin" ;
+ p1PlAoristSuffix : Suffix = regSuffix "iz" "yiz" ;
+ p2PlImperSuffix : Suffix = regSuffix "in" "yin" ;
p1SgAlethicCopulaSuffix : Suffix = regSuffix "dim" "ydim" ;
p2SgAlethicCopulaSuffix : Suffix = regSuffix "din" "ydin" ;
@@ -110,69 +115,16 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in {
p2SgCondCopulaSuffix : Suffix = regSuffix "sen" "sen" ;
p3SgCondCopulaSuffix : Suffix = regSuffix "se" "se" ;
p1PlCondCopulaSuffix : Suffix = regSuffix "sek" "sek" ;
- p2PlCondCopulaSuffix : Suffix = regSuffix21 "seniz" "seniz" ;
- p3PlCondCopulaSuffix : Suffix = regSuffix "lerse" "lerse" ;
+ p2PlCondCopulaSuffix : Suffix = regSuffix2 "seniz" "seniz" ;
+ p3PlCondCopulaSuffix : Suffix = regSuffix "seler" "seler" ;
- subordSuffixDik : Suffix = regSuffix2 "dik" "dikler" ;
- softSubordSuffixDik : Suffix = regSuffix2 "diğ" "dikler" ;
+ infinitiveSuffix : Suffix = regSuffix "mek" "mek" ;
-- Ordinal suffix for numbers
ordNumSuffix : Suffix = regSuffix21 "inci" "nci" ;
-- Suffix for deriving adverb from a adjective
adjAdvSuffix : Suffix = regSuffix "ce" "ce" ;
- caseSuffixes : Case => Suffix =
- table {
- Nom => empSuffix ;
- Acc => accSuffix ;
- Dat => datSuffix ;
- Gen => genSuffix ;
- Loc => locSuffix ;
- Ablat => ablatSuffix ;
- Abess Pos => abessPosSuffix ;
- Abess Neg => abessNegSuffix ;
- Instr => instrSuffix
- } ;
-
- genSuffixes : Agr => Suffix =
- table {
- {n=Sg; p=P1} => genSgP1Suffix ;
- {n=Sg; p=P2} => genSgP2Suffix ;
- {n=Sg; p=P3} => genSgP3Suffix ;
- {n=Pl; p=P1} => genPlP1Suffix ;
- {n=Pl; p=P2} => genPlP2Suffix ;
- {n=Pl; p=P3} => genPlP3Suffix
- } ;
-
- verbSuffixes : Agr => Suffix =
- table {
- {n=Sg; p=P1} => p1SgVerbalSuffix ;
- {n=Sg; p=P2} => p2SgVerbalSuffix ;
- {n=Sg; p=P3} => empSuffix ;
- {n=Pl; p=P1} => p1PlVerbalSuffix ;
- {n=Pl; p=P2} => p2PlVerbalSuffix ;
- {n=Pl; p=P3} => p3PlVerbalSuffix
- } ;
-
- alethicCopulaSuffixes : Agr => Suffix =
- table {
- {n=Sg; p=P1} => p1SgAlethicCopulaSuffix ;
- {n=Sg; p=P2} => p2SgAlethicCopulaSuffix ;
- {n=Sg; p=P3} => p3SgAlethicCopulaSuffix ;
- {n=Pl; p=P1} => p1PlAlethicCopulaSuffix ;
- {n=Pl; p=P2} => p2PlAlethicCopulaSuffix ;
- {n=Pl; p=P3} => p3PlAlethicCopulaSuffix
- } ;
-
- condCopulaSuffixes : Agr => Suffix =
- table {
- {n=Sg; p=P1} => p1SgCondCopulaSuffix ;
- {n=Sg; p=P2} => p2SgCondCopulaSuffix ;
- {n=Sg; p=P3} => p3SgCondCopulaSuffix ;
- {n=Pl; p=P1} => p1PlCondCopulaSuffix ;
- {n=Pl; p=P2} => p2PlCondCopulaSuffix ;
- {n=Pl; p=P3} => p3PlCondCopulaSuffix
- } ;
-- Adds a suffix to the base given as Str using Harmony.
-- If only one form of base is given then it is assumed that base does not soften
@@ -188,7 +140,7 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in {
\baseTable,har,suf -> (baseTable ! suf.stemT) + suf.st ! har.con ! har.vow ;
suffixStr : Harmony -> Suffix -> Str =
- \har,suf -> BIND ++ suf.st ! har.con ! har.vow ;
+ \har,suf -> suf.st ! har.con ! har.vow ;
regSuffix larC larV =
{
@@ -257,7 +209,7 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in {
lirCH = hardenWord wordC ;
lirC = case wordC.p4 of {
"WXQ" => ;
- "i" => ;
- _ => ;
+ "ei" => ;
+ "ee" => ;
- "i" => ;
- _ => ;
+ "ei" => ;
+ "ee" =>
@@ -306,7 +282,7 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in {
c@("i"|"e") +
y@(#consonant*) +
d@("i"|"e") +
- z@(#consonant*)=> ;
+ z@(#consonant*)=> ;
_ =>
} ;
diff --git a/src/turkish/VerbTur.gf b/src/turkish/VerbTur.gf
index 7436799e3..3b68e65c5 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 = lin VP (v ** {compl = []}) ;
- SlashV2a v = v ** {compl = []} ;
+ UseV v = {s = mkVerbForms v; compl = []} ;
+ SlashV2a v = {s = mkVerbForms v; compl = []; c = v.c} ;
Slash2V3 v = variants {} ;
Slash3V3 v = variants {} ;
@@ -18,9 +18,9 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur
} ;
-- TODO: test this and fix.
- ComplVS vs s = vs ** {
+ ComplVS vs s = variants {} ; {- vs ** {
compl = s.subord
- } ;
+ } ; -}
ComplVA _ _ = variants {} ;
ComplVV _ _ = variants {} ;
@@ -29,37 +29,62 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur
UseComp comp = comp ** {compl = []} ;
CompCN _ = variants {} ;
- CompNP ap = lin VP {
+ CompNP np = {
s = table {
- VPres agr => ap.s ! Nom ++
- case agr of {
- {n=Sg; p=P3} => [] ;
- _ => suffixStr ap.h (verbSuffixes ! agr)
- } ;
- VProg agr => ap.s ! Nom ;
- VPast agr => ap.s ! Nom ++
- suffixStr ap.h (alethicCopulaSuffixes ! agr);
- VFuture agr => ap.s ! Nom ++
- addSuffix "olacağ" (mkHar I_Har (SCon Hard)) (verbSuffixes ! agr) ;
- VInfinitive => ap.s ! Nom ++ "olmak" ;
- _ => "TODO"
- }
+ VFin Pres p agr => np.s ! Nom ++
+ case of {
+ <{n=Sg; p=P3},Pos> => [] ;
+ <{n=Sg; p=P3},Neg> => BIND ++ suffixStr np.h negativeSuffix ;
+ <_, Pos> => BIND ++ suffixStr np.h (verbSuffixes ! agr) ;
+ <_, Neg> => BIND ++ suffixStr np.h negativeSuffix +
+ (let negHar = mkHar (case np.h.vow of {
+ I_Har | U_Har => I_Har ;
+ Ih_Har | Uh_Har => Ih_Har
+ }) SVow
+ in suffixStr negHar (verbSuffixes ! agr))
+ } ;
+ VFin Past p agr => 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
+ } ;
+ compl = []
} ;
- CompAP ap = lin VP {
+ CompAP ap = {
s = table {
- VPres agr => case agr.p of {
- P3 => ap.s ! Sg ! Nom ;
- _ => ap.s ! agr.n ! Nom ++ suffixStr ap.h (verbSuffixes ! agr)
- } ;
- VProg agr => ap.s ! agr.n ! Nom ;
- VPast agr => ap.s ! agr.n ! Nom ++
- suffixStr ap.h (alethicCopulaSuffixes ! agr);
- VFuture agr => ap.s ! agr.n ! Nom ++
- addSuffix "olacağ" (mkHar I_Har (SCon Hard)) (verbSuffixes ! agr) ;
- VInfinitive => ap.s ! Sg ! Nom ++ "olmak" ;
- _ => "TODO"
- }
+ 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 ++
+ case of {
+ <{n=Sg; p=P3},Pos> => [] ;
+ <{n=Sg; p=P3},Neg> => BIND ++ suffixStr ap.h negativeSuffix ;
+ <_, Pos> => BIND ++ suffixStr ap.h (verbSuffixes ! agr) ;
+ <_, Neg> => BIND ++ suffixStr ap.h negativeSuffix +
+ (let negHar = {vow = case ap.h.vow of {
+ I_Har | U_Har => I_Har ;
+ Ih_Har | Uh_Har => Ih_Har
+ } ;
+ con = SVow
+ }
+ in suffixStr negHar (verbSuffixes ! agr))
+ } ;
+ VFin Past p agr => 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)
+ } ;
+ compl = []
} ;
CompAdv _ = variants {} ;
@@ -75,4 +100,13 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur
} ;
PassV2 = variants {} ;
+
+oper
+ olmak_V : V = lin V {
+ s = "olmak" ;
+ stems = \\_ => "ol" ;
+ aoristType = SgSylConIrreg ;
+ h = mkHar U_Har (SCon Soft)
+ } ;
+
}