summaryrefslogtreecommitdiff
path: root/examples/extmini/GrammarCmn.gf
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2012-08-24 06:30:10 +0000
committeraarne <aarne@chalmers.se>2012-08-24 06:30:10 +0000
commit2b77d3e0b05d59c9e7c5a9d50b3a850ddeed82dd (patch)
treecb40c4fda2f40d68d3ae1b16c0eae10bd7d67279 /examples/extmini/GrammarCmn.gf
parent57b260508c2fac00c15843003154d1cdf0ad083b (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.gf274
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 "为什么" ;
+
+}