mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-22 19:22:50 -06:00
extended mini resource grammar in examples, with Eng, Ita, Cmn (Mandarin Chinese by Jolene)
This commit is contained in:
274
examples/extmini/GrammarCmn.gf
Normal file
274
examples/extmini/GrammarCmn.gf
Normal file
@@ -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 "为什么" ;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user