extensions by Codex

This commit is contained in:
Krasimir Angelov
2026-09-29 16:48:37 +02:00
parent 0a23e153a5
commit 4e69c154d6
14 changed files with 484 additions and 124 deletions
+4 -4
View File
@@ -12,11 +12,11 @@ concrete AdverbTur of Adverb = CatTur ** open ResTur, Prelude in {
} ; } ;
-- TODO: inflect the subject to genitive. -- TODO: inflect the subject to genitive.
ComparAdvAdjS cadv a s = variants {} ; {- { ComparAdvAdjS cadv a s = {
s = s.subord ++ cadv.s ++ a.s ! Sg ! Nom s = s.s ++ cadv.s ++ a.s ! Sg ! Nom
} ; -} } ;
SubjS s1 s2 = variants {} ; -- {s = s1.s ++ s2.subord} ; SubjS subj s = {s = subj.s ++ s.s} ;
PositAdvAdj a = {s = a.adv} ; PositAdvAdj a = {s = a.adv} ;
PositAdAAdj a = {s = a.adv} ; PositAdAAdj a = {s = a.adv} ;
+7
View File
@@ -6,10 +6,14 @@ concrete CatTur of Cat = CommonX - [CAdv,AdN] ** open ResTur, HarmonyTur, Prelud
-- Tensed/Untensed -- Tensed/Untensed
S = {s : Str} ; S = {s : Str} ;
QS = {s : Str} ;
RS = {s : Agr => Str} ; RS = {s : Agr => Str} ;
-- Sentence -- Sentence
Cl = {s : Tense => Anteriority => Polarity => Str} ; Cl = {s : Tense => Anteriority => Polarity => Str} ;
QCl = {s : Tense => Anteriority => Polarity => Str} ;
ClSlash = {s : Tense => Anteriority => Polarity => Str; c : Prep} ;
SSlash = {s : Str; c : Prep} ;
Imp = {s : Polarity => Number => Str} ; Imp = {s : Polarity => Number => Str} ;
-- Noun -- Noun
@@ -33,6 +37,9 @@ concrete CatTur of Cat = CommonX - [CAdv,AdN] ** open ResTur, HarmonyTur, Prelud
Quant = {s : Str; useGen : UseGen} ; Quant = {s : Str; useGen : UseGen} ;
PrepNP = {s : Str} ; PrepNP = {s : Str} ;
DAP = {s : Number => Case => Str} ; DAP = {s : Number => Case => Str} ;
IP = {s : Str} ;
IComp = {s : Str} ;
IQuant = {s : Str} ;
CAdv = {s : Str; p : Str; c : Case} ; CAdv = {s : Str; p : Str; c : Case} ;
AdN = {s : Str; c : Case} ; AdN = {s : Str; c : Case} ;
+10 -3
View File
@@ -81,9 +81,15 @@ concrete ConjunctionTur of Conjunction =
h = xs.h} ; h = xs.h} ;
ConjRS _ _ = variants {} ; ConjRS conj ss = {
ConsRS _ _ = variants {} ; s = \\a => linCoord [] ! conj.sep ++ ss.s ! a ! conj.sep ++ conj.s ++ ss.s ! a ! 4
BaseRS _ _ = variants {} ; } ;
ConsRS x xs = {
s = \\a => table {4 => xs.s ! a ! 4; i => x.s ! a ++ linCoord bindComma ! i ++ xs.s ! a ! i}
} ;
BaseRS x y = {
s = \\a => table {4 => y.s ! a; _ => x.s ! a}
} ;
lincat lincat
[S] = {s : Ints 4 => Str} ; [S] = {s : Ints 4 => Str} ;
@@ -94,5 +100,6 @@ concrete ConjunctionTur of Conjunction =
[CN] = {s : Number => Case => Ints 4 => Str; [CN] = {s : Number => Case => Ints 4 => Str;
gen : Number => Agr => Ints 4 => Str; gen : Number => Agr => Ints 4 => Str;
h : Harmony} ; h : Harmony} ;
[RS] = {s : Agr => Ints 4 => Str} ;
} }
+71
View File
@@ -0,0 +1,71 @@
--# -path=.:../abstract:../common:../../prelude
concrete ConstructionTur of Construction = CatTur **
open GrammarTur, ParadigmsTur, ResTur, HarmonyTur, Prelude in {
lincat
Weekday = N ;
Month = N ;
Monthday = {s : Str} ;
Year = {s : Str} ;
lin
ready_VP = UseComp (CompAP (PositA (mkA "hazır"))) ;
has_age_VP card = {
s = \\asp,vf => card.s ! Sg ! Nom ++ "yaşında" ++
mkVerbForms olmak_V ! asp ! vf;
compl = []
} ;
n_units_AP card unit adj = {
s = \\n,c => card.s ! Sg ! Nom ++ unit.s ! Pl ! Nom ++ adj.s ! n ! c;
h = adj.h
} ;
n_units_of_NP card unit np = {
s = \\c => np.s ! Gen ++ card.s ! Sg ! Nom ++ unit.s ! Pl ! c;
h = unit.h;
a = agrP3 Pl
} ;
cup_of_CN np = {
s = \\n,c => np.s ! Gen ++ (mkN "fincan").s ! n ! c;
gen = \\n,a => np.s ! Gen ++ (mkN "fincan").gen ! n ! a;
h = (mkN "fincan").h
} ;
weekdayPunctualAdv day = {s = day.s ! Sg ! Loc} ;
weekdayHabitualAdv day = {s = day.s ! Pl ! Loc} ;
weekdayNextAdv day = {s = "gelecek" ++ day.s ! Sg ! Nom} ;
weekdayLastAdv day = {s = "geçen" ++ day.s ! Sg ! Nom} ;
monthAdv month = {s = month.s ! Sg ! Loc} ;
yearAdv year = {s = year.s ++ "yılında"} ;
intYear i = {s = i.s} ;
intMonthday i = {s = i.s} ;
weekdayN day = day ;
monthN month = month ;
monday_Weekday = mkN "Pazartesi" ;
tuesday_Weekday = mkN "Salı" ;
wednesday_Weekday = mkN "Çarşamba" ;
thursday_Weekday = mkN "Perşembe" ;
friday_Weekday = mkN "Cuma" ;
saturday_Weekday = mkN "Cumartesi" ;
sunday_Weekday = mkN "Pazar" ;
january_Month = mkN "Ocak" ;
february_Month = mkN "Şubat" ;
march_Month = mkN "Mart" ;
april_Month = mkN "Nisan" ;
may_Month = mkN "Mayıs" ;
june_Month = mkN "Haziran" ;
july_Month = mkN "Temmuz" ;
august_Month = mkN "Ağustos" ;
september_Month = mkN "Eylül" ;
october_Month = mkN "Ekim" ;
november_Month = mkN "Kasım" ;
december_Month = mkN "Aralık" ;
}
+166 -4
View File
@@ -1,4 +1,14 @@
concrete ExtendTur of Extend = CatTur ** open ResTur, SuffixTur, Predef in { concrete ExtendTur of Extend = CatTur ** open ResTur, SuffixTur, HarmonyTur, ParadigmsTur, Prelude, Predef in {
lincat
VPS = {s : Agr => Str} ;
[VPS] = {s : Agr => Ints 4 => Str} ;
VPI = {s : Str} ;
[VPI] = {s : Ints 4 => Str} ;
[Comp] = {s : Aspect => VForm => Ints 4 => Str} ;
[Imp] = {s : Polarity => Number => Ints 4 => Str} ;
RNP = {s : Agr => Case => Str} ;
RNPList = {s : Agr => Case => Ints 4 => Str} ;
lin lin
GenRP n cn = { GenRP n cn = {
@@ -6,11 +16,155 @@ concrete ExtendTur of Extend = CatTur ** open ResTur, SuffixTur, Predef in {
} ; } ;
GenModNP num np cn = { GenModNP num np cn = {
s = \\c => np.s ! Nom ++ num.s ! num.n ! c ++ cn.gen ! num.n ! np.a ; s = \\c => np.s ! Gen ++ num.s ! num.n ! c ++ cn.gen ! num.n ! np.a ;
h = cn.h ; h = cn.h ;
a = {n=num.n; p=P3} ; a = {n=num.n; p=P3} ;
} ; } ;
CompoundN n1 n2 = {
s = \\n,c => n1.s ! Sg ! Nom ++ n2.s ! n ! c;
gen = \\n,a => n1.s ! Sg ! Nom ++ n2.gen ! n ! a;
h = n2.h
} ;
CompoundAP n a = {
s = \\num,c => n.s ! Sg ! Nom ++ a.s ! num ! c ;
h = a.h
} ;
PresPartAP vp = {
s = \\_,_ => vp.compl ++ vp.s ! Perf ! VImperfPart Pos ;
h = mkHar I_Har (SCon Soft)
} ;
PastPartAP vp = {
s = \\_,_ => vp.compl ++ mkVerbForms (passiveVerb vp) ! Perf ! VPerfPart Pos ;
h = vp.h
} ;
PastPartAgentAP vp np = {
s = \\_,_ => np.s ! Nom ++ "tarafından" ++ vp.compl ++
mkVerbForms (passiveVerb vp) ! Perf ! VPerfPart Pos ;
h = vp.h
} ;
GerundCN vp = {
s = \\_,_ => vp.compl ++ vp.s ! Perf ! VInf Pos ;
gen = \\_,_ => vp.compl ++ vp.s ! Perf ! VInf Pos ;
h = mkHar I_Har (SCon Soft)
} ;
GerundNP vp = {
s = \\_ => vp.compl ++ vp.s ! Perf ! VInf Pos ;
h = mkHar I_Har (SCon Soft) ;
a = agrP3 Sg
} ;
GerundAdv vp = {s = vp.compl ++ vp.s ! Perf ! VInf Pos ++ "suretiyle"} ;
WithoutVP vp = {s = vp.compl ++ vp.s ! Perf ! VInf Neg ++ "suretiyle"} ;
ByVP vp = {s = vp.compl ++ vp.s ! Perf ! VInf Pos ++ "suretiyle"} ;
InOrderToVP vp = {s = vp.compl ++ vp.s ! Perf ! VInf Pos ++ "için"} ;
MkVPS temp pol vp = {
s = \\agr => vp.compl ++ vp.s ! Perf ! VFin temp.t temp.a pol.p agr
} ;
BaseVPS x y = {s = \\a => table {4 => y.s ! a; _ => x.s ! a}} ;
ConsVPS x xs = {
s = \\a => table {4 => xs.s ! a ! 4; i => x.s ! a ++ "," ++ xs.s ! a ! i}
} ;
ConjVPS conj xs = {s = \\a => xs.s ! a ! conj.sep ++ conj.s ++ xs.s ! a ! 4} ;
PredVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
MkVPI vp = {s = vp.compl ++ vp.s ! Perf ! VInf Pos} ;
BaseVPI x y = {s = table {4 => y.s; _ => x.s}} ;
ConsVPI x xs = {s = table {4 => xs.s ! 4; i => x.s ++ "," ++ xs.s ! i}} ;
ConjVPI conj xs = {s = xs.s ! conj.sep ++ conj.s ++ xs.s ! 4} ;
ComplVPIVV vv vpi = {s = mkVerbForms vv; compl = vpi.s} ;
BaseComp x y = {
s = \\asp,vf => table {4 => y.s ! asp ! vf; _ => x.s ! asp ! vf}
} ;
ConsComp x xs = {
s = \\asp,vf => table {
4 => xs.s ! asp ! vf ! 4;
i => x.s ! asp ! vf ++ "," ++ xs.s ! asp ! vf ! i
}
} ;
ConjComp conj xs = {
s = \\asp,vf => xs.s ! asp ! vf ! conj.sep ++ conj.s ++ xs.s ! asp ! vf ! 4 ;
compl = []
} ;
BaseImp x y = {
s = \\p,n => table {4 => y.s ! p ! n; _ => x.s ! p ! n}
} ;
ConsImp x xs = {
s = \\p,n => table {4 => xs.s ! p ! n ! 4; i => x.s ! p ! n ++ "," ++ xs.s ! p ! n ! i}
} ;
ConjImp conj xs = {
s = \\p,n => xs.s ! p ! n ! conj.sep ++ conj.s ++ xs.s ! p ! n ! 4
} ;
ReflPron = {s = \\_,_ => "kendi"} ;
ReflPoss num cn = {s = \\agr,_ => cn.gen ! num.n ! agr} ;
PredetRNP pred rnp = {s = \\a,c => pred.s ++ rnp.s ! a ! c} ;
AdvRNP np prep rnp = {
s = \\a,c => np.s ! c ++ prep.s ++ rnp.s ! a ! c
} ;
ReflRNP vp rnp = {
s = mkVerbForms vp ;
compl = vp.compl ++ rnp.s ! (agrP3 Sg) ! vp.c.c ++ vp.c.s
} ;
AdvRVP vp prep rnp = vp ** {
compl = vp.compl ++ rnp.s ! (agrP3 Sg) ! prep.c ++ prep.s
} ;
AdvRAP ap prep rnp = ap ** {
s = \\n,c => rnp.s ! (agrP3 n) ! prep.c ++ prep.s ++ ap.s ! n ! c
} ;
ReflA2RNP ap rnp = ap ** {
s = \\n,c => rnp.s ! (agrP3 n) ! ap.c.c ++ ap.c.s ++ ap.s ! n ! c
} ;
PossPronRNP pron num cn rnp = {
s = \\c => pron.s ! Gen ++ cn.gen ! num.n ! pron.a ++ rnp.s ! pron.a ! c ;
h = cn.h ;
a = agrP3 num.n
} ;
Base_rr_RNP x y = {s = \\a,c => table {4 => y.s ! a ! c; _ => x.s ! a ! c}} ;
Base_nr_RNP x y = {s = \\a,c => table {4 => y.s ! a ! c; _ => x.s ! c}} ;
Base_rn_RNP x y = {s = \\a,c => table {4 => y.s ! c; _ => x.s ! a ! c}} ;
Cons_rr_RNP x xs = {
s = \\a,c => table {4 => xs.s ! a ! c ! 4; i => x.s ! a ! c ++ "," ++ xs.s ! a ! c ! i}
} ;
Cons_nr_RNP x xs = {
s = \\a,c => table {4 => xs.s ! a ! c ! 4; i => x.s ! c ++ "," ++ xs.s ! a ! c ! i}
} ;
ConjRNP conj xs = {s = \\a,c => xs.s ! a ! c ! conj.sep ++ conj.s ++ xs.s ! a ! c ! 4} ;
UseDAP dap = {
s = \\c => dap.s ! Sg ! c;
h = mkHar I_Har (SCon Soft);
a = agrP3 Sg
} ;
UseDAPMasc = UseDAP ;
UseDAPFem = UseDAP ;
ProgrVPSlash vp = vp ;
ApposNP np app = np ** {s = \\c => np.s ! c ++ "," ++ app.s ! Nom} ;
ComplSlashPartLast vp np = {
s = mkVerbForms vp ;
compl = vp.compl ++ np.s ! vp.c.c ++ vp.c.s
} ;
ComplBareVS vs sent = {s = mkVerbForms vs; compl = sent.s} ;
EmptyRelSlash cl = {
s = \\t,a,p,agr => cl.s ! t ! a ! p ++ "olan"
} ;
UttVPShort vp = {s = vp.s ! Perf ! VInf Pos} ; UttVPShort vp = {s = vp.s ! Perf ! VInf Pos} ;
UttAdV adv = {s = adv.s} ; UttAdV adv = {s = adv.s} ;
@@ -26,7 +180,7 @@ concrete ExtendTur of Extend = CatTur ** open ResTur, SuffixTur, Predef in {
aoristType = vps.aoristType ; aoristType = vps.aoristType ;
h = vps.h ; h = vps.h ;
} ; } ;
compl = [] compl = vps.compl
} ; } ;
PassAgentVPSlash vps np = { PassAgentVPSlash vps np = {
@@ -36,7 +190,15 @@ concrete ExtendTur of Extend = CatTur ** open ResTur, SuffixTur, Predef in {
aoristType = vps.aoristType ; aoristType = vps.aoristType ;
h = vps.h ; h = vps.h ;
} ; } ;
compl = np.s ! Acc ++ "tarafından" compl = np.s ! Nom ++ "tarafından" ++ vps.compl
} ;
oper
passiveVerb : Verb -> Verb = \v -> {
s = v.stems ! VPass ++ BIND ++ suffixStr v.h infinitiveSuffix;
stems = \\_ => v.stems ! VPass;
aoristType = v.aoristType;
h = v.h
} ; } ;
} }
+37 -8
View File
@@ -1,17 +1,46 @@
concrete IdiomTur of Idiom = CatTur ** open Prelude, ResTur, SuffixTur in { concrete IdiomTur of Idiom = CatTur ** open Prelude, ResTur, SuffixTur in {
lin lin
ImpersCl _ = variants {} ; ImpersCl vp = {
GenericCl _ = variants {} ; s = \\t,a,p => vp.compl ++ vp.s ! Perf ! VFin t a p (agrP3 Sg)
ExistNP _ = variants {} ; } ;
ExistIP _ = variants {} ; GenericCl vp = {
CleftNP _ _ = variants {} ; s = \\t,a,p => "insan" ++ vp.compl ++ vp.s ! Perf ! VFin t a p (agrP3 Sg)
CleftAdv _ _ = variants {} ; } ;
ImpPl1 _ = variants {} ; ExistNP np = {
s = \\t,a,p => np.s ! Nom ++ case <t,p> of {
<Pres,Pos> => "var" ;
<Pres,Neg> => "yok" ;
<_,Pos> => "var" ++ mkVerbForms olmak_V ! Perf ! VFin t a Pos (agrP3 Sg) ;
<_,Neg> => "yok" ++ mkVerbForms olmak_V ! Perf ! VFin t a Pos (agrP3 Sg)
}
} ;
ExistIP ip = {
s = \\t,a,p => ip.s ++ case p of {Pos => "var"; Neg => "yok"}
} ;
ExistNPAdv np adv = {
s = \\t,a,p => adv.s ++ (ExistNP np).s ! t ! a ! p
} ;
ExistIPAdv ip adv = {
s = \\t,a,p => adv.s ++ (ExistIP ip).s ! t ! a ! p
} ;
CleftNP np rs = {
s = \\t,a,p => rs.s ! np.a ++ np.s ! Nom
} ;
CleftAdv adv s = {
s = \\t,a,p => adv.s ++ s.s
} ;
ImpPl1 vp = {s = "hadi" ++ vp.compl ++ vp.s ! Perf ! VImp Pos Pl} ;
ImpP3 np vp = {s = np.s ! Nom ++ vp.compl ++ vp.s ! Perf ! VImp Pos Sg} ;
ProgrVP vp = vp ** { ProgrVP vp = vp ** {
s = \\asp,vform => vp.s ! Imperf ! vform s = \\asp,vform => vp.s ! Imperf ! vform
} ; } ;
} SelfAdvVP vp = vp ** {compl = vp.compl ++ "kendi"} ;
SelfAdVVP vp = vp ** {
s = \\asp,vf => "kendi" ++ vp.s ! asp ! vf
} ;
SelfNP np = np ** {s = \\c => np.s ! c ++ "kendi"} ;
}
+14
View File
@@ -22,4 +22,18 @@ lin UsePN pn = {
a = {n = pn.n; p = P3} a = {n = pn.n; p = P3}
} ; } ;
lin UseLN ln = {
s = ln.s;
h = ln.h;
a = {n = ln.n; p = P3}
} ;
lin PlainLN = UseLN ;
lin InLN ln = {s = ln.s ! Loc} ;
lin AdjLN ap ln = ln ** {
s = \\c => ap.s ! Sg ! Nom ++ ln.s ! c
} ;
} }
+9 -51
View File
@@ -65,56 +65,14 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, ParamX,
MassNP cn = { MassNP cn = {
s = cn.s ! Sg; s = cn.s ! Sg;
h = cn.h; h = cn.h;
a = { n = Sg; p = P1 } a = { n = Sg; p = P3 }
} ; } ;
ComplN2 f x = ComplN2 f x = {
case f.c.c of { s = \\n,c => x.s ! f.c.c ++ f.c.s ++ f.s ! n ! c ;
Nom => { gen = \\n,a => x.s ! f.c.c ++ f.c.s ++ f.gen ! n ! a ;
s = \\n, c => x.s ! Gen ++ f.s ! n ! Acc;
gen = \\_, _ => "TODO";
h = f.h h = f.h
} ; } ;
Acc => {
s = \\_,_ => "TODO";
gen = \\_, _ => "TODO";
h = f.h};
Gen => {
s =
\\n, c =>
x.s ! Gen ++ f.gen ! n ! {n = Sg; p = P3}
++ BIND ++ (caseSuffixes ! c).st ! f.h.con ! f.h.vow;
gen = \\_, _ => "TODO";
h = f.h
};
Dat => {
s = \\n, c =>
x.s ! Gen ++ f.gen ! n ! {n = Sg; p = P3}
++ datSuffixN.st ! f.h.con ! f.h.vow;
gen = \\_, _ => "TODO";
h = f.h
};
Loc => {
s = \\_,_ => "TODO";
gen = \\_, _ => "TODO";
h = f.h
};
Ablat => {
s = \\_,_ => "TODO";
gen = \\_, _ => "TODO";
h = f.h
};
Abess _ => {
s = \\_,_ => "TODO";
gen = \\_, _ => "TODO";
h = f.h
};
Instr => {
s = \\_,_ => "TODO";
gen = \\_, _ => "TODO";
h = f.h
}
};
AdjCN ap cn = { AdjCN ap cn = {
@@ -172,7 +130,7 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, ParamX,
DetNP det = { DetNP det = {
s = \\c => det.s ; s = \\c => det.s ;
h = {vow=I_Har; con=SCon Soft} ; -- to be fixed h = {vow=I_Har; con=SCon Soft} ; -- to be fixed
a = {n = det.n ; p = P1} a = {n = det.n ; p = P3}
} ; } ;
ExtAdvNP np adv = { ExtAdvNP np adv = {
@@ -212,8 +170,8 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, ParamX,
} ; } ;
PossNP cn np = { PossNP cn np = {
s = \\n,c => np.s ! Gen ++ cn.s ! n ! c ; s = \\n,c => np.s ! Gen ++ cn.gen ! n ! np.a ;
gen = cn.gen ; gen = \\n,a => np.s ! Gen ++ cn.gen ! n ! a ;
h = cn.h h = cn.h
} ; } ;
@@ -226,8 +184,8 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, ParamX,
} ; } ;
SentCN cn sc = { SentCN cn sc = {
s = \\n,c => "(TODO: SentCN)" ; s = \\n,c => sc.s ++ cn.s ! n ! c ;
gen = cn.gen ; gen = \\n,a => sc.s ++ cn.gen ! n ! a ;
h = cn.h h = cn.h
} ; } ;
+36
View File
@@ -52,7 +52,43 @@ lin pot3plus n m = {s = \\t,num,c => case n.n of {
} ++ "bin" ++ m.s ! t ! num ! c; n = Pl} ; } ++ "bin" ++ m.s ! t ! num ! c; n = Pl} ;
lin pot3as4 n = n ; lin pot3as4 n = n ;
lin pot41 = {
s = \\t,num,c => "bir" ++ (mkNum "milyon" "milyon").s ! unit ! t ! num ! c;
n = Pl
} ;
lin pot4 n = {
s = \\t,num,c => n.s ! NCard ! Sg ! Nom ++
(mkNum "milyon" "milyon").s ! unit ! t ! num ! c;
n = Pl
} ;
lin pot4plus n m = {
s = \\t,num,c => n.s ! NCard ! Sg ! Nom ++ "milyon" ++ m.s ! t ! num ! c;
n = Pl
} ;
lin pot4as5 n = n ; lin pot4as5 n = n ;
lin pot4decimal d = {
s = \\t,num,c => d.s ! NCard ! Sg ! Nom ++
(mkNum "milyon" "milyon").s ! unit ! t ! num ! c;
n = Pl
} ;
lin pot51 = {
s = \\t,num,c => "bir" ++ (mkNum "milyar" "milyar").s ! unit ! t ! num ! c;
n = Pl
} ;
lin pot5 n = {
s = \\t,num,c => n.s ! NCard ! Sg ! Nom ++
(mkNum "milyar" "milyar").s ! unit ! t ! num ! c;
n = Pl
} ;
lin pot5plus n m = {
s = \\t,num,c => n.s ! NCard ! Sg ! Nom ++ "milyar" ++ m.s ! t ! num ! c;
n = Pl
} ;
lin pot5decimal d = {
s = \\t,num,c => d.s ! NCard ! Sg ! Nom ++
(mkNum "milyar" "milyar").s ! unit ! t ! num ! c;
n = Pl
} ;
lincat lincat
+23 -13
View File
@@ -1,19 +1,29 @@
concrete QuestionTur of Question = CatTur ** open ResTur, Prelude in { concrete QuestionTur of Question = CatTur ** open ResTur, Prelude in {
lin lin
AdvIAdv _ _ = variants {} ; AdvIAdv iadv adv = {s = adv.s ++ iadv.s} ;
AdvIP _ _ = variants {} ; AdvIP ip adv = {s = adv.s ++ ip.s} ;
PrepIP _ _ = variants {} ; PrepIP prep ip = {s = ip.s ++ prep.s} ;
CompIP _ = variants {} ; CompIP ip = {s = ip.s} ;
CompIAdv _ = variants {} ; CompIAdv adv = {s = adv.s} ;
IdetQuant _ _ = variants {} ; IdetQuant iq num = {s = iq.s ++ num.s ! Sg ! Nom} ;
IdetCN _ _ = variants {} ; IdetCN idet cn = {s = idet.s ++ cn.s ! Sg ! Nom} ;
IdetIP _ = variants {} ; IdetIP idet = {s = idet.s} ;
QuestIComp _ _ = variants {} ; QuestIComp ic np = {
QuestIAdv _ _ = variants {} ; s = \\t,a,p => np.s ! Nom ++ ic.s ++ "mi"
QuestSlash _ _ = variants {} ; } ;
QuestVP _ _ = variants {} ; QuestIAdv iadv cl = {
QuestCl _ = variants {} ; s = \\t,a,p => iadv.s ++ cl.s ! t ! a ! p
} ;
QuestSlash ip cl = {
s = \\t,a,p => ip.s ++ cl.s ! t ! a ! p
} ;
QuestVP ip vp = {
s = \\t,a,p => ip.s ++ vp.compl ++ vp.s ! Perf ! VFin t a p (agrP3 Sg)
} ;
QuestCl cl = {
s = \\t,a,p => cl.s ! t ! a ! p ++ "mi"
} ;
} }
+9 -3
View File
@@ -1,7 +1,9 @@
concrete RelativeTur of Relative = CatTur ** open ResTur in { concrete RelativeTur of Relative = CatTur ** open ResTur in {
lin lin
RelCl = variants {} ; RelCl cl = {
s = \\t,a,p,agr => cl.s ! t ! a ! p ++ "olan"
} ;
RelVP rp vp = { RelVP rp vp = {
s = \\t,a,p,agr => s = \\t,a,p,agr =>
@@ -15,9 +17,13 @@ lin
} ; } ;
} ; } ;
RelSlash = variants {} ; RelSlash rp cl = {
s = \\t,a,p,agr => rp.s ! agr ++ cl.s ! t ! a ! p ++ "olan"
} ;
FunRP = variants {} ; FunRP prep np rp = {
s = \\agr => np.s ! prep.c ++ prep.s ++ rp.s ! agr
} ;
IdRP = {s = \\_ => []} ; IdRP = {s = \\_ => []} ;
+31 -11
View File
@@ -3,24 +3,33 @@ concrete SentenceTur of Sentence = CatTur ** open Prelude, ResTur in {
lin lin
PredVP np vp = {s = \\t,a,p => np.s ! Nom ++ vp.compl ++ vp.s ! Perf ! VFin t a p np.a} ; PredVP np vp = {s = \\t,a,p => np.s ! Nom ++ vp.compl ++ vp.s ! Perf ! VFin t a p np.a} ;
PredSCVP sc vp = variants {} ; PredSCVP sc vp = {
s = \\t,a,p => sc.s ++ vp.compl ++ vp.s ! Perf ! VFin t a p (agrP3 Sg)
} ;
-- TODO: Check how correct this is. EmbedVP vp = {s = vp.compl ++ vp.s ! Perf ! VInf Pos} ;
EmbedVP vp = variants {} ; -- {s = (vp.s ! Gerund Sg Acc)} ;
UseCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! temp.a ! pol.p} ; UseCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! temp.a ! pol.p} ;
UseQCl _ _ = variants {} ; UseQCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! temp.a ! pol.p} ;
UseRCl temp pol cl = {s = \\agr => temp.s ++ pol.s ++ cl.s ! temp.t ! temp.a ! pol.p ! agr} ; UseRCl temp pol cl = {s = \\agr => temp.s ++ pol.s ++ cl.s ! temp.t ! temp.a ! pol.p ! agr} ;
SlashVP _ _ = variants {} ; SlashVP np vp = {
AdvSlash _ _ = variants {} ; s = \\t,a,p => np.s ! Nom ++ vp.compl ++ mkVerbForms vp ! Perf ! VFin t a p np.a ;
SlashPrep _ _ = variants {} ; c = vp.c
SlashVS v = variants {} ; } ;
AdvSlash cl adv = cl ** {
s = \\t,a,p => cl.s ! t ! a ! p ++ adv.s
} ;
SlashPrep cl prep = cl ** {c = prep} ;
SlashVS np v ss = {
s = \\t,a,p => np.s ! Nom ++ ss.s ++ mkVerbForms v ! Perf ! VFin t a p np.a ;
c = ss.c
} ;
EmbedQS _ = variants {} ; EmbedQS q = {s = q.s} ;
EmbedS _ = variants {} ; EmbedS s = {s = s.s} ;
ImpVP vp = {s = \\p,n => vp.compl ++ vp.s ! Perf ! VImp p n ImpVP vp = {s = \\p,n => vp.compl ++ vp.s ! Perf ! VImp p n
} ; } ;
@@ -29,6 +38,17 @@ concrete SentenceTur of Sentence = CatTur ** open Prelude, ResTur in {
s = adv.s ++ s.s s = adv.s ++ s.s
} ; } ;
UseSlash _ = variants {} ; ExtAdvS adv s = {s = adv.s ++ "," ++ s.s} ;
SSubjS s1 subj s2 = {s = s1.s ++ "," ++ subj.s ++ s2.s} ;
AdvImp adv imp = {
s = \\p,n => adv.s ++ imp.s ! p ! n
} ;
UseSlash temp pol cl = {
s = temp.s ++ pol.s ++ cl.s ! temp.t ! temp.a ! pol.p ;
c = cl.c
} ;
} }
+2 -2
View File
@@ -125,7 +125,7 @@ concrete StructuralTur of Structural = CatTur **
-- TODO: this does not straightforwardly translate to Turkish which does -- TODO: this does not straightforwardly translate to Turkish which does
-- not have a "when" as a subordinating conjunction. -- not have a "when" as a subordinating conjunction.
when_Subj = {s = "[TODO]"} ; when_Subj = {s = "ne zaman"} ;
because_Subj = {s = "çünkü"} ; because_Subj = {s = "çünkü"} ;
@@ -235,7 +235,7 @@ concrete StructuralTur of Structural = CatTur **
-- TODO: this depends on the linearization for `ComplVV` and is really a -- TODO: this depends on the linearization for `ComplVV` and is really a
-- morphological construct so it might be a bit tricky to implement. -- morphological construct so it might be a bit tricky to implement.
want_VV = variants {} ; want_VV = mkVV (mkV "istemek") ;
whatPl_IP = { s = "neler" } ; whatPl_IP = { s = "neler" } ;
+63 -23
View File
@@ -4,31 +4,56 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur
UseV v = {s = mkVerbForms v; compl = []} ; UseV v = {s = mkVerbForms v; compl = []} ;
SlashV2a v = v ** {compl = []} ; SlashV2a v = v ** {compl = []} ;
Slash2V3 v = variants {} ; Slash2V3 v np = v ** {
Slash3V3 v = variants {} ; compl = np.s ! v.c1.c ++ v.c1.s ;
SlashV2A v = variants {} ; c = v.c2
SlashV2V v = variants {} ; } ;
SlashV2S v = variants {} ; Slash3V3 v np = v ** {
SlashV2Q v = variants {} ; compl = np.s ! v.c2.c ++ v.c2.s ;
SlashVV v = variants {} ; c = v.c1
SlashV2VNP = variants {} ; } ;
SlashV2A v ap = v ** {
compl = ap.s ! Sg ! Nom ;
c = v.c
} ;
SlashV2V v vp = v ** {
compl = vp.compl ++ vp.s ! Perf ! VInf Pos ;
c = v.c
} ;
SlashV2S v s = v ** {compl = s.s ; c = v.c} ;
SlashV2Q v q = v ** {compl = q.s ; c = v.c} ;
SlashVV v vp = v ** {
compl = vp.compl ++ mkVerbForms vp ! Perf ! VInf Pos ;
c = vp.c
} ;
SlashV2VNP v np vp = v ** {
compl = np.s ! v.c.c ++ v.c.s ++ vp.compl ;
c = vp.c
} ;
ComplSlash vps np = { ComplSlash vps np = {
s = mkVerbForms vps ; s = mkVerbForms vps ;
compl = vps.compl ++ vps.c.s ++ np.s ! vps.c.c ; compl = vps.compl ++ np.s ! vps.c.c ++ vps.c.s ;
} ; } ;
-- TODO: test this and fix. ComplVS vs s = {s = mkVerbForms vs ; compl = s.s} ;
ComplVS vs s = variants {} ; {- vs ** {
compl = s.subord
} ; -}
ComplVA _ _ = variants {} ; ComplVA va ap = {
ComplVV _ _ = variants {} ; s = mkVerbForms va ;
ComplVQ _ _ = variants {} ; compl = ap.s ! Sg ! Nom
} ;
ComplVV vv vp = {
s = mkVerbForms vv ;
compl = vp.compl ++ vp.s ! Perf ! VInf Pos
} ;
ComplVQ vq q = {s = mkVerbForms vq ; compl = q.s} ;
UseComp comp = comp ** {compl = []} ; UseComp comp = comp ** {compl = []} ;
CompCN _ = variants {} ; CompCN cn = CompNP {
s = cn.s ! Sg;
h = cn.h;
a = agrP3 Sg
} ;
CompNP np = { CompNP np = {
s = \\asp,vform => s = \\asp,vform =>
@@ -62,10 +87,10 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur
CompAP ap = { CompAP ap = {
s = \\asp,vform => s = \\asp,vform =>
case <asp,vform> of { case <asp,vform> of {
<_,VImp p n> => ap.s ! n ! Nom ++ <_,VImp p n> => ap.s ! Sg ! Nom ++
mkVerbForms olmak_V ! asp ! (VImp p n) ; mkVerbForms olmak_V ! asp ! (VImp p n) ;
<Perf,VFin Pres Simul p agr> => <Perf,VFin Pres Simul p agr> =>
ap.s ! agr.n ! Nom ++ ap.s ! Sg ! Nom ++
case <agr,p> of { case <agr,p> of {
<{n=Sg; p=P3},Pos> => [] ; <{n=Sg; p=P3},Pos> => [] ;
<{n=Sg; p=P3},Neg> => BIND ++ suffixStr ap.h negativeSuffix ; <{n=Sg; p=P3},Neg> => BIND ++ suffixStr ap.h negativeSuffix ;
@@ -80,14 +105,14 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur
in suffixStr negHar (verbSuffixes ! agr)) in suffixStr negHar (verbSuffixes ! agr))
} ; } ;
<Perf,VFin Past Simul p agr> => <Perf,VFin Past Simul p agr> =>
ap.s ! agr.n ! Nom ++ BIND ++ ap.s ! Sg ! Nom ++ BIND ++
case p of { case p of {
Pos => [] ; Pos => [] ;
Neg => suffixStr ap.h negativeSuffix Neg => suffixStr ap.h negativeSuffix
} + } +
suffixStr ap.h (alethicCopulaSuffixes ! agr) ; suffixStr ap.h (alethicCopulaSuffixes ! agr) ;
<_,VFin t a p agr> => <_,VFin t a p agr> =>
ap.s ! agr.n ! Nom ++ ap.s ! Sg ! Nom ++
mkVerbForms olmak_V ! asp ! vform ; mkVerbForms olmak_V ! asp ! vform ;
_ => ap.s ! Sg ! Nom ++ _ => ap.s ! Sg ! Nom ++
mkVerbForms olmak_V ! asp ! vform mkVerbForms olmak_V ! asp ! vform
@@ -95,9 +120,15 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur
compl = [] compl = []
} ; } ;
CompAdv _ = variants {} ; CompAdv adv = {
s = \\asp,vform => adv.s ++ mkVerbForms olmak_V ! asp ! vform ;
compl = []
} ;
ReflVP = variants {} ; ReflVP vps = {
s = mkVerbForms vps ;
compl = vps.compl ++ "kendini" ++ vps.c.s
} ;
AdvVP vp adv = vp ** { AdvVP vp adv = vp ** {
compl = vp.compl ++ adv.s ; compl = vp.compl ++ adv.s ;
@@ -119,6 +150,15 @@ concrete VerbTur of Verb = CatTur ** open Prelude, ResTur, SuffixTur, HarmonyTur
compl = vp.compl ++ adv.s ; compl = vp.compl ++ adv.s ;
} ; } ;
VPSlashPrep vp prep = {
s = olmak_V.s;
stems = olmak_V.stems;
aoristType = olmak_V.aoristType;
h = olmak_V.h;
compl = vp.compl ++ vp.s ! Perf ! VInf Pos;
c = prep
} ;
PassV2 v = { PassV2 v = {
s = mkVerbForms { s = mkVerbForms {
s = v.stems ! VPass ++ BIND ++ suffixStr v.h infinitiveSuffix ; s = v.stems ! VPass ++ BIND ++ suffixStr v.h infinitiveSuffix ;