summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2009-09-03 14:26:31 +0000
committeraarne <aarne@chalmers.se>2009-09-03 14:26:31 +0000
commit785ef9224bfe8eb07d599445126278128ec3fcb6 (patch)
tree0fd307be3dc817ad1e6c2978c9e83b19083eebea
parentc93d0a3a261ebf2f24606eee8f89d8da8b608c14 (diff)
revised FoodsHeb
-rw-r--r--contrib/summerschool/foods/FoodsHeb.gf123
1 files changed, 73 insertions, 50 deletions
diff --git a/contrib/summerschool/foods/FoodsHeb.gf b/contrib/summerschool/foods/FoodsHeb.gf
index 61710759c..3d76b639f 100644
--- a/contrib/summerschool/foods/FoodsHeb.gf
+++ b/contrib/summerschool/foods/FoodsHeb.gf
@@ -1,85 +1,108 @@
--# -path=alltenses
--- (c) 2009 Dana Dannells under LGPL
+--(c) 2009 Dana Dannells
+-- Licensed under LGPL
concrete FoodsHeb of Foods = open Prelude in {
- flags coding=utf8 ;
+ flags coding=utf8 ;
lincat
Comment = SS ;
- Quality = {s: Gender => Number => Str} ;
- Kind = {s : Number => Str ; g : Gender} ;
- Item = {s : Str ; g : Gender ; n : Number} ;
+ Quality = {s: Number => Species => Gender => Str} ;
+ Kind = {s : Number => Species => Str ; g : Gender ; mod : Modified} ;
+ Item = {s : Str ; g : Gender ; n : Number ; sp : Species ; mod : Modified} ;
+
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 "הם" "הן" ;
+ Pred item quality = ss (item.s ++ quality.s ! item.n ! Indef ! item.g ) ;
+ This = det Sg Def "הזה" "הזאת";
+ That = det Sg Def "ההוא" "ההיא" ;
+ These = det Pl Def "האלה" "האלה" ;
+ Those = det Pl Def "ההם" "ההן" ;
Mod quality kind = {
- s = \\n => kind.s ! n ++ quality.s ! kind.g ! n ;
- g = kind.g
+ s = \\n,sp => kind.s ! n ! sp ++ quality.s ! n ! sp ! kind.g;
+ g = kind.g ;
+ mod = T
} ;
- Wine = regNoun "יין" "יינות"Fem ;
+ Wine = regNoun "יין" "יינות" Masc ;
Cheese = regNoun "גבינה" "גבינות" Fem ;
Fish = regNoun "דג" "דגים" Masc ;
- Pizza = regNoun "פיצה" "פיצוי" Fem ;
- Very qual = {s = \\g,n => "מאוד" ++ qual.s ! g ! n} ;
+ Pizza = regNoun "פיצה" "פיצות" Fem ;
+ Very qual = {s = \\g,n,sp => "מאוד" ++ qual.s ! g ! n ! sp} ;
Fresh = regAdj "טרי" ;
Warm = regAdj "חם" ;
- Italian = irregAdj "איטלקי" ;
+ Italian = regAdj2 "איטלקי" ;
Expensive = regAdj "יקר" ;
- Delicious = irregAdj "נהדר" ;
- Boring = regAdj "משעמם";
+ Delicious = regAdj "טעים" ;
+ Boring = regAdj2 "משעמם";
param
Number = Sg | Pl ;
Gender = Masc | Fem ;
-
+ Species = Def | Indef ;
+ Modified = T | F ;
+
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} ;
+ Noun : Type = {s : Number => Species => Str ; g : Gender ; mod : Modified } ;
+ Adj : Type = {s : Number => Species => Gender => Str} ;
+
+ det : Number -> Species -> Str -> Str -> Noun ->
+ {s : Str ; g :Gender ; n : Number ; sp : Species ; mod : Modified} =
+ \n,sp,m,f,cn -> {
+ s = case cn.mod of { _ => cn.s ! n ! sp ++ case cn.g of {Masc => m ; Fem => f} };
g = cn.g ;
- n = n
+ n = n ;
+ sp = sp ;
+ mod = cn.mod
} ;
- regNoun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} =
- \gvina,gvinot,g -> {s = table {
- Sg => gvina ;
- Pl => gvinot
- };
- g=g
- } ;
+ noun : (gvina,hagvina,gvinot,hagvinot : Str) -> Gender -> Noun =
+ \gvina,hagvina,gvinot,hagvinot,g -> {
+ s = table {
+ Sg => table {
+ Indef => gvina ;
+ Def => hagvina
+ } ;
+ Pl => table {
+ Indef => gvinot ;
+ Def => hagvinot
+ }
+ } ;
+ g = g ;
+ mod = F
+ } ;
+
+ regNoun : Str -> Str -> Gender -> Noun =
+ \gvina,gvinot, g ->
+ noun gvina (defH gvina) gvinot (defH gvinot) g ;
+
+ defH : Str -> Str = \cn ->
+ case cn of {_ => "ה" + cn};
- replaceLastLetter : Str -> Str = \s ->
- init s + case last s of {
- "מ" => "ם" ; "ן" => "נ" ; "פ" => "ף" ; "ץ" => "צ" ; "כ" => "ך" ; c => c
- } ;
+ replaceLastLetter : Str -> Str = \c ->
+ case c of {"ף" => "פ" ; "ם" => "מ" ; "ן" => "נ" ; "ץ" => "צ" ; "ך" => "כ"; _ => c} ;
- adjective : (_,_,_,_ : Str) -> {s : Gender => Number => Str} =
+ adjective : (_,_,_,_ : Str) -> Adj =
\tov,tova,tovim,tovot -> {
s = table {
- Masc => table {
- Sg => tov ;
- Pl => tovim
- } ;
- Fem => table {
- Sg => tova ;
- Pl => tovot
- }
- }
+ Sg => table {
+ Indef => table { Masc => tov ; Fem => tova } ;
+ Def => table { Masc => defH tov ; Fem => defH tova }
+ } ;
+ Pl => table {
+ Indef => table {Masc => tovim ; Fem => tovot } ;
+ Def => table { Masc => defH tovim ; Fem => defH tovot }
+ }
+ }
} ;
- regAdj : Str -> {s : Gender => Number => Str} = \tov ->
+ regAdj : Str -> Adj = \tov ->
case tov of { to + c@? =>
- adjective tov (replaceLastLetter (to + c + "ה" )) (replaceLastLetter (to + c +"ים" )) (replaceLastLetter (to + c + "ות" ))};
+ adjective tov (to + replaceLastLetter (c) + "ה" ) (to + replaceLastLetter (c) +"ים" ) (to + replaceLastLetter (c) + "ות" )};
- irregAdj : Str -> {s : Gender => Number => Str} = \italki ->
+ regAdj2 : Str -> Adj = \italki ->
case italki of { italk+ c@? =>
- adjective italki (replaceLastLetter (italk + c +"ת" )) (replaceLastLetter (italk + c+ "ים" )) (replaceLastLetter (italk + c+ "ות" ))};
-
+ adjective italki (italk + replaceLastLetter (c) +"ת" ) (italk + replaceLastLetter (c)+ "ים" ) (italk + replaceLastLetter (c) + "ות" )};
+
} -- FoodsHeb