summaryrefslogtreecommitdiff
path: root/examples/foods/FoodsTsn.gf
diff options
context:
space:
mode:
Diffstat (limited to 'examples/foods/FoodsTsn.gf')
-rw-r--r--examples/foods/FoodsTsn.gf178
1 files changed, 178 insertions, 0 deletions
diff --git a/examples/foods/FoodsTsn.gf b/examples/foods/FoodsTsn.gf
new file mode 100644
index 000000000..a7a69a1a5
--- /dev/null
+++ b/examples/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"}}
+ };
+
+}