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:
aarne
2013-10-16 13:46:18 +00:00
parent 7ca6c61b52
commit 8f9adc6d22
28 changed files with 6030 additions and 854 deletions

View File

@@ -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 ;
}

View File

@@ -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} ; -----
}

View File

@@ -1,3 +0,0 @@
--# -path=.:../abstract:../common:prelude
concrete AllCmn of AllChiAbs = LangCmn, ExtraCmn ;

View File

@@ -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} ;
}

View File

@@ -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} ;
}

File diff suppressed because it is too large Load Diff

View 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 ;
}

View File

@@ -1,7 +0,0 @@
concrete ExtraCmn of ExtraChiAbs = CatCmn **
open ResCmn, Prelude in {
lincat
Aspect = {s : Str ; a : ResCmn.Aspect} ;
}

View File

@@ -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 ;
} ;

View File

@@ -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) ;
}

View File

@@ -1,11 +0,0 @@
--# -path=.:../abstract:../common:../prelude
concrete LangCmn of Lang =
GrammarCmn,
LexiconCmn
** {
flags startcat = Phr ; unlexer = concat ; lexer = text ;
} ;

View File

@@ -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 ;

View File

@@ -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

View File

@@ -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) ;
}

View File

@@ -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 =

View 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
}

View File

@@ -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 [] ;
}

View File

@@ -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} ; ---- ??
}

View File

@@ -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) ;
}

View File

@@ -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 ;
}

View File

@@ -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 ;
}

View File

@@ -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) ;
}

View 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
}

View File

@@ -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
}

View File

@@ -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;

View File

@@ -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} ;
}

View File

@@ -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} ;
}

View File

@@ -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) ;
}