diff options
Diffstat (limited to 'examples/foods/FoodsTur.gf')
| -rw-r--r-- | examples/foods/FoodsTur.gf | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/examples/foods/FoodsTur.gf b/examples/foods/FoodsTur.gf new file mode 100644 index 000000000..9d6cd0350 --- /dev/null +++ b/examples/foods/FoodsTur.gf @@ -0,0 +1,140 @@ +{- + File : FoodsTur.gf + Author : Server Çimen + Version : 1.0 + Created on: August 26, 2009 + + This file contains concrete grammar of Foods abstract grammar for Turkish Language. + This grammar is to be used for Fridge demo and developed in the scope of GF Resource + Grammar Summer School. + +-} + +concrete FoodsTur of Foods = open Predef in { + flags + coding=utf8 ; + lincat + Comment = {s : Str} ; + Quality = {s : Str ; c : Case; softness : Softness; h : Harmony} ; + Kind = {s : Case => Number => Str} ; + Item = {s : Str; n : Number} ; + lin + This = det Sg "bu" ; + That = det Sg "şu" ; + These = det Pl "bu" ; + Those = det Pl "şu" ; + -- Reason for excluding plural form of copula: In Turkish if subject is not a human being, + -- then singular form of copula is used regardless of the number of subject. Since all + -- possible subjects are non human, copula do not need to have plural form. + Pred item quality = {s = item.s ++ quality.s ++ "&+" ++ copula ! quality.softness ! quality.h} ;--! item.n} ; + Mod quality kind = {s = case quality.c of { + Nom => \\t,n => quality.s ++ kind.s ! t ! n ; + Gen => \\t,n => quality.s ++ kind.s ! Gen ! n + } + } ; + Wine = mkN "şarap" "şaraplar" "şarabı" "şarapları" ; + Cheese = mkN "peynir" "peynirler" "peyniri" "peynirleri" ; + Fish = mkN "balık" "balıklar" "balığı" "balıkları" ; + Pizza = mkN "pizza" "pizzalar" "pizzası" "pizzaları" ; + Very a = {s = "çok" ++ a.s ; c = a.c; softness = a.softness; h = a.h} ; + Fresh = adj "taze" Nom; + Warm = adj "ılık" Nom; + Italian = adj "İtalyan" Gen ; + Expensive = adj "pahalı" Nom; + Delicious = adj "lezzetli" Nom; + Boring = adj "sıkıcı" Nom; + param + Number = Sg | Pl ; + Case = Nom | Gen ; + Harmony = I_Har | Ih_Har | U_Har | Uh_Har ; --Ih = İ; Uh = Ü + Softness = Soft | Hard ; + oper + det : Number -> Str -> {s : Case => Number => Str} -> {s : Str; n : Number} = + \num,det,noun -> {s = det ++ noun.s ! Nom ! num; n = num} ; + mkN = overload { + mkN : Str -> Str -> {s : Case => Number => Str} = regNoun ; + mkn : Str -> Str -> Str -> Str-> {s : Case => Number => Str} = noun ; + } ; + regNoun : Str -> Str -> {s : Case => Number => Str} = + \peynir,peynirler -> noun peynir peynirler [] [] ; + noun : Str -> Str -> Str -> Str-> {s : Case => Number => Str} = + \sarap,saraplar,sarabi,saraplari -> { + s = table { + Nom => table { + Sg => sarap ; + Pl => saraplar + } ; + Gen => table { + Sg => sarabi ; + Pl => saraplari + } + } + }; + {- + Since there is a bug in overloading, this overload is useless. + + mkA = overload { + mkA : Str -> {s : Str; c : Case; softness : Softness; h : Harmony} = \base -> adj base Nom ; + mkA : Str -> Case -> {s : Str; c : Case; softness : Softness; h : Harmony} = adj ; + } ; + -} + adj : Str -> Case -> {s : Str; c : Case; softness : Softness; h : Harmony} = + \italyan,ca -> {s = italyan ; c = ca; softness = (getSoftness italyan); h = (getHarmony italyan)} ; + -- See the comment at lines 26 and 27 for excluded plural form of copula. + copula : Softness => Harmony {-=> Number-} => Str = + table { + Soft => table { + I_Har => "dır" ;--table { + -- Sg => "dır" ; + -- Pl => "dırlar" + --} ; + Ih_Har => "dir" ;--table { + --Sg => "dir" ; + --Pl => "dirler" + --} ; + U_Har => "dur" ;--table { + -- Sg => "dur" ; + -- Pl => "durlar" + --} ; + Uh_Har => "dür" --table { + --Sg => "dür" ; + --Pl => "dürler" + --} + } ; + Hard => table { + I_Har => "tır" ;--table { + --Sg => "tır" ; + --Pl => "tırlar" + --} ; + Ih_Har => "tir" ;--table { + --Sg => "tir" ; + --Pl => "tirler" + --} ; + U_Har => "tur" ;--table { + -- Sg => "tur" ; + -- Pl => "turlar" + --} ; + Uh_Har => "tür"--table { + --Sg => "tür" ; + --Pl => "türler" + --} + } + } ; + + getHarmony : Str -> Harmony + = \base -> 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")* => + case c of { + ("ı"|"a") => I_Har ; + ("i"|"e") => Ih_Har ; + ("u"|"o") => U_Har ; + ("ü"|"ö") => Uh_Har + } + } ; + getSoftness : Str -> Softness + = \base -> case base of { + _+("f"|"s"|"t"|"k"|"ç"|"ş"|"h"|"p") => Hard ; + _ => Soft + } ; +}
\ No newline at end of file |
