summaryrefslogtreecommitdiff
path: root/gf-book/examples/chapter3/ResIta.gf
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2011-01-11 15:46:43 +0000
committeraarne <aarne@chalmers.se>2011-01-11 15:46:43 +0000
commite7439d65b0e153434d3acc07df6e2a0972ee79ca (patch)
tree36716eec18256eeb600b4a552d9cc80f8ad7f16f /gf-book/examples/chapter3/ResIta.gf
parent276327f7f264e770478a6d8c6e683266505b0a55 (diff)
gf-book web page index and toc
Diffstat (limited to 'gf-book/examples/chapter3/ResIta.gf')
-rw-r--r--gf-book/examples/chapter3/ResIta.gf36
1 files changed, 36 insertions, 0 deletions
diff --git a/gf-book/examples/chapter3/ResIta.gf b/gf-book/examples/chapter3/ResIta.gf
new file mode 100644
index 000000000..17809c498
--- /dev/null
+++ b/gf-book/examples/chapter3/ResIta.gf
@@ -0,0 +1,36 @@
+resource ResIta = open Prelude in {
+ param
+ Number = Sg | Pl ;
+ Gender = Masc | Fem ;
+ oper
+ NounPhrase : Type =
+ {s : Str ; g : Gender ; n : Number} ;
+ Noun : Type = {s : Number => Str ; g : Gender} ;
+ Adjective : Type = {s : Gender => Number => Str} ;
+
+ det : Number -> Str -> Str -> Noun -> NounPhrase =
+ \n,m,f,cn -> {
+ s = table {Masc => m ; Fem => f} ! cn.g ++
+ cn.s ! n ;
+ g = cn.g ;
+ n = n
+ } ;
+ noun : Str -> Str -> Gender -> Noun =
+ \vino,vini,g -> {
+ s = table {Sg => vino ; Pl => vini} ;
+ g = g
+ } ;
+ adjective : (nero,nera,neri,nere : Str) -> Adjective =
+ \nero,nera,neri,nere -> {
+ s = table {
+ Masc => table {Sg => nero ; Pl => neri} ;
+ Fem => table {Sg => nera ; Pl => nere}
+ }
+ } ;
+ regAdj : Str -> Adjective = \nero ->
+ let ner : Str = init nero
+ in
+ adjective nero (ner+"a") (ner+"i") (ner+"e") ;
+ copula : Number => Str =
+ table {Sg => "è" ; Pl => "sono"} ;
+}