mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-15 15:59:32 -06:00
revised Pinyin versions of Chi files: now called Chi instead of Cmn for simplicity, but resideing in chinese/pinyin, which should appear in path before chinese and alltenses when used
This commit is contained in:
@@ -1,26 +0,0 @@
|
||||
concrete AdjectiveCmn of Adjective = CatCmn ** open ResCmn, Prelude in {
|
||||
|
||||
lin
|
||||
|
||||
PositA a = a ;
|
||||
|
||||
--ComparA a np = complexAP (a.s ++ than_s ++ np.s) ;
|
||||
ComparA a np = complexAP (than_s ++ np.s ++ a.s) ;
|
||||
|
||||
UseComparA a = complexAP (geng_s ++ a.s) ;
|
||||
|
||||
AdjOrd ord = complexAP ord.s ;
|
||||
|
||||
CAdvAP ad ap np = complexAP (ap.s ++ ad.s ++ ad.p ++ np.s) ;
|
||||
|
||||
ComplA2 a np = complexAP (a.s ++ appPrep a.c2 np.s) ;
|
||||
|
||||
ReflA2 a = complexAP (a.s ++ appPrep a.c2 reflPron) ;
|
||||
|
||||
SentAP ap sc = complexAP (ap.s ++ sc.s) ;
|
||||
|
||||
AdAP ada ap = complexAP (ada.s ++ ap.s) ;
|
||||
|
||||
UseA2 a = a ;
|
||||
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
concrete AdverbCmn of Adverb = CatCmn **
|
||||
open ResCmn, Prelude in {
|
||||
|
||||
lin
|
||||
PositAdvAdj a = {s = a.s ; advType = ATManner} ;
|
||||
|
||||
PrepNP prep np = ss (appPrep prep np.s) ** {advType = ATPlace} ; --- should depend on prep, np ? or treat in ExtraCmn ?
|
||||
|
||||
ComparAdvAdj cadv a np = ss (a.s ++ cadv.s ++ cadv.p ++ np.s) ** {advType = ATManner} ;
|
||||
|
||||
ComparAdvAdjS cadv a s = ss (a.s ++ cadv.s ++ cadv.p ++ s.s) ** {advType = ATManner} ;
|
||||
|
||||
AdAdv adv ad = ss (ad.s ++ adv.s) ** {advType = ad.advType} ;
|
||||
|
||||
SubjS subj s = ss (subj.prePart ++ s.s ++ subj.sufPart) ** {advType = ATManner} ;
|
||||
|
||||
AdnCAdv cadv = ss (cadv.s ++ conjThat) ** {advType = ATManner} ; -----
|
||||
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
--# -path=.:../abstract:../common:prelude
|
||||
|
||||
concrete AllCmn of AllChiAbs = LangCmn, ExtraCmn ;
|
||||
@@ -1,86 +0,0 @@
|
||||
concrete CatCmn of Cat = CommonX - [Tense, Temp, Adv] ** open ResCmn, Prelude in {
|
||||
|
||||
lincat
|
||||
|
||||
-- Tensed/Untensed
|
||||
|
||||
S = {s : Str} ;
|
||||
QS = {s : Str} ;
|
||||
RS = {s : Str} ;
|
||||
SSlash = {s : Str ; c2 : Preposition} ;
|
||||
|
||||
-- Sentence
|
||||
|
||||
Cl = Clause ; -- {s : Polarity => Aspect => Str ; np: Str ; vp: Polarity => Aspect => Str} ;
|
||||
|
||||
ClSlash = Clause ** {c2 : Preposition} ;
|
||||
|
||||
Imp = {s : Polarity => Str} ;
|
||||
|
||||
-- Question
|
||||
|
||||
QCl = {s : Polarity => Aspect => Str} ;
|
||||
IP = {s : Str} ;
|
||||
IComp = {s : Str} ;
|
||||
IDet, IQuant = {s : Str} ;
|
||||
|
||||
-- Relative
|
||||
|
||||
RCl = {s : Polarity => Aspect => Str} ;
|
||||
RP = {s : Str} ;
|
||||
|
||||
-- Verb
|
||||
|
||||
VP = ResCmn.VP ;
|
||||
Comp = ResCmn.VP ;
|
||||
VPSlash = ResCmn.VP ** {c2 : Preposition ; isPre : Bool} ; -- whether the missing arg is before verb
|
||||
|
||||
-- Adjective
|
||||
|
||||
AP = ResCmn.Adj ;
|
||||
|
||||
-- Noun
|
||||
|
||||
CN = ResCmn.Noun ;
|
||||
NP, Pron = ResCmn.NP ;
|
||||
Det = Determiner ;
|
||||
Quant = Determiner ** {pl : Str} ;
|
||||
Predet = {s : Str} ; ----
|
||||
Ord = {s : Str} ;
|
||||
Num = {s : Str ; numType : NumType} ;
|
||||
|
||||
Adv = {s : Str ; advType : AdvType} ;
|
||||
|
||||
-- Numeral
|
||||
|
||||
Numeral = {s,p : Str} ;
|
||||
Card, Digits = {s : Str} ;
|
||||
|
||||
-- Structural
|
||||
|
||||
Conj = {s : ConjForm => {s1,s2 : Str}} ;
|
||||
Subj = {prePart : Str ; sufPart : Str} ;
|
||||
Prep = Preposition ;
|
||||
|
||||
-- Open lexical classes, e.g. Lexicon
|
||||
|
||||
V, VS, VQ, VA = Verb ;
|
||||
V2, V2Q, V2S = Verb ** {c2 : Preposition} ;
|
||||
V3, V2A, V2V = Verb ** {c2, c3 : Preposition} ;
|
||||
VV = Verb ;
|
||||
|
||||
A = ResCmn.Adj ;
|
||||
A2 = ResCmn.Adj ** {c2 : Preposition} ;
|
||||
|
||||
N = ResCmn.Noun ;
|
||||
N2 = ResCmn.Noun ** {c2 : Preposition} ;
|
||||
N3 = ResCmn.Noun ** {c2,c3 : Preposition} ;
|
||||
PN = ResCmn.NP ;
|
||||
|
||||
-- overridden
|
||||
|
||||
Temp = {s : Str ; t : Aspect} ;
|
||||
Tense = {s : Str ; t : Aspect} ;
|
||||
|
||||
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
concrete ConjunctionCmn of Conjunction = CatCmn ** open ResCmn, Prelude, Coordination in {
|
||||
|
||||
lin
|
||||
|
||||
ConjS c = conjunctDistrSS (c.s ! CSent) ;
|
||||
ConjAdv c as = conjunctDistrSS (c.s ! CSent) as ** {advType = ATPlace} ; ---- ??
|
||||
ConjNP c = conjunctDistrSS (c.s ! CPhr CNPhrase) ;
|
||||
ConjAP c as = conjunctDistrSS (c.s ! CPhr CAPhrase) as ** {monoSyl = False} ;
|
||||
ConjRS c = conjunctDistrSS (c.s ! CSent) ;
|
||||
|
||||
-- These fun's are generated from the list cat's.
|
||||
|
||||
BaseS = twoSS ;
|
||||
ConsS = consrSS duncomma ;
|
||||
BaseAdv = twoSS ;
|
||||
ConsAdv = consrSS duncomma ;
|
||||
BaseNP = twoSS ;
|
||||
ConsNP = consrSS duncomma ;
|
||||
BaseAP = twoSS ;
|
||||
ConsAP = consrSS duncomma ;
|
||||
BaseRS = twoSS ;
|
||||
ConsRS = consrSS duncomma ;
|
||||
|
||||
lincat
|
||||
[S] = {s1,s2 : Str} ;
|
||||
[Adv] = {s1,s2 : Str} ;
|
||||
[NP] = {s1,s2 : Str} ;
|
||||
[AP] = {s1,s2 : Str} ;
|
||||
[RS] = {s1,s2 : Str} ;
|
||||
|
||||
}
|
||||
5510
lib/src/chinese/pinyin/DictEngChi.gf
Normal file
5510
lib/src/chinese/pinyin/DictEngChi.gf
Normal file
File diff suppressed because it is too large
Load Diff
59
lib/src/chinese/pinyin/ExtraChi.gf
Normal file
59
lib/src/chinese/pinyin/ExtraChi.gf
Normal file
@@ -0,0 +1,59 @@
|
||||
concrete ExtraChi of ExtraChiAbs = CatChi **
|
||||
open ResChi, Coordination, Prelude in {
|
||||
|
||||
flags coding = utf8 ;
|
||||
|
||||
lincat
|
||||
VPS = {s : Str} ;
|
||||
[VPS] = {s1,s2 : Str} ;
|
||||
VPI = {s : Str} ; --- ???
|
||||
[VPI] = {s1,s2 : Str} ; --- ???
|
||||
|
||||
lin
|
||||
PassVPSlash vps = insertAdv (mkNP passive_s) vps ;
|
||||
|
||||
MkVPS t p vp = {s = t.s ++ p.s ++ (mkClause [] vp).s ! p.p ! t.t} ;
|
||||
ConjVPS c = conjunctDistrSS (c.s ! CSent) ;
|
||||
BaseVPS = twoSS ;
|
||||
ConsVPS = consrSS duncomma ;
|
||||
|
||||
PredVPS np vps = {s = np.s ++ vps.s} ;
|
||||
|
||||
MkVPI vp = {s = (mkClause [] vp).s ! Pos ! APlain} ; --- ?? almost just a copy of VPS
|
||||
ConjVPI c = conjunctDistrSS (c.s ! CSent) ;
|
||||
BaseVPI = twoSS ;
|
||||
ConsVPI = consrSS duncomma ;
|
||||
|
||||
GenNP np = {s,pl = np.s ++ possessive_s ; detType = DTPoss} ;
|
||||
|
||||
GenRP nu cn = {s = cn.s ++ relative_s} ; ---- ??
|
||||
|
||||
|
||||
-----------------------
|
||||
-- Chinese-only extras
|
||||
|
||||
lincat
|
||||
Aspect = {s : Str ; a : ResChi.Aspect} ;
|
||||
lin
|
||||
PredBareAP np ap = case ap.hasAdA of {
|
||||
True => mkClause np.s (insertObj (mkNP ap.s) (predV nocopula [])) ;
|
||||
False => mkClause np.s (insertObj (mkNP ap.s) (predV hen_copula []))
|
||||
} ;
|
||||
QuestRepV cl = {
|
||||
s = \\p,a =>
|
||||
let
|
||||
v = cl.vp.verb ;
|
||||
verb = case a of {
|
||||
APlain => v.s ++ v.neg ++ v.sn ;
|
||||
APerf => v.s ++ "bu4" ++ v.sn ++ v.pp ;
|
||||
ADurStat => v.s ++ "bu4" ++ v.sn ;
|
||||
ADurProg => v.dp ++ v.neg ++ v.dp ++ v.sn ; -- mei or bu
|
||||
AExper => v.s ++ v.neg ++ v.sn ++ v.ep
|
||||
}
|
||||
in
|
||||
cl.np ++ cl.vp.prePart ++ verb ++ cl.vp.compl
|
||||
} ;
|
||||
|
||||
TopicAdvCl adv cl = mkClause (adv.s ++ cl.np) cl.vp ;
|
||||
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
concrete ExtraCmn of ExtraChiAbs = CatCmn **
|
||||
open ResCmn, Prelude in {
|
||||
|
||||
lincat
|
||||
Aspect = {s : Str ; a : ResCmn.Aspect} ;
|
||||
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
--# -path=.:../abstract:../common:prelude
|
||||
|
||||
concrete GrammarCmn of Grammar =
|
||||
NounCmn,
|
||||
VerbCmn,
|
||||
AdjectiveCmn,
|
||||
AdverbCmn,
|
||||
NumeralCmn,
|
||||
SentenceCmn,
|
||||
QuestionCmn,
|
||||
RelativeCmn,
|
||||
ConjunctionCmn,
|
||||
PhraseCmn,
|
||||
TextCmn,
|
||||
StructuralCmn,
|
||||
IdiomCmn,
|
||||
TenseCmn
|
||||
** {
|
||||
|
||||
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
||||
|
||||
} ;
|
||||
@@ -1,27 +0,0 @@
|
||||
concrete IdiomCmn of Idiom = CatCmn ** open Prelude, ResCmn in {
|
||||
|
||||
lin
|
||||
---- formal subject, e.g. it is hot ?? now empty subject
|
||||
ImpersCl vp = mkClause [] vp ;
|
||||
--can be empty, or ImpersCl vp = mkClause "天" vp ; but "天" only used to describe weather(e.g. it's raining)
|
||||
|
||||
---- one wants to learn Chinese ?? now empty subject
|
||||
GenericCl vp = mkClause [] vp ;
|
||||
-- GenericCl vp = mkClause "有人" vp ; (meaning: there is a person)
|
||||
|
||||
---- it is John who did it
|
||||
CleftNP np rs = mkClause rs.s copula np.s ; -- did it + de + is I
|
||||
|
||||
CleftAdv ad s = mkClause (s.s ++ possessive_s) copula ad.s ; -- she sleeps + de + is here
|
||||
|
||||
ExistNP np = mkClause [] (regVerb you_s) np.s ; ---- infl of you
|
||||
|
||||
ExistIP ip = {s = (mkClause [] (regVerb you_s) ip.s).s} ; ---- infl of you
|
||||
|
||||
ProgrVP vp = vp ; ----
|
||||
|
||||
ImpPl1 vp = ss (zan_s ++ men_s ++ infVP vp ++ ba0_s) ;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
|
||||
concrete LangCmn of Lang =
|
||||
GrammarCmn,
|
||||
LexiconCmn
|
||||
** {
|
||||
|
||||
flags startcat = Phr ; unlexer = concat ; lexer = text ;
|
||||
|
||||
} ;
|
||||
@@ -1,5 +1,5 @@
|
||||
concrete LexiconCmn of Lexicon = CatCmn **
|
||||
open ParadigmsCmn, ResCmn, Prelude in {
|
||||
concrete LexiconChi of Lexicon = CatChi **
|
||||
open ParadigmsChi, ResChi, Prelude in {
|
||||
|
||||
flags
|
||||
coding = utf8 ;
|
||||
@@ -4,14 +4,19 @@ import Numeric
|
||||
main = do
|
||||
s <- readFile pinyinFile
|
||||
let m = c2pMap (mkList (words s))
|
||||
mapM_ (mkPinyin m) ["Lexicon", "Numeral", "Res", "Structural"]
|
||||
mapM_ (mkPinyin m) resModules
|
||||
-- mapM_ (mkPinyin m) ["HSKGrammar"]
|
||||
return ()
|
||||
|
||||
pinyinFile = "pinyin.txt"
|
||||
|
||||
resModules = [mo | mo <-
|
||||
["DictEng","Extra","Lexicon", "Numeral", "Paradigms","Res", "Structural","Symbol"]
|
||||
]
|
||||
|
||||
mkPinyin ma mo = do
|
||||
s <- readFile ("../" ++ runghc MkPinyin.hsmo ++ "Chi.gf")
|
||||
writeFile (mo ++ "Cmn.gf") (useMapGF ma s)
|
||||
s <- readFile ("../" ++ mo ++ "Chi.gf")
|
||||
writeFile (mo ++ "Chi.gf") (useMapGF ma s)
|
||||
|
||||
|
||||
--import Pinyin (c2pMap, useMapGF, mkList)
|
||||
@@ -32,8 +37,8 @@ chop = words . map unslash
|
||||
unslash c = c
|
||||
|
||||
useMapGF m s = case s of
|
||||
'C':'h':'i':'n':cs -> "Chin" ++ useMapGF m cs -- don't change Chinese, China
|
||||
'C':'h':'i' :cs -> "Cmn" ++ useMapGF m cs -- to change language code Chi to Cmn
|
||||
--- 'C':'h':'i':'n':cs -> "Chin" ++ useMapGF m cs -- don't change Chinese, China
|
||||
--- 'C':'h':'i' :cs -> "Cmn" ++ useMapGF m cs -- to change language code Chi to Cmn
|
||||
'"':cs -> '"':convert cs
|
||||
c :cs -> c :useMapGF m cs
|
||||
_ -> s
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
concrete NounCmn of Noun = CatCmn ** open ResCmn, Prelude in {
|
||||
|
||||
lin
|
||||
DetCN det cn = case det.detType of {
|
||||
DTFull Sg => {s = det.s ++ cn.c ++ cn.s} ; -- this house
|
||||
DTFull Pl => {s = det.s ++ xie_s ++ cn.s} ; -- these houses
|
||||
DTNum => {s = det.s ++ cn.c ++ cn.s} ; -- (these) five houses
|
||||
DTPoss => {s = det.s ++ cn.s} -- our (five) houses
|
||||
} ;
|
||||
UsePN pn = pn ;
|
||||
UsePron p = p ;
|
||||
|
||||
DetNP det = {s = det.s ++ ge_s} ; ----
|
||||
|
||||
PredetNP pred np = mkNP (pred.s ++ possessive_s ++ np.s) ;
|
||||
|
||||
PPartNP np v2 = mkNP ((predV v2).verb.s ++ possessive_s ++ np.s) ; ---- ??
|
||||
|
||||
AdvNP np adv = mkNP (adv.s ++ possessive_s ++ np.s) ;
|
||||
|
||||
DetQuant quant num = {
|
||||
s = case num.numType of {
|
||||
NTFull => quant.pl ++ num.s ; -- to avoid yi in indef
|
||||
_ => quant.s ++ num.s
|
||||
} ;
|
||||
detType = case num.numType of {
|
||||
NTFull => DTNum ; -- five
|
||||
NTVoid n => case quant.detType of {
|
||||
DTPoss => DTPoss ; -- our
|
||||
_ => DTFull n -- these/this
|
||||
}
|
||||
}
|
||||
} ;
|
||||
|
||||
DetQuantOrd quant num ord = {
|
||||
s = quant.s ++ num.s ++ ord.s ;
|
||||
detType = case num.numType of {
|
||||
NTFull => DTNum ; -- five
|
||||
NTVoid n => DTFull n -- these/this ; also our, when ord is present
|
||||
}
|
||||
} ;
|
||||
|
||||
PossPron p = {
|
||||
s,pl = p.s ++ possessive_s ;
|
||||
detType = DTPoss
|
||||
} ;
|
||||
|
||||
NumSg = {s = [] ; numType = NTVoid Sg} ;
|
||||
NumPl = {s = [] ; numType = NTVoid Pl} ;
|
||||
|
||||
NumCard n = n ** {numType = NTFull} ;
|
||||
NumDigits d = d ** {numType = NTFull} ;
|
||||
OrdDigits d = {s = ordinal_s ++ d.s} ;
|
||||
|
||||
NumNumeral numeral = {s = numeral.p} ; -- liang instead of yi
|
||||
OrdNumeral numeral = {s = ordinal_s ++ numeral.s} ;
|
||||
|
||||
AdNum adn num = {s = adn.s ++ num.s ; hasC = True} ;
|
||||
|
||||
OrdSuperl a = {s = superlative_s ++ a.s} ;
|
||||
|
||||
DefArt = mkQuant [] [] DTPoss ; -- use that_Quant if you want the_s
|
||||
IndefArt = mkQuant yi_s [] (DTFull Sg) ; -- empty in the plural
|
||||
|
||||
MassNP cn = cn ;
|
||||
|
||||
UseN n = n ;
|
||||
UseN2 n = n ;
|
||||
Use2N3 f = {s = f.s ; c = f.c ; c2 = f.c2} ;
|
||||
Use3N3 f = {s = f.s ; c = f.c ; c2 = f.c3} ;
|
||||
|
||||
ComplN2 f x = {s = appPrep f.c2 x.s ++ f.s ; c = f.c} ;
|
||||
ComplN3 f x = {s = appPrep f.c2 x.s ++ f.s ; c = f.c ; c2 = f.c3} ;
|
||||
|
||||
AdjCN ap cn = case ap.monoSyl of {
|
||||
True => {s = ap.s ++ cn.s ; c = cn.c} ;
|
||||
False => {s = ap.s ++ possessive_s ++ cn.s ; c = cn.c}
|
||||
} ;
|
||||
|
||||
RelCN cn rs = {s = rs.s ++ cn.s ; c = cn.c} ;
|
||||
AdvCN cn ad = {s = ad.s ++ possessive_s ++ cn.s ; c = cn.c} ;
|
||||
SentCN cn cs = {s = cs.s ++ cn.s ; c = cn.c} ;
|
||||
ApposCN cn np = {s = np.s ++ cn.s ; c = cn.c} ;
|
||||
|
||||
RelNP np rs = mkNP (rs.s ++ np.s) ;
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
concrete NumeralCmn of Numeral = CatCmn ** open ResCmn, Prelude in {
|
||||
concrete NumeralChi of Numeral = CatChi ** open ResChi, Prelude in {
|
||||
|
||||
flags coding = utf8 ;
|
||||
|
||||
@@ -58,8 +58,8 @@ lin pot111 =
|
||||
s,p = table {
|
||||
shi => mkD "shi2yi1" "shi2yi1" ;
|
||||
shi0 => mkD "yi1shi2yi1" "yi1shi2yi1" ;
|
||||
wan => mkD "shi2yi1wan4" "shi2yi1wan4" ;
|
||||
wan0 => mkD "shi2yi1wan4" "shi2yi1wan4"}} ;
|
||||
wan => mkD "yi1wan4yi1qian1" "yi1wan4yi1qian1" ; -- 11.16 by chenpeng wan => mkD "shi2yi1wan4" "shi2yi1wan4" ;
|
||||
wan0 => mkD "yi1wan4yi1qian1" "yi1wan4yi1qian1"}} ; -- 11.16 by chenpeng wan0 => mkD "shi2yi1wan4" "shi2yi1wan4"}} ;
|
||||
lin pot1to19 d =
|
||||
{inh = nozero ;
|
||||
s,p = table {
|
||||
@@ -81,7 +81,7 @@ lin pot0as1 n =
|
||||
wan0 => n.s ++ mkD "qian1" "qian1"}
|
||||
} ;
|
||||
lin pot1 d =
|
||||
{inh = zero ;
|
||||
{inh = nozero ; -- inh = zero
|
||||
s,p = table {
|
||||
shi => d.s ++ mkD "shi2" "shi2" ;
|
||||
shi0 => d.s ++ mkD "shi2" "shi2" ;
|
||||
@@ -116,10 +116,10 @@ lin pot2 d =
|
||||
lin pot2plus d e =
|
||||
{inh = nozero ;
|
||||
s,p = table {
|
||||
bai => d.s ++ mkD "" "bai3" ++ (ling ! <e.inh,e.inh>) ++ e.s ! shi0 ;
|
||||
bai0 => d.s ++ mkD "" "bai3" ++ (ling ! <e.inh,e.inh>) ++ e.s ! shi0 ;
|
||||
shiwan => d.s ++ mkD "" "shi2" ++ (Wan ! (e.inh)) ++ e.s ! wan ;
|
||||
shiwan0 => d.s ++ mkD "" "shi2" ++ (Wan ! (e.inh)) ++ e.s ! wan0}} ;
|
||||
bai => d.s ++ mkD "bai3" "bai3" ++ (ling ! <e.inh,e.inh>) ++ e.s ! shi0 ; --why omit "bai3"? i add it /chenpeng
|
||||
bai0 => d.s ++ mkD "bai3" "bai3" ++ (ling ! <e.inh,e.inh>) ++ e.s ! shi0 ; --why omit "bai3"? i add it /chenpeng
|
||||
shiwan => d.s ++ mkD "shi2" "shi2" ++ (Wan ! (e.inh)) ++ e.s ! wan ; --why omit "shi2"? i add it /chenpeng
|
||||
shiwan0 => d.s ++ mkD "shi2" "shi2" ++ (Wan ! (e.inh)) ++ e.s ! wan0}} ;--why omit "shi2"? i add it /chenpeng
|
||||
lin pot2as3 n =
|
||||
{s = n.s ! bai ; p = n.p ! bai} ;
|
||||
lin pot3 n =
|
||||
199
lib/src/chinese/pinyin/ParadigmsChi.gf
Normal file
199
lib/src/chinese/pinyin/ParadigmsChi.gf
Normal file
@@ -0,0 +1,199 @@
|
||||
resource ParadigmsChi = open CatChi, ResChi, Prelude in {
|
||||
|
||||
flags coding = utf8 ;
|
||||
|
||||
flags coding=utf8;
|
||||
oper
|
||||
mkN = overload {
|
||||
mkN : (man : Str) -> N
|
||||
= \n -> lin N (regNoun n ge_s) ;
|
||||
mkN : (man : Str) -> Str -> N
|
||||
= \n,c -> lin N (regNoun n c)
|
||||
} ;
|
||||
|
||||
mkN2 = overload {
|
||||
mkN2 : Str -> N2
|
||||
= \n -> lin N2 (regNoun n ge_s ** {c2 = emptyPrep}) ; ---- possessive ?
|
||||
---- mkN2 : N -> Str -> N2
|
||||
---- = \n,p -> lin N2 (n ** {c2 = mkPrep p}) ;
|
||||
} ;
|
||||
|
||||
mkN3 : N -> Prep -> Prep -> N3
|
||||
= \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ;
|
||||
|
||||
|
||||
mkPN : (john : Str) -> PN
|
||||
= \s -> lin PN {s = word s} ;
|
||||
|
||||
mkA = overload {
|
||||
mkA : (small : Str) -> A
|
||||
= \a -> lin A (simpleAdj a) ;
|
||||
mkA : (small : Str) -> Bool -> A
|
||||
= \a,b -> lin A (mkAdj a b) ;
|
||||
} ;
|
||||
|
||||
mkA2 : Str -> A2 = \a -> lin A2 (simpleAdj a ** {c2 = emptyPrep}) ;
|
||||
|
||||
mkV = overload {
|
||||
mkV : (walk : Str) -> V
|
||||
= \walk -> case walk of {
|
||||
v + "+" + p => lin V (regVerb (v + p)) ;
|
||||
_ => lin V (regVerb walk)
|
||||
} ;
|
||||
mkV : (arrive : Str) -> Str -> Str -> Str -> Str -> V
|
||||
= \arrive,pp,ds,dp,ep -> lin V (mkVerb arrive pp ds dp ep neg_s) ;
|
||||
mkV : (arrive : Str) -> Str -> Str -> Str -> Str -> Str -> V
|
||||
= \arrive,pp,ds,dp,ep,neg -> lin V (mkVerb arrive pp ds dp ep neg) ;
|
||||
} ;
|
||||
|
||||
mkV2 = overload {
|
||||
mkV2 : Str -> V2
|
||||
= \s -> case s of {
|
||||
v + "+" + p => lin V2 (regVerb v ** {c2 = emptyPrep ; hasPrep = False ; part = word p}) ;
|
||||
v + "*" + p => lin V2 (regVerb v **
|
||||
{c2 = ResChi.mkPreposition p [] (getAdvType p) ; hasPrep = True ; part = []}) ;
|
||||
_ => lin V2 (regVerb s ** {c2 = emptyPrep ; hasPrep = False ; part = []})
|
||||
} ;
|
||||
mkV2 : V -> V2
|
||||
= \v -> lin V2 (v ** {c2 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
mkV2 : V -> Prep -> V2
|
||||
= \v,p -> lin V2 (v ** {c2 = p ; hasPrep = True ; part = []}) ;
|
||||
} ;
|
||||
|
||||
mkV3 = overload {
|
||||
mkV3 : Str -> V3
|
||||
= \s -> lin V3 (regVerb s ** {c2,c3 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
mkV3 : V -> V3
|
||||
= \s -> lin V3 (s ** {c2,c3 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
mkV3 : V -> Prep -> Prep -> V3
|
||||
= \v,p,q -> lin V3 (v ** {c2 = p ; c3 = q ; hasPrep = True ; part = []}) ;
|
||||
} ;
|
||||
|
||||
mkVV : Str -> VV = ----
|
||||
\v -> lin VV (regVerb v) ;
|
||||
|
||||
mkVQ = overload {
|
||||
mkVQ : Str -> VQ =
|
||||
\v -> lin VQ (regVerb v) ;
|
||||
mkVQ : V -> VQ =
|
||||
\v -> lin VQ v ;
|
||||
} ;
|
||||
|
||||
mkVS = overload {
|
||||
mkVS : V -> VS =
|
||||
\v -> lin VS v ;
|
||||
mkVS : Str -> VS =
|
||||
\v -> lin VS (regVerb v) ;
|
||||
} ;
|
||||
|
||||
mkVA = overload {
|
||||
mkVA : Str -> VA =
|
||||
\v -> lin VA (regVerb v) ;
|
||||
mkVA : V -> VA =
|
||||
\v -> lin VA v ;
|
||||
} ;
|
||||
|
||||
mkV2Q = overload {
|
||||
mkV2Q : V -> V2Q =
|
||||
\v -> lin V2Q (v ** {c2 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
mkV2Q : Str -> V2Q =
|
||||
\v -> lin V2Q (regVerb v ** {c2 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
} ;
|
||||
|
||||
mkV2V= overload {
|
||||
mkV2V : Str -> V2V =
|
||||
\s -> lin V2V (regVerb s ** {c2 = emptyPrep ; c3 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
|
||||
mkV2V : V -> V2V =
|
||||
\v -> lin V2V (v ** {c2 = emptyPrep ; c3 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
---- mkV2V : V -> Str -> Str -> V2V =
|
||||
---- \v,p,q -> lin V2V (v ** {c2 = mkPrep p ; c3 = mkPrep q}) ;
|
||||
} ;
|
||||
|
||||
mkV2S = overload {
|
||||
mkV2S : Str -> V2S =
|
||||
\s -> lin V2S (regVerb s ** {c2 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
mkV2S : V -> V2S =
|
||||
\v -> lin V2S (v ** {c2 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
---- mkV2S : V -> Str -> V2S =
|
||||
---- \v,p -> lin V2S (v ** {c2 = mkPrep p}) ;
|
||||
} ;
|
||||
|
||||
mkV2A = overload {
|
||||
mkV2A : Str -> V2A
|
||||
= \s -> lin V2A (regVerb s ** {c2 = emptyPrep ; c3 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
mkV2A : V -> V2A
|
||||
= \v -> lin V2A (v ** {c2 = emptyPrep ; c3 = emptyPrep ; hasPrep = False ; part = []}) ;
|
||||
} ;
|
||||
---- mkV2A : V -> Str -> Str -> V2A
|
||||
---- = \v,p,q -> lin V2A (v ** {c2 = mkPrep p ; c3 = mkPrep q}) ;
|
||||
|
||||
mkAdv = overload {
|
||||
mkAdv : Str -> Adv
|
||||
= \s -> lin Adv {s = word s ; advType = getAdvType s} ;
|
||||
mkAdv : Str -> AdvType -> Adv
|
||||
= \s,at -> lin Adv {s = word s ; advType = at} ;
|
||||
} ;
|
||||
|
||||
AdvType : Type
|
||||
= ResChi.AdvType ;
|
||||
placeAdvType : AdvType -- without "zai4" included
|
||||
= ATPlace False ;
|
||||
zai_placeAdvType : AdvType -- with "zai4" included
|
||||
= ATPlace True ;
|
||||
timeAdvType : AdvType
|
||||
= ATTime ;
|
||||
mannerAdvType : AdvType
|
||||
= ATManner ;
|
||||
|
||||
mkPrep = overload { -- first pre part, then optional post part
|
||||
mkPrep : Str -> Prep
|
||||
= \s -> lin Prep (ResChi.mkPreposition s [] (getAdvType s)) ;
|
||||
mkPrep : Str -> Str -> Prep
|
||||
= \s,t -> lin Prep (ResChi.mkPreposition s t (getAdvType s)) ;
|
||||
mkPrep : Str -> Str -> AdvType -> Prep
|
||||
= \s,t,a -> lin Prep (ResChi.mkPreposition s t a) ;
|
||||
} ;
|
||||
|
||||
mkInterj : Str -> Interj
|
||||
= \s -> lin Interj {s = word s} ;
|
||||
|
||||
emptyPrep : Preposition = mkPrep [] ;
|
||||
|
||||
mkpNP : Str -> CatChi.NP
|
||||
= \s -> lin NP {s = word s} ;
|
||||
mkAdV : Str -> AdV
|
||||
= \s -> lin AdV {s = word s} ;
|
||||
mkAdN : Str -> AdN
|
||||
= \s -> lin AdN {s = word s} ;
|
||||
mkSubj : Str -> Subj
|
||||
= \s -> lin Subj (ResChi.mkSubj s []) ;
|
||||
mkConj : Str -> Conj
|
||||
= \s -> lin Conj {s = \\_ => mkConjForm s} ;
|
||||
mkpDet : Str -> Det
|
||||
= \s -> lin Det {s = word s ; detType = DTFull Sg} ;
|
||||
mkQuant : Str -> Quant
|
||||
= \s -> lin Quant {s,pl = s ; detType = DTFull Sg} ;
|
||||
mkAdA : Str -> AdA
|
||||
= \s -> lin AdA {s = word s} ;
|
||||
mkNum : Str -> Num
|
||||
= \s -> lin Num {s = word s ; numType = NTFull} ;
|
||||
mkPredet : Str -> Predet
|
||||
= \s -> lin Predet {s = word s} ;
|
||||
mkIDet : Str -> IDet
|
||||
= \s -> lin IDet {s = word s ; detType = DTNum} ; ----
|
||||
mkPConj : Str -> PConj
|
||||
= \s -> lin PConj {s = word s} ;
|
||||
mkRP : Str -> RP
|
||||
= \s -> lin RP {s = word s} ;
|
||||
|
||||
|
||||
--. auxiliary
|
||||
|
||||
oper
|
||||
mkConjForm : Str -> {s1,s2 : Str} = \s -> {s1 = [] ; s2 = word s} ;
|
||||
mkConjForm2 : Str -> Str -> {s1,s2 : Str} = \s1,s2 -> {s1 = word s1 ; s2 = word s2} ; --obvious slip of a pen chenpeng 11.19
|
||||
-- manually by AR, Jolene
|
||||
|
||||
}
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
resource ParadigmsCmn = open CatCmn, ResCmn, Prelude in {
|
||||
|
||||
flags coding = utf8 ;
|
||||
|
||||
flags coding=utf8;
|
||||
oper
|
||||
mkN = overload {
|
||||
mkN : (man : Str) -> N
|
||||
= \n -> lin N (regNoun n ge_s) ;
|
||||
mkN : (man : Str) -> Str -> N
|
||||
= \n,c -> lin N (regNoun n c)
|
||||
} ;
|
||||
|
||||
mkN2 = overload {
|
||||
mkN2 : Str -> N2
|
||||
= \n -> lin N2 (regNoun n ge_s ** {c2 = emptyPrep}) ; ---- possessive ?
|
||||
---- mkN2 : N -> Str -> N2
|
||||
---- = \n,p -> lin N2 (n ** {c2 = mkPrep p}) ;
|
||||
} ;
|
||||
|
||||
mkN3 : N -> Preposition -> Preposition -> N3
|
||||
= \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ;
|
||||
|
||||
|
||||
mkPN : (john : Str) -> PN
|
||||
= \s -> lin PN {s = word s} ;
|
||||
|
||||
mkA = overload {
|
||||
mkA : (small : Str) -> A
|
||||
= \a -> lin A (simpleAdj a) ;
|
||||
mkA : (small : Str) -> Bool -> A
|
||||
= \a,b -> lin A (mkAdj a b) ;
|
||||
} ;
|
||||
|
||||
mkA2 : Str -> A2 = \a -> lin A2 (simpleAdj a ** {c2 = emptyPrep}) ;
|
||||
|
||||
mkV = overload {
|
||||
mkV : (walk : Str) -> V
|
||||
= \walk -> lin V (regVerb walk) ;
|
||||
mkV : (arrive : Str) -> Str -> Str -> Str -> Str -> V
|
||||
= \arrive,pp,ds,dp,ep -> lin V (mkVerb arrive pp ds dp ep neg_s) ;
|
||||
mkV : (arrive : Str) -> Str -> Str -> Str -> Str -> Str -> V
|
||||
= \arrive,pp,ds,dp,ep,neg -> lin V (mkVerb arrive pp ds dp ep neg) ;
|
||||
} ;
|
||||
|
||||
|
||||
mkV2 : Str -> V2
|
||||
= \s -> lin V2 (regVerb s ** {c2 = emptyPrep}) ;
|
||||
|
||||
mkV3 = overload {
|
||||
mkV3 : Str -> V3
|
||||
= \s -> lin V3 (regVerb s ** {c2,c3 = emptyPrep}) ;
|
||||
mkV3 : V -> V3
|
||||
= \s -> lin V3 (s ** {c2,c3 = emptyPrep}) ;
|
||||
---- mkV3 : V -> Str -> Str -> V3
|
||||
---- = \v,p,q -> lin V3 (v ** {c2 = mkPrep p ; c3 = mkPrep q}) ;
|
||||
} ;
|
||||
|
||||
mkVV : Str -> VV = ----
|
||||
\v -> lin VV (regVerb v) ;
|
||||
|
||||
mkVQ : V -> VQ =
|
||||
\v -> lin VQ v ;
|
||||
|
||||
mkVS : V -> VS =
|
||||
\v -> lin VS v ;
|
||||
|
||||
mkVA : V -> VA =
|
||||
\v -> lin VA v ;
|
||||
|
||||
mkV2Q : V -> V2Q =
|
||||
\v -> lin V2Q (v ** {c2 = emptyPrep}) ;
|
||||
---- mkV2Q : V -> Str -> V2Q =
|
||||
---- \v,p -> lin V2Q (v ** {c2 = mkPrep p}) ;
|
||||
|
||||
mkV2V : V -> V2V =
|
||||
\v -> lin V2V (v ** {c2 = emptyPrep ; c3 = emptyPrep}) ;
|
||||
---- mkV2V : V -> Str -> Str -> V2V =
|
||||
---- \v,p,q -> lin V2V (v ** {c2 = mkPrep p ; c3 = mkPrep q}) ;
|
||||
|
||||
mkV2S : V -> V2S =
|
||||
\v -> lin V2S (v ** {c2 = emptyPrep}) ;
|
||||
---- mkV2S : V -> Str -> V2S =
|
||||
---- \v,p -> lin V2S (v ** {c2 = mkPrep p}) ;
|
||||
|
||||
mkV2A : V -> V2A
|
||||
= \v -> lin V2A (v ** {c2 = emptyPrep ; c3 = emptyPrep}) ;
|
||||
---- mkV2A : V -> Str -> Str -> V2A
|
||||
---- = \v,p,q -> lin V2A (v ** {c2 = mkPrep p ; c3 = mkPrep q}) ;
|
||||
|
||||
mkAdv = overload {
|
||||
mkAdv : Str -> Adv
|
||||
= \s -> lin Adv {s = word s ; advType = ATPlace} ;
|
||||
mkAdv : Str -> AdvType -> Adv
|
||||
= \s,at -> lin Adv {s = word s ; advType = at} ;
|
||||
} ;
|
||||
|
||||
AdvType : Type
|
||||
= ResCmn.AdvType ;
|
||||
placeAdvType : AdvType
|
||||
= ATPlace ;
|
||||
timeAdvType : AdvType
|
||||
= ATTime ;
|
||||
mannerAdvType : AdvType
|
||||
= ATManner ;
|
||||
|
||||
mkPrep = overload { ---- is this the right order of the fields?
|
||||
mkPrep : Str -> Preposition
|
||||
= \s -> ResCmn.mkPreposition s [] ;
|
||||
mkPrep : Str -> Str -> Preposition
|
||||
= \s,t -> ResCmn.mkPreposition s t ;
|
||||
} ;
|
||||
|
||||
emptyPrep : Preposition = mkPrep [] ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
concrete PhraseCmn of Phrase = CatCmn ** open Prelude, ResCmn in {
|
||||
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
|
||||
UttS s = s ;
|
||||
UttQS qs = qs ;
|
||||
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p} ;
|
||||
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p} ;
|
||||
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p} ; --- add politeness here?
|
||||
|
||||
UttIP ip = ip ;
|
||||
UttIAdv iadv = iadv ;
|
||||
UttNP np = np ;
|
||||
UttCN cn = cn ;
|
||||
UttAP ap = ap ;
|
||||
UttCard x = x ;
|
||||
UttVP vp = ss (infVP vp) ;
|
||||
UttAdv adv = adv ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
PConjConj conj = ss (conj.s ! CSent).s2 ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
VocNP np = {s = np.s} ; ---- ??
|
||||
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
concrete QuestionCmn of Question = CatCmn **
|
||||
open ResCmn, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
QuestCl cl = {s = \\p,a => cl.s ! p ! a ++ question_s} ; --- plus redup questions
|
||||
|
||||
QuestVP ip vp = {
|
||||
s = \\p,a => ip.s ++ vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl
|
||||
} ;
|
||||
|
||||
QuestSlash ip cls = {
|
||||
s =\\p,a => cls.c2.prepPre ++ cls.np ++ cls.c2.prepMain ++ cls.vp ! p ! a ++
|
||||
possessive_s ++ di_s ++ ip.s
|
||||
} ;
|
||||
|
||||
QuestIAdv iadv cl = {s = \\p,a => cl.np ++ iadv.s ++ cl.vp ! p ! a} ;
|
||||
|
||||
QuestIComp icomp np = {s = \\p,a => np.s ++ icomp.s} ; ---- order
|
||||
|
||||
PrepIP p ip = ss (appPrep p ip.s) ;
|
||||
|
||||
AdvIP ip adv = ss (adv.s ++ possessive_s ++ ip.s) ; ---- adding de
|
||||
|
||||
IdetCN det cn = {s = det.s ++ cn.c ++ cn.s} ; ---- number?
|
||||
|
||||
IdetIP idet = idet ;
|
||||
|
||||
IdetQuant iquant num = ss (iquant.s ++ num.s) ; ----
|
||||
|
||||
AdvIAdv i a = ss (a.s ++ i.s) ;
|
||||
|
||||
CompIAdv a = ss (zai_s ++ a.s) ;
|
||||
|
||||
CompIP ip = ss (copula_s ++ ip.s) ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
concrete RelativeCmn of Relative = CatCmn ** open ResCmn, Prelude in {
|
||||
|
||||
lin
|
||||
RelCl cl = {s = \\p,a => cl.s ! p ! a ++ relative_s} ; ---- ??
|
||||
RelVP rp vp = {
|
||||
s = \\p,a => vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl ++ rp.s
|
||||
} ; ---- ??
|
||||
RelSlash rp slash = {s = \\p,a => slash.s ! p ! a ++ appPrep slash.c2 rp.s} ;
|
||||
FunRP p np rp = ss (appPrep p np.s ++ rp.s) ; ---- ??
|
||||
IdRP = ss relative_s ;
|
||||
|
||||
}
|
||||
@@ -7,7 +7,7 @@
|
||||
---- implement $Test$, it moreover contains regular lexical
|
||||
---- patterns needed for $Lex$.
|
||||
--
|
||||
resource ResCmn = ParamX ** open Prelude in {
|
||||
resource ResChi = ParamX ** open Prelude in {
|
||||
|
||||
flags coding = utf8 ;
|
||||
|
||||
@@ -19,13 +19,13 @@ resource ResCmn = ParamX ** open Prelude in {
|
||||
|
||||
than_s = "bi3" ;
|
||||
progressive_s = defaultStr ;
|
||||
possessive_s = "de" ; -- also used for AP + NP
|
||||
de_s, possessive_s = "de" ; -- also used for AP + NP
|
||||
deAdvV_s = "de" ; -- between Adv and V
|
||||
deVAdv_s = "de2" ; -- between V and Adv
|
||||
imperneg_s = neg_s ;
|
||||
conjThat = emptyStr ; ----
|
||||
reflPron = word "zi4ji3" ; -- pron + refl
|
||||
passive_s = defaultStr ;
|
||||
passive_s = "bei4" ;
|
||||
relative_s = possessive_s ; -- relative
|
||||
superlative_s = "zui4" ; -- superlative, sup + adj + de
|
||||
zai_s = "zai4" ; -- copula for place
|
||||
@@ -40,6 +40,8 @@ resource ResCmn = ParamX ** open Prelude in {
|
||||
xie_s = "xie1" ;
|
||||
the_s = "na3" ;
|
||||
geng_s = "geng1" ; -- more, in comparison
|
||||
hen_s = "hen3" ; -- very, or predicating a monosyllabic adjective
|
||||
taN_s = "ta1" ;
|
||||
|
||||
zai_V = mkVerb "zai4" [] [] [] [] "bu4" ;
|
||||
fullstop_s = "。" ;
|
||||
@@ -65,6 +67,10 @@ resource ResCmn = ParamX ** open Prelude in {
|
||||
bword : Str -> Str -> Str = \x,y -> x + y ; -- change to x + y to treat words as single tokens
|
||||
|
||||
word : Str -> Str = \s -> case s of {
|
||||
x@? + y@? + z@? + u@? + v@? + w@? + a@? + b@? => bword x (bword y (bword z (bword u (bword v (bword w (bword a b)))))) ;
|
||||
x@? + y@? + z@? + u@? + v@? + w@? + a@? => bword x (bword y (bword z (bword u (bword v (bword w a))))) ;
|
||||
x@? + y@? + z@? + u@? + v@? + w@? => bword x (bword y (bword z (bword u (bword v w)))) ;
|
||||
x@? + y@? + z@? + u@? + v@? => bword x (bword y (bword z (bword u v))) ;
|
||||
x@? + y@? + z@? + u@? => bword x (bword y (bword z u)) ;
|
||||
x@? + y@? + z@? => bword x (bword y z) ;
|
||||
x@? + y@? => bword x y ;
|
||||
@@ -83,7 +89,7 @@ param
|
||||
CPosType = CAPhrase | CNPhrase | CVPhrase ;
|
||||
DeForm = DeNoun | NdNoun ; -- parameter created for noun with/out partical "de"
|
||||
|
||||
AdvType = ATPlace | ATTime | ATManner ;
|
||||
AdvType = ATPlace Bool | ATTime | ATManner ; -- ATPlace True = has zai_s already
|
||||
|
||||
-- parts of speech
|
||||
|
||||
@@ -94,15 +100,16 @@ oper
|
||||
|
||||
-- for morphology
|
||||
|
||||
Noun : Type = {s : Str; c : Str} ;
|
||||
Adj : Type = {s : Str; monoSyl: Bool} ;
|
||||
Verb : Type = {s : Str ; pp,ds,dp,ep : Str ; neg : Str} ;
|
||||
Noun : Type = {s : Str ; c : Str} ;
|
||||
Adj : Type = {s : Str ; monoSyl: Bool} ;
|
||||
Verb : Type = {s,sn : Str ; pp,ds,dp,ep : Str ; neg : Str} ; --- sn=[] needed for "hen" as copula
|
||||
|
||||
regNoun : Str -> Str -> Noun = \s,c -> {s = word s ; c = word c};
|
||||
|
||||
mkAdj : Str -> Bool -> Adj = \s,b -> {s = word s ; monoSyl = b};
|
||||
|
||||
complexAP : Str -> Adj = \s -> {s = s ; monoSyl = False} ;
|
||||
complexAP : Str -> Adj ** {hasAdA : Bool} =
|
||||
\s -> {s = s ; monoSyl = False ; hasAdA = False} ; --- not used for adding AdA
|
||||
|
||||
simpleAdj : Str -> Adj = \s -> case s of {
|
||||
? => mkAdj s True ; -- monosyllabic
|
||||
@@ -110,12 +117,20 @@ oper
|
||||
} ;
|
||||
|
||||
copula : Verb = mkVerb "shi4" [] [] [] [] "bu4" ;
|
||||
hen_copula : Verb =
|
||||
{s = hen_s ; sn = [] ; pp = [] ; ds = [] ; dp = [] ; ep = [] ; neg = "bu4"} ; ---
|
||||
nocopula : Verb =
|
||||
{s = [] ; sn = [] ; pp = [] ; ds = [] ; dp = [] ; ep = [] ; neg = "bu4"} ; ---
|
||||
adjcopula : Verb =
|
||||
{s = "shi4" ; sn = [] ; pp = [] ; ds = [] ; dp = [] ; ep = [] ; neg = "bu4"} ; ---
|
||||
|
||||
regVerb : (walk : Str) -> Verb = \v ->
|
||||
mkVerb v "le" "zhao1" "zai4" "guo4" "mei2" ;
|
||||
mkVerb v "le" "zhao1" "zai4" "guo4" "bu4" ; -- 没" ;
|
||||
|
||||
noVerb : Verb = regVerb [] ; ---?? -- used as copula for verbal adverbs
|
||||
|
||||
mkVerb : (v : Str) -> (pp,ds,dp,ep,neg : Str) -> Verb = \v,pp,ds,dp,ep,neg ->
|
||||
{s = word v ; pp = pp ; ds = ds ; dp = dp ; ep = ep ; neg = neg} ;
|
||||
{s,sn = word v ; pp = pp ; ds = ds ; dp = dp ; ep = ep ; neg = neg} ;
|
||||
|
||||
useVerb : Verb -> Polarity => Aspect => Str = \v ->
|
||||
table {
|
||||
@@ -127,19 +142,19 @@ oper
|
||||
AExper => v.s ++ v.ep
|
||||
} ;
|
||||
Neg => table {
|
||||
APlain => v.neg ++ v.s ; --- neg?
|
||||
APerf => "bu4" ++ v.s ++ v.pp ;
|
||||
ADurStat => "bu4" ++ v.s ;
|
||||
ADurProg => v.neg ++ v.dp ++ v.s ; -- mei or bu
|
||||
AExper => v.neg ++ v.s ++ v.ep
|
||||
APlain => v.neg ++ v.sn ; --- neg?
|
||||
APerf => "不" ++ v.sn ++ v.pp ;
|
||||
ADurStat => "不" ++ v.sn ;
|
||||
ADurProg => v.neg ++ v.dp ++ v.sn ; -- mei or bu
|
||||
AExper => v.neg ++ v.sn ++ v.ep
|
||||
}
|
||||
} ;
|
||||
|
||||
infVP : VP -> Str = \vp -> vp.prePart ++ vp.verb.s ++ vp.compl ;
|
||||
|
||||
predV : Verb -> VP = \v -> {
|
||||
predV : Verb -> Str -> VP = \v,part -> {
|
||||
verb = v ;
|
||||
compl = [] ;
|
||||
compl = part ;
|
||||
prePart = [] ;
|
||||
} ;
|
||||
|
||||
@@ -158,7 +173,13 @@ oper
|
||||
insertAdv : SS -> VP -> VP = \adv,vp -> {
|
||||
verb = vp.verb ;
|
||||
compl = vp.compl ;
|
||||
prePart = adv.s
|
||||
prePart = adv.s ++ vp.prePart
|
||||
} ;
|
||||
|
||||
insertPP : SS -> VP -> VP = \pp,vp -> {
|
||||
verb = vp.verb ;
|
||||
compl = vp.compl ;
|
||||
prePart = vp.prePart ++ pp.s
|
||||
} ;
|
||||
|
||||
insertExtra : SS -> VP -> VP = \ext,vp ->
|
||||
@@ -169,23 +190,25 @@ oper
|
||||
Clause : Type = {
|
||||
s : Polarity => Aspect => Str ;
|
||||
np : Str;
|
||||
vp : Polarity => Aspect => Str
|
||||
vp : VP
|
||||
} ;
|
||||
|
||||
|
||||
mkClause = overload {
|
||||
mkClause : Str -> Verb -> Clause = \np,v -> mkClauseCompl np (useVerb v) [] ;
|
||||
mkClause : Str -> (Polarity => Aspect => Str) -> Str -> Clause = mkClauseCompl ;
|
||||
mkClause : Str -> Verb -> Clause = \np,v ->
|
||||
mkClauseCompl np (predV v []) [] ;
|
||||
mkClause : Str -> Verb -> Str -> Clause = \subj,verb,obj ->
|
||||
mkClauseCompl subj (useVerb verb) obj ;
|
||||
mkClauseCompl subj (predV verb []) obj ;
|
||||
mkClause : Str -> VP -> Clause = \np,vp ->
|
||||
mkClauseCompl np (\\p,a => vp.prePart ++ useVerb vp.verb ! p ! a) vp.compl ;
|
||||
mkClauseCompl np vp [] ;
|
||||
mkClause : Str -> VP -> Str -> Clause =
|
||||
mkClauseCompl ;
|
||||
} ;
|
||||
|
||||
mkClauseCompl : Str -> (Polarity => Aspect => Str) -> Str -> Clause = \np,vp,compl -> {
|
||||
s = \\p,a => np ++ vp ! p ! a ++ compl ;
|
||||
mkClauseCompl : Str -> VP -> Str -> Clause = \np,vp,compl -> {
|
||||
s = \\p,a => np ++ vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl ++ compl ;
|
||||
np = np ;
|
||||
vp = \\p,a => vp ! p ! a ++ compl
|
||||
vp = insertObj (ss compl) vp ;
|
||||
} ;
|
||||
|
||||
|
||||
@@ -214,24 +237,31 @@ oper
|
||||
pronNP : (s : Str) -> NP = \s -> {
|
||||
s = word s
|
||||
} ;
|
||||
|
||||
Preposition = {prepPre : Str ; prepPost : Str ; advType : AdvType} ;
|
||||
|
||||
mkPreposition : Str -> Str -> Preposition = \s,b -> {
|
||||
prepMain = word s ;
|
||||
prepPre = word b
|
||||
mkPreposition : Str -> Str -> AdvType -> Preposition = \s1,s2,at -> {
|
||||
prepPre = word s1 ;
|
||||
prepPost = word s2 ;
|
||||
advType = at
|
||||
} ;
|
||||
|
||||
getAdvType : Str -> AdvType = \s -> case s of {
|
||||
"在" + _ => ATPlace True ; -- certain that True
|
||||
_ => ATPlace False -- uncertain whether ATPlace
|
||||
} ;
|
||||
|
||||
mkSubj : Str -> Str -> {prePart : Str ; sufPart : Str} = \p,s -> {
|
||||
prePart = word p ;
|
||||
sufPart = word s
|
||||
} ;
|
||||
|
||||
Preposition = {prepMain : Str ; prepPre : Str} ;
|
||||
|
||||
-- added by AR
|
||||
|
||||
mkNP : Str -> NP = ss ;
|
||||
mkNP : Str -> NP = ss ; -- not to be used in lexicon building
|
||||
|
||||
appPrep : Preposition -> Str -> Str = \prep,s ->
|
||||
prep.prepPre ++ s ++ prep.prepMain ;
|
||||
prep.prepPre ++ s ++ prep.prepPost ;
|
||||
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
concrete SentenceCmn of Sentence = CatCmn **
|
||||
open Prelude, ResCmn in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
PredVP np vp = mkClause np.s vp ;
|
||||
|
||||
PredSCVP sc vp = mkClause sc.s vp ;
|
||||
|
||||
ImpVP vp = {
|
||||
s = table {
|
||||
Pos => infVP vp ;
|
||||
Neg => neg_s ++ infVP vp
|
||||
}
|
||||
} ;
|
||||
|
||||
SlashVP np vp =
|
||||
mkClauseCompl np.s (\\p,a => vp.prePart ++ useVerb vp.verb ! p ! a) vp.compl
|
||||
** {c2 = vp.c2} ;
|
||||
|
||||
SlashVS np vs sslash = <mkClause np.s vs sslash.s : Clause> ** {c2 = sslash.c2} ;
|
||||
|
||||
|
||||
-- yet another reason for discontinuity of clauses
|
||||
AdvSlash slash adv =
|
||||
mkClause slash.np (<\\p,a => adv.s ++ slash.vp ! p ! a : Polarity => Aspect => Str>) []
|
||||
** {c2 = slash.c2} ;
|
||||
|
||||
SlashPrep cl prep = cl ** {c2 = prep} ;
|
||||
|
||||
EmbedS s = ss (conjThat ++ s.s) ;
|
||||
EmbedQS qs = qs ;
|
||||
EmbedVP vp = ss (infVP vp) ;
|
||||
|
||||
UseCl t p cl = {s = cl.s ! p.p ! t.t} ;
|
||||
UseQCl t p cl = {s = cl.s ! p.p ! t.t} ;
|
||||
UseRCl t p cl = {s = cl.s ! p.p ! t.t} ;
|
||||
UseSlash t p cl = {s = cl.s ! p.p ! t.t ; c2 = cl.c2} ;
|
||||
|
||||
AdvS a s = ss (a.s ++ s.s) ;
|
||||
|
||||
RelS s r = ss (s.s ++ r.s) ;
|
||||
}
|
||||
179
lib/src/chinese/pinyin/StructuralChi.gf
Normal file
179
lib/src/chinese/pinyin/StructuralChi.gf
Normal file
@@ -0,0 +1,179 @@
|
||||
concrete StructuralChi of Structural = CatChi **
|
||||
open ParadigmsChi, ResChi, Prelude in {
|
||||
|
||||
flags coding = utf8 ;
|
||||
|
||||
lin
|
||||
every_Det = mkDet "mei3" Sg ;
|
||||
|
||||
this_Quant = mkQuant "zhe4" ;
|
||||
that_Quant = mkQuant "na3" ;
|
||||
|
||||
i_Pron = pronNP "wo3" ;
|
||||
youSg_Pron = pronNP "ni3" ;
|
||||
he_Pron = pronNP "ta1" ;
|
||||
she_Pron = pronNP "ta1" ;
|
||||
we_Pron = pronNP "wo3men" ;
|
||||
youPl_Pron = pronNP "ni3men" ;
|
||||
they_Pron = pronNP "ta1men" ;
|
||||
|
||||
very_AdA = ssword "fei1chang2" ;
|
||||
|
||||
by8means_Prep = mkPrep [] "pang2bian1" mannerAdvType ;
|
||||
-- in_Prep = mkPrep "li3" []; --- in Paris
|
||||
in_Prep = mkPrep "zai4" "zhong1" ; --- in the house, the car, etc
|
||||
possess_Prep = mkPrep [] "de" ;
|
||||
with_Prep = mkPrep "he2" "yi1qi3" ;
|
||||
---- with_Prep = mkPrep [] "he2"; -- an alternative for some uses
|
||||
|
||||
and_Conj = {s = table {
|
||||
CPhr CNPhrase => mkConjForm "he2" ;
|
||||
CPhr CAPhrase => mkConjForm "er2" ;
|
||||
CPhr CVPhrase => mkConjForm "you4" ;
|
||||
CSent => mkConjForm "bing4qie3" --modified by chenpneg 11.19
|
||||
}
|
||||
} ;
|
||||
or_Conj = {s = table {
|
||||
CPhr _ => mkConjForm "huo4" ;
|
||||
CSent => mkConjForm "hai2shi4"
|
||||
}
|
||||
} ;
|
||||
|
||||
although_Subj = mkSubj "sui1ran2" "dan4";
|
||||
because_Subj = mkSubj "yin1wei2" "suo3yi3" ;
|
||||
when_Subj = mkSubj [] "deshi2hou4" ;
|
||||
|
||||
here_Adv = mkAdv "zhe4li3" ;
|
||||
there_Adv = mkAdv "na3li3" ;
|
||||
whoSg_IP, whoPl_IP = mkIPL "shei2" ;
|
||||
whatSg_IP, whatPl_IP = mkIPL " shen2ma" ;
|
||||
where_IAdv = mkIAdvL "na3li3" ;
|
||||
when_IAdv = mkIAdvL "shen2mashi2hou4" ;
|
||||
how_IAdv = mkIAdvL "ru2he2" ;
|
||||
all_Predet = ssword "suo3you3" ;
|
||||
many_Det = mkDet (word "hen3duo1") DTPoss ;
|
||||
someSg_Det = mkDet (word "yi1xie1") Sg ;
|
||||
somePl_Det = mkDet (word "yi1xie1") Sg ;
|
||||
few_Det = mkDet "shao3" Pl ;
|
||||
other_A = mkA "qi2ta1" ;
|
||||
|
||||
oper
|
||||
mkIPL, mkIAdvL, mkAdA, mkIDetL, mkPConjL, mkIQuant = ssword ;
|
||||
|
||||
-- hsk
|
||||
|
||||
lin
|
||||
|
||||
|
||||
above_Prep = mkPrep [] "shang4bian1" ;
|
||||
after_Prep = mkPrep [] "yi3hou4" timeAdvType ;
|
||||
under_Prep = mkPrep [] "xia4" ;
|
||||
why_IAdv = mkIAdvL "wei2shen2ma" ;
|
||||
too_AdA = mkAdA "tai4" ;
|
||||
|
||||
before_Prep = mkPrep [] "zhi1qian2" timeAdvType ;
|
||||
between_Prep = mkPrep [] "zhi1jian1" ;
|
||||
but_PConj = mkPConjL "dan4shi4" ;
|
||||
|
||||
|
||||
can_VV = mkVerb "neng2" [] [] [] [] "bu4" ;
|
||||
must_VV = mkVerb "bi4xu1" [] [] [] [] "bu4" ; ---- False "bu4neng2"
|
||||
want_VV = mkVerb "xiang3" [] [] [] [] "bu4" ;
|
||||
|
||||
can8know_VV = mkV "hui4" [] [] [] [] "bu4" ; ----
|
||||
|
||||
|
||||
except_Prep = mkPrep "yi3wai4" "chu2le" mannerAdvType ;
|
||||
for_Prep = mkPrep "wei2le" ;
|
||||
from_Prep = mkPrep "cong1" ;
|
||||
in8front_Prep = mkPrep zai_s "qian2bian1" ;
|
||||
it_Pron = pronNP "ta1" ;
|
||||
much_Det = mkDet "duo1" Sg ;
|
||||
no_Quant = mkQuant "bu4" ;
|
||||
not_Predet = ssword "bu4" ;
|
||||
otherwise_PConj = mkPConjL "hai2shi4" ;
|
||||
to_Prep = mkPrep "wang3" ;
|
||||
|
||||
have_V2 = mkV2 (mkV "you3" "le" "zhao1" "zai4" "guo4" "mei2") ;
|
||||
|
||||
yes_Utt = ss "dui4" ;
|
||||
no_Utt = ss neg_s ;
|
||||
|
||||
|
||||
lin
|
||||
always_AdV = ssword "yi1zhi2" ;
|
||||
part_Prep = mkPrep possessive_s ;
|
||||
language_title_Utt = ssword "zhong1wen2" ;
|
||||
please_Voc = ss "qing3" ;
|
||||
quite_Adv = mkAdA "de2hen3" ;
|
||||
|
||||
-- just missing
|
||||
|
||||
lin
|
||||
almost_AdA = ssword "ji1hu1" ;
|
||||
almost_AdN = ssword "ji1hu1" ;
|
||||
as_CAdv = {s = word "he2" ; p = word "yi1yang4" } ; -- modified by chenpeng 11.24
|
||||
at_least_AdN = ssword "zui4shao3" ; -- at least five
|
||||
at_most_AdN = ssword "zui4duo1" ;
|
||||
behind_Prep = mkPrep "zai4" "hou4mian4" ;
|
||||
|
||||
both7and_DConj = {s = table { -- modified by chenpeng 11.19
|
||||
CPhr CNPhrase => mkConjForm2 "bao1kuo4" "he2" ;
|
||||
CPhr CAPhrase => mkConjForm2 "ji2" "you4" ;
|
||||
CPhr CVPhrase => mkConjForm2 "bu4dan4" "er2qie3" ;
|
||||
CSent => mkConjForm2 "bu4dan4" "er2qie3"
|
||||
}
|
||||
} ;
|
||||
|
||||
by8agent_Prep = mkPrep "bei4" [] mannerAdvType; -- by for agent in passive
|
||||
-- [mark] 被
|
||||
during_Prep = mkPrep "zai4" "qi1jian1" timeAdvType ; -- [mark] often equivalent to nothing
|
||||
-- translation for "he swam during this summer. " and "he swam this summer." are often the same
|
||||
|
||||
either7or_DConj = {s = table { -- modified by chenpeng 11.19
|
||||
CPhr CNPhrase => mkConjForm2 "huo4zhe3" "huo4zhe3" ;
|
||||
CPhr CAPhrase => mkConjForm2 "yao1ma" "yao1ma" ;
|
||||
CPhr CVPhrase => mkConjForm2 "yao1ma" "yao1ma" ;
|
||||
CSent => mkConjForm2 "yao1ma" "yao1ma"
|
||||
}
|
||||
} ;
|
||||
|
||||
everybody_NP = ssword "mei3ge4ren2" ; -- [mark] "mei3ge4ren2": 每(every)+个(classifier)+人(person)
|
||||
everything_NP = ssword "mei3jian4shi4" ; -- [mark] "mei3jian4shi4": 每(every)+件(classifier)+事(thing)
|
||||
everywhere_Adv = mkAdv "dao4chu3" ;
|
||||
here7from_Adv = mkAdv "cong1zhe4li3" ; -- from here
|
||||
here7to_Adv = mkAdv "dao4zhe4li3" ; -- to here
|
||||
-- [mark] "cong1zhe4li3" 从(from) 这里(here)
|
||||
-- "dao4zhe4li3" 到( to ) 这里(here)
|
||||
how8many_IDet = mkIDet "duo1shao3" ;
|
||||
how8much_IAdv = ssword "duo1shao3" ;
|
||||
if_Subj = mkSubj "ru2guo3" [] ; --"jiu4" ; -- [mark] "jiu4" often comes between NP and VP
|
||||
less_CAdv = {s = than_s ; p = word "mei2geng1"} ; -- modified by chenpeng 11.24
|
||||
more_CAdv = {s = than_s ; p = word "geng1"} ; -- modified by chenpeng 11.24
|
||||
most_Predet = ssword "da4duo1shu3" ;
|
||||
if_then_Conj = {s = table { -- added by chenpeng 11.19
|
||||
CPhr CNPhrase => mkConjForm [] ;
|
||||
CPhr CAPhrase => mkConjForm [] ;
|
||||
CPhr CVPhrase => mkConjForm [] ;
|
||||
CSent => mkConjForm2 "ru2guo3" "na3ma"
|
||||
}
|
||||
} ;
|
||||
nobody_NP = ssword "mei2ren2" ;
|
||||
nothing_NP = ssword "mei2you3shen2ma" ;
|
||||
on_Prep = mkPrep "zai4" "shang4" ;
|
||||
only_Predet = ssword "qi2you3" ; -- only John
|
||||
so_AdA = ssword "ru2ci3" ;
|
||||
somebody_NP = ssword "mou3ren2" ;
|
||||
something_NP = ssword "mou3shi4" ; -- [mark] in sent, it depends on the context
|
||||
somewhere_Adv = mkAdv "mou3chu3" ;
|
||||
that_Subj = mkSubj [] chcomma ; -- that + S [mark] comma
|
||||
there7from_Adv = mkAdv "cong1na3li3" ; -- from there
|
||||
there7to_Adv = mkAdv "dao4na3li3" ;
|
||||
therefore_PConj = ssword "yin1ci3" ;
|
||||
through_Prep = mkPrep "tong1guo4" ;
|
||||
which_IQuant = mkIQuant "na3" ;
|
||||
--which_IQuant = ssword [] ; -- [mark] in sent, it depends on the context
|
||||
without_Prep = mkPrep "mei2you3" [] mannerAdvType ;
|
||||
youPol_Pron = ssword "nin2" ; -- polite you
|
||||
|
||||
}
|
||||
@@ -1,158 +0,0 @@
|
||||
concrete StructuralCmn of Structural = CatCmn **
|
||||
open ParadigmsCmn, ResCmn, Prelude in {
|
||||
|
||||
flags coding = utf8 ;
|
||||
|
||||
lin
|
||||
every_Det = mkDet "mei3" Sg ;
|
||||
|
||||
this_Quant = mkQuant "zhe4" ;
|
||||
that_Quant = mkQuant "na3" ;
|
||||
|
||||
i_Pron = pronNP "wo3" ;
|
||||
youSg_Pron = pronNP "ni3" ;
|
||||
he_Pron = pronNP "ta1" ;
|
||||
she_Pron = pronNP "ta1" ;
|
||||
we_Pron = pronNP "wo3men" ;
|
||||
youPl_Pron = pronNP "ni3men" ;
|
||||
they_Pron = pronNP "ta1men" ;
|
||||
|
||||
very_AdA = ssword "fei1chang2" ;
|
||||
|
||||
by8means_Prep = mkPrep "pang2bian1" [] ;
|
||||
in_Prep = mkPrep "li3" [];
|
||||
possess_Prep = mkPrep "de" [];
|
||||
with_Prep = mkPrep "yi1qi3" "he2";
|
||||
|
||||
and_Conj = {s = table {
|
||||
CPhr CNPhrase => mkConjForm "he2" ;
|
||||
CPhr CAPhrase => mkConjForm "er2" ;
|
||||
CPhr CVPhrase => mkConjForm "you4" ;
|
||||
CSent => mkConjForm []
|
||||
}
|
||||
} ;
|
||||
or_Conj = {s = table {
|
||||
CPhr _ => mkConjForm "huo4" ;
|
||||
CSent => mkConjForm "hai2shi4"
|
||||
}
|
||||
} ;
|
||||
|
||||
although_Subj = mkSubj "sui1ran2" "dan4";
|
||||
because_Subj = mkSubj "yin1wei2" "suo3yi3" ;
|
||||
when_Subj = mkSubj [] "deshi2hou4" ;
|
||||
|
||||
here_Adv = mkAdv "zhe4li3" ;
|
||||
there_Adv = mkAdv "na3li3" ;
|
||||
whoSg_IP, whoPl_IP = mkIPL "shei2" ;
|
||||
whatSg_IP, whatPl_IP = mkIPL " shen2ma" ;
|
||||
where_IAdv = mkIAdvL "na3li3" ;
|
||||
when_IAdv = mkIAdvL "shen2mashi2hou4" ;
|
||||
how_IAdv = mkIAdvL "ru2he2" ;
|
||||
all_Predet = ssword "suo3you3" ;
|
||||
many_Det = mkDet (word "hen3duo1") DTPoss ;
|
||||
someSg_Det = mkDet (word "yi1xie1") Sg ;
|
||||
somePl_Det = mkDet (word "yi1xie1") Sg ;
|
||||
few_Det = mkDet "shao3" Pl ;
|
||||
other_A = mkA "qi2ta1" ;
|
||||
|
||||
oper
|
||||
mkIPL, mkIAdvL, mkAdA, mkIDetL, mkPConjL, mkCAdv, mkIQuant = ssword ;
|
||||
|
||||
-- hsk
|
||||
|
||||
lin
|
||||
|
||||
|
||||
above_Prep = mkPrep "shang4bian1" ;
|
||||
after_Prep = mkPrep "yi3hou4" ;
|
||||
under_Prep = mkPrep "xia4" ;
|
||||
why_IAdv = mkIAdvL "wei2shen2ma" ;
|
||||
too_AdA = mkAdA "tai4" ;
|
||||
|
||||
before_Prep = mkPrep "cong1qian2" ;
|
||||
between_Prep = mkPrep "zhi1jian1" ;
|
||||
but_PConj = mkPConjL "dan4shi4" ;
|
||||
|
||||
|
||||
can_VV = mkVerb "neng2" [] [] [] [] "bu4" ;
|
||||
must_VV = mkVerb "bi4xu1" [] [] [] [] "bu4" ; ---- False "bu4neng2"
|
||||
want_VV = mkVerb "xiang3" [] [] [] [] "bu4" ;
|
||||
|
||||
can8know_VV = mkV "hui4" [] [] [] [] "bu4" ; ----
|
||||
|
||||
|
||||
except_Prep = mkPrep "chu2le" "yi3wai4" ;
|
||||
for_Prep = mkPrep "wei2le" ;
|
||||
from_Prep = mkPrep "cong1" ;
|
||||
in8front_Prep = mkPrep "qian2bian1" ;
|
||||
it_Pron = pronNP "ta1" ;
|
||||
much_Det = mkDet "duo1" Sg ;
|
||||
no_Quant = mkQuant "bu4" ;
|
||||
not_Predet = ssword "bu4" ;
|
||||
otherwise_PConj = mkPConjL "hai2shi4" ;
|
||||
to_Prep = mkPrep "wang3" ;
|
||||
|
||||
have_V2 = mkV2 "you3" ;
|
||||
|
||||
yes_Utt = ss "dui4" ;
|
||||
no_Utt = ss neg_s ;
|
||||
|
||||
oper
|
||||
mkConjForm : Str -> {s1,s2 : Str} = \s -> {s1 = [] ; s2 = word s} ;
|
||||
|
||||
-- manually by AR, Jolene
|
||||
|
||||
lin
|
||||
always_AdV = ssword "yi1zhi2" ;
|
||||
part_Prep = mkPrep possessive_s ;
|
||||
language_title_Utt = ssword "zhong1wen2" ;
|
||||
please_Voc = ss "qing3" ;
|
||||
quite_Adv = mkAdA "de2hen3" ;
|
||||
|
||||
-- just missing
|
||||
|
||||
lin
|
||||
almost_AdA = ssword "ji1hu1" ;
|
||||
almost_AdN = ssword "ji1hu1" ;
|
||||
--as_CAdv = ssword "shen2ma" ; -- as good as X
|
||||
at_least_AdN = ssword "zui4shao3" ; -- at least five
|
||||
at_most_AdN = ssword "zui4duo1" ;
|
||||
behind_Prep = mkPrep "hou4mian4" "zai4";
|
||||
--both7and_DConj = ssword "shen2ma" ; -- both - and
|
||||
by8agent_Prep = mkPrep "bei4" ; -- by for agent in passive
|
||||
-- [mark] 被
|
||||
during_Prep = mkPrep "qi1jian1" "zai4" ; -- [mark] often equivalent to nothing
|
||||
-- translation for "he swam during this summer. " and "he swam this summer." are often the same
|
||||
--either7or_DConj = ssword "shen2ma" ;
|
||||
everybody_NP = ssword "mei3ge4ren2" ; -- [mark] "mei3ge4ren2": 每(every)+个(classifier)+人(person)
|
||||
everything_NP = ssword "mei3jian4shi4" ; -- [mark] "mei3jian4shi4": 每(every)+件(classifier)+事(thing)
|
||||
everywhere_Adv = mkAdv "dao4chu3" ;
|
||||
here7from_Adv = mkAdv "cong1zhe4li3" ; -- from here
|
||||
here7to_Adv = mkAdv "dao4zhe4li3" ; -- to here
|
||||
-- [mark] "cong1zhe4li3" 从(from) 这里(here)
|
||||
-- "dao4zhe4li3" 到( to ) 这里(here)
|
||||
how8many_IDet = ssword "duo1shao3" ;
|
||||
how8much_IAdv = ssword "duo1shao3" ;
|
||||
if_Subj = mkSubj "ru2guo3" "jiu4" ; -- [mark] "jiu4" often comes between NP and VP
|
||||
--less_CAdv = ssword "shen2ma" ; -- less good than
|
||||
--more_CAdv = ssword "shen2ma" ;
|
||||
most_Predet = ssword "da4duo1shu3" ;
|
||||
nobody_NP = ssword "mei2ren2" ;
|
||||
nothing_NP = ssword "mei2you3shen2ma" ;
|
||||
on_Prep = mkPrep "shang4" "zai4" ;
|
||||
only_Predet = ssword "qi2you3" ; -- only John
|
||||
so_AdA = ssword "ru2ci3" ;
|
||||
somebody_NP = ssword "mou3ren2" ;
|
||||
something_NP = ssword "mou3shi4" ; -- [mark] in sent, it depends on the context
|
||||
somewhere_Adv = mkAdv "mou3chu3" ;
|
||||
that_Subj = mkSubj [] chcomma ; -- that + S [mark] comma
|
||||
there7from_Adv = mkAdv "cong1na3li3" ; -- from there
|
||||
there7to_Adv = mkAdv "dao4na3li3" ;
|
||||
therefore_PConj = ssword "yin1ci3" ;
|
||||
through_Prep = mkPrep "tong1guo4" ;
|
||||
which_IQuant = mkIQuant "na3" ;
|
||||
--which_IQuant = ssword [] ; -- [mark] in sent, it depends on the context
|
||||
without_Prep = mkPrep "mei2you3" [];
|
||||
youPol_Pron = ssword "nin2" ; -- polite you
|
||||
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
--# -path=.:../abstract:../common
|
||||
|
||||
concrete SymbolCmn of Symbol = CatCmn ** open Prelude, ResCmn in {
|
||||
concrete SymbolChi of Symbol = CatChi ** open Prelude, ResChi in {
|
||||
|
||||
flags coding = utf8;
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
concrete TenseCmn of Tense =
|
||||
CatCmn [Tense,Temp], TenseX [Ant,Pol,AAnter,ASimul,PNeg,PPos] ** open ResCmn in {
|
||||
|
||||
lin
|
||||
TTAnt t a = {s = t.s ++ a.s ; t = t.t} ;
|
||||
|
||||
---- ??
|
||||
TPres = {s = [] ; t = APlain} ;
|
||||
TPast = {s = [] ; t = APerf} ;
|
||||
TFut = {s = [] ; t = ADurProg} ;
|
||||
TCond = {s = [] ; t = ADurStat} ;
|
||||
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
concrete TextCmn of Text = CommonX - [Temp,Tense,Adv] ** open ResCmn in {
|
||||
|
||||
-- No punctuation - but make sure to leave spaces between sentences!
|
||||
|
||||
lin
|
||||
TEmpty = {s = []} ;
|
||||
TFullStop x xs = {s = x.s ++ fullstop_s ++ xs.s} ;
|
||||
TQuestMark x xs = {s = x.s ++ questmark_s ++ xs.s} ;
|
||||
TExclMark x xs = {s = x.s ++ exclmark_s ++ xs.s} ;
|
||||
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
concrete VerbCmn of Verb = CatCmn ** open ResCmn, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
UseV = predV ;
|
||||
|
||||
SlashV2a v = predV v ** {c2 = v.c2 ; isPre = False} ;
|
||||
|
||||
Slash2V3 v np = insertAdv (mkNP (ba_s ++ np.s)) (predV v) ** {c2 = v.c3 ; isPre = False} ; -- slot for third argument
|
||||
Slash3V3 v np = insertObj (mkNP (appPrep v.c3 np.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ; -- slot for ba object
|
||||
|
||||
SlashV2A v ap = insertObj ap (predV v) ** {c2 = v.c2 ; isPre = True} ;
|
||||
|
||||
SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
|
||||
SlashV2S v s = insertObj (ss (say_s ++ s.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
|
||||
SlashV2Q v q = insertObj (ss (say_s ++ q.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
|
||||
|
||||
ComplVV v vp = {
|
||||
verb = v ;
|
||||
compl = vp.verb.s ++ vp.compl ;
|
||||
prePart = vp.prePart
|
||||
} ;
|
||||
|
||||
ComplVS v s = insertObj s (predV v) ;
|
||||
ComplVQ v q = insertObj q (predV v) ;
|
||||
ComplVA v ap = insertObj ap (predV v) ;
|
||||
|
||||
ComplSlash vp np = case vp.isPre of {
|
||||
True => insertAdv (mkNP (ba_s ++ np.s)) vp ; --- ba or vp.c2 ?
|
||||
False => insertObj (mkNP (appPrep vp.c2 np.s)) vp
|
||||
} ;
|
||||
|
||||
UseComp comp = comp ;
|
||||
|
||||
SlashVV v vp = ---- too simple?
|
||||
insertObj (mkNP (infVP vp)) (predV v) ** {c2 = vp.c2 ; isPre = vp.isPre} ;
|
||||
|
||||
SlashV2VNP v np vp =
|
||||
insertObj np
|
||||
(insertObj (mkNP (infVP vp)) (predV v)) ** {c2 = vp.c2 ; isPre = vp.isPre} ;
|
||||
|
||||
AdvVP vp adv = case adv.advType of {
|
||||
ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well
|
||||
_ => insertAdv (ss (zai_V.s ++ adv.s)) vp -- he sleeps in the house / today
|
||||
} ;
|
||||
|
||||
AdVVP adv vp = insertAdv adv vp ;
|
||||
|
||||
ReflVP vp = insertObj (mkNP reflPron) vp ;
|
||||
|
||||
PassV2 v = insertObj (mkNP passive_s) (predV v) ; ----
|
||||
|
||||
CompAP ap = insertObj (mkNP (ap.s ++ possessive_s)) (predV copula) ; ---- hen / bu
|
||||
|
||||
CompNP np = insertObj np (predV copula) ; ----
|
||||
|
||||
CompCN cn = insertObj cn (predV copula) ; ----
|
||||
|
||||
CompAdv adv = insertObj adv (predV zai_V) ;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user