diff --git a/next-lib/src/turkish/CatTur.gf b/next-lib/src/turkish/CatTur.gf new file mode 100644 index 000000000..9de9db5c9 --- /dev/null +++ b/next-lib/src/turkish/CatTur.gf @@ -0,0 +1,13 @@ +concrete CatTur of Cat = CommonX ** open ResTur, Prelude in { + + flags optimize=all_subs ; + + lincat + +-- Noun + NP, Pron = {s : Case => Str ; a : Agr} ; + +-- Open lexical classes, e.g. Lexicon + V, VS, VQ, VA = Verb ; + N = {s : Number => Case => Str} ; +} diff --git a/next-lib/src/turkish/GrammarTur.gf b/next-lib/src/turkish/GrammarTur.gf new file mode 100644 index 000000000..e61e55718 --- /dev/null +++ b/next-lib/src/turkish/GrammarTur.gf @@ -0,0 +1,9 @@ +--# -path=.:../abstract:../common:prelude + +concrete GrammarTur of Grammar = + NumeralTur + ** { + +flags startcat = Phr ; unlexer = text ; lexer = text ; + +} ; diff --git a/next-lib/src/turkish/LangTur.gf b/next-lib/src/turkish/LangTur.gf new file mode 100644 index 000000000..1f7c912e8 --- /dev/null +++ b/next-lib/src/turkish/LangTur.gf @@ -0,0 +1,10 @@ +--# -path=.:../abstract:../common:prelude + +concrete LangTur of Lang = + GrammarTur, + LexiconTur + ** { + +flags startcat = Phr ; unlexer = text ; lexer = text ; coding=utf8 ; + +} ; diff --git a/next-lib/src/turkish/LexiconTur.gf b/next-lib/src/turkish/LexiconTur.gf new file mode 100644 index 000000000..20b1d5f54 --- /dev/null +++ b/next-lib/src/turkish/LexiconTur.gf @@ -0,0 +1,11 @@ +--# -path=.:prelude + +concrete LexiconTur of Lexicon = CatTur ** + open ResTur, ParadigmsTur, Prelude in { + +lin + come_V = regV "gelmek" ; + go_V = regV "gitmek" ; + run_V = regV "koşmek" ; + stop_V = regV "durmak" ; +} ; diff --git a/next-lib/src/turkish/NumeralTur.gf b/next-lib/src/turkish/NumeralTur.gf new file mode 100644 index 000000000..dbee7d3da --- /dev/null +++ b/next-lib/src/turkish/NumeralTur.gf @@ -0,0 +1,34 @@ +concrete NumeralTur of Numeral = CatTur ** open ResTur in { + +lincat + Digit = {s : DForm => Str} ; + Sub10 = {s : DForm => Str ; n : Number} ; + Sub100 = {s : Str ; n : Number} ; + Sub1000 = {s : Str ; n : Number} ; + Sub1000000 = {s : Str ; n : Number} ; + +lin num x = x ; + +lin n2 = mkNum "iki" "yirmi" ; +lin n3 = mkNum "üç" "otuz" ; +lin n4 = mkNum "dört" "kırk" ; +lin n5 = mkNum "beş" "elli" ; +lin n6 = mkNum "altı" "altmış" ; +lin n7 = mkNum "yedi" "yetmiş" ; +lin n8 = mkNum "sekiz" "seksen" ; +lin n9 = mkNum "dokuz" "doksan" ; +lin pot01 = mkNum "bir" "on" ** {n = Sg} ; +lin pot0 d = d ** {n = Pl} ; +lin pot110 = {s="on"; n = Pl} ; +lin pot111 = {s="on" ++ "&+" ++ "bir"; n = Pl} ; +lin pot1to19 d = {s = "on" ++ "&+" ++ d.s ! unit; n = Pl} ; +lin pot0as1 n = {s = n.s ! unit; n = n.n} ; +lin pot1 d = {s = d.s ! ten; n = Pl} ; +lin pot1plus d e = {s = d.s ! ten ++ e.s ! unit ; n = Pl} ; +lin pot1as2 n = n ; +lin pot2 d = {s = d.s ! unit ++ "&+" ++ "yüz"; n = Pl} ; +lin pot2plus d e = {s = d.s ! unit ++ "&+" ++ "yüz" ++ e.s ; n = Pl} ; +lin pot2as3 n = n ; +lin pot3 n = {s = n.s ++ "&+" ++ "bin" ; n = Pl} ; +lin pot3plus n m = {s = n.s ++ "&+" ++ "bin" ++ "&+" ++ m.s; n = Pl} ; +} diff --git a/next-lib/src/turkish/ParadigmsTur.gf b/next-lib/src/turkish/ParadigmsTur.gf new file mode 100644 index 000000000..102098c8c --- /dev/null +++ b/next-lib/src/turkish/ParadigmsTur.gf @@ -0,0 +1,43 @@ +resource ParadigmsTur = open + Predef, + Prelude, + ResTur + in { + +oper + regV : Str -> Verb = \inf -> + let base : Str + = case inf of { + base+"mak" => base ; + base+"mek" => base + } + in { s = table { + VPres Sg P1 => harmony4 (harmony4 base "iyor") "im" ; + VPres Sg P2 => harmony4 (harmony4 base "iyor") "sin" ; + VPres Sg P3 => harmony4 base "iyor" ; + VPres Pl P1 => harmony4 (harmony4 base "iyor") "iz" ; + VPres Pl P2 => harmony4 (harmony4 (harmony4 base "iyor") "sin") "iz" ; + VPres Pl P3 => harmony4 (harmony4 base "iyor") "ler" ; + VPast Sg P1 => harmony4 base "dim" ; + VPast Sg P2 => harmony4 base "din" ; + VPast Sg P3 => harmony4 base "di" ; + VPast Pl P1 => harmony4 base "dik" ; + VPast Pl P2 => harmony4 (harmony4 base "din") "iz" ; + VPast Pl P3 => harmony4 base "diler" ; + VFuture Sg P1 => harmony4 (harmony2 base "ecek") "im" ; + VFuture Sg P2 => harmony4 (harmony2 base "ecek") "sin" ; + VFuture Sg P3 => harmony2 base "ecek" ; + VFuture Pl P1 => harmony4 (harmony2 base "ecek") "iz" ; + VFuture Pl P2 => harmony4 (harmony2 base "ecek") "siniz" ; + VFuture Pl P3 => harmony4 (harmony2 base "ecek") "ler" ; + VAorist Sg P1 => harmony4 base "im" ; + VAorist Sg P2 => harmony4 base "sin" ; + VAorist Sg P3 => base ; + VAorist Pl P1 => harmony4 base "iz" ; + VAorist Pl P2 => harmony4 (harmony4 base "sin") "iz" ; + VAorist Pl P3 => harmony4 base "ler" ; + VImperative => base ; + VInfinitive => inf + } + } ; +} \ No newline at end of file diff --git a/next-lib/src/turkish/ResTur.gf b/next-lib/src/turkish/ResTur.gf new file mode 100644 index 000000000..1fc1a8157 --- /dev/null +++ b/next-lib/src/turkish/ResTur.gf @@ -0,0 +1,106 @@ +--# -path=.:../abstract:../common:../../prelude + +resource ResTur = ParamX ** open Prelude, Predef in { + +--2 For $Noun$ + + param + Case = Nom | Acc | Dat | Gen | Loc | Ablat | Abess ; + + Species = Indef | Def ; + + VForm = + VPres Number Person + | VPast Number Person + | VFuture Number Person + | VAorist Number Person + | VImperative + | VInfinitive + ; + + oper + Agr = {n : Number ; p : Person} ; + +-- For $Verb$. + + Verb : Type = { + s : VForm => Str + } ; + +--2 For $Numeral$ + param + DForm = unit | ten ; + +-- For $Numeral$. + oper + mkNum : Str -> Str -> {s : DForm => Str} = + \two, twenty -> + {s = table { + unit => two ; + ten => twenty + } + } ; + + mkNP : (ben,beni,bana,banin,bende,benden:Str) -> Number -> Person -> + {s : Case => Str ; a : Agr} = + \ben,beni,bana,banin,bende,benden,n,p -> { + s = table { + Nom => ben ; + Acc => beni ; + Dat => bana ; + Gen => banin ; + Loc => bende ; + Abl => benden + } ; + a = {n=n; p=p} ; + } ; + + oper + harmony4 : Str -> Str -> Str + = \base,suffix0 -> + let c : Str = + case base of { + _+c@("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö")+ + ("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")* => c ; + _ => error "harmony4" + } ; + h : Str = + case c of { + ("ı"|"a") => "ı" ; + ("i"|"e") => "i" ; + ("u"|"o") => "u" ; + ("ü"|"ö") => "ü" + } ; + suffix : Str = + case suffix0 of { + s1@(("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")*) + + ("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö") + +s2 => s1+h+s2 ; + s => s + } + in base + suffix ; + + harmony2 : Str -> Str -> Str + = \base,suffix0 -> + let c : Str = + case base of { + _+c@("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö")+ + ("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")* => c ; + _ => error "harmony4" + } ; + h : Str = + case c of { + ("ı"|"a") => "ı" ; + ("i"|"e") => "i" ; + ("u"|"o") => "u" ; + ("ü"|"ö") => "ü" + } ; + suffix : Str = + case suffix0 of { + s1@(("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h")*) + + ("ı"|"a"|"i"|"e"|"u"|"o"|"ü"|"ö") + +s2 => s1+h+s2 ; + s => s + } + in base + suffix ; +} diff --git a/next-lib/src/turkish/StructuralTur.gf b/next-lib/src/turkish/StructuralTur.gf new file mode 100644 index 000000000..ee27b2a1a --- /dev/null +++ b/next-lib/src/turkish/StructuralTur.gf @@ -0,0 +1,16 @@ +concrete StructuralTur of Structural = CatTur ** { + + flags optimize=all ; + + lin + he_Pron = mkNP "o" "onu" "ona" "onun" "onda" "ondan" Sg P3 ; + i_Pron = mkNP "ben" "beni" "bana" "banim" "bende" "benden" Sg P1 ; + it_Pron = mkNP "o" "onu" "ona" "onun" "onda" "ondan" Sg P3 ; + she_Pron = mkNP "o" "onu" "ona" "onun" "onda" "ondan" Sg P3 ; + they_Pron = mkNP "onlar" "onları" "onlara" "onların" "onlarda" "onlardan" Pl P3 ; + we_Pron = mkNP "biz" "bizi" "bize" "bizim" "bizde" "bizden" Pl P1 ; + youSg_Pron = mkNP "sen" "seni" "sana" "senin" "sende" "senden" Sg P2 ; + youPl_Pron = mkNP "siz" "sizi" "size" "sizin" "sizde" "sizden" Pl P2 ; + youPol_Pron = mkNP "siz" "sizi" "size" "sizin" "sizde" "sizden" Pl P2 ; +} +