diff options
| author | aarne <aarne@chalmers.se> | 2012-08-24 06:30:10 +0000 |
|---|---|---|
| committer | aarne <aarne@chalmers.se> | 2012-08-24 06:30:10 +0000 |
| commit | 2b77d3e0b05d59c9e7c5a9d50b3a850ddeed82dd (patch) | |
| tree | cb40c4fda2f40d68d3ae1b16c0eae10bd7d67279 /examples/extmini/GrammarEng.gf | |
| parent | 57b260508c2fac00c15843003154d1cdf0ad083b (diff) | |
extended mini resource grammar in examples, with Eng, Ita, Cmn (Mandarin Chinese by Jolene)
Diffstat (limited to 'examples/extmini/GrammarEng.gf')
| -rw-r--r-- | examples/extmini/GrammarEng.gf | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/examples/extmini/GrammarEng.gf b/examples/extmini/GrammarEng.gf new file mode 100644 index 000000000..5692255ba --- /dev/null +++ b/examples/extmini/GrammarEng.gf @@ -0,0 +1,241 @@ +concrete GrammarEng of Grammar = open ResEng, Prelude in { + lincat + S = {s : Str} ; + Cl = {s : ClForm => TTense => Bool => Str} ; + NP = ResEng.NP ; + -- {s : Case => Str ; a : Agr} ; + VP = ResEng.VP ; + -- {v : AgrVerb ; compl : Str} ; + AP = {s : Str} ; + CN = Noun ; -- {s : Number => Str} ; + Det = {s : Str ; n : Number} ; + N = Noun ; -- {s : Number => Str} ; + A = Adj ; -- {s : Str} ; + V = Verb ; -- {s : VForm => Str} ; + V2 = Verb ** {c : Str} ; + AdA = {s : Str} ; + Pol = {s : Str ; b : Bool} ; + Tense = {s : Str ; t : TTense} ; + Conj = {s : Str ; n : Number} ; + lin + UseCl t p cl = {s = t.s ++ p.s ++ cl.s ! ClDir ! t.t ! p.b} ; + PredVP np vp = { + s = \\d,t,b => + let + vps = vp.verb.s ! d ! t ! b ! np.a + in case d of { + ClDir => np.s ! Nom ++ vps.fin ++ vps.inf ++ vp.compl ; + ClInv => vps.fin ++ np.s ! Nom ++ vps.inf ++ vp.compl + } + } ; + + ComplV2 v2 np = { + verb = agrV v2 ; + compl = v2.c ++ np.s ! Acc + } ; + + UseV v = { + verb = agrV v ; + compl = [] + } ; + + DetCN det cn = { + s = \\_ => det.s ++ cn.s ! det.n ; + a = Ag det.n Per3 + } ; + + ModCN ap cn = { + s = \\n => ap.s ++ cn.s ! n + } ; + + CompAP ap = { + verb = copula ; + compl = ap.s + } ; + + AdAP ada ap = { + s = ada.s ++ ap.s + } ; + + ConjS co x y = {s = x.s ++ co.s ++ y.s} ; + ConjAP co x y = {s = x.s ++ co.s ++ y.s} ; + + ConjNP co nx ny = { + s = \\c => nx.s ! c ++ co.s ++ ny.s ! c ; + a = conjAgr co.n nx.a ny.a + } ; + + UseN n = n ; + + UseA adj = adj ; + + a_Det = mkDet (pre {#vowel => "an" ; _ => "a"}) Sg ; + + every_Det = mkDet "every" Sg ; + + the_Det = mkDet "the" Sg ; + + this_Det = mkDet "this" Sg ; + these_Det = mkDet "these" Pl ; + that_Det = mkDet "that" Sg ; + those_Det = mkDet "those" Pl ; + + i_NP = pronNP "I" "me" Sg Per1 ; + youSg_NP = pronNP "you" "you" Sg Per2 ; + he_NP = pronNP "her" "him" Sg Per3 ; + she_NP = pronNP "she" "her" Sg Per3 ; + we_NP = pronNP "we" "us" Pl Per1 ; + youPl_NP = pronNP "you" "you" Pl Per2 ; + they_NP = pronNP "they" "them" Pl Per3 ; + + very_AdA = ss "very" ; + + Pos = {s = [] ; b = True} ; + Neg = {s = [] ; b = False} ; + Pres = {s = [] ; t = TPres} ; + Perf = {s = [] ; t = TPerf} ; + Past = {s = [] ; t = TPast} ; + Fut = {s = [] ; t = TFut} ; + + and_Conj = {s = "and" ; n = Pl} ; + or_Conj = {s = "or" ; n = Sg} ; + +-- more + + lincat + Utt = {s : Str} ; + QS = {s : QForm => Str} ; + QCl = {s : QForm => TTense => Bool => Str} ; + ClSlash = {s : ClForm => TTense => Bool => Str ; c : Str} ; + Adv, Prep = {s : Str} ; + VS = Verb ; + VQ = Verb ; + VV = {s : AgrVerb ; isAux : Bool} ; + IP = {s : Str} ; + PN = {s : Str} ; + IAdv, Subj = {s : Str} ; + + lin + UttS s = s ; + UttQS s = {s = s.s ! QDir} ; + + UseQCl t p cl = {s = \\q => t.s ++ p.s ++ cl.s ! q ! t.t ! p.b} ; + + QuestCl cl = {s = \\q,t,p => + case q of { + QDir => cl.s ! ClInv ! t ! p ; + QIndir => "if" ++ cl.s ! ClDir ! t ! p + } + } ; + + QuestVP ip vp = { + s = \\d,t,b => + let + vps = vp.verb.s ! ClDir ! t ! b ! Ag Sg Per3 + in + ip.s ++ vps.fin ++ vps.inf ++ vp.compl + } ; +-- {- + QuestSlash ip cls = { + s = (\\q,t,p => ip.s ++ cls.s ! ClInv ! t ! p ++ cls.c) + | (\\q,t,p => cls.c ++ ip.s ++ cls.s ! ClInv ! t ! p) + } ; +-- -} + +{- 132451 rules, 5071 msec, vs. 1383, 78 msec in the previous + QuestSlash ip cls = { + s = \\q,t,p => (ip.s ++ cls.s ! ClInv ! t ! p ++ cls.c) + | (cls.c ++ ip.s ++ cls.s ! ClInv ! t ! p) + } ; +-} + + QuestIAdv iadv cl = {s = \\q,t,p => + iadv.s ++ + case q of { + QDir => cl.s ! ClInv ! t ! p ; + QIndir => cl.s ! ClDir ! t ! p + } + } ; + + SubjCl cl subj s = { + s = \\d,t,b => cl.s ! d ! t ! b ++ subj.s ++ s.s + } ; + + CompAdv adv = { + verb = copula ; + compl = adv.s + } ; + + PrepNP prep np = { + s = prep.s ++ np.s ! Acc + } ; + + ComplVS v s = { + verb = agrV v ; + compl = "that" ++ s.s + } ; + + ComplVQ v q = { + verb = agrV v ; + compl = q.s ! QIndir + } ; + + ComplVV v vp = { + verb = v.s ; + compl = case v.isAux of { + True => infVP vp ; + False => "to" ++ infVP vp + } + } ; + + SlashV2 np v2 = { + s = \\d,t,b => + let + vps = (agrV v2).s ! d ! t ! b ! np.a + in case d of { + ClDir => np.s ! Nom ++ vps.fin ++ vps.inf ; + ClInv => vps.fin ++ np.s ! Nom ++ vps.inf + } ; + c = v2.c + } ; + + SlashPrep cl prep = { + s = \\d,t,b => cl.s ! d ! t ! b ; + c = prep.s + } ; + + AdvVP vp adv = { + verb = vp.verb ; + compl = vp.compl ++ adv.s + } ; + + UsePN pn = { + s = \\_ => pn.s ; + a = Ag Sg Per3 + } ; + + AdvNP np adv = { + s = \\c => np.s ! c ++ adv.s ; + a = np.a + } ; + + who_IP = ss "who" ; + here_Adv = ss "here" ; + by_Prep = ss "by" ; + in_Prep = ss "in" ; + of_Prep = ss "of" ; + with_Prep = ss "with" ; + + can_VV = {s = agrAux "can" "could" "been able to" "be able to" ; isAux = True} ; + must_VV = {s = agrAux "must" "must" "had to" "have to" ; isAux = True} ; + want_VV = {s = agrV (regVerb "want") ; isAux = False} ; + + although_Subj = ss "although" ; + because_Subj = ss "because" ; + when_Subj = ss "when" ; + + when_IAdv = ss "when" ; + where_IAdv = ss "where" ; + why_IAdv = ss "why" ; + +} |
