summaryrefslogtreecommitdiff
path: root/gf-book/examples/chapter3/FoodsEng.gf
blob: 82bae21487d575a1102bdbbbdae2e62849ce6edb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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"} ;
}