summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2009-08-29 17:36:15 +0000
committeraarne <aarne@chalmers.se>2009-08-29 17:36:15 +0000
commitdb59a4ac724af4898a50bda0ecc94487b9353c66 (patch)
tree69c90825c63a8b7268d1615ce02cc5ae2983236a /contrib
parentf34dd228eb122680f9f52f115443f8459f203883 (diff)
food grammars added, with copyright statements
Diffstat (limited to 'contrib')
-rw-r--r--contrib/summerschool/foods/Foods.gf2
-rw-r--r--contrib/summerschool/foods/FoodsAfr.gf76
-rw-r--r--contrib/summerschool/foods/FoodsBul.gf43
-rw-r--r--contrib/summerschool/foods/FoodsCat.gf7
-rw-r--r--contrib/summerschool/foods/FoodsDut.gf58
-rw-r--r--contrib/summerschool/foods/FoodsEng.gf42
-rw-r--r--contrib/summerschool/foods/FoodsEpo.gf48
-rw-r--r--contrib/summerschool/foods/FoodsFas.gf64
-rw-r--r--contrib/summerschool/foods/FoodsFin.gf7
-rw-r--r--contrib/summerschool/foods/FoodsGer.gf7
-rw-r--r--contrib/summerschool/foods/FoodsHeb.gf85
-rw-r--r--contrib/summerschool/foods/FoodsHin.gf75
-rw-r--r--contrib/summerschool/foods/FoodsI.gf29
-rw-r--r--contrib/summerschool/foods/FoodsIce.gf85
-rw-r--r--contrib/summerschool/foods/FoodsIta.gf8
-rw-r--r--contrib/summerschool/foods/FoodsJpn.gf72
-rw-r--r--contrib/summerschool/foods/FoodsLav.gf91
-rw-r--r--contrib/summerschool/foods/FoodsMlt.gf103
-rw-r--r--contrib/summerschool/foods/FoodsMon.gf49
-rw-r--r--contrib/summerschool/foods/FoodsPor.gf77
-rw-r--r--contrib/summerschool/foods/FoodsRon.gf72
-rw-r--r--contrib/summerschool/foods/FoodsSwe.gf7
-rw-r--r--contrib/summerschool/foods/FoodsTsn.gf178
-rw-r--r--contrib/summerschool/foods/FoodsTur.gf140
-rw-r--r--contrib/summerschool/foods/LexFoods.gf15
-rw-r--r--contrib/summerschool/foods/LexFoodsCat.gf18
-rw-r--r--contrib/summerschool/foods/LexFoodsFin.gf16
-rw-r--r--contrib/summerschool/foods/LexFoodsGer.gf16
-rw-r--r--contrib/summerschool/foods/LexFoodsIta.gf16
-rw-r--r--contrib/summerschool/foods/LexFoodsSwe.gf16
-rw-r--r--contrib/summerschool/foods/README8
-rw-r--r--contrib/summerschool/foods/transFoodsHin.gf75
32 files changed, 1605 insertions, 0 deletions
diff --git a/contrib/summerschool/foods/Foods.gf b/contrib/summerschool/foods/Foods.gf
index e60f0ea09..8ea02f39d 100644
--- a/contrib/summerschool/foods/Foods.gf
+++ b/contrib/summerschool/foods/Foods.gf
@@ -1,3 +1,5 @@
+-- (c) 2009 Aarne Ranta under LGPL
+
abstract Foods = {
flags startcat = Comment ;
cat
diff --git a/contrib/summerschool/foods/FoodsAfr.gf b/contrib/summerschool/foods/FoodsAfr.gf
new file mode 100644
index 000000000..1a251ceb3
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsAfr.gf
@@ -0,0 +1,76 @@
+-- (c) 2009 Laurette Pretorius Sr & Jr and Ansu Berg under LGPL
+
+concrete FoodsAfr of Foods = open Prelude, Predef in{
+ lincat
+ Comment = {s: Str} ;
+ Kind = {s: Number => Str} ;
+ Item = {s: Str ; n: Number} ;
+ Quality = {s: AdjAP => Str} ;
+
+ lin
+ Pred item quality = {s = item.s ++ "is" ++ (quality.s ! Predic)};
+ This kind = {s = "hierdie" ++ (kind.s ! Sg); n = Sg};
+ That kind = {s = "daardie" ++ (kind.s ! Sg); n = Sg};
+ These kind = {s = "hierdie" ++ (kind.s ! Pl); n = Pl};
+ Those kind = {s = "daardie" ++ (kind.s ! Pl); n = Pl};
+ Mod quality kind = {s = table{n => (quality.s ! Attr) ++ (kind.s!n)}};
+
+ Wine = declNoun_e "wyn";
+ Cheese = declNoun_aa "kaas";
+ Fish = declNoun_ss "vis";
+ Pizza = declNoun_s "pizza";
+
+ Very quality = veryAdj quality;
+
+ Fresh = regAdj "vars";
+ Warm = regAdj "warm";
+ Italian = smartAdj_e "Italiaans";
+ Expensive = regAdj "duur";
+ Delicious = smartAdj_e "heerlik";
+ Boring = smartAdj_e "vervelig";
+
+ param
+ AdjAP = Attr | Predic ;
+ Number = Sg | Pl ;
+
+ oper
+ --Noun operations (wyn, kaas, vis, pizza)
+
+ declNoun_aa: Str -> {s: Number => Str} = \x ->
+ let v = tk 2 x
+ in
+ {s = table{Sg => x ; Pl => v + (last x) +"e"}};
+
+ declNoun_e: Str -> {s: Number => Str} = \x -> {s = table{Sg => x ; Pl => x + "e"}} ;
+ declNoun_s: Str -> {s: Number => Str} = \x -> {s = table{Sg => x ; Pl => x + "s"}} ;
+
+ declNoun_ss: Str -> {s: Number => Str} = \x -> {s = table{Sg => x ; Pl => x + (last x) + "e"}} ;
+
+
+ --Adjective operations
+
+ mkAdj : Str -> Str -> {s: AdjAP => Str} = \x,y -> {s = table{Attr => x; Predic => y}};
+
+ declAdj_e : Str -> {s : AdjAP=> Str} = \x -> mkAdj (x + "e") x;
+ declAdj_g : Str -> {s : AdjAP=> Str} = \w ->
+ let v = init w
+ in mkAdj (v + "") w ;
+
+ declAdj_oog : Str -> {s : AdjAP=> Str} = \w ->
+ let v = init w
+ in
+ let i = init v
+ in mkAdj (i + "") w ;
+
+ regAdj : Str -> {s : AdjAP=> Str} = \x -> mkAdj x x;
+
+ veryAdj : {s: AdjAP => Str} -> {s : AdjAP=> Str} = \x -> {s = table{a => "baie" ++ (x.s!a)}};
+
+
+ smartAdj_e : Str -> {s : AdjAP=> Str} = \a -> case a of
+ {
+ _ + "oog" => declAdj_oog a ;
+ _ + ("e" | "ie" | "o" | "oe") + "g" => declAdj_g a ;
+ _ => declAdj_e a
+ };
+}
diff --git a/contrib/summerschool/foods/FoodsBul.gf b/contrib/summerschool/foods/FoodsBul.gf
new file mode 100644
index 000000000..ac9127669
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsBul.gf
@@ -0,0 +1,43 @@
+-- (c) 2009 Krasimir Angelov under LGPL
+
+concrete FoodsBul of Foods = {
+
+ flags
+ coding = utf8;
+
+ param
+ Gender = Masc | Fem | Neutr;
+ Number = Sg | Pl;
+ Agr = ASg Gender | APl ;
+
+ lincat
+ Comment = Str ;
+ Quality = {s : Agr => Str} ;
+ Item = {s : Str; a : Agr} ;
+ Kind = {s : Number => Str; g : Gender} ;
+
+ lin
+ Pred item qual = item.s ++ case item.a of {ASg _ => "е"; APl => "са"} ++ qual.s ! item.a ;
+
+ This kind = {s=case kind.g of {Masc=>"този"; Fem=>"тази"; Neutr=>"това" } ++ kind.s ! Sg; a=ASg kind.g} ;
+ That kind = {s=case kind.g of {Masc=>"онзи"; Fem=>"онази"; Neutr=>"онова"} ++ kind.s ! Sg; a=ASg kind.g} ;
+ These kind = {s="тези" ++ kind.s ! Pl; a=APl} ;
+ Those kind = {s="онези" ++ kind.s ! Pl; a=APl} ;
+
+ Mod qual kind = {s=\\n => qual.s ! (case n of {Sg => ASg kind.g; Pl => APl}) ++ kind.s ! n; g=kind.g} ;
+
+ Wine = {s = table {Sg => "вино"; Pl => "вина"}; g = Neutr};
+ Cheese = {s = table {Sg => "сирене"; Pl => "сирена"}; g = Neutr};
+ Fish = {s = table {Sg => "риба"; Pl => "риби"}; g = Fem};
+ Pizza = {s = table {Sg => "пица"; Pl => "пици"}; g = Fem};
+
+ Very qual = {s = \\g => "много" ++ qual.s ! g};
+
+ Fresh = {s = table {ASg Masc => "свеж"; ASg Fem => "свежа"; ASg Neutr => "свежо"; APl => "свежи"}};
+ Warm = {s = table {ASg Masc => "горещ"; ASg Fem => "гореща"; ASg Neutr => "горещо"; APl => "горещи"}};
+ Italian = {s = table {ASg Masc => "италиански"; ASg Fem => "италианска"; ASg Neutr => "италианско"; APl => "италиански"}};
+ Expensive = {s = table {ASg Masc => "скъп"; ASg Fem => "скъпа"; ASg Neutr => "скъпо"; APl => "скъпи"}};
+ Delicious = {s = table {ASg Masc => "превъзходен"; ASg Fem => "превъзходна"; ASg Neutr => "превъзходно"; APl => "превъзходни"}};
+ Boring = {s = table {ASg Masc => "еднообразен"; ASg Fem => "еднообразна"; ASg Neutr => "еднообразно"; APl => "еднообразни"}};
+
+}
diff --git a/contrib/summerschool/foods/FoodsCat.gf b/contrib/summerschool/foods/FoodsCat.gf
new file mode 100644
index 000000000..5ad38d0dc
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsCat.gf
@@ -0,0 +1,7 @@
+--# -path=.:present
+
+-- (c) 2009 Jordi Saludes under LGPL
+
+concrete FoodsCat of Foods = FoodsI with
+ (Syntax = SyntaxCat),
+ (LexFoods = LexFoodsCat) ;
diff --git a/contrib/summerschool/foods/FoodsDut.gf b/contrib/summerschool/foods/FoodsDut.gf
new file mode 100644
index 000000000..d4855e5c6
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsDut.gf
@@ -0,0 +1,58 @@
+-- (c) 2009 Femke Johansson under LGPL
+
+concrete FoodsDut of Foods = {
+
+ lincat
+ Comment = {s : Str};
+ Quality = {s : AForm => Str};
+ Kind = { s : Number => Str};
+ Item = {s : Str ; n : Number};
+
+ lin
+ Pred item quality =
+ {s = item.s ++ copula ! item.n ++ quality.s ! APred};
+ This = det Sg "deze";
+ These = det Pl "deze";
+ That = det Sg "die";
+ Those = det Pl "die";
+
+ Mod quality kind =
+ {s = \\n => quality.s ! AAttr ++ kind.s ! n};
+ Wine = regNoun "wijn";
+ Cheese = noun "kaas" "kazen";
+ Fish = noun "vis" "vissen";
+ Pizza = noun "pizza" "pizza's";
+
+ Very a = {s = \\f => "erg" ++ a.s ! f};
+
+ Fresh = regadj "vers";
+ Warm = regadj "warm";
+ Italian = regadj "Italiaans";
+ Expensive = adj "duur" "dure";
+ Delicious = regadj "lekker";
+ Boring = regadj "saai";
+
+ param
+ Number = Sg | Pl;
+ AForm = APred | AAttr;
+
+ oper
+ det : Number -> Str ->
+ {s : Number => Str} -> {s : Str ; n: Number} =
+ \n,det,noun -> {s = det ++ noun.s ! n ; n=n};
+
+ noun : Str -> Str -> {s : Number => Str} =
+ \man,men -> {s = table {Sg => man; Pl => men}};
+
+ regNoun : Str -> {s : Number => Str} =
+ \wijn -> noun wijn (wijn + "en");
+
+ regadj : Str -> {s : AForm => Str} =
+ \koud -> adj koud (koud+"e");
+
+ adj : Str -> Str -> {s : AForm => Str} =
+ \duur, dure -> {s = table {APred => duur; AAttr => dure}};
+
+ copula : Number => Str =
+ table {Sg => "is" ; Pl => "zijn"};
+}
diff --git a/contrib/summerschool/foods/FoodsEng.gf b/contrib/summerschool/foods/FoodsEng.gf
new file mode 100644
index 000000000..dae3ed54c
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsEng.gf
@@ -0,0 +1,42 @@
+-- (c) 2009 Aarne Ranta under LGPL
+
+concrete FoodsEng of Foods = {
+ lincat
+ Comment, Quality = {s : Str} ;
+ Kind = {s : Number => Str} ;
+ Item = {s : Str ; n : Number} ;
+ lin
+ Pred item quality =
+ {s = item.s ++ copula ! item.n ++ quality.s} ;
+ This = det Sg "this" ;
+ That = det Sg "that" ;
+ These = det Pl "these" ;
+ Those = det Pl "those" ;
+ Mod quality kind =
+ {s = \\n => quality.s ++ kind.s ! n} ;
+ Wine = regNoun "wine" ;
+ Cheese = regNoun "cheese" ;
+ Fish = noun "fish" "fish" ;
+ Pizza = regNoun "pizza" ;
+ Very a = {s = "very" ++ a.s} ;
+ Fresh = adj "fresh" ;
+ Warm = adj "warm" ;
+ Italian = adj "Italian" ;
+ Expensive = adj "expensive" ;
+ Delicious = adj "delicious" ;
+ Boring = adj "boring" ;
+ param
+ Number = Sg | Pl ;
+ oper
+ det : Number -> Str ->
+ {s : Number => Str} -> {s : Str ; n : Number} =
+ \n,det,noun -> {s = det ++ noun.s ! n ; n = n} ;
+ noun : Str -> Str -> {s : Number => Str} =
+ \man,men -> {s = table {Sg => man ; Pl => men}} ;
+ regNoun : Str -> {s : Number => Str} =
+ \car -> noun car (car + "s") ;
+ adj : Str -> {s : Str} =
+ \cold -> {s = cold} ;
+ copula : Number => Str =
+ table {Sg => "is" ; Pl => "are"} ;
+}
diff --git a/contrib/summerschool/foods/FoodsEpo.gf b/contrib/summerschool/foods/FoodsEpo.gf
new file mode 100644
index 000000000..dd2400fe7
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsEpo.gf
@@ -0,0 +1,48 @@
+-- (c) 2009 Julia Hammar under LGPL
+
+concrete FoodsEpo of Foods = open Prelude in {
+
+ flags coding =utf8 ;
+
+ lincat
+ Comment = SS ;
+ Kind, Quality = {s : Number => Str} ;
+ Item = {s : Str ; n : Number} ;
+
+ lin
+ Pred item quality = ss (item.s ++ copula ! item.n ++ quality.s ! item.n) ;
+ This = det Sg "ĉi tiu" ;
+ That = det Sg "tiu" ;
+ These = det Pl "ĉi tiuj" ;
+ Those = det Pl "tiuj" ;
+ Mod quality kind = {s = \\n => quality.s ! n ++ kind.s ! n} ;
+ Wine = regNoun "vino" ;
+ Cheese = regNoun "fromaĝo" ;
+ Fish = regNoun "fiŝo" ;
+ Pizza = regNoun "pico" ;
+ Very quality = {s = \\n => "tre" ++ quality.s ! n} ;
+ Fresh = regAdj "freŝa" ;
+ Warm = regAdj "varma" ;
+ Italian = regAdj "itala" ;
+ Expensive = regAdj "altekosta" ;
+ Delicious = regAdj "bongusta" ;
+ Boring = regAdj "enuiga" ;
+
+ param
+ Number = Sg | Pl ;
+
+ oper
+ det : Number -> Str -> {s : Number => Str} -> {s : Str ; n : Number} =
+ \n,d,cn -> {
+ s = d ++ cn.s ! n ;
+ n = n
+ } ;
+ regNoun : Str -> {s : Number => Str} =
+ \vino -> {s = table {Sg => vino ; Pl => vino + "j"}
+ } ;
+ regAdj : Str -> {s : Number => Str} =
+ \nova -> {s = table {Sg => nova ; Pl => nova + "j"}
+ } ;
+ copula : Number => Str = \\_ => "estas" ;
+}
+
diff --git a/contrib/summerschool/foods/FoodsFas.gf b/contrib/summerschool/foods/FoodsFas.gf
new file mode 100644
index 000000000..bb95e351d
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsFas.gf
@@ -0,0 +1,64 @@
+-- (c) 2009 Sedigheh Moradi under LGPL
+
+concrete FoodsFas of Foods = {
+
+ lincat
+ Comment = {s : Str} ;
+ Quality = {s : Add => Str; prep : Str} ;
+ Kind = {s : Add => Number => Str ; prep : Str};
+ Item = {s : Str ; n : Number};
+ lin
+ Pred item quality = {s = item.s ++ quality.s ! Indep ++ copula ! item.n} ;
+ This = det Sg "in" ;
+ That = det Sg "aan" ;
+ These = det Pl "in" ;
+ Those = det Pl "aan" ;
+
+ Mod quality kind = {s = \\a,n => kind.s ! Attr ! n ++ kind.prep ++ quality.s ! a ;
+ prep = quality.prep
+ };
+ Wine = regN "sharaab" ;
+ Cheese = regN "panir" ;
+ Fish = regN "mahi" ;
+ Pizza = regN "pitza" ;
+ Very a = {s = \\at => "xeili" ++ a.s ! at ; prep = a.prep} ;
+ Fresh = adj "taze" ;
+ Warm = adj "garm" ;
+ Italian = adj "Italia'i" ;
+ Expensive = adj "geraan" ;
+ Delicious = adj "laziz" ;
+ Boring = adj "keselkonande" ;
+
+ param
+ Number = Sg | Pl ;
+ Add = Indep | Attr ;
+ oper
+ det : Number -> Str -> {s: Add => Number => Str ; prep : Str} -> {s : Str ; n: Number} =
+ \n,det,noun -> {s = det ++ noun.s ! Indep ! n ; n = n };
+
+ noun : (x1,_,_,x4 : Str) -> {s : Add => Number => Str ; prep : Str} = \pitza, pitzaye, pitzaha,pr ->
+ {s = \\a,n => case <a,n> of
+ {<Indep,Sg> => pitza ; <Indep,Pl> => pitzaha ;
+ <Attr,Sg> =>pitzaye ; <Attr,Pl> => pitzaha + "ye" };
+ prep = pr
+ };
+
+ regN : Str -> {s: Add => Number => Str ; prep : Str} = \mard ->
+ case mard of
+ { _ + ("a"|"e"|"i"|"o"|"u") => noun mard (mard+"ye") (mard + "ha") "";
+ _ => noun mard mard (mard + "ha") "e"
+ };
+
+ adj : Str -> {s : Add => Str; prep : Str} = \taze ->
+ case taze of
+ { _ + ("a"|"e"|"i"|"o"|"u") => mkAdj taze (taze+"ye") "" ;
+ _ => mkAdj taze taze "e"
+ };
+
+ mkAdj : Str -> Str -> Str -> {s : Add => Str; prep : Str} = \taze, tazeye, pr ->
+ {s = table {Indep => taze;
+ Attr => tazeye};
+ prep = pr
+ };
+ copula : Number => Str = table {Sg => "ast"; Pl => "hastand"};
+ }
diff --git a/contrib/summerschool/foods/FoodsFin.gf b/contrib/summerschool/foods/FoodsFin.gf
new file mode 100644
index 000000000..34da5764b
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsFin.gf
@@ -0,0 +1,7 @@
+--# -path=.:present
+
+-- (c) 2009 Aarne Ranta under LGPL
+
+concrete FoodsFin of Foods = FoodsI with
+ (Syntax = SyntaxFin),
+ (LexFoods = LexFoodsFin) ;
diff --git a/contrib/summerschool/foods/FoodsGer.gf b/contrib/summerschool/foods/FoodsGer.gf
new file mode 100644
index 000000000..934cefb9c
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsGer.gf
@@ -0,0 +1,7 @@
+--# -path=.:present
+
+-- (c) 2009 Aarne Ranta under LGPL
+
+concrete FoodsGer of Foods = FoodsI with
+ (Syntax = SyntaxGer),
+ (LexFoods = LexFoodsGer) ;
diff --git a/contrib/summerschool/foods/FoodsHeb.gf b/contrib/summerschool/foods/FoodsHeb.gf
new file mode 100644
index 000000000..61710759c
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsHeb.gf
@@ -0,0 +1,85 @@
+--# -path=alltenses
+
+-- (c) 2009 Dana Dannells under LGPL
+
+concrete FoodsHeb of Foods = open Prelude in {
+
+ flags coding=utf8 ;
+
+ lincat
+ Comment = SS ;
+ Quality = {s: Gender => Number => Str} ;
+ Kind = {s : Number => Str ; g : Gender} ;
+ Item = {s : Str ; g : Gender ; n : Number} ;
+
+ lin
+ Pred item quality = ss (item.s ++ quality.s ! item.g ! item.n) ;
+ This = det Sg "זה" "זאת";
+ That = det Sg "הוא" "היא" ;
+ These = det Pl "אלה" "אלה" ;
+ Those = det Pl "הם" "הן" ;
+ Mod quality kind = {
+ s = \\n => kind.s ! n ++ quality.s ! kind.g ! n ;
+ g = kind.g
+ } ;
+ Wine = regNoun "יין" "יינות"Fem ;
+ Cheese = regNoun "גבינה" "גבינות" Fem ;
+ Fish = regNoun "דג" "דגים" Masc ;
+ Pizza = regNoun "פיצה" "פיצוי" Fem ;
+ Very qual = {s = \\g,n => "מאוד" ++ qual.s ! g ! n} ;
+ Fresh = regAdj "טרי" ;
+ Warm = regAdj "חם" ;
+ Italian = irregAdj "איטלקי" ;
+ Expensive = regAdj "יקר" ;
+ Delicious = irregAdj "נהדר" ;
+ Boring = regAdj "משעמם";
+
+ param
+ Number = Sg | Pl ;
+ Gender = Masc | Fem ;
+
+ oper
+ det : Number -> Str -> Str -> {s : Number => Str ; g :Gender} ->
+ {s : Str ; g :Gender ; n : Number} =
+ \n,m,f,cn -> {
+ s = cn.s ! n ++ case cn.g of {Masc => m ; Fem => f} ;
+ g = cn.g ;
+ n = n
+ } ;
+
+ regNoun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} =
+ \gvina,gvinot,g -> {s = table {
+ Sg => gvina ;
+ Pl => gvinot
+ };
+ g=g
+ } ;
+
+ replaceLastLetter : Str -> Str = \s ->
+ init s + case last s of {
+ "מ" => "ם" ; "ן" => "נ" ; "פ" => "ף" ; "ץ" => "צ" ; "כ" => "ך" ; c => c
+ } ;
+
+ adjective : (_,_,_,_ : Str) -> {s : Gender => Number => Str} =
+ \tov,tova,tovim,tovot -> {
+ s = table {
+ Masc => table {
+ Sg => tov ;
+ Pl => tovim
+ } ;
+ Fem => table {
+ Sg => tova ;
+ Pl => tovot
+ }
+ }
+ } ;
+
+ regAdj : Str -> {s : Gender => Number => Str} = \tov ->
+ case tov of { to + c@? =>
+ adjective tov (replaceLastLetter (to + c + "ה" )) (replaceLastLetter (to + c +"ים" )) (replaceLastLetter (to + c + "ות" ))};
+
+ irregAdj : Str -> {s : Gender => Number => Str} = \italki ->
+ case italki of { italk+ c@? =>
+ adjective italki (replaceLastLetter (italk + c +"ת" )) (replaceLastLetter (italk + c+ "ים" )) (replaceLastLetter (italk + c+ "ות" ))};
+
+} -- FoodsHeb
diff --git a/contrib/summerschool/foods/FoodsHin.gf b/contrib/summerschool/foods/FoodsHin.gf
new file mode 100644
index 000000000..7b114fc81
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsHin.gf
@@ -0,0 +1,75 @@
+-- (c) 2009 Aarne Ranta under LGPL
+
+concrete FoodsHin of Foods = {
+
+ flags coding=utf8 ;
+
+ param
+ Gender = Masc | Fem ;
+ Number = Sg | Pl ;
+ lincat
+ Comment = {s : Str} ;
+ Item = {s : Str ; g : Gender ; n : Number} ;
+ Kind = {s : Number => Str ; g : Gender} ;
+ Quality = {s : Gender => Number => Str} ;
+ lin
+ Pred item quality = {
+ s = item.s ++ quality.s ! item.g ! item.n ++ copula item.n
+ } ;
+ This kind = {s = "यह" ++ kind.s ! Sg ; g = kind.g ; n = Sg} ;
+ That kind = {s = "वह" ++ kind.s ! Sg ; g = kind.g ; n = Sg} ;
+ These kind = {s = "ये" ++ kind.s ! Pl ; g = kind.g ; n = Pl} ;
+ Those kind = {s = "वे" ++ kind.s ! Pl ; g = kind.g ; n = Pl} ;
+ Mod quality kind = {
+ s = \\n => quality.s ! kind.g ! n ++ kind.s ! n ;
+ g = kind.g
+ } ;
+ Wine = regN "मदिरा" ;
+ Cheese = regN "पनीर" ;
+ Fish = regN "मछली" ;
+ Pizza = regN "पिजजा" ;
+ Very quality = {s = \\g,n => "बहुत" ++ quality.s ! g ! n} ;
+ Fresh = regAdj "ताज़ा" ;
+ Warm = regAdj "गरम" ;
+ Italian = regAdj "इटली" ;
+ Expensive = regAdj "महंगा" ;
+ Delicious = regAdj "रुचिकर" ;
+ Boring = regAdj "पैरिया" ;
+
+ oper
+ mkN : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} =
+ \s,p,g -> {
+ s = table {
+ Sg => s ;
+ Pl => p
+ } ;
+ g = g
+ } ;
+
+ regN : Str -> {s : Number => Str ; g : Gender} = \s -> case s of {
+ lark + "ा" => mkN s (lark + "े") Masc ;
+ lark + "ी" => mkN s (lark + "ियँ") Fem ;
+ _ => mkN s s Masc
+ } ;
+
+ mkAdj : Str -> Str -> Str -> {s : Gender => Number => Str} = \ms,mp,f -> {
+ s = table {
+ Masc => table {
+ Sg => ms ;
+ Pl => mp
+ } ;
+ Fem => \\_ => f
+ }
+ } ;
+
+ regAdj : Str -> {s : Gender => Number => Str} = \a -> case a of {
+ acch + "ा" => mkAdj a (acch + "े") (acch + "ी") ;
+ _ => mkAdj a a a
+ } ;
+
+ copula : Number -> Str = \n -> case n of {
+ Sg => "है" ;
+ Pl => "हैं"
+ } ;
+
+ }
diff --git a/contrib/summerschool/foods/FoodsI.gf b/contrib/summerschool/foods/FoodsI.gf
new file mode 100644
index 000000000..f4113b724
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsI.gf
@@ -0,0 +1,29 @@
+-- (c) 2009 Aarne Ranta under LGPL
+
+incomplete concrete FoodsI of Foods =
+ open Syntax, LexFoods in {
+ lincat
+ Comment = Utt ;
+ Item = NP ;
+ Kind = CN ;
+ Quality = AP ;
+ lin
+ Pred item quality = mkUtt (mkCl item quality) ;
+ This kind = mkNP this_Det kind ;
+ That kind = mkNP that_Det kind ;
+ These kind = mkNP these_Det kind ;
+ Those kind = mkNP those_Det kind ;
+ Mod quality kind = mkCN quality kind ;
+ Very quality = mkAP very_AdA quality ;
+
+ Wine = mkCN wine_N ;
+ Pizza = mkCN pizza_N ;
+ Cheese = mkCN cheese_N ;
+ Fish = mkCN fish_N ;
+ Fresh = mkAP fresh_A ;
+ Warm = mkAP warm_A ;
+ Italian = mkAP italian_A ;
+ Expensive = mkAP expensive_A ;
+ Delicious = mkAP delicious_A ;
+ Boring = mkAP boring_A ;
+}
diff --git a/contrib/summerschool/foods/FoodsIce.gf b/contrib/summerschool/foods/FoodsIce.gf
new file mode 100644
index 000000000..f84dd55cd
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsIce.gf
@@ -0,0 +1,85 @@
+--# -path=.:prelude
+
+-- (c) 2009 Martha Dis Brandt under LGPL
+
+concrete FoodsIce of Foods = open Prelude in {
+
+ flags
+ coding=utf8;
+
+ lincat
+ Comment = SS ;
+ Quality = {s : Gender => Number => Defin => Str} ;
+ Kind = {s : Number => Str ; g : Gender} ;
+ Item = {s : Str ; g : Gender ; n : Number} ;
+
+ lin
+ Pred item quality = ss (item.s ++ copula item.n ++ quality.s ! item.g ! item.n ! Ind) ;
+ This, That = det Sg "essi" "essi" "etta" ;
+ These, Those = det Pl "essir" "essar" "essi" ;
+ Mod quality kind = { s = \\n => quality.s ! kind.g ! n ! Def ++ kind.s ! n ; g = kind.g } ;
+ Wine = noun "vn" "vn" Neutr ;
+ Cheese = noun "ostur" "ostar" Masc ;
+ Fish = noun "fiskur" "fiskar" Masc ;
+ -- the word "pizza" is more commonly used in Iceland, but "flatbaka" is the Icelandic word for it
+ Pizza = noun "flatbaka" "flatbkur" Fem ;
+ Very qual = {s = \\g,n,defOrInd => "mjg" ++ qual.s ! g ! n ! defOrInd } ;
+ Fresh = regAdj "ferskur" ;
+ Warm = regAdj "heitur" ;
+ Boring = regAdj "leiinlegur" ;
+ -- the order of the given adj forms is: mSg fSg nSg mPl fPl nPl mSgDef f/nSgDef _PlDef
+ Italian = adjective "talskur" "tlsk" "talskt" "talskir" "talskar" "tlsk" "talski" "talska" "talsku" ;
+ Expensive = adjective "dr" "dr" "drt" "drir" "drar" "dr" "dri" "dra" "dru" ;
+ Delicious = adjective "ljffengur" "ljffeng" "ljffengt" "ljffengir" "ljffengar" "ljffeng" "ljffengi" "ljffenga" "ljffengu" ;
+
+ param
+ Number = Sg | Pl ;
+ Gender = Masc | Fem | Neutr ;
+ Defin = Ind | Def ;
+
+ oper
+ det : Number -> Str -> Str -> Str -> {s : Number => Str ; g : Gender} ->
+ {s : Str ; g : Gender ; n : Number} =
+ \n,masc,fem,neutr,cn -> {
+ s = case cn.g of {Masc => masc ; Fem => fem; Neutr => neutr } ++ cn.s ! n ;
+ g = cn.g ;
+ n = n
+ } ;
+
+ noun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} =
+ \man,men,g -> {
+ s = table {
+ Sg => man ;
+ Pl => men
+ } ;
+ g = g
+ } ;
+
+ adjective : (x1,_,_,_,_,_,_,_,x9 : Str) -> {s : Gender => Number => Defin => Str} =
+ \ferskur,fersk,ferskt,ferskir,ferskar,fersk_pl,ferski,ferska,fersku -> {
+ s = \\g,n,t => case <g,n,t> of {
+ < Masc, Sg, Ind > => ferskur ;
+ < Masc, Pl, Ind > => ferskir ;
+ < Fem, Sg, Ind > => fersk ;
+ < Fem, Pl, Ind > => ferskar ;
+ < Neutr, Sg, Ind > => ferskt ;
+ < Neutr, Pl, Ind > => fersk_pl;
+ < Masc, Sg, Def > => ferski ;
+ < Fem, Sg, Def > | < Neutr, Sg, Def > => ferska ;
+ < _ , Pl, Def > => fersku
+ }
+ } ;
+
+ regAdj : Str -> {s : Gender => Number => Defin => Str} = \ferskur ->
+ let fersk = Predef.tk 2 ferskur
+ in adjective
+ ferskur fersk (fersk + "t")
+ (fersk + "ir") (fersk + "ar") fersk
+ (fersk + "i") (fersk + "a") (fersk + "u") ;
+
+ copula : Number -> Str =
+ \n -> case n of {
+ Sg => "er" ;
+ Pl => "eru"
+ } ;
+}
diff --git a/contrib/summerschool/foods/FoodsIta.gf b/contrib/summerschool/foods/FoodsIta.gf
new file mode 100644
index 000000000..51baf9d70
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsIta.gf
@@ -0,0 +1,8 @@
+--# -path=.:present
+
+-- (c) 2009 Aarne Ranta under LGPL
+
+concrete FoodsIta of Foods = FoodsI with
+ (Syntax = SyntaxIta),
+ (LexFoods = LexFoodsIta) ;
+
diff --git a/contrib/summerschool/foods/FoodsJpn.gf b/contrib/summerschool/foods/FoodsJpn.gf
new file mode 100644
index 000000000..9525ff16b
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsJpn.gf
@@ -0,0 +1,72 @@
+--# -path=.:../lib/src/prelude
+
+-- (c) 2009 Zofia Stankiewicz under LGPL
+
+concrete FoodsJpn of Foods = open Prelude in {
+
+flags coding=utf8 ;
+
+ lincat
+ Comment = {s: Style => Str};
+ Quality = {s: AdjUse => Str ; t: AdjType} ;
+ Kind = {s : Number => Str} ;
+ Item = {s : Str ; n : Number} ;
+
+ lin
+ Pred item quality = {s = case quality.t of {
+ IAdj => table {Plain => item.s ++ quality.s ! APred ; Polite => item.s ++ quality.s ! APred ++ copula ! Polite ! item.n } ;
+ NaAdj => \\p => item.s ++ quality.s ! APred ++ copula ! p ! item.n }
+ } ;
+ This = det Sg "この" ;
+ That = det Sg "その" ;
+ These = det Pl "この" ;
+ Those = det Pl "その" ;
+ Mod quality kind = {s = \\n => quality.s ! Attr ++ kind.s ! n} ;
+ Wine = regNoun "ワインは" ;
+ Cheese = regNoun "チーズは" ;
+ Fish = regNoun "魚は" ;
+ Pizza = regNoun "ピザは" ;
+ Very quality = {s = \\a => "とても" ++ quality.s ! a ; t = quality.t } ;
+ Fresh = adj "新鮮な" "新鮮";
+ Warm = regAdj "あたたかい" ;
+ Italian = adj "イタリアの" "イタリアのもの";
+ Expensive = regAdj "たかい" ;
+ Delicious = regAdj "おいしい" ;
+ Boring = regAdj "つまらない" ;
+
+ param
+ Number = Sg | Pl ;
+ AdjUse = Attr | APred ; -- na-adjectives have different forms as noun attributes and predicates
+ Style = Plain | Polite ; -- for phrase types
+ AdjType = IAdj | NaAdj ; -- IAdj can form predicates without the copula, NaAdj cannot
+
+ oper
+ det : Number -> Str -> {s : Number => Str} -> {s : Str ; n : Number} =
+ \n,d,cn -> {
+ s = d ++ cn.s ! n ;
+ n = n
+ } ;
+ noun : Str -> Str -> {s : Number => Str} =
+ \sakana,sakana -> {s = \\_ => sakana } ;
+
+ regNoun : Str -> {s : Number => Str} =
+ \sakana -> noun sakana sakana ;
+
+ adj : Str -> Str -> {s : AdjUse => Str ; t : AdjType} =
+ \chosenna, chosen -> {
+ s = table {
+ Attr => chosenna ;
+ APred => chosen
+ } ;
+ t = NaAdj
+ } ;
+
+ regAdj : Str -> {s: AdjUse => Str ; t : AdjType} =\akai -> {
+ s = \\_ => akai ; t = IAdj} ;
+
+ copula : Style => Number => Str =
+ table {
+ Plain => \\_ => "だ" ;
+ Polite => \\_ => "です" } ;
+
+}
diff --git a/contrib/summerschool/foods/FoodsLav.gf b/contrib/summerschool/foods/FoodsLav.gf
new file mode 100644
index 000000000..efab63450
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsLav.gf
@@ -0,0 +1,91 @@
+--# -path=.:prelude
+
+-- (c) 2009 Inese Bernsone under LGPL
+
+concrete FoodsLav of Foods = open Prelude in {
+
+ flags
+ coding=utf8 ;
+
+ lincat
+ Comment = SS ;
+ Quality = {s : Q => Gender => Number => Defin => Str } ;
+ Kind = {s : Number => Str ; g : Gender} ;
+ Item = {s : Str ; g : Gender ; n : Number } ;
+
+ lin
+ Pred item quality = ss (item.s ++ {- copula item.n -} "ir" ++ quality.s ! Q1 ! item.g ! item.n ! Ind ) ;
+ This = det Sg "šis" "šī" ;
+ That = det Sg "tas" "tā" ;
+ These = det Pl "šie" "šīs" ;
+ Those = det Pl "tie" "tās" ;
+ Mod quality kind = {s = \\n => quality.s ! Q1 ! kind.g ! n ! Def ++ kind.s ! n ; g = kind.g } ;
+ Wine = noun "vīns" "vīni" Masc ;
+ Cheese = noun "siers" "sieri" Masc ;
+ Fish = noun "zivs" "zivis" Fem ;
+ Pizza = noun "pica" "picas" Fem ;
+ Very qual = {s = \\q,g,n,spec => "ļoti" ++ qual.s ! Q2 ! g ! n ! spec };
+
+ Fresh = adjective "svaigs" "svaiga" "svaigi" "svaigas" "svaigais" "svaigā" "svaigie" "svaigās" ;
+ Warm = regAdj "silts" ;
+ Italian = specAdj "itāļu" (regAdj "itālisks") ;
+ Expensive = regAdj "dārgs" ;
+ Delicious = regAdj "garšīgs" ;
+ Boring = regAdj "garlaicīgs" ;
+
+ param
+ Number = Sg | Pl ;
+ Gender = Masc | Fem ;
+ Defin = Ind | Def ;
+ Q = Q1 | Q2 ;
+
+ oper
+ det : Number -> Str -> Str -> {s : Number => Str ; g : Gender} ->
+ {s : Str ; g : Gender ; n : Number} =
+ \n,m,f,cn -> {
+ s = case cn.g of {Masc => m ; Fem => f} ++ cn.s ! n ;
+ g = cn.g ;
+ n = n
+ } ;
+ noun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} =
+ \man,men,g -> {
+ s = table {
+ Sg => man ;
+ Pl => men
+ } ;
+ g = g
+ } ;
+ adjective : (_,_,_,_,_,_,_,_ : Str) -> {s : Q => Gender => Number => Defin => Str} =
+ \skaists,skaista,skaisti,skaistas,skaistais,skaistaa,skaistie,skaistaas -> {
+ s = table {
+ _ => table {
+ Masc => table {
+ Sg => table {Ind => skaists ; Def => skaistais} ;
+ Pl => table {Ind => skaisti ; Def => skaistie}
+ } ;
+ Fem => table {
+ Sg => table {Ind => skaista ; Def => skaistaa} ;
+ Pl => table {Ind => skaistas ; Def => skaistaas}
+ }
+ }
+ }
+ } ;
+
+ {- irregAdj : Str -> {s : Gender => Number => Defin => Str} = \itaalju ->
+ let itaalju = itaalju
+ in adjective itaalju (itaalju) (itaalju) (itaalju) (itaalju) (itaalju) (itaalju) (itaalju) ; -}
+
+ regAdj : Str -> {s : Q => Gender => Number => Defin => Str} = \skaists ->
+ let skaist = init skaists
+ in adjective skaists (skaist + "a") (skaist + "i") (skaist + "as") (skaist + "ais") (skaist + "ā") (skaist + "ie") (skaist + "ās");
+
+ Adjective : Type = {s : Q => Gender => Number => Defin => Str} ;
+
+ specAdj : Str -> Adjective -> Adjective = \s,a -> {
+ s = table {
+ Q2 => a.s ! Q1 ;
+ Q1 => \\_,_,_ => s
+ }
+ } ;
+
+ }
diff --git a/contrib/summerschool/foods/FoodsMlt.gf b/contrib/summerschool/foods/FoodsMlt.gf
new file mode 100644
index 000000000..a10d1f380
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsMlt.gf
@@ -0,0 +1,103 @@
+-- (c) 2009 John Camilleri under LGPL
+
+concrete FoodsMlt of Foods = open Prelude in {
+ flags coding=utf8 ;
+
+ param
+ Number = Sg | Pl ;
+ Gender = Masc | Fem ;
+
+ lincat
+ Comment = SS ;
+ Quality = {s : Gender => Number => Str} ;
+ Kind = {s : Number => Str ; g : Gender} ;
+ Item = {s : Str ; g : Gender ; n : Number} ;
+
+ oper
+ --Create an adjective (full function)
+ --Params: Sing Masc, Sing Fem, Plural
+ adjective : (_,_,_ : Str) -> {s : Gender => Number => Str} = \iswed,sewda,suwed -> {
+ s = table {
+ Masc => table {
+ Sg => iswed ;
+ Pl => suwed
+ } ;
+ Fem => table {
+ Sg => sewda ;
+ Pl => suwed
+ }
+ }
+ } ;
+
+ --Create a regular adjective
+ --Param: Sing Masc
+ regAdj : Str -> {s : Gender => Number => Str} = \frisk ->
+ adjective frisk (frisk + "a") (frisk + "i") ;
+
+ --Create a "uni-adjective" eg tal-buzz
+ --Param: Sing Masc
+ uniAdj : Str -> {s : Gender => Number => Str} = \uni ->
+ adjective uni uni uni ;
+
+ --Create a noun
+ --Params: Singular, Plural, Gender (inherent)
+ noun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} = \ktieb,kotba,g -> {
+ s = table {
+ Sg => ktieb ;
+ Pl => kotba
+ } ;
+ g = g
+ } ;
+
+ --Copula is a linking verb
+ --Params: Number, Gender
+ copula : Number -> Gender -> Str = \n,g -> case n of {
+ Sg => case g of { Masc => "huwa" ; Fem => "hija" } ;
+ Pl => "huma"
+ } ;
+
+ --Create an article, taking into account first letter of next word
+ article = pre {
+ "a"|"e"|"i"|"o"|"u" => "l-" ;
+ --cons@("ċ"|"d"|"n"|"r"|"s"|"t"|"x"|"ż") => "i" + cons + "-" ;
+ _ => "il-"
+ } ;
+
+ --Create a determinant
+ --Params: Sg/Pl, Masc, Fem
+ det : Number -> Str -> Str -> Kind -> {s : Str ; g : Gender ; n : Number} = \n,m,f,cn -> {
+ s = case n of {
+ Sg => case cn.g of {Masc => m ; Fem => f}; --string
+ Pl => m --default to masc
+ } ++ article ++ cn.s ! n ;
+ g = cn.g ; --gender
+ n = n --number
+ } ;
+
+ lin
+ Pred item quality = ss (item.s ++ copula item.n item.g ++ quality.s ! item.g ! item.n) ;
+
+ This kind = det Sg "dan" "din" kind ;
+ That kind = det Sg "dak" "dik" kind ;
+ These kind = det Pl "dawn" "" kind ;
+ Those kind = det Pl "dawk" "" kind ;
+
+ Mod quality kind = {
+ s = \\n => kind.s ! n ++ quality.s ! kind.g ! n ;
+ g = kind.g
+ } ;
+
+ Wine = noun "inbid" "inbejjed" Masc ;
+ Cheese = noun "ġobon" "ġobniet" Masc ;
+ Fish = noun "ħuta" "ħut" Fem ;
+ Pizza = noun "pizza" "pizzez" Fem ;
+
+ Very qual = {s = \\g,n => qual.s ! g ! n ++ "ħafna"} ;
+
+ Warm = adjective "sħun" "sħuna" "sħan" ;
+ Expensive = adjective "għali" "għalja" "għaljin" ;
+ Delicious = adjective "tajjeb" "tajba" "tajbin" ;
+ Boring = uniAdj "tad-dwejjaq" ;
+ Fresh = regAdj "frisk" ;
+ Italian = regAdj "Taljan" ;
+}
diff --git a/contrib/summerschool/foods/FoodsMon.gf b/contrib/summerschool/foods/FoodsMon.gf
new file mode 100644
index 000000000..eda2012f4
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsMon.gf
@@ -0,0 +1,49 @@
+--# -path=.:/GF/lib/src/prelude
+
+-- (c) 2009 Nyamsuren Erdenebadrakh under LGPL
+
+concrete FoodsMon of Foods = open Prelude in {
+ flags coding=utf8;
+
+ lincat
+ Comment, Quality = SS ;
+ Kind = {s : Number => Str} ;
+ Item = {s : Str ; n : Number} ;
+
+ lin
+ Pred item quality = ss (item.s ++ "бол" ++ quality.s) ;
+ This = det Sg "энэ" ;
+ That = det Sg "тэр" ;
+ These = det Pl "эдгээр" ;
+ Those = det Pl "тэдгээр" ;
+ Mod quality kind = {s = \\n => quality.s ++ kind.s ! n} ;
+ Wine = regNoun "дарс" ;
+ Cheese = regNoun "бяслаг" ;
+ Fish = regNoun "загас" ;
+ Pizza = regNoun "пицца" ;
+ Very = prefixSS "маш" ;
+ Fresh = ss "шинэ" ;
+ Warm = ss "халуун" ;
+ Italian = ss "итали" ;
+ Expensive = ss "үнэтэй" ;
+ Delicious = ss "амттай" ;
+ Boring = ss "амтгүй" ;
+
+ param
+ Number = Sg | Pl ;
+
+ oper
+ det : Number -> Str -> {s : Number => Str} -> {s : Str ; n : Number} =
+ \n,d,cn -> {
+ s = d ++ cn.s ! n ;
+ n = n
+ } ;
+
+ regNoun : Str -> {s : Number => Str} =
+ \x -> {s = table {
+ Sg => x ;
+ Pl => x + "нууд"}
+ } ;
+ }
+
+
diff --git a/contrib/summerschool/foods/FoodsPor.gf b/contrib/summerschool/foods/FoodsPor.gf
new file mode 100644
index 000000000..2a497f8fe
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsPor.gf
@@ -0,0 +1,77 @@
+-- (c) 2009 Rami Shashati under LGPL
+
+concrete FoodsPor of Foods = open Prelude in {
+ lincat
+ Comment = {s : Str} ;
+ Quality = {s : Gender => Number => Str} ;
+ Kind = {s : Number => Str ; g : Gender} ;
+ Item = {s : Str ; n : Number ; g : Gender } ;
+
+ lin
+ Pred item quality =
+ {s = item.s ++ copula ! item.n ++ quality.s ! item.g ! item.n } ;
+ This = det Sg (table {Masc => "este" ; Fem => "esta"}) ;
+ That = det Sg (table {Masc => "esse" ; Fem => "essa"}) ;
+ These = det Pl (table {Masc => "estes" ; Fem => "estas"}) ;
+ Those = det Pl (table {Masc => "esses" ; Fem => "essas"}) ;
+
+ Mod quality kind = { s = \\n => kind.s ! n ++ quality.s ! kind.g ! n ; g = kind.g } ;
+
+ Wine = regNoun "vinho" Masc ;
+ Cheese = regNoun "queijo" Masc ;
+ Fish = regNoun "peixe" Masc ;
+ Pizza = regNoun "pizza" Fem ;
+
+ Very a = { s = \\g,n => "muito" ++ a.s ! g ! n } ;
+
+ Fresh = mkAdjReg "fresco" ;
+ Warm = mkAdjReg "quente" ;
+ Italian = mkAdjReg "Italiano" ;
+ Expensive = mkAdjReg "caro" ;
+ Delicious = mkAdjReg "delicioso" ;
+ Boring = mkAdjReg "chato" ;
+
+ param
+ Number = Sg | Pl ;
+ Gender = Masc | Fem ;
+
+ oper
+ QualityT : Type = {s : Gender => Number => Str} ;
+
+ mkAdj : (_,_,_,_ : Str) -> QualityT = \bonito,bonita,bonitos,bonitas -> {
+ s = table {
+ Masc => table { Sg => bonito ; Pl => bonitos } ;
+ Fem => table { Sg => bonita ; Pl => bonitas }
+ } ;
+ } ;
+
+ -- regular pattern
+ adjSozinho : Str -> QualityT = \sozinho ->
+ let sozinh = Predef.tk 1 sozinho
+ in mkAdj sozinho (sozinh + "a") (sozinh + "os") (sozinh + "as") ;
+
+ -- for gender-independent adjectives
+ adjUtil : Str -> Str -> QualityT = \util,uteis ->
+ mkAdj util util uteis uteis ;
+
+ -- smart paradigm for adjcetives
+ mkAdjReg : Str -> QualityT = \a -> case last a of {
+ "o" => adjSozinho a ;
+ "e" => adjUtil a (a + "s")
+ } ;
+
+ ItemT : Type = {s : Str ; n : Number ; g : Gender } ;
+
+ det : Number -> (Gender => Str) -> KindT -> ItemT =
+ \num,det,noun -> {s = det ! noun.g ++ noun.s ! num ; n = num ; g = noun.g } ;
+
+ KindT : Type = {s : Number => Str ; g : Gender} ;
+
+ noun : Str -> Str -> Gender -> KindT =
+ \animal,animais,gen -> {s = table {Sg => animal ; Pl => animais} ; g = gen } ;
+
+ regNoun : Str -> Gender -> KindT =
+ \carro,gen -> noun carro (carro + "s") gen ;
+
+ copula : Number => Str = table {Sg => "" ; Pl => "so"} ;
+}
diff --git a/contrib/summerschool/foods/FoodsRon.gf b/contrib/summerschool/foods/FoodsRon.gf
new file mode 100644
index 000000000..f2ba0155d
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsRon.gf
@@ -0,0 +1,72 @@
+-- (c) 2009 Ramona Enache under LGPL
+
+concrete FoodsRon of Foods =
+{
+flags coding=cp1250;
+
+param Number = Sg | Pl ;
+ Gender = Masc | Fem ;
+ NGender = NMasc | NFem | NNeut ;
+lincat
+Comment = {s : Str};
+Quality = {s : Number => Gender => Str};
+Kind = {s : Number => Str; g : NGender};
+Item = {s : Str ; n : Number; g : Gender};
+
+lin
+
+This = det Sg (mkTab "acest" "aceast");
+That = det Sg (mkTab "acel" "acea");
+These = det Pl (mkTab "aceti" "aceste");
+Those = det Pl (mkTab "acei" "acele");
+
+Wine = mkNoun "vin" "vinuri" NNeut ;
+Cheese = mkNoun "brnz" "brnzeturi" NFem ;
+Fish = mkNoun "pete" "peti" NMasc;
+Pizza = mkNoun "pizza" "pizze" NFem;
+
+Very a = {s = \\n,g => "foarte" ++ a.s ! n ! g};
+
+Fresh = mkAdj "proaspt" "proaspt" "proaspei" "proaspete" ;
+Warm = mkAdj "cald" "cald" "calzi" "calde" ;
+Italian = mkAdj "italian" "italian" "italieni" "italiene" ;
+Expensive = mkAdj "scump" "scump" "scumpi" "scumpe" ;
+Delicious = mkAdj "delicios" "delcioas" "delicioi" "delicioase" ;
+Boring = mkAdj "plictisitor" "plictisitoare" "plictisitori" "plictisitoare" ;
+
+Pred item quality = {s = item.s ++ copula ! item.n ++ quality.s ! item.n ! item.g} ;
+
+Mod quality kind = {s = \\n => kind.s ! n ++ quality.s ! n ! (getAgrGender kind.g n) ; g = kind.g};
+
+oper
+
+mkTab : Str -> Str -> {s : Gender => Str} = \acesta, aceasta ->
+{s = table{Masc => acesta;
+ Fem => aceasta}};
+
+det : Number -> {s : Gender => Str} -> {s : Number => Str ; g : NGender} -> {s : Str; n : Number; g : Gender} =
+\n,det,noun -> let gg = getAgrGender noun.g n
+ in
+ {s = det.s ! gg ++ noun.s ! n ; n = n ; g = gg};
+
+mkNoun : Str -> Str -> NGender -> {s : Number => Str; g : NGender} = \peste, pesti,g ->
+{s = table {Sg => peste;
+ Pl => pesti};
+ g = g
+};
+
+oper mkAdj : (x1,_,_,x4 : Str) -> {s : Number => Gender => Str} = \scump, scumpa, scumpi, scumpe ->
+{s = \\n,g => case <n,g> of
+{<Sg,Masc> => scump ; <Sg,Fem> => scumpa;
+<Pl,Masc> => scumpi ; <Pl,Fem> => scumpe
+}};
+
+copula : Number => Str = table {Sg => "este" ; Pl => "sunt"};
+
+getAgrGender : NGender -> Number -> Gender = \ng,n ->
+case <ng,n> of
+{<NMasc,_> => Masc ; <NFem,_> => Fem;
+<NNeut,Sg> => Masc ; <NNeut,Pl> => Fem
+};
+
+}
diff --git a/contrib/summerschool/foods/FoodsSwe.gf b/contrib/summerschool/foods/FoodsSwe.gf
new file mode 100644
index 000000000..d4a87f01a
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsSwe.gf
@@ -0,0 +1,7 @@
+--# -path=.:present
+
+-- (c) 2009 Aarne Ranta under LGPL
+
+concrete FoodsSwe of Foods = FoodsI with
+ (Syntax = SyntaxSwe),
+ (LexFoods = LexFoodsSwe) ;
diff --git a/contrib/summerschool/foods/FoodsTsn.gf b/contrib/summerschool/foods/FoodsTsn.gf
new file mode 100644
index 000000000..a7a69a1a5
--- /dev/null
+++ b/contrib/summerschool/foods/FoodsTsn.gf
@@ -0,0 +1,178 @@
+--# -path=alltenses
+
+-- (c) 2009 Laurette Pretorius Sr & Jr and Ansu Berg under LGPL
+
+concrete FoodsTsn of Foods = open Prelude, Predef in {
+ flags coding = utf8;
+ lincat
+ Comment = {s:Str};
+ Item = {s:Str; c:NounClass; n:Number};
+ Kind = {w: Number => Str; r: Str; c: NounClass; q: Number => Str; b: Bool};
+ Quality = {s: NounClass => Number => Str; p_form: Str; t: TType};
+ lin
+ Pred item quality = {s = item.s ++ ((mkPredDescrCop quality.t) ! item.c ! item.n) ++ quality.p_form};
+
+ This kind = {s = (kind.w ! Sg) ++ (mkDemPron1 ! kind.c ! Sg) ++ (kind.q ! Sg); c = kind.c; n = Sg};
+ That kind = {s = (kind.w ! Sg) ++ (mkDemPron2 ! kind.c ! Sg) ++ (kind.q ! Sg); c = kind.c; n = Sg};
+ These kind = {s = (kind.w ! Pl) ++ (mkDemPron1 ! kind.c ! Pl) ++ (kind.q ! Pl); c = kind.c; n = Pl};
+ Those kind = {s = (kind.w ! Pl) ++ (mkDemPron2 ! kind.c ! Pl) ++ (kind.q ! Pl); c = kind.c; n = Pl};
+
+ Mod quality kind = mkMod quality kind;
+
+ -- Lexicon
+ Wine = mkNounNC14_6 "jalwa";
+ Cheese = mkNounNC9_10 "kase";
+ Fish = mkNounNC9_10 "thlapi";
+ Pizza = mkNounNC9_10 "pizza";
+ Very quality = smartVery quality;
+ Fresh = mkVarAdj "ntsha";
+ Warm = mkOrdAdj "bothitho";
+ Italian = mkPerAdj "Itali";
+ Expensive = mkVerbRel "tura";
+ Delicious = mkOrdAdj "monate";
+ Boring = mkOrdAdj "bosula";
+
+ param
+ NounClass = NC9_10 | NC14_6;
+ Number = Sg | Pl;
+ TType = P | V | ModV | R ;
+ oper
+ mkMod : {s: NounClass => Number => Str; p_form: Str; t: TType} -> {w: Number => Str; r: Str; c: NounClass; q: Number => Str; b: Bool} -> {w: Number => Str; r: Str; c: NounClass; q: Number => Str;
+ b: Bool} = \x,y -> case y.b of
+ {
+ True => {w = y.w; r = y.r; c = y.c;
+ q = table {
+ Sg => ((y.q ! Sg) ++ "le" ++ ((smartQualRelPart (x.t)) ! y.c ! Sg) ++ ((smartDescrCop (x.t)) ! y.c ! Sg) ++ (x.s ! y.c ! Sg));
+ Pl => ((y.q ! Pl) ++ "le" ++ ((smartQualRelPart (x.t))! y.c ! Pl) ++ ((smartDescrCop (x.t)) ! y.c ! Pl) ++(x.s ! y.c ! Pl))
+ }; b = True
+ };
+ False => {w = y.w; r = y.r; c = y.c;
+ q = table {
+ Sg => ((y.q ! Sg) ++ ((smartQualRelPart (x.t)) ! y.c ! Sg) ++ ((smartDescrCop (x.t)) ! y.c ! Sg) ++ (x.s ! y.c ! Sg));
+ Pl => ((y.q ! Pl) ++ ((smartQualRelPart (x.t)) ! y.c ! Pl) ++ ((smartDescrCop (x.t)) ! y.c ! Pl) ++(x.s ! y.c ! Pl))
+ }; b = True
+ }
+ };
+
+ mkNounNC14_6 : Str -> {w: Number => Str; r: Str; c: NounClass; q: Number => Str; b: Bool} = \x -> {w = table {Sg => "bo" + x; Pl => "ma" + x}; r = x; c = NC14_6;
+ q = table {Sg => ""; Pl => ""}; b = False};
+
+ mkNounNC9_10 : Str -> {w: Number => Str; r: Str; c: NounClass; q: Number => Str; b: Bool} = \x -> {w = table {Sg => "" + x; Pl => "di" + x}; r = x; c = NC9_10;
+ q = table {Sg => ""; Pl => ""}; b = False};
+
+ mkVarAdj : Str -> {s: NounClass => Number => Str; p_form: Str; t: TType} = \x ->
+ {
+ s = table {
+ NC9_10 => table {Sg => "" + x; Pl => "di" + x};
+ NC14_6 => table {Sg => "bo" + x; Pl => "ma" + x}
+ };
+ p_form = x;
+ t = R;
+ };
+
+ mkOrdAdj : Str -> {s: NounClass => Number => Str; p_form: Str; t: TType} = \x ->
+ {
+ s = table {
+ NC9_10 => table {Sg => "" + x; Pl => "" + x};
+ NC14_6 => table {Sg => "" + x; Pl => "" + x}
+ };
+ p_form = x;
+ t = R;
+ };
+
+ mkVerbRel : Str -> {s: NounClass => Number => Str; p_form: Str; t: TType} = \x ->
+ {
+ s = table {
+ NC9_10 => table {Sg => x + "ng"; Pl => x + "ng"};
+ NC14_6 => table {Sg => x + "ng"; Pl => x + "ng"}
+ };
+ p_form = x;
+ t = V;
+ };
+
+ mkPerAdj : Str -> {s: NounClass => Number => Str; p_form: Str; t: TType} = \x ->
+ {
+ s = table {
+ NC9_10 => table {Sg => "" + x; Pl => "" + x};
+ NC14_6 => table {Sg => "" + x; Pl => "" + x}
+ };
+ p_form = "mo" ++ x;
+ t = P;
+ };
+
+ mkVeryAdj : {s: NounClass => Number => Str; p_form: Str; t: TType} -> {s: NounClass => Number => Str; p_form: Str; t: TType} = \x ->
+ {
+ s = table{c => table{n => (x.s!c!n) ++ "thata"}}; p_form = x.p_form ++ "thata"; t = x.t
+ };
+
+ mkVeryVerb : {s: NounClass => Number => Str; p_form: Str; t: TType} -> {s: NounClass => Number => Str; p_form: Str; t: TType} = \x ->
+ {
+ s = table{c => table{n => (x.s!c!n) ++ "thata"}}; p_form = x.p_form ++ "thata"; t = ModV
+ };
+
+ smartVery : {s: NounClass => Number => Str; p_form: Str; t: TType} -> {s: NounClass => Number => Str; p_form: Str; t: TType} =
+\x -> case x.t of --(x.s!c!n)
+ {
+ (V | ModV) => mkVeryVerb x;
+ --ModV => mkVeryVerb x;
+ _ => mkVeryAdj x
+ };
+
+ mkDemPron1 : NounClass => Number => Str = table
+ {
+ NC9_10 => table {Sg => "e"; Pl => "tse"};
+ NC14_6 => table {Sg => "bo"; Pl => "a"}
+ };
+
+ mkDemPron2 : NounClass => Number => Str = table
+ {
+ NC9_10 => table {Sg => "eo"; Pl => "tseo"};
+ NC14_6 => table {Sg => "boo"; Pl => "ao"}
+ };
+
+ smartQualRelPart : TType -> (NounClass => Number => Str) = \x -> case x of
+ {
+ P => mkQualRelPart_PName;
+ _ => mkQualRelPart
+ };
+
+ mkQualRelPart : NounClass => Number => Str = table
+ {
+ NC9_10 => table {Sg => "e"; Pl => "tse"};
+ NC14_6 => table {Sg => "bo"; Pl => "a"}
+ };
+
+ mkQualRelPart_PName : NounClass => Number => Str = table
+ {
+ NC9_10 => table {Sg => "ya"; Pl => "tsa"};
+ NC14_6 => table {Sg => "ba"; Pl => "a"}
+ };
+
+ smartDescrCop : TType -> (NounClass => Number => Str) = \x -> case x of
+ {
+ P => mkDescrCop_PName;
+ _ => mkDescrCop
+ };
+
+ mkDescrCop : NounClass => Number => Str = table
+ {
+ NC9_10 => table {Sg => "e"; Pl => "di"};
+ NC14_6 => table {Sg => "bo"; Pl => "a"}
+ };
+
+ mkDescrCop_PName : NounClass => Number => Str = table
+ {
+ NC9_10 => table {Sg => "ga"; Pl => "ga"};
+ NC14_6 => table {Sg => "ga"; Pl => "ga"}
+ };
+
+ mkPredDescrCop : TType -> (NounClass => Number => Str) = \x -> case x of
+ {
+ V => table {NC9_10 => table {Sg => "e" ++ "a"; Pl => "di" ++ "a"};
+ NC14_6 => table {Sg => "bo" ++ "a"; Pl => "a" ++ "a"}};
+
+ _ => table {NC9_10 => table {Sg => "e"; Pl => "di"};
+ NC14_6 => table {Sg => "bo"; Pl => "a"}}
+ };
+
+}
diff --git a/contrib/summerschool/foods/FoodsTur.gf b/contrib/summerschool/foods/FoodsTur.gf
new file mode 100644
index 000000000..9d6cd0350
--- /dev/null
+++ b/contrib/summerschool/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
diff --git a/contrib/summerschool/foods/LexFoods.gf b/contrib/summerschool/foods/LexFoods.gf
new file mode 100644
index 000000000..12ace208c
--- /dev/null
+++ b/contrib/summerschool/foods/LexFoods.gf
@@ -0,0 +1,15 @@
+-- (c) 2009 Aarne Ranta under LGPL
+
+interface LexFoods = open Syntax in {
+ oper
+ wine_N : N ;
+ pizza_N : N ;
+ cheese_N : N ;
+ fish_N : N ;
+ fresh_A : A ;
+ warm_A : A ;
+ italian_A : A ;
+ expensive_A : A ;
+ delicious_A : A ;
+ boring_A : A ;
+}
diff --git a/contrib/summerschool/foods/LexFoodsCat.gf b/contrib/summerschool/foods/LexFoodsCat.gf
new file mode 100644
index 000000000..624fc98c8
--- /dev/null
+++ b/contrib/summerschool/foods/LexFoodsCat.gf
@@ -0,0 +1,18 @@
+-- (c) 2009 Jordi Saludes under LGPL
+
+instance LexFoodsCat of LexFoods =
+ open SyntaxCat, ParadigmsCat, (M = MorphoCat) in {
+ flags
+ coding = utf8 ;
+ oper
+ wine_N = mkN "vi" "vins" M.Masc ;
+ pizza_N = mkN "pizza" ;
+ cheese_N = mkN "formatge" ;
+ fish_N = mkN "peix" "peixos" M.Masc;
+ fresh_A = mkA "fresc" "fresca" "frescos" "fresques" "frescament";
+ warm_A = mkA "calent" ;
+ italian_A = mkA "italià" "italiana" "italians" "italianes" "italianament" ;
+ expensive_A = mkA "car" ;
+ delicious_A = mkA "deliciós" "deliciosa" "deliciosos" "delicioses" "deliciosament";
+ boring_A = mkA "aburrit" "aburrida" "aburrits" "aburrides" "aburridament" ;
+}
diff --git a/contrib/summerschool/foods/LexFoodsFin.gf b/contrib/summerschool/foods/LexFoodsFin.gf
new file mode 100644
index 000000000..6e2315605
--- /dev/null
+++ b/contrib/summerschool/foods/LexFoodsFin.gf
@@ -0,0 +1,16 @@
+-- (c) 2009 Aarne Ranta under LGPL
+
+instance LexFoodsFin of LexFoods =
+ open SyntaxFin, ParadigmsFin in {
+ oper
+ wine_N = mkN "viini" ;
+ pizza_N = mkN "pizza" ;
+ cheese_N = mkN "juusto" ;
+ fish_N = mkN "kala" ;
+ fresh_A = mkA "tuore" ;
+ warm_A = mkA "lmmin" ;
+ italian_A = mkA "italialainen" ;
+ expensive_A = mkA "kallis" ;
+ delicious_A = mkA "herkullinen" ;
+ boring_A = mkA "tyls" ;
+}
diff --git a/contrib/summerschool/foods/LexFoodsGer.gf b/contrib/summerschool/foods/LexFoodsGer.gf
new file mode 100644
index 000000000..8ea3afc42
--- /dev/null
+++ b/contrib/summerschool/foods/LexFoodsGer.gf
@@ -0,0 +1,16 @@
+-- (c) 2009 Aarne Ranta under LGPL
+
+instance LexFoodsGer of LexFoods =
+ open SyntaxGer, ParadigmsGer in {
+ oper
+ wine_N = mkN "Wein" ;
+ pizza_N = mkN "Pizza" "Pizzen" feminine ;
+ cheese_N = mkN "Kse" "Ksen" masculine ;
+ fish_N = mkN "Fisch" ;
+ fresh_A = mkA "frisch" ;
+ warm_A = mkA "warm" "wrmer" "wrmste" ;
+ italian_A = mkA "italienisch" ;
+ expensive_A = mkA "teuer" ;
+ delicious_A = mkA "kstlich" ;
+ boring_A = mkA "langweilig" ;
+}
diff --git a/contrib/summerschool/foods/LexFoodsIta.gf b/contrib/summerschool/foods/LexFoodsIta.gf
new file mode 100644
index 000000000..11de5fcda
--- /dev/null
+++ b/contrib/summerschool/foods/LexFoodsIta.gf
@@ -0,0 +1,16 @@
+-- (c) 2009 Aarne Ranta under LGPL
+
+instance LexFoodsIta of LexFoods =
+ open SyntaxIta, ParadigmsIta in {
+ oper
+ wine_N = mkN "vino" ;
+ pizza_N = mkN "pizza" ;
+ cheese_N = mkN "formaggio" ;
+ fish_N = mkN "pesce" ;
+ fresh_A = mkA "fresco" ;
+ warm_A = mkA "caldo" ;
+ italian_A = mkA "italiano" ;
+ expensive_A = mkA "caro" ;
+ delicious_A = mkA "delizioso" ;
+ boring_A = mkA "noioso" ;
+}
diff --git a/contrib/summerschool/foods/LexFoodsSwe.gf b/contrib/summerschool/foods/LexFoodsSwe.gf
new file mode 100644
index 000000000..72e7e3e86
--- /dev/null
+++ b/contrib/summerschool/foods/LexFoodsSwe.gf
@@ -0,0 +1,16 @@
+-- (c) 2009 Aarne Ranta under LGPL
+
+instance LexFoodsSwe of LexFoods =
+ open SyntaxSwe, ParadigmsSwe in {
+ oper
+ wine_N = mkN "vin" "vinet" "viner" "vinerna" ;
+ pizza_N = mkN "pizza" ;
+ cheese_N = mkN "ost" ;
+ fish_N = mkN "fisk" ;
+ fresh_A = mkA "frsk" ;
+ warm_A = mkA "varm" ;
+ italian_A = mkA "italiensk" ;
+ expensive_A = mkA "dyr" ;
+ delicious_A = mkA "lcker" ;
+ boring_A = mkA "trkig" ;
+}
diff --git a/contrib/summerschool/foods/README b/contrib/summerschool/foods/README
new file mode 100644
index 000000000..64bc4ed5b
--- /dev/null
+++ b/contrib/summerschool/foods/README
@@ -0,0 +1,8 @@
+Foods grammars from GF Summer School 2009. To build:
+
+ $ gf -make -s Foods???.gf -- to create Foods.pgf
+
+ $ mv Foods.pgf ~/GF/src/server/gwt/www/grammars/ -- to use in web applications
+
+
+
diff --git a/contrib/summerschool/foods/transFoodsHin.gf b/contrib/summerschool/foods/transFoodsHin.gf
new file mode 100644
index 000000000..21d1d2ac1
--- /dev/null
+++ b/contrib/summerschool/foods/transFoodsHin.gf
@@ -0,0 +1,75 @@
+-- (c) 2009 Aarne Ranta under LGPL
+
+concrete FoodsHin of Foods = {
+
+ flags coding=utf8 ;
+
+ param
+ Gender = Masc | Fem ;
+ Number = Sg | Pl ;
+ lincat
+ Comment = {s : Str} ;
+ Item = {s : Str ; g : Gender ; n : Number} ;
+ Kind = {s : Number => Str ; g : Gender} ;
+ Quality = {s : Gender => Number => Str} ;
+ lin
+ Pred item quality = {
+ s = item.s ++ quality.s ! item.g ! item.n ++ copula item.n
+ } ;
+ This kind = {s = "yah" ++ kind.s ! Sg ; g = kind.g ; n = Sg} ;
+ That kind = {s = "vah" ++ kind.s ! Sg ; g = kind.g ; n = Sg} ;
+ These kind = {s = "ye" ++ kind.s ! Pl ; g = kind.g ; n = Pl} ;
+ Those kind = {s = "ve" ++ kind.s ! Pl ; g = kind.g ; n = Pl} ;
+ Mod quality kind = {
+ s = \\n => quality.s ! kind.g ! n ++ kind.s ! n ;
+ g = kind.g
+ } ;
+ Wine = regN "madirA" ;
+ Cheese = regN "panIr" ;
+ Fish = regN "maClI" ;
+ Pizza = regN "pijjA" ;
+ Very quality = {s = \\g,n => "bahut" ++ quality.s ! g ! n} ;
+ Fresh = regAdj "tAzA" ;
+ Warm = regAdj "garam" ;
+ Italian = regAdj "i-t.alI" ;
+ Expensive = regAdj "mahaNgA" ;
+ Delicious = regAdj "rucikar" ;
+ Boring = regAdj "pEriyA" ;
+
+ oper
+ mkN : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} =
+ \s,p,g -> {
+ s = table {
+ Sg => s ;
+ Pl => p
+ } ;
+ g = g
+ } ;
+
+ regN : Str -> {s : Number => Str ; g : Gender} = \s -> case s of {
+ lark + "A" => mkN s (lark + "e") Masc ;
+ lark + "I" => mkN s (lark + "iyaM") Fem ;
+ _ => mkN s s Masc
+ } ;
+
+ mkAdj : Str -> Str -> Str -> {s : Gender => Number => Str} = \ms,mp,f -> {
+ s = table {
+ Masc => table {
+ Sg => ms ;
+ Pl => mp
+ } ;
+ Fem => \\_ => f
+ }
+ } ;
+
+ regAdj : Str -> {s : Gender => Number => Str} = \a -> case a of {
+ acch + "A" => mkAdj a (acch + "e") (acch + "I") ;
+ _ => mkAdj a a a
+ } ;
+
+ copula : Number -> Str = \n -> case n of {
+ Sg => "hE" ;
+ Pl => "hEN"
+ } ;
+
+ }