mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-22 03:09:33 -06:00
new Foods for Chi, Gla, Ori
This commit is contained in:
12
contrib/summerschool/foods/CharactersGla.gf
Normal file
12
contrib/summerschool/foods/CharactersGla.gf
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
resource CharactersGla = {
|
||||||
|
|
||||||
|
--Character classes
|
||||||
|
oper
|
||||||
|
vowel : pattern Str = #("a"|"e"|"i"|"o"|"u"|"à"|"è"|"ì"|"ò"|"ù") ;
|
||||||
|
vowelCap : pattern Str = #("A"|"E"|"I"|"O"|"U"|"À"|"É"|"Ì"|"Ò"|"Ù") ;
|
||||||
|
consonant : pattern Str = #("b"|"c"|"d"|"f"|"g"|"h"|"j"|"k"|"l"|"m"|"n"|"p"|"q"|"r"|"s"|"t"|"v"|"w"|"x"|"z") ;
|
||||||
|
consonantCap : pattern Str = #("B"|"C"|"D"|"F"|"G"|"H"|"J"|"K"|"L"|"M"|"N"|"P"|"Q"|"R"|"S"|"T"|"V"|"W"|"X"|"Z") ;
|
||||||
|
broadVowel : pattern Str = #("a"|"o"|"u"|"à"|"ò"|"ù") ;
|
||||||
|
slenderVowel : pattern Str = #("e"|"i"|"è"|"ì") ;
|
||||||
|
|
||||||
|
}
|
||||||
35
contrib/summerschool/foods/FoodsChi.gf
Normal file
35
contrib/summerschool/foods/FoodsChi.gf
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
concrete FoodsChi of Foods = {
|
||||||
|
flags coding = utf8 ;
|
||||||
|
lincat
|
||||||
|
Comment, Item = Str ;
|
||||||
|
Kind = {s,c : Str} ;
|
||||||
|
Quality = {s,p : Str} ;
|
||||||
|
lin
|
||||||
|
Pred item quality = item ++ "是" ++ quality.s ++ quality.p ;
|
||||||
|
This kind = "这" ++ kind.c ++ kind.s ;
|
||||||
|
That kind = "那" ++ kind.c ++ kind.s ;
|
||||||
|
These kind = "这" ++ "些" ++ kind.s ;
|
||||||
|
Those kind = "那" ++ "些" ++ kind.s ;
|
||||||
|
Mod quality kind = {
|
||||||
|
s = quality.s ++ quality.p ++ kind.s ;
|
||||||
|
c = kind.c
|
||||||
|
} ;
|
||||||
|
Wine = geKind "酒" ;
|
||||||
|
Pizza = geKind "比 萨 饼" ;
|
||||||
|
Cheese = geKind "奶 酪" ;
|
||||||
|
Fish = geKind "鱼" ;
|
||||||
|
Very quality = longQuality ("非 常" ++ quality.s) ;
|
||||||
|
Fresh = longQuality "新 鲜" ;
|
||||||
|
Warm = longQuality "温 热" ;
|
||||||
|
Italian = longQuality "意 大 利 式" ;
|
||||||
|
Expensive = longQuality "昂 贵" ;
|
||||||
|
Delicious = longQuality "美 味" ;
|
||||||
|
Boring = longQuality "难 吃" ;
|
||||||
|
oper
|
||||||
|
mkKind : Str -> Str -> {s,c : Str} = \s,c ->
|
||||||
|
{s = s ; c = c} ;
|
||||||
|
geKind : Str -> {s,c : Str} = \s ->
|
||||||
|
mkKind s "个" ;
|
||||||
|
longQuality : Str -> {s,p : Str} = \s ->
|
||||||
|
{s = s ; p = "的"} ;
|
||||||
|
}
|
||||||
66
contrib/summerschool/foods/FoodsGla.gf
Normal file
66
contrib/summerschool/foods/FoodsGla.gf
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
concrete FoodsGla of Foods = open MutationsGla, CharactersGla, Prelude in {
|
||||||
|
param Gender = Masc|Fem ;
|
||||||
|
param Number = Sg|Pl ;
|
||||||
|
param Breadth = Broad|Slender|NoBreadth ;
|
||||||
|
param Beginning = Bcgmp|Other ;
|
||||||
|
|
||||||
|
lincat Comment = Str;
|
||||||
|
lin Pred item quality = "tha" ++ item ++ quality.s!Sg!Unmutated ;
|
||||||
|
|
||||||
|
lincat Item = Str;
|
||||||
|
lin
|
||||||
|
This kind = (addArticleSg kind) ++ "seo" ;
|
||||||
|
That kind = (addArticleSg kind) ++ "sin";
|
||||||
|
These kind = (addArticlePl kind) ++ "seo" ;
|
||||||
|
Those kind = (addArticlePl kind) ++ "sin" ;
|
||||||
|
oper addArticleSg : {s : Number => Mutation => Str; g : Gender} -> Str =
|
||||||
|
\kind -> case kind.g of { Masc => "an" ++ kind.s!Sg!PrefixT; Fem => "a'" ++ kind.s!Sg!Lenition1DNTLS } ;
|
||||||
|
oper addArticlePl : {s : Number => Mutation => Str; g : Gender} -> Str =
|
||||||
|
\kind -> "na" ++ kind.s!Pl!PrefixH ;
|
||||||
|
|
||||||
|
oper Noun : Type = {s : Number => Mutation => Str; g : Gender; pe : Breadth; beginning: Beginning; };
|
||||||
|
lincat Kind = Noun;
|
||||||
|
lin
|
||||||
|
Mod quality kind = {
|
||||||
|
s = table{
|
||||||
|
Sg => table{mutation => kind.s!Sg!mutation ++ case kind.g of {Masc => quality.s!Sg!Unmutated; Fem => quality.s!Sg!Lenition1} };
|
||||||
|
Pl => table{mutation => kind.s!Pl!mutation ++ case kind.pe of {Slender => quality.s!Pl!Lenition1; _ => quality.s!Pl!Unmutated} }
|
||||||
|
};
|
||||||
|
g = kind.g;
|
||||||
|
pe = kind.pe;
|
||||||
|
beginning = kind.beginning
|
||||||
|
} ;
|
||||||
|
Wine = makeNoun "fìon" "fìontan" Masc ;
|
||||||
|
Cheese = makeNoun "càise" "càisean" Masc ;
|
||||||
|
Fish = makeNoun "iasg" "èisg" Masc ;
|
||||||
|
Pizza = makeNoun "pizza" "pizzathan" Masc ;
|
||||||
|
oper makeNoun : Str -> Str -> Gender -> Noun = \sg,pl,g -> {
|
||||||
|
s = table{Sg => (mutate sg); Pl => (mutate pl)};
|
||||||
|
g = g;
|
||||||
|
pe = pe;
|
||||||
|
beginning = Bcgmp
|
||||||
|
}
|
||||||
|
where {
|
||||||
|
pe : Breadth = case pl of {
|
||||||
|
_ + v@(#broadVowel) + c@(#consonant*) + #consonant => Broad;
|
||||||
|
_ + v@(#slenderVowel) + c@(#consonant*) + #consonant => Slender;
|
||||||
|
_ => NoBreadth
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
oper Adjective : Type = {s : Number => Mutation => Str; sVery : Number => Str};
|
||||||
|
lincat Quality = Adjective;
|
||||||
|
lin
|
||||||
|
Very quality = {s=table{number => table{_ => quality.sVery!number}}; sVery=quality.sVery } ;
|
||||||
|
Fresh = makeAdjective "úr" "ùra" ;
|
||||||
|
Warm = makeAdjective "blàth" "blàtha" ;
|
||||||
|
Italian = makeAdjective "Eadailteach" "Eadailteach" ;
|
||||||
|
Expensive = makeAdjective "daor" "daora" ;
|
||||||
|
Delicious = makeAdjective "blasta" "blasta" ;
|
||||||
|
Boring = makeAdjective "leamh" "leamha" ;
|
||||||
|
oper makeAdjective : Str -> Str -> Adjective =
|
||||||
|
\sg,pl -> {
|
||||||
|
s=table{Sg => (mutate sg); Pl => (mutate pl)};
|
||||||
|
sVery=table{Sg => "glè"++(lenition1dntls sg); Pl => "glè"++(lenition1dntls pl)}
|
||||||
|
} ;
|
||||||
|
}
|
||||||
30
contrib/summerschool/foods/FoodsOri.gf
Normal file
30
contrib/summerschool/foods/FoodsOri.gf
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
concrete FoodsOri of Foods = {
|
||||||
|
|
||||||
|
flags coding = utf8 ;
|
||||||
|
|
||||||
|
lincat
|
||||||
|
Comment = Str;
|
||||||
|
Item = Str;
|
||||||
|
Kind = Str;
|
||||||
|
Quality = Str;
|
||||||
|
|
||||||
|
lin
|
||||||
|
Pred item quality = item ++ quality ++ "ଅଟେ";
|
||||||
|
This kind = "ଏଇ" ++ kind;
|
||||||
|
That kind = "ସେଇ" ++ kind;
|
||||||
|
These kind = "ଏଇ" ++ kind ++ "ଗୁଡିକ" ;
|
||||||
|
Those kind = "ସେଇ" ++ kind ++ "ଗୁଡିକ" ;
|
||||||
|
Mod quality kind = quality ++ kind;
|
||||||
|
Wine = "ମଦ";
|
||||||
|
Cheese = "ଛେନା";
|
||||||
|
Fish = "ମାଛ";
|
||||||
|
Pizza = "ପିଜଜ଼ା" ;
|
||||||
|
Very quality = "ଅତି" ++ quality;
|
||||||
|
Fresh = "ତାଜା";
|
||||||
|
Warm = "ଗରମ";
|
||||||
|
Italian = "ଇଟାଲି";
|
||||||
|
Expensive = "ମୁଲ୍ୟବାନ୍";
|
||||||
|
Delicious = "ସ୍ଵାଦିସ୍ଟ ";
|
||||||
|
Boring = "ଅରୁଚିକର";
|
||||||
|
|
||||||
|
}
|
||||||
53
contrib/summerschool/foods/MutationsGla.gf
Normal file
53
contrib/summerschool/foods/MutationsGla.gf
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
resource MutationsGla = open CharactersGla in {
|
||||||
|
param Mutation = Unmutated|Lenition1|Lenition1DNTLS|Lenition2|PrefixT|PrefixH;
|
||||||
|
|
||||||
|
--Turns a string into a mutation table
|
||||||
|
oper mutate : (_ : Str) -> (Mutation => Str) = \str -> table {
|
||||||
|
Unmutated => str ;
|
||||||
|
Lenition1 => lenition1 str ;
|
||||||
|
Lenition1DNTLS => lenition1dntls str ;
|
||||||
|
Lenition2 => lenition2 str ;
|
||||||
|
PrefixT => prefixT str ;
|
||||||
|
PrefixH => prefixH str
|
||||||
|
};
|
||||||
|
|
||||||
|
--Performs lenition 1: inserts "h" if the word begins with a lenitable character
|
||||||
|
oper lenition1 : Str -> Str = \str -> case str of {
|
||||||
|
start@("p"|"b"|"m"|"f"|"t"|"d"|"c"|"g") + rest => start + "h" + rest ;
|
||||||
|
start@("P"|"B"|"M"|"F"|"T"|"D"|"C"|"G") + rest => start + "h" + rest ;
|
||||||
|
("s"|"S") + ("p"|"t"|"c") + _ => str ; --the sequences "sp", "st", "sc" are never mutated
|
||||||
|
start@("s"|"S") + rest => start + "h" + rest ;
|
||||||
|
_ => str
|
||||||
|
};
|
||||||
|
|
||||||
|
--Performs lenition 1 with dentals: same as lenition 1 but leaves "d", "t" and "s" unmutated
|
||||||
|
oper lenition1dntls : Str -> Str = \str -> case str of {
|
||||||
|
start@("p"|"b"|"m"|"f"|"c"|"g") + rest => start + "h" + rest ;
|
||||||
|
start@("P"|"B"|"M"|"F"|"C"|"G") + rest => start + "h" + rest ;
|
||||||
|
_ => str
|
||||||
|
};
|
||||||
|
|
||||||
|
--Performs lenition 2: same as lenition 1 with dentals but also changes "s" into "ts"
|
||||||
|
oper lenition2 : Str -> Str = \str -> case str of {
|
||||||
|
start@("p"|"b"|"m"|"f"|"c"|"g") + rest => start + "h" + rest ;
|
||||||
|
start@("P"|"B"|"M"|"F"|"C"|"G") + rest => start + "h" + rest ;
|
||||||
|
("s"|"S") + ("p"|"t"|"c") + _ => str ; --the sequences "sp", "st", "sc" are never mutated
|
||||||
|
start@("s"|"S") + rest => "t-" + start + rest ;
|
||||||
|
_ => str
|
||||||
|
};
|
||||||
|
|
||||||
|
--Prefixes a "t" to words beginning with a vowel
|
||||||
|
oper prefixT : Str -> Str = \str -> case str of {
|
||||||
|
start@(#vowel) + rest => "t-" + start + rest ;
|
||||||
|
start@(#vowelCap) + rest => "t-" + start + rest ;
|
||||||
|
_ => str
|
||||||
|
};
|
||||||
|
|
||||||
|
--Prefixes a "h" to words beginning with a vowel
|
||||||
|
oper prefixH : Str -> Str = \str -> case str of {
|
||||||
|
start@(#vowel) + rest => "h-" + start + rest ;
|
||||||
|
start@(#vowelCap) + rest => "h-" + start + rest ;
|
||||||
|
_ => str
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user