summaryrefslogtreecommitdiff
path: root/book/examples/chapter9/GrammarIta.gf
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2010-11-22 12:55:37 +0000
committeraarne <aarne@chalmers.se>2010-11-22 12:55:37 +0000
commit76ba03b545600054176612201de78dca16eb65e1 (patch)
tree5615286b239bee637b32465e9cbf36807ab2c318 /book/examples/chapter9/GrammarIta.gf
parent0bf41793694e8b3101d09e34858eba8ab2c8c5b6 (diff)
started a subdir for the book
Diffstat (limited to 'book/examples/chapter9/GrammarIta.gf')
-rw-r--r--book/examples/chapter9/GrammarIta.gf141
1 files changed, 141 insertions, 0 deletions
diff --git a/book/examples/chapter9/GrammarIta.gf b/book/examples/chapter9/GrammarIta.gf
new file mode 100644
index 000000000..93b2b78fb
--- /dev/null
+++ b/book/examples/chapter9/GrammarIta.gf
@@ -0,0 +1,141 @@
+concrete GrammarIta of Grammar = open ResIta, Prelude in {
+ lincat
+ S = {s : Str} ;
+ Cl = {s : ResIta.Tense => Bool => Str} ;
+ NP = ResIta.NP ;
+ -- {s : Case => {clit,obj : Str ; isClit : Bool} ; a : Agr} ;
+ VP = ResIta.VP ;
+ -- {v : Verb ; clit : Str ; clitAgr : ClitAgr ; obj : Agr => Str} ;
+ AP = {s : Gender => Number => Str ; isPre : Bool} ;
+ CN = Noun ; -- {s : Number => Str ; g : Gender} ;
+ Det = {s : Gender => Case => Str ; n : Number} ;
+ N = Noun ; -- {s : Number => Str ; g : Gender} ;
+ A = Adj ; -- {s : Gender => Number => Str ; isPre : Bool} ;
+ V = Verb ; -- {s : VForm => Str ; aux : Aux} ;
+ V2 = Verb ** {c : Case} ;
+ AdA = {s : Str} ;
+ Pol = {s : Str ; b : Bool} ;
+ Tense = {s : Str ; t : ResIta.Tense} ;
+ Conj = {s : Str ; n : Number} ;
+ lin
+ UseCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! p.b} ;
+ PredVP np vp =
+ let
+ subj = (np.s ! Nom).obj ;
+ obj = vp.obj ! np.a ;
+ clit = vp.clit ;
+ verb = table {
+ Pres => agrV vp.v np.a ;
+ Perf => agrV (auxVerb vp.v.aux) np.a ++ agrPart vp.v np.a vp.clitAgr
+ }
+ in {
+ s = \\t,b => subj ++ neg b ++ clit ++ verb ! t ++ obj
+ } ;
+
+ ComplV2 v2 np =
+ let
+ nps = np.s ! v2.c
+ in {
+ v = v2 ;
+ clit = nps.clit ;
+ clitAgr = case <nps.isClit,v2.c> of {
+ <True,Acc> => CAgr np.a ;
+ _ => CAgrNo
+ } ;
+ obj = \\_ => nps.obj
+ } ;
+
+ UseV v = {
+ v = v ;
+ clit = [] ;
+ clitAgr = CAgrNo ;
+ obj = \\_ => []
+ } ;
+
+ DetCN det cn = {
+ s = \\c => {
+ obj = det.s ! cn.g ! c ++ cn.s ! det.n ;
+ clit = [] ;
+ isClit = False
+ } ;
+ a = Ag cn.g det.n Per3
+ } ;
+
+ ModCN ap cn = {
+ s = \\n => preOrPost ap.isPre (ap.s ! cn.g ! n) (cn.s ! n) ;
+ g = cn.g
+ } ;
+
+ CompAP ap = {
+ v = essere_V ;
+ clit = [] ;
+ clitAgr = CAgrNo ;
+ obj = \\ag => case ag of {
+ Ag g n _ => ap.s ! g ! n
+ }
+ } ;
+
+ AdAP ada ap = {
+ s = \\g,n => ada.s ++ ap.s ! g ! n ;
+ isPre = ap.isPre ;
+ } ;
+
+ ConjNP co nx ny = {
+ s = \\c => {
+ obj = (nx.s ! c).obj ++ co.s ++ (ny.s ! c).obj ;
+ clit = [] ;
+ isClit = False
+ } ;
+ a = conjAgr co.n nx.a ny.a
+ } ;
+
+ ConjS co x y = {s = x.s ++ co.s ++ y.s} ;
+
+ UseN n = n ;
+
+ UseA adj = adj ;
+
+ a_Det = adjDet (mkAdj "un" "una" [] [] True) Sg ;
+
+ every_Det = adjDet (regAdj "ogni") Sg ;
+
+ the_Det = {
+ s = table {
+ Masc => table {
+ Nom | Acc => elisForms "lo" "l'" "il" ;
+ Dat => elisForms "allo" "all'" "al"
+ } ;
+ Fem => table {
+ Nom | Acc => elisForms "la" "'l" "la" ;
+ Dat => elisForms "alla" "all'" "alla"
+ }
+ } ;
+ n = Sg
+ } ;
+
+ this_Det = adjDet (regAdj "questo") Sg ;
+ these_Det = adjDet (regAdj "questo") Pl ;
+ that_Det = adjDet quello_A Sg ;
+ those_Det = adjDet quello_A Pl ;
+
+ i_NP = pronNP "io" "mi" "mi" Masc Sg Per1 ;
+ she_NP = pronNP "lei" "la" "le" Fem Sg Per3 ;
+ we_NP = pronNP "noi" "ci" "ci" Masc Pl Per1 ;
+
+ very_AdA = ss "molto" ;
+
+ Pos = {s = [] ; b = True} ;
+ Neg = {s = [] ; b = False} ;
+ Pres = {s = [] ; t = ResIta.Pres} ;
+ Perf = {s = [] ; t = ResIta.Perf} ;
+
+ and_Conj = {s = "e" ; n = Pl} ;
+ or_Conj = {s = "o" ; n = Sg} ;
+
+ oper
+ quello_A : Adj = mkAdj
+ (elisForms "quello" "quell'" "quel") "quella"
+ (elisForms "quegli" "quegli" "quei") "quelle"
+ True ;
+
+}