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/GrammarCmn.gf | |
| parent | 57b260508c2fac00c15843003154d1cdf0ad083b (diff) | |
extended mini resource grammar in examples, with Eng, Ita, Cmn (Mandarin Chinese by Jolene)
Diffstat (limited to 'examples/extmini/GrammarCmn.gf')
| -rw-r--r-- | examples/extmini/GrammarCmn.gf | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/examples/extmini/GrammarCmn.gf b/examples/extmini/GrammarCmn.gf new file mode 100644 index 000000000..144db1b78 --- /dev/null +++ b/examples/extmini/GrammarCmn.gf @@ -0,0 +1,274 @@ +concrete GrammarCmn of Grammar = open ResCmn, Prelude in { +flags coding = utf8; + + lincat + S = {s : Aspect => Str} ; + Cl = {s : Bool => Aspect => Str; + np: Str; + vp: Bool => Aspect => Str} ; + NP = ResCmn.NP ; + -- {s : Str ; n : Number} ; + VP = ResCmn.VP ; + -- { verb : Verb ; compl : Str ; prePart : Str} ; + AP = {s : Str; monoSyl: Bool} ; + CN = ResCmn.Noun ; -- {s : Str; Counter : Str} ; + Det = {s : Str ; n : Number} ; + N = Noun ; -- {s : Str; Counter : Str} ; + A = ResCmn.Adj ; -- {s : Str; monoSyl: Bool} ; + V = ResCmn.Verb; + -- Verb : Type = {s : Bool => Aspect => Str ; vinf : Str} ; + V2 = ResCmn.Verb ; + AdA = {s : Str} ; + Pol = {s : Str ; b : Bool} ; + Tense = {s : Str ; t : TTense} ; + Conj = {s : SForm => Str} ; + + lin + + UseCl t p cl = {s = \\a => cl.s ! p.b ! a } ; + PredVP np vp = {s = \\p,a => np.s ++ vp.prePart ++ vp.verb.s ! p ! a ++ vp.compl; + np = np.s; + vp = \\p,a => vp.verb.s ! p ! a ++ vp.compl} ; + + ComplV2 v2 np = { + verb = v2 ; + compl = np.s ; + prePart = [] + } ; + + DetCN det cn = case det.n of { + Sg => {s = det.s ++ cn.Counter ++ cn.s ; n = Sg } ; + Pl => {s = det.s ++ "些" ++ cn.s ; n = Pl } + } ; + + ModCN ap cn = case ap.monoSyl of { + True => {s = ap.s ++ cn.s ; Counter = cn.Counter} ; + False => {s = ap.s ++ "的" ++ cn.s ; Counter = cn.Counter} + } ; + + CompAP ap = { + verb = copula ; + compl = ap.s ++ "的" ; + prePart = [] + } ; + + AdAP ada ap = { + s = ada.s ++ ap.s ; + monoSyl = False + } ; + + ConjS co x y = {s = \\a => x.s ! a ++ co.s ! Sent ++ y.s ! a} ; + ConjAP co x y = {s = x.s ++ co.s ! Phr APhrase ++ y.s; + monoSyl = False} ; + + ConjNP co x y = { + s = x.s ++ co.s ! Phr NPhrase ++ y.s ; + n = Pl + } ; + + + UseN n = n ; + + UseA adj = adj ; + + UseV v = { + verb = v ; + compl = [] ; + prePart = [] ; + } ; + + + a_Det = mkDet "一" Sg ; + every_Det = mkDet "每" Sg ; + the_Det = mkDet "那" Sg ; + + this_Det = mkDet "这" Sg ; + these_Det = mkDet "这" Pl ; + that_Det = mkDet "那" Sg ; + those_Det = mkDet "那" Pl ; + + i_NP = pronNP "我" Sg ; + youSg_NP = pronNP "你" Sg ; + he_NP = pronNP "他" Sg ; + she_NP = pronNP "她" Pl ; + we_NP = pronNP "我们" Pl ; + youPl_NP = pronNP "你们" Pl ; + they_NP = pronNP "他们" Pl ; + + very_AdA = ss "非常" ; + + + 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 = table { + Phr NPhrase => "和" ; + Phr APhrase => "而" ; + Phr VPhrase => "又" ; + Sent => [] + } + } ; + + or_Conj = {s = table { + Phr _ => "或" ; + Sent => "还是" + } + } ; + +-- more + + lincat + Utt = {s : Str} ; + QS = {s : Aspect => Str} ; + QCl = {s : Bool => Aspect => Str; + np: Str; + vp: Bool => Aspect => Str} ; + PN = {s : Str ; n : Number } ; + + ClSlash = {s : Bool => Aspect => Str ; + np: Str ; + vp: Bool => Aspect => Str ; + prepMain : Str ; + prepPre : Str} ; + Adv = {s : Str ; prePart : Str} ; + Prep = {s : Str ; prePart : Str} ; + VS = Verb ; + VQ = Verb ; + VV = {s : Bool => Aspect => Str ; vinf : Str} ; + IP = {s : Str} ; + Subj = {prePart : Str ;sufPart : Str} ; + IAdv = {s : Str} ; + + lin + + UttS s = {s = s.s ! (ResCmn.Perf | ResCmn.DurStat | + ResCmn.DurProg | ResCmn.Exper) } ; + + UttQS s = {s = s.s ! (ResCmn.Perf | ResCmn.DurStat | + ResCmn.DurProg | ResCmn.Exper) } ; + + UseQCl t p cl = {s = \\a => cl.s ! p.b ! a} ; + + QuestCl cl = {s = \\p,a => cl.s ! p ! a ++ "吗"; + np = cl.np ; + vp = cl.vp } ; + + QuestVP ip vp = { + s = \\p,a => ip.s ++ vp.prePart ++ vp.verb.s ! p ! a ++ vp.compl ; + np = ip.s ; + vp = \\p,a => vp.prePart ++ vp.verb.s ! p ! a ++ vp.compl + } ; + + QuestSlash ip cls = { + s =\\p,a => cls.prepPre ++ cls.np ++ cls.prepMain ++ cls.vp ! p ! a ++ "的是" ++ ip.s ; + np = cls.np ; + vp = cls.vp + } ; + + QuestIAdv iadv cl = {s = \\p,a => cl.np ++ iadv.s ++ cl.vp ! p ! a ; + np = cl.np ; + vp = \\p,a => cl.vp ! p ! a + } ; + + SubjCl cl subj s = { + s = \\p,a => subj.prePart ++ s.s ! a ++ subj.sufPart ++ cl.s ! p ! a ; + np = subj.prePart ++ s.s ! ResCmn.Perf ++ subj.sufPart ++ cl.np ; + vp = \\p,a => cl.vp ! p ! a } ; + + CompAdv adv = { + verb = {s = table { + True => table { _ => "在"} ; + False => table { _ => "不在"} + } ; + vinf = "在" + } ; + compl = adv.s ; + prePart = [] + } ; + + PrepNP prep np = { + s = np.s ++ prep.s ; + prePart = prep.prePart + } ; + + ComplVS v s = { + verb = v ; + compl = s.s ! ResCmn.Perf ; + prePart = [] + } ; + + ComplVQ v q = { + verb = v ; + compl = q.s ! ResCmn.Perf ; + prePart = [] + } ; + + ComplVV v vp = { + verb = v ; + compl = vp.verb.vinf ++ vp.compl ; + prePart = vp.prePart + } ; + + SlashV2 np v2 = { + s = \\p,a => np.s ++ v2.s ! p ! a ; + np = np.s ; + vp = \\p,a => v2.s ! p ! a ; + prepMain = [] ; + prepPre = [] + } ; + + SlashPrep cl prep = { + s = \\b, a => cl.s ! b ! a ; + np = cl.np ; + vp = cl.vp ; + prepMain = prep.s ; + prepPre = prep.prePart + } ; + + AdvVP vp adv = { + verb = vp.verb ; + compl = vp.compl ; + prePart = adv.prePart ++ adv.s + } ; + + UsePN pn = { + s = pn.s ; + n = pn.n + } ; + + AdvNP np adv = { + s = adv.prePart ++ adv.s ++ "的" ++ np.s ; + n = np.n + } ; + + who_IP = ss "谁" ; + here_Adv = mkAdv [] "这里" ; + by_Prep = mkPrep "旁边" [] ; + in_Prep = mkPrep "里" []; + of_Prep = mkPrep "的" []; + with_Prep = mkPrep "一起" "和"; + + can_VV = {s = table{True => table{ _ => "能"}; + False =>table{ _ => "不能"} } ; + vinf = [] }; + must_VV = {s = table{True => table{ _ => "必须"}; + False =>table{ _ => "不能"} } ; + vinf = []}; + want_VV = {s = table{True => table{ _ => "想"}; + False =>table{ _ => "不想"} } ; + vinf = []}; + + although_Subj = mkSubj "虽然" "但"; + because_Subj = mkSubj "因为" "所以" ; + when_Subj = mkSubj [] "的时候" ; + + when_IAdv = ss "什么时候" ; + where_IAdv = ss "在哪里" ; + why_IAdv = ss "为什么" ; + +} |
