mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
foods example moved and completed
This commit is contained in:
@@ -1,36 +0,0 @@
|
||||
--# -path=.:resource:prelude
|
||||
|
||||
concrete FoodsEng of Foods = open Prelude, MorphoEng in {
|
||||
|
||||
lincat
|
||||
S, Quality = SS ;
|
||||
Kind = {s : Number => Str} ;
|
||||
Item = {s : Str ; n : Number} ;
|
||||
|
||||
lin
|
||||
Is item quality = ss (item.s ++ (mkVerb "are" "is").s ! item.n ++ quality.s) ;
|
||||
This = det Sg "this" ;
|
||||
That = det Sg "that" ;
|
||||
These = det Pl "these" ;
|
||||
Those = det Pl "those" ;
|
||||
QKind quality kind = {s = \\n => quality.s ++ kind.s ! n} ;
|
||||
Wine = regNoun "wine" ;
|
||||
Cheese = regNoun "cheese" ;
|
||||
Fish = mkNoun "fish" "fish" ;
|
||||
Pizza = regNoun "pizza" ;
|
||||
Very = prefixSS "very" ;
|
||||
Fresh = ss "fresh" ;
|
||||
Warm = ss "warm" ;
|
||||
Italian = ss "Italian" ;
|
||||
Expensive = ss "expensive" ;
|
||||
Delicious = ss "delicious" ;
|
||||
Boring = ss "boring" ;
|
||||
|
||||
oper
|
||||
det : Number -> Str -> Noun -> {s : Str ; n : Number} = \n,d,cn -> {
|
||||
s = d ++ cn.s ! n ;
|
||||
n = n
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
50
examples/tutorial/foods/FoodsEng.gf
Normal file
50
examples/tutorial/foods/FoodsEng.gf
Normal file
@@ -0,0 +1,50 @@
|
||||
--# -path=.:resource:prelude
|
||||
|
||||
concrete FoodsEng of Foods = open Prelude in {
|
||||
|
||||
lincat
|
||||
S, Quality = SS ;
|
||||
Kind = {s : Number => Str} ;
|
||||
Item = {s : Str ; n : Number} ;
|
||||
|
||||
lin
|
||||
Is item quality = ss (item.s ++ copula item.n ++ quality.s) ;
|
||||
This = det Sg "this" ;
|
||||
That = det Sg "that" ;
|
||||
These = det Pl "these" ;
|
||||
Those = det Pl "those" ;
|
||||
QKind quality kind = {s = \\n => quality.s ++ kind.s ! n} ;
|
||||
Wine = noun "wine" "wines" ;
|
||||
Cheese = noun "cheese" "cheeses" ;
|
||||
Fish = noun "fish" "fish" ;
|
||||
Pizza = noun "pizza" "pizzas" ;
|
||||
Very = prefixSS "very" ;
|
||||
Fresh = ss "fresh" ;
|
||||
Warm = ss "warm" ;
|
||||
Italian = ss "Italian" ;
|
||||
Expensive = ss "expensive" ;
|
||||
Delicious = ss "delicious" ;
|
||||
Boring = ss "boring" ;
|
||||
|
||||
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
|
||||
} ;
|
||||
noun : Str -> Str -> {s : Number => Str} =
|
||||
\man,men -> {s = table {
|
||||
Sg => man ;
|
||||
Pl => men
|
||||
}
|
||||
} ;
|
||||
copula : Number -> Str =
|
||||
\n -> case n of {
|
||||
Sg => "is" ;
|
||||
Pl => "are"
|
||||
} ;
|
||||
}
|
||||
|
||||
77
examples/tutorial/foods/FoodsIta.gf
Normal file
77
examples/tutorial/foods/FoodsIta.gf
Normal file
@@ -0,0 +1,77 @@
|
||||
--# -path=.:resource:prelude
|
||||
|
||||
concrete FoodsIta of Foods = open Prelude in {
|
||||
|
||||
lincat
|
||||
S = SS ;
|
||||
Quality = {s : Gender => Number => Str} ;
|
||||
Kind = {s : Number => Str ; g : Gender} ;
|
||||
Item = {s : Str ; g : Gender ; n : Number} ;
|
||||
|
||||
lin
|
||||
Is item quality =
|
||||
ss (item.s ++ copula item.n ++ quality.s ! item.g ! item.n) ;
|
||||
This = det Sg "questo" "questa" ;
|
||||
That = det Sg "quello" "quella" ;
|
||||
These = det Pl "questi" "queste" ;
|
||||
Those = det Pl "quelli" "quelle" ;
|
||||
QKind quality kind = {
|
||||
s = \\n => kind.s ! n ++ quality.s ! kind.g ! n ;
|
||||
g = kind.g
|
||||
} ;
|
||||
Wine = noun "vino" "vini" Masc ;
|
||||
Cheese = noun "formaggio" "formaggi" Masc ;
|
||||
Fish = noun "pesce" "pesci" Masc ;
|
||||
Pizza = noun "pizza" "pizze" Fem ;
|
||||
Very qual = {s = \\g,n => "molto" ++ qual.s ! g ! n} ;
|
||||
Fresh = adjective "fresco" "fresca" "freschi" "fresche" ;
|
||||
Warm = regAdj "caldo" ;
|
||||
Italian = regAdj "italiano" ;
|
||||
Expensive = regAdj "caro" ;
|
||||
Delicious = regAdj "delizioso" ;
|
||||
Boring = regAdj "noioso" ;
|
||||
|
||||
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 = 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 : Gender => Number => Str} =
|
||||
\nero,nera,neri,nere -> {
|
||||
s = table {
|
||||
Masc => table {
|
||||
Sg => nero ;
|
||||
Pl => neri
|
||||
} ;
|
||||
Fem => table {
|
||||
Sg => nera ;
|
||||
Pl => nere
|
||||
}
|
||||
}
|
||||
} ;
|
||||
regAdj : Str -> {s : Gender => Number => Str} = \nero ->
|
||||
let ner = init nero
|
||||
in adjective nero (ner + "a") (ner + "i") (ner + "e") ;
|
||||
|
||||
copula : Number -> Str =
|
||||
\n -> case n of {
|
||||
Sg => "è" ;
|
||||
Pl => "sono"
|
||||
} ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user