russian
This commit is contained in:
1 parent
8ef041fa84
commit
378e30f165
18 files changed
+5010
-2112
No files matched your search
@@ -1,42 +1,46 @@
|
||||
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
|
||||
concrete AdjectiveRus of Adjective = CatRus ** open ResRus, Prelude in {
|
||||
--
|
||||
-- lin
|
||||
--
|
||||
-- PositA a = {
|
||||
-- s = \\_ => a.s ! AAdj Posit ;
|
||||
-- isPre = True
|
||||
-- } ;
|
||||
-- ComparA a np = {
|
||||
-- s = \\_ => a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ;
|
||||
-- isPre = False
|
||||
-- } ;
|
||||
--
|
||||
---- $SuperlA$ belongs to determiner syntax in $Noun$.
|
||||
--
|
||||
-- ComplA2 a np = {
|
||||
-- s = \\_ => a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ;
|
||||
-- isPre = False
|
||||
-- } ;
|
||||
--
|
||||
-- ReflA2 a = {
|
||||
-- s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ;
|
||||
-- isPre = False
|
||||
-- } ;
|
||||
--
|
||||
-- SentAP ap sc = {
|
||||
-- s = \\a => ap.s ! a ++ sc.s ;
|
||||
-- isPre = False
|
||||
-- } ;
|
||||
--
|
||||
-- AdAP ada ap = {
|
||||
-- s = \\a => ada.s ++ ap.s ! a ;
|
||||
-- isPre = ap.isPre
|
||||
-- } ;
|
||||
--
|
||||
-- UseA2 a = a ;
|
||||
--
|
||||
}
|
||||
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
|
||||
concrete AdjectiveRus of Adjective = CatRus ** open ResRus, Prelude in {
|
||||
flags coding=utf8 ;
|
||||
|
||||
lin
|
||||
|
||||
PositA a = { s = a.s!Posit; p = False};
|
||||
-- Comparative forms are used with an object of comparison, as
|
||||
-- adjectival phrases ("больше тебя").
|
||||
|
||||
ComparA bolshoj tu =
|
||||
{s = \\af => bolshoj.s ! Compar ! af ++ tu.s ! (mkPronForm Gen Yes NonPoss) ;
|
||||
p = True
|
||||
} ;
|
||||
|
||||
-- $SuperlA$ belongs to determiner syntax in $Noun$.
|
||||
|
||||
ComplA2 vlublen tu =
|
||||
{s = \\af => vlublen.s !Posit! af ++ vlublen.s2 ++
|
||||
tu.s ! (mkPronForm vlublen.c No NonPoss) ;
|
||||
p = True
|
||||
} ;
|
||||
|
||||
ReflA2 vlublen =
|
||||
{s = \\af => vlublen.s !Posit! af ++ vlublen.s2 ++ "себя";
|
||||
p = True
|
||||
} ;
|
||||
|
||||
SentAP vlublen sent=
|
||||
{s = \\af => vlublen.s ! af ++ sent.s;
|
||||
p = True
|
||||
} ;
|
||||
|
||||
|
||||
AdAP ada ap = {
|
||||
s = \\af => ada.s ++ ap.s ! af ;
|
||||
p = True
|
||||
} ;
|
||||
|
||||
UseA2 a = a ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,23 +1,25 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete AdverbRus of Adverb = CatRus ** open ResRus, Prelude in {
|
||||
--
|
||||
-- lin
|
||||
-- PositAdvAdj a = {s = a.s ! AAdv} ;
|
||||
-- ComparAdvAdj cadv a np = {
|
||||
-- s = cadv.s ++ a.s ! AAdv ++ "than" ++ np.s ! Nom
|
||||
-- } ;
|
||||
-- ComparAdvAdjS cadv a s = {
|
||||
-- s = cadv.s ++ a.s ! AAdv ++ "than" ++ s.s
|
||||
-- } ;
|
||||
--
|
||||
-- PrepNP prep np = {s = prep.s ++ np.s ! Acc} ;
|
||||
--
|
||||
-- AdAdv = cc2 ;
|
||||
--
|
||||
-- SubjS = cc2 ;
|
||||
-- AdvSC s = s ; --- this rule give stack overflow in ordinary parsing
|
||||
--
|
||||
-- AdnCAdv cadv = {s = cadv.s ++ "than"} ;
|
||||
--
|
||||
}
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete AdverbRus of Adverb = CatRus ** open ResRus, Prelude in {
|
||||
flags coding=utf8 ;
|
||||
|
||||
lin
|
||||
PositAdvAdj a = {s = a.s !Posit! AdvF} ;
|
||||
ComparAdvAdj cadv a np = {
|
||||
s = cadv.s ++ a.s !Posit! AdvF ++ "чем" ++ np.s ! PF Nom No NonPoss
|
||||
} ;
|
||||
ComparAdvAdjS cadv a s = {
|
||||
s = cadv.s ++ a.s !Posit! AdvF ++ "чем" ++ s.s
|
||||
} ;
|
||||
|
||||
PrepNP na stol = ss (na.s ++ stol.s ! PF na.c Yes NonPoss) ;
|
||||
|
||||
AdAdv = cc2 ;
|
||||
|
||||
SubjS = cc2 ;
|
||||
AdvSC s = s ; --- this rule give stack overflow in ordinary parsing
|
||||
|
||||
AdnCAdv cadv = {s = cadv.s ++ "чем"} ;
|
||||
|
||||
}
|
||||
|
||||
+106
-93
@@ -1,93 +1,106 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete CatRus of Cat = CommonX ** open ResRus, Prelude in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lincat
|
||||
--
|
||||
---- Phrase
|
||||
--
|
||||
-- Utt, Voc = {s : Str} ;
|
||||
--
|
||||
---- Tensed/Untensed
|
||||
--
|
||||
-- S = {s : Str} ;
|
||||
-- QS = {s : QForm => Str} ;
|
||||
-- RS = {s : Agr => Str} ;
|
||||
--
|
||||
---- Sentence
|
||||
--
|
||||
-- Cl = {s : Tense => Anteriority => Polarity => Order => Str} ;
|
||||
-- Slash = {s : Tense => Anteriority => Polarity => Order => Str} ** {c2 : Str} ;
|
||||
-- Imp = {s : Polarity => Number => Str} ;
|
||||
--
|
||||
---- Question
|
||||
--
|
||||
-- QCl = {s : Tense => Anteriority => Polarity => QForm => Str} ;
|
||||
-- IP = {s : Case => Str ; n : Number} ;
|
||||
-- IAdv, IComp = {s : Str} ;
|
||||
-- IDet = {s : Str ; n : Number} ;
|
||||
--
|
||||
---- Relative
|
||||
--
|
||||
-- RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ;
|
||||
-- RP = {s : RCase => Str ; a : RAgr} ;
|
||||
--
|
||||
---- Verb
|
||||
--
|
||||
-- VP = {
|
||||
-- s : Tense => Anteriority => Polarity => Order => Agr => {fin, inf : Str} ;
|
||||
-- prp : Str ; -- present participle
|
||||
-- inf : Str ; -- infinitive
|
||||
-- ad : Str ;
|
||||
-- s2 : Agr => Str
|
||||
-- } ;
|
||||
-- Comp = {s : Agr => Str} ;
|
||||
-- SC = {s : Str} ;
|
||||
--
|
||||
---- Adjective
|
||||
--
|
||||
-- AP = {s : Agr => Str ; isPre : Bool} ;
|
||||
--
|
||||
---- Noun
|
||||
--
|
||||
-- CN = {s : Number => Case => Str} ;
|
||||
-- NP, Pron = {s : Case => Str ; a : Agr} ;
|
||||
-- Det = {s : Str ; n : Number} ;
|
||||
-- Predet, QuantSg, QuantPl, Num, Ord = {s : Str} ;
|
||||
-- Quant = {s : Number => Str} ;
|
||||
--
|
||||
---- Adverb
|
||||
--
|
||||
-- Adv, AdV, AdA, AdS, AdN = {s : Str} ;
|
||||
--
|
||||
---- Numeral
|
||||
--
|
||||
-- Numeral = {s : CardOrd => Str ; n : Number} ;
|
||||
--
|
||||
---- Structural
|
||||
--
|
||||
-- Conj = {s : Str ; n : Number} ;
|
||||
-- DConj = {s1,s2 : Str ; n : Number} ;
|
||||
-- PConj = {s : Str} ;
|
||||
-- CAdv = {s : Str} ;
|
||||
-- Subj = {s : Str} ;
|
||||
-- Prep = {s : Str} ;
|
||||
--
|
||||
---- Open lexical classes, e.g. Lexicon
|
||||
--
|
||||
-- V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
|
||||
-- V2, V2A = Verb ** {c2 : Str} ;
|
||||
-- V3 = Verb ** {c2, c3 : Str} ;
|
||||
-- VV = {s : VVForm => Str ; isAux : Bool} ;
|
||||
--
|
||||
-- A = {s : AForm => Str} ;
|
||||
-- A2 = {s : AForm => Str ; c2 : Str} ;
|
||||
--
|
||||
-- N = {s : Number => Case => Str} ;
|
||||
-- N2 = {s : Number => Case => Str} ** {c2 : Str} ;
|
||||
-- N3 = {s : Number => Case => Str} ** {c2,c3 : Str} ;
|
||||
-- PN = {s : Case => Str} ;
|
||||
--
|
||||
}
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete CatRus of Cat = CommonX ** open ResRus, Prelude in {
|
||||
|
||||
flags optimize=all_subs ; coding=utf8 ;
|
||||
|
||||
lincat
|
||||
|
||||
-- Phrase
|
||||
|
||||
Utt, Voc = {s : Str} ;
|
||||
|
||||
-- Tensed/Untensed
|
||||
|
||||
S = {s : Str} ;
|
||||
SC = {s : Str} ;
|
||||
QS = {s : QForm => Str} ;
|
||||
RS = {s : GenNum => Case => Animacy => Str} ;
|
||||
|
||||
-- Sentence
|
||||
-- clause (variable tense) e.g. "John walks"/"John walked"
|
||||
Cl ={s : Polarity => ClForm => Str} ;
|
||||
Slash = {s : Polarity => ClForm => Str; s2: Str; c: Case} ;
|
||||
Imp = { s: Polarity => Gender => Number => Str } ;
|
||||
|
||||
-- Question
|
||||
|
||||
QCl = {s :Polarity => ClForm => QForm => Str};
|
||||
IP = { s : PronForm => Str ; n : Number ; p : Person ;
|
||||
g: PronGen ; anim : Animacy ; pron: Bool} ;
|
||||
IAdv, IComp = {s : Str} ;
|
||||
IDet = Adjective ** {n: Number; g: PronGen; c: Case} ;
|
||||
|
||||
-- Relative
|
||||
|
||||
RCl = {s : Polarity => ClForm => GenNum => Case => Animacy => Str} ;
|
||||
RP = {s : GenNum => Case => Animacy => Str} ;
|
||||
|
||||
-- Verb
|
||||
-- Polarity =>
|
||||
Comp, VP = {s : ClForm => GenNum => Person => Str ; asp : Aspect ; w: Voice}
|
||||
** {s2 : Str ; s3 : Gender => Number => Str ; negBefore: Bool} ;
|
||||
|
||||
|
||||
-- Adjective
|
||||
|
||||
AP = {s : AdjForm => Str; p : IsPostfixAdj} ;
|
||||
|
||||
-- Noun
|
||||
|
||||
CN = {s : Number => Case => Str; g : Gender; anim : Animacy} ;
|
||||
NP = { s : PronForm => Str ; n : Number ; p : Person ;
|
||||
g: PronGen ; anim : Animacy ; pron: Bool} ;
|
||||
Pron = { s : PronForm => Str ; n : Number ; p : Person ;
|
||||
g: PronGen ; pron: Bool} ;
|
||||
|
||||
-- Determiners (only determinative pronouns
|
||||
-- (or even indefinite numerals: "много" (many)) in Russian) are inflected
|
||||
-- according to the gender of nouns they determine.
|
||||
-- extra parameters (Number and Case) are added for the sake of
|
||||
-- the determinative pronoun "bolshinstvo" ("most");
|
||||
-- Gender parameter is due to multiple determiners (Numerals in Russian)
|
||||
-- like "mnogo"
|
||||
-- The determined noun has the case parameter specific for the determiner
|
||||
QuantSg, QuantPl , Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case} ;
|
||||
Predet, Quant= {s : AdjForm => Str; g: PronGen; c: Case} ;
|
||||
|
||||
-- Adverb
|
||||
|
||||
Adv, AdV, AdA, AdS, AdN = {s : Str} ;
|
||||
|
||||
-- Numeral
|
||||
|
||||
Num, Numeral = {s : Case => Gender => Str} ;
|
||||
|
||||
-- Structural
|
||||
-- The conjunction has an inherent number, which is used when conjoining
|
||||
-- noun phrases: "Иван и Маша поют" vs. "Иван или Маша поет"; in the
|
||||
-- case of "или", the result is however plural if any of the disjuncts is.
|
||||
|
||||
Conj = {s : Str ; n : Number} ;
|
||||
DConj = {s1,s2 : Str ; n : Number} ;
|
||||
PConj = {s : Str} ;
|
||||
CAdv = {s : Str} ;
|
||||
Subj = {s : Str} ;
|
||||
Prep = {s : Str ; c: Case } ;
|
||||
|
||||
-- Open lexical classes, e.g. Lexicon
|
||||
|
||||
V, VS, VV, VQ, VA = Verbum ; -- = {s : VerbForm => Str ; asp : Aspect } ;
|
||||
V2, V2A = Verbum ** Complement ;
|
||||
V3 = Verbum ** Complement** {s4 : Str; c2: Case} ;
|
||||
-- VV = {s : VVForm => Str ; isAux : Bool} ;
|
||||
|
||||
Ord = {s : AdjForm => Str} ;
|
||||
A = {s : Degree => AdjForm => Str} ;
|
||||
A2 = A ** Complement ;
|
||||
|
||||
-- Substantives moreover have an inherent gender.
|
||||
N = {s : SubstForm => Str ; g : Gender ; anim : Animacy } ;
|
||||
N2 = {s : Number => Case => Str; g : Gender; anim : Animacy} ** Complement ;
|
||||
N3 = {s : Number => Case => Str; g : Gender; anim : Animacy} ** Complement ** {s3 : Str; c2: Case} ;
|
||||
PN = {s : Case => Str ; g : Gender ; anim : Animacy} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,47 +1,108 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete ConjunctionRus of Conjunction =
|
||||
CatRus ** open ResRus, Coordination, Prelude in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
--
|
||||
-- ConjS = conjunctSS ;
|
||||
-- DConjS = conjunctDistrSS ;
|
||||
--
|
||||
-- ConjAdv = conjunctSS ;
|
||||
-- DConjAdv = conjunctDistrSS ;
|
||||
--
|
||||
-- ConjNP conj ss = conjunctTable Case conj ss ** {
|
||||
-- a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}
|
||||
-- } ;
|
||||
-- DConjNP conj ss = conjunctDistrTable Case conj ss ** {
|
||||
-- a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}
|
||||
-- } ;
|
||||
--
|
||||
-- ConjAP conj ss = conjunctTable Agr conj ss ** {
|
||||
-- isPre = ss.isPre
|
||||
-- } ;
|
||||
-- DConjAP conj ss = conjunctDistrTable Agr conj ss ** {
|
||||
-- isPre = ss.isPre
|
||||
-- } ;
|
||||
--
|
||||
---- These fun's are generated from the list cat's.
|
||||
--
|
||||
-- BaseS = twoSS ;
|
||||
-- ConsS = consrSS comma ;
|
||||
-- BaseAdv = twoSS ;
|
||||
-- ConsAdv = consrSS comma ;
|
||||
-- BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;
|
||||
-- ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;
|
||||
-- BaseAP x y = twoTable Agr x y ** {isPre = andB x.isPre y.isPre} ;
|
||||
-- ConsAP xs x = consrTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ;
|
||||
--
|
||||
-- lincat
|
||||
-- [S] = {s1,s2 : Str} ;
|
||||
-- [Adv] = {s1,s2 : Str} ;
|
||||
-- [NP] = {s1,s2 : Case => Str ; a : Agr} ;
|
||||
-- [AP] = {s1,s2 : Agr => Str ; isPre : Bool} ;
|
||||
--
|
||||
}
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete ConjunctionRus of Conjunction =
|
||||
CatRus ** open ResRus, Coordination, Prelude in {
|
||||
|
||||
flags optimize=all_subs ; coding=utf8 ;
|
||||
|
||||
lin
|
||||
|
||||
ConjS = conjunctSS ;
|
||||
DConjS = conjunctDistrSS ;
|
||||
|
||||
ConjAdv = conjunctSS ;
|
||||
DConjAdv = conjunctDistrSS ;
|
||||
|
||||
ConjNP c xs =
|
||||
conjunctTable PronForm c xs ** {n = conjNumber c.n xs.n ;
|
||||
anim = xs.anim ;
|
||||
p = xs.p; g = xs.g ; pron = xs.pron} ;
|
||||
|
||||
|
||||
DConjNP c xs =
|
||||
conjunctDistrTable PronForm c xs ** {n = conjNumber c.n xs.n ;
|
||||
p = xs.p ; pron = xs.pron ; anim = xs.anim ;
|
||||
g = xs.g } ;
|
||||
|
||||
|
||||
ConjAP c xs = conjunctTable AdjForm c xs ** {p = xs.p} ;
|
||||
|
||||
|
||||
DConjAP c xs = conjunctDistrTable AdjForm c xs ** {p = xs.p} ;
|
||||
|
||||
-- These fun's are generated from the list cat's.
|
||||
|
||||
BaseS = twoSS ;
|
||||
ConsS = consrSS comma ;
|
||||
BaseAdv = twoSS ;
|
||||
ConsAdv = consrSS comma ;
|
||||
|
||||
|
||||
ConsNP x xs =
|
||||
consTable PronForm comma xs x **
|
||||
{n = conjNumber xs.n x.n ; g = conjPGender x.g xs.g ;
|
||||
anim = conjAnim x.anim xs.anim ;
|
||||
p = conjPerson xs.p x.p; pron = conjPron xs.pron x.pron} ;
|
||||
|
||||
ConsAP x xs = consTable AdjForm comma xs x ** {p = andB xs.p x.p} ;
|
||||
|
||||
|
||||
BaseAP x y = twoTable AdjForm x y ** {p = andB x.p y.p} ;
|
||||
|
||||
BaseNP x y = twoTable PronForm x y ** {n = conjNumber x.n y.n ;
|
||||
g = conjPGender x.g y.g ; p = conjPerson x.p y.p ;
|
||||
pron = conjPron x.pron y.pron ; anim = conjAnim x.anim y.anim } ;
|
||||
|
||||
|
||||
|
||||
|
||||
lincat
|
||||
[S] = {s1,s2 : Str} ;
|
||||
[Adv] = {s1,s2 : Str} ;
|
||||
-- The structure is the same as for sentences. The result is either always plural
|
||||
-- or plural if any of the components is, depending on the conjunction.
|
||||
[NP] = { s1,s2 : PronForm => Str ; g: PronGen ;
|
||||
anim : Animacy ; n : Number ; p : Person ; pron : Bool } ;
|
||||
-- The structure is the same as for sentences. The result is a prefix adjective
|
||||
-- if and only if all elements are prefix.
|
||||
[AP] = {s1,s2 : AdjForm => Str ; p : Bool} ;
|
||||
|
||||
|
||||
|
||||
oper
|
||||
-- We have to define a calculus of numbers of persons. For numbers,
|
||||
-- it is like the conjunction with $Pl$ corresponding to $False$.
|
||||
|
||||
conjNumber : Number -> Number -> Number = \m,n -> case <m,n> of {
|
||||
<Sg,Sg> => Sg ;
|
||||
_ => Pl
|
||||
} ;
|
||||
|
||||
-- For persons, we let the latter argument win ("либо ты, либо я пойду"
|
||||
-- but "либо я, либо ты пойдешь"). This is not quite clear.
|
||||
|
||||
conjPerson : Person -> Person -> Person = \_,p ->
|
||||
p ;
|
||||
|
||||
-- For pron, we let the latter argument win - "Маша или моя мама" (Nominative case)
|
||||
-- but - "моей или Машина мама" (Genetive case) both corresponds to
|
||||
-- "Masha's or my mother"), which is actually not exactly correct, since
|
||||
-- different cases should be used - "Машина или моя мама".
|
||||
|
||||
conjPron : Bool -> Bool -> Bool = \_,p ->
|
||||
p ;
|
||||
|
||||
-- For gender in a similar manner as for person:
|
||||
-- Needed for adjective predicates like:
|
||||
-- "Маша или Оля - красивая", "Антон или Олег - красивый",
|
||||
-- "Маша или Олег - красивый".
|
||||
-- The later is not totally correct, but there is no correct way to say that.
|
||||
|
||||
conjGender : Gender -> Gender -> Gender = \_,m -> m ;
|
||||
conjPGender : PronGen -> PronGen -> PronGen = \_,m -> m ;
|
||||
|
||||
conjAnim : Animacy -> Animacy -> Animacy = \_,m -> m ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,15 +1,37 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete IdiomRus of Idiom = CatRus ** open Prelude, ResRus in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
-- ExistNP np =
|
||||
-- mkClause "there" (agrP3 np.a.n) (insertObj (\\_ => np.s ! Acc) (predAux auxBe)) ;
|
||||
-- ImpersCl vp = mkClause "it" (agrP3 Sg) vp ;
|
||||
-- GenericCl vp = mkClause "one" (agrP3 Sg) vp ;
|
||||
--
|
||||
-- ProgrVP vp = insertObj (\\a => vp.ad ++ vp.prp ++ vp.s2 ! a) (predAux auxBe) ;
|
||||
--
|
||||
}
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete IdiomRus of Idiom = CatRus ** open Prelude, ResRus, MorphoRus in {
|
||||
|
||||
flags optimize=all_subs ; coding=utf8 ;
|
||||
|
||||
lin
|
||||
ExistNP = \bar ->
|
||||
{s =\\b,clf => case b of
|
||||
{Pos => verbByut.s ! (getActVerbForm clf (pgen2gen bar.g) Sg P3)
|
||||
++ bar.s ! PF Nom No NonPoss;
|
||||
Neg => "не" ++ verbByut.s ! (getActVerbForm clf (pgen2gen bar.g) Sg P3)
|
||||
++ bar.s ! PF Nom No NonPoss
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
ImpersCl vp = {s= \\ b, clf => let ne= case b of {Pos =>[]; Neg =>""}
|
||||
in
|
||||
ne ++ vp.s! clf! (ASg Neut) ! P3 };
|
||||
|
||||
-- No direct correspondance in Russian. Usually expressed by infinitive:
|
||||
-- "Если очень захотеть, можно в космос улететь"
|
||||
-- (If one really wants one can fly into the space).
|
||||
-- Note that the modal verb "can" is trasferred into adverb
|
||||
-- "можно" (it is possible) in Russian
|
||||
-- The closest subject is "ты" (you), which is omitted in the final sentence:
|
||||
-- "Если очень захочешь, можешь в космос улететь"
|
||||
|
||||
GenericCl vp = {s= \\ b, clf => let ne= case b of {Pos =>[]; Neg =>""}
|
||||
in
|
||||
ne ++ vp.s! clf! (ASg Masc) ! P3 };
|
||||
|
||||
ProgrVP vp = vp ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,23 +1,17 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
|
||||
concrete LangRus of Lang =
|
||||
-- NounRus,
|
||||
-- VerbRus,
|
||||
-- AdjectiveRus,
|
||||
-- AdverbRus,
|
||||
-- NumeralRus,
|
||||
-- SentenceRus,
|
||||
-- QuestionRus,
|
||||
-- RelativeRus,
|
||||
-- ConjunctionRus,
|
||||
-- PhraseRus,
|
||||
-- TextX,
|
||||
-- StructuralRus,
|
||||
-- IdiomRus,
|
||||
-- LexiconRus
|
||||
** {
|
||||
|
||||
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
||||
|
||||
} ;
|
||||
NounRus,
|
||||
VerbRus,
|
||||
AdjectiveRus,
|
||||
AdverbRus,
|
||||
NumeralRus,
|
||||
SentenceRus,
|
||||
QuestionRus,
|
||||
RelativeRus,
|
||||
ConjunctionRus,
|
||||
PhraseRus,
|
||||
TextX,
|
||||
StructuralRus,
|
||||
IdiomRus,
|
||||
LexiconRus ** { flags startcat = Phr ; unlexer = text ; lexer = text ;} ;
|
||||
+404
-356
@@ -1,356 +1,404 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
|
||||
--
|
||||
concrete LexiconRus of Lexicon = CatRus **
|
||||
open ParadigmsRus, IrregRus, Prelude in {
|
||||
--
|
||||
--flags
|
||||
-- optimize=values ;
|
||||
--
|
||||
--lin
|
||||
-- airplane_N = regN "airplane" ;
|
||||
-- answer_V2S = mkV2S (regV "answer") "to" ;
|
||||
-- apartment_N = regN "apartment" ;
|
||||
-- apple_N = regN "apple" ;
|
||||
-- art_N = regN "art" ;
|
||||
-- ask_V2Q = mkV2Q (regV "ask") [] ;
|
||||
-- baby_N = regN "baby" ;
|
||||
-- bad_A = mkADeg "bad" "badly" "worse" "worst" ;
|
||||
-- bank_N = regN "bank" ;
|
||||
-- beautiful_A = regADeg "beautiful" ;
|
||||
-- become_VA = mkVA (irregV "become" "became" "become") ;
|
||||
-- beer_N = regN "beer" ;
|
||||
-- beg_V2V = mkV2V (regDuplV "beg") [] "to" ;
|
||||
-- big_A = duplADeg "big" ;
|
||||
-- bike_N = regN "bike" ;
|
||||
-- bird_N = regN "bird" ;
|
||||
-- black_A = regADeg "black" ;
|
||||
-- blue_A = regADeg "blue" ;
|
||||
-- boat_N = regN "boat" ;
|
||||
-- book_N = regN "book" ;
|
||||
-- boot_N = regN "boot" ;
|
||||
-- boss_N = regN "boss" ;
|
||||
-- boy_N = regN "boy" ;
|
||||
-- bread_N = regN "bread" ;
|
||||
-- break_V2 = dirV2 (irregV "break" "broke" "broken") ;
|
||||
-- broad_A = regADeg "broad" ;
|
||||
-- brother_N2 = regN2 "brother" ;
|
||||
-- brown_A = regADeg "brown" ;
|
||||
-- butter_N = regN "butter" ;
|
||||
-- buy_V2 = dirV2 (irregV "buy" "bought" "bought") ;
|
||||
-- camera_N = regN "camera" ;
|
||||
-- cap_N = regN "cap" ;
|
||||
-- car_N = regN "car" ;
|
||||
-- carpet_N = regN "carpet" ;
|
||||
-- cat_N = regN "cat" ;
|
||||
-- ceiling_N = regN "ceiling" ;
|
||||
-- chair_N = regN "chair" ;
|
||||
-- cheese_N = regN "cheese" ;
|
||||
-- child_N = mk2N "child" "children" ;
|
||||
-- church_N = regN "church" ;
|
||||
-- city_N = regN "city" ;
|
||||
-- clean_A = regADeg "clean" ;
|
||||
-- clever_A = regADeg "clever" ;
|
||||
-- close_V2 = dirV2 (regV "close") ;
|
||||
-- coat_N = regN "coat" ;
|
||||
-- cold_A = regADeg "cold" ;
|
||||
-- come_V = (irregV "come" "came" "come") ;
|
||||
-- computer_N = regN "computer" ;
|
||||
-- country_N = regN "country" ;
|
||||
-- cousin_N = regN "cousin" ;
|
||||
-- cow_N = regN "cow" ;
|
||||
-- die_V = (regV "die") ;
|
||||
-- dirty_A = regADeg "dirty" ;
|
||||
-- distance_N3 = mkN3 (regN "distance") "from" "to" ;
|
||||
-- doctor_N = regN "doctor" ;
|
||||
-- dog_N = regN "dog" ;
|
||||
-- door_N = regN "door" ;
|
||||
-- drink_V2 = dirV2 (irregV "drink" "drank" "drunk") ;
|
||||
-- easy_A2V = mkA2V (regA "easy") "for" ;
|
||||
-- eat_V2 = dirV2 (irregV "eat" "ate" "eaten") ;
|
||||
-- empty_A = regADeg "empty" ;
|
||||
-- enemy_N = regN "enemy" ;
|
||||
-- factory_N = regN "factory" ;
|
||||
-- father_N2 = regN2 "father" ;
|
||||
-- fear_VS = mkVS (regV "fear") ;
|
||||
-- find_V2 = dirV2 (irregV "find" "found" "found") ;
|
||||
-- fish_N = mk2N "fish" "fish" ;
|
||||
-- floor_N = regN "floor" ;
|
||||
-- forget_V2 = dirV2 (irregDuplV "forget" "forgot" "forgotten") ;
|
||||
-- fridge_N = regN "fridge" ;
|
||||
-- friend_N = regN "friend" ;
|
||||
-- fruit_N = regN "fruit" ;
|
||||
-- fun_AV = mkAV (regA "fun") ;
|
||||
-- garden_N = regN "garden" ;
|
||||
-- girl_N = regN "girl" ;
|
||||
-- glove_N = regN "glove" ;
|
||||
-- gold_N = regN "gold" ;
|
||||
-- good_A = mkADeg "good" "well" "better" "best" ;
|
||||
-- go_V = (mkV "go" "goes" "went" "gone" "going") ;
|
||||
-- green_A = regADeg "green" ;
|
||||
-- harbour_N = regN "harbour" ;
|
||||
-- hate_V2 = dirV2 (regV "hate") ;
|
||||
-- hat_N = regN "hat" ;
|
||||
-- have_V2 = dirV2 (mkV "have" "has" "had" "had" "having") ;
|
||||
-- hear_V2 = dirV2 (irregV "hear" "heard" "heard") ;
|
||||
-- hill_N = regN "hill" ;
|
||||
-- hope_VS = mkVS (regV "hope") ;
|
||||
-- horse_N = regN "horse" ;
|
||||
-- hot_A = duplADeg "hot" ;
|
||||
-- house_N = regN "house" ;
|
||||
-- important_A = compoundADeg (regA "important") ;
|
||||
-- industry_N = regN "industry" ;
|
||||
-- iron_N = regN "iron" ;
|
||||
-- king_N = regN "king" ;
|
||||
-- know_V2 = dirV2 (irregV "know" "knew" "known") ;
|
||||
-- lake_N = regN "lake" ;
|
||||
-- lamp_N = regN "lamp" ;
|
||||
-- learn_V2 = dirV2 (regV "learn") ;
|
||||
-- leather_N = regN "leather" ;
|
||||
-- leave_V2 = dirV2 (irregV "leave" "left" "left") ;
|
||||
-- like_V2 = dirV2 (regV "like") ;
|
||||
-- listen_V2 = mkV2 (regV "listen") "to" ;
|
||||
-- live_V = (regV "live") ;
|
||||
-- long_A = regADeg "long" ;
|
||||
-- lose_V2 = dirV2 (irregV "lose" "lost" "lost") ;
|
||||
-- love_N = regN "love" ;
|
||||
-- love_V2 = dirV2 (regV "love") ;
|
||||
-- man_N = mk2N "man" "men" ;
|
||||
-- married_A2 = mkA2 (regA "married") "to" ;
|
||||
-- meat_N = regN "meat" ;
|
||||
-- milk_N = regN "milk" ;
|
||||
-- moon_N = regN "moon" ;
|
||||
-- mother_N2 = regN2 "mother" ;
|
||||
-- mountain_N = regN "mountain" ;
|
||||
-- music_N = regN "music" ;
|
||||
-- narrow_A = regADeg "narrow" ;
|
||||
-- new_A = regADeg "new" ;
|
||||
-- newspaper_N = regN "newspaper" ;
|
||||
-- oil_N = regN "oil" ;
|
||||
-- old_A = regADeg "old" ;
|
||||
-- open_V2 = dirV2 (regV "open") ;
|
||||
-- paint_V2A = mkV2A (regV "paint") [] ;
|
||||
-- paper_N = regN "paper" ;
|
||||
-- paris_PN = regPN "Paris" nonhuman ;
|
||||
-- peace_N = regN "peace" ;
|
||||
-- pen_N = regN "pen" ;
|
||||
-- planet_N = regN "planet" ;
|
||||
-- plastic_N = regN "plastic" ;
|
||||
-- play_V2 = dirV2 (regV "play") ;
|
||||
-- policeman_N = regN "policeman" ;
|
||||
-- priest_N = regN "priest" ;
|
||||
-- probable_AS = mkAS (regA "probable") ;
|
||||
-- queen_N = regN "queen" ;
|
||||
-- radio_N = regN "radio" ;
|
||||
-- rain_V0 = mkV0 (regV "rain") ;
|
||||
-- read_V2 = dirV2 (irregV "read" "read" "read") ;
|
||||
-- red_A = duplADeg "red" ;
|
||||
-- religion_N = regN "religion" ;
|
||||
-- restaurant_N = regN "restaurant" ;
|
||||
-- river_N = regN "river" ;
|
||||
-- rock_N = regN "rock" ;
|
||||
-- roof_N = regN "roof" ;
|
||||
-- rubber_N = regN "rubber" ;
|
||||
-- run_V = (irregDuplV "run" "ran" "run") ;
|
||||
-- say_VS = mkVS (irregV "say" "said" "said") ;
|
||||
-- school_N = regN "school" ;
|
||||
-- science_N = regN "science" ;
|
||||
-- sea_N = regN "sea" ;
|
||||
-- seek_V2 = dirV2 (irregV "seek" "sought" "sought") ;
|
||||
-- see_V2 = dirV2 (irregV "see" "saw" "seen") ;
|
||||
-- sell_V3 = dirV3 (irregV "sell" "sold" "sold") "to" ;
|
||||
-- send_V3 = dirV3 (irregV "send" "sent" "sent") "to" ;
|
||||
-- sheep_N = mk2N "sheep" "sheep" ;
|
||||
-- ship_N = regN "ship" ;
|
||||
-- shirt_N = regN "shirt" ;
|
||||
-- shoe_N = regN "shoe" ;
|
||||
-- shop_N = regN "shop" ;
|
||||
-- short_A = regADeg "short" ;
|
||||
-- silver_N = regN "silver" ;
|
||||
-- sister_N = regN "sister" ;
|
||||
-- sleep_V = (irregV "sleep" "slept" "slept") ;
|
||||
-- small_A = regADeg "small" ;
|
||||
-- snake_N = regN "snake" ;
|
||||
-- sock_N = regN "sock" ;
|
||||
-- speak_V2 = dirV2 (irregV "speak" "spoke" "spoken") ;
|
||||
-- star_N = regN "star" ;
|
||||
-- steel_N = regN "steel" ;
|
||||
-- stone_N = regN "stone" ;
|
||||
-- stove_N = regN "stove" ;
|
||||
-- student_N = regN "student" ;
|
||||
-- stupid_A = regADeg "stupid" ;
|
||||
-- sun_N = regN "sun" ;
|
||||
-- switch8off_V2 = dirV2 (partV (regV "switch") "off") ;
|
||||
-- switch8on_V2 = dirV2 (partV (regV "switch") "on") ;
|
||||
-- table_N = regN "table" ;
|
||||
-- talk_V3 = mkV3 (regV "talk") "to" "about" ;
|
||||
-- teacher_N = regN "teacher" ;
|
||||
-- teach_V2 = dirV2 (irregV "teach" "taught" "taught") ;
|
||||
-- television_N = regN "television" ;
|
||||
-- thick_A = regADeg "thick" ;
|
||||
-- thin_A = duplADeg "thin" ;
|
||||
-- train_N = regN "train" ;
|
||||
-- travel_V = (regDuplV "travel") ;
|
||||
-- tree_N = regN "tree" ;
|
||||
-- ---- trousers_N = regN "trousers" ;
|
||||
-- ugly_A = regADeg "ugly" ;
|
||||
-- understand_V2 = dirV2 (irregV "understand" "understood" "understood") ;
|
||||
-- university_N = regN "university" ;
|
||||
-- village_N = regN "village" ;
|
||||
-- wait_V2 = mkV2 (regV "wait") "for" ;
|
||||
-- walk_V = (regV "walk") ;
|
||||
-- warm_A = regADeg "warm" ;
|
||||
-- war_N = regN "war" ;
|
||||
-- watch_V2 = dirV2 (regV "watch") ;
|
||||
-- water_N = regN "water" ;
|
||||
-- white_A = regADeg "white" ;
|
||||
-- window_N = regN "window" ;
|
||||
-- wine_N = regN "wine" ;
|
||||
-- win_V2 = dirV2 (irregDuplV "win" "won" "won") ;
|
||||
-- woman_N = mk2N "woman" "women" ;
|
||||
-- wonder_VQ = mkVQ (regV "wonder") ;
|
||||
-- wood_N = regN "wood" ;
|
||||
-- write_V2 = dirV2 (irregV "write" "wrote" "written") ;
|
||||
-- yellow_A = regADeg "yellow" ;
|
||||
-- young_A = regADeg "young" ;
|
||||
--
|
||||
-- do_V2 = dirV2 (mkV "do" "does" "did" "done" "doing") ;
|
||||
-- now_Adv = mkAdv "now" ;
|
||||
-- already_Adv = mkAdv "already" ;
|
||||
-- song_N = regN "song" ;
|
||||
-- add_V3 = dirV3 (regV "add") "to" ;
|
||||
-- number_N = regN "number" ;
|
||||
-- put_V2 = mkV2 (irregDuplV "put" "put" "put") [] ;
|
||||
-- stop_V = regDuplV "stop" ;
|
||||
-- jump_V = regV "jump" ;
|
||||
--
|
||||
-- left_Ord = ss "left" ;
|
||||
-- right_Ord = ss "right" ;
|
||||
-- far_Adv = mkAdv "far" ;
|
||||
-- correct_A = (regA "correct") ;
|
||||
-- dry_A = regA "dry" ;
|
||||
-- dull_A = regA "dull" ;
|
||||
-- full_A = regA "full" ;
|
||||
-- heavy_A = regA "heavy" ;
|
||||
-- near_A = regA "near" ;
|
||||
-- rotten_A = (regA "rotten") ;
|
||||
-- round_A = regA "round" ;
|
||||
-- sharp_A = regA "sharp" ;
|
||||
-- smooth_A = regA "smooth" ;
|
||||
-- straight_A = regA "straight" ;
|
||||
-- wet_A = regA "wet" ; ----
|
||||
-- wide_A = regA "wide" ;
|
||||
-- animal_N = regN "animal" ;
|
||||
-- ashes_N = regN "ash" ; -- FIXME: plural only?
|
||||
-- back_N = regN "back" ;
|
||||
-- bark_N = regN "bark" ;
|
||||
-- belly_N = regN "belly" ;
|
||||
-- blood_N = regN "blood" ;
|
||||
-- bone_N = regN "bone" ;
|
||||
-- breast_N = regN "breast" ;
|
||||
-- cloud_N = regN "cloud" ;
|
||||
-- day_N = regN "day" ;
|
||||
-- dust_N = regN "dust" ;
|
||||
-- ear_N = regN "ear" ;
|
||||
-- earth_N = regN "earth" ;
|
||||
-- egg_N = regN "egg" ;
|
||||
-- eye_N = regN "eye" ;
|
||||
-- fat_N = regN "fat" ;
|
||||
-- feather_N = regN "feather" ;
|
||||
-- fingernail_N = regN "fingernail" ;
|
||||
-- fire_N = regN "fire" ;
|
||||
-- flower_N = regN "flower" ;
|
||||
-- fog_N = regN "fog" ;
|
||||
-- foot_N = mk2N "foot" "feet" ;
|
||||
-- forest_N = regN "forest" ;
|
||||
-- grass_N = regN "grass" ;
|
||||
-- guts_N = regN "gut" ; -- FIXME: no singular
|
||||
-- hair_N = regN "hair" ;
|
||||
-- hand_N = regN "hand" ;
|
||||
-- head_N = regN "head" ;
|
||||
-- heart_N = regN "heart" ;
|
||||
-- horn_N = regN "horn" ;
|
||||
-- husband_N = genderN masculine (regN "husband") ;
|
||||
-- ice_N = regN "ice" ;
|
||||
-- knee_N = regN "knee" ;
|
||||
-- leaf_N = mk2N "leaf" "leaves" ;
|
||||
-- leg_N = regN "leg" ;
|
||||
-- liver_N = regN "liver" ;
|
||||
-- louse_N = mk2N "louse" "lice" ;
|
||||
-- mouth_N = regN "mouth" ;
|
||||
-- name_N = regN "name" ;
|
||||
-- neck_N = regN "neck" ;
|
||||
-- night_N = regN "night" ;
|
||||
-- nose_N = regN "nose" ;
|
||||
-- person_N = genderN human (regN "person") ;
|
||||
-- rain_N = regN "rain" ;
|
||||
-- road_N = regN "road" ;
|
||||
-- root_N = regN "root" ;
|
||||
-- rope_N = regN "rope" ;
|
||||
-- salt_N = regN "salt" ;
|
||||
-- sand_N = regN "sand" ;
|
||||
-- seed_N = regN "seed" ;
|
||||
-- skin_N = regN "skin" ;
|
||||
-- sky_N = regN "sky" ;
|
||||
-- smoke_N = regN "smoke" ;
|
||||
-- snow_N = regN "snow" ;
|
||||
-- stick_N = regN "stick" ;
|
||||
-- tail_N = regN "tail" ;
|
||||
-- tongue_N = regN "tongue" ;
|
||||
-- tooth_N = mk2N "tooth" "teeth" ;
|
||||
-- wife_N = genderN feminine (mk2N "wife" "wives") ;
|
||||
-- wind_N = regN "wind" ;
|
||||
-- wing_N = regN "wing" ;
|
||||
-- worm_N = regN "worm" ;
|
||||
-- year_N = regN "year" ;
|
||||
-- blow_V = blow_V ;
|
||||
-- breathe_V = dirV2 (regV "breathe") ;
|
||||
-- burn_V = burn_V ;
|
||||
-- dig_V = dig_V ;
|
||||
-- fall_V = fall_V ;
|
||||
-- float_V = regV "float" ;
|
||||
-- flow_V = regV "flow" ;
|
||||
-- fly_V = fly_V ;
|
||||
-- freeze_V = freeze_V ;
|
||||
-- give_V3 = dirV3 give_V "to" ;
|
||||
-- laugh_V = regV "laugh" ;
|
||||
-- lie_V = lie_V ;
|
||||
-- play_V = regV "play" ;
|
||||
-- sew_V = sew_V ;
|
||||
-- sing_V = sing_V ;
|
||||
-- sit_V = sit_V ;
|
||||
-- smell_V = regV "smell" ;
|
||||
-- spit_V = spit_V ;
|
||||
-- stand_V = stand_V ;
|
||||
-- swell_V = swell_V ;
|
||||
-- swim_V = swim_V ;
|
||||
-- think_V = think_V ;
|
||||
-- turn_V = regV "turn" ;
|
||||
-- vomit_V = regV "vomit" ;
|
||||
--
|
||||
-- bite_V2 = dirV2 bite_V ;
|
||||
-- count_V2 = dirV2 (regV "count") ;
|
||||
-- cut_V2 = dirV2 cut_V ;
|
||||
-- fear_V2 = dirV2 (regV "fear") ;
|
||||
-- fight_V2 = dirV2 fight_V ;
|
||||
-- hit_V2 = dirV2 hit_V ;
|
||||
-- hold_V2 = dirV2 hold_V ;
|
||||
-- hunt_V2 = dirV2 (regV "hunt") ;
|
||||
-- kill_V2 = dirV2 (regV "kill") ;
|
||||
-- pull_V2 = dirV2 (regV "pull") ;
|
||||
-- push_V2 = dirV2 (regV "push") ;
|
||||
-- rub_V2 = dirV2 (regDuplV "rub") ;
|
||||
-- scratch_V2 = dirV2 (regV "scratch") ;
|
||||
-- split_V2 = dirV2 split_V ;
|
||||
-- squeeze_V2 = dirV2 (regV "squeeze") ;
|
||||
-- stab_V2 = dirV2 (regDuplV "stab") ;
|
||||
-- suck_V2 = dirV2 (regV "suck") ;
|
||||
-- throw_V2 = dirV2 throw_V ;
|
||||
-- tie_V2 = dirV2 (regV "tie") ;
|
||||
-- wash_V2 = dirV2 (regV "wash") ;
|
||||
-- wipe_V2 = dirV2 (regV "wipe") ;
|
||||
--
|
||||
---- other_A = regA "other" ;
|
||||
--
|
||||
}
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
--
|
||||
concrete LexiconRus of Lexicon = CatRus **
|
||||
open ParadigmsRus, Prelude, StructuralRus, MorphoRus in {
|
||||
--, IrregRus
|
||||
flags
|
||||
optimize=values ;
|
||||
coding=utf8 ;
|
||||
lin
|
||||
airplane_N = nTelefon "самолет" ;
|
||||
answer_V2S = tvDir (mkRegVerb imperfective first "отвеча" "ю" "отвечал" "отвечай" "отвечать" );
|
||||
apartment_N = nMashina "квартир" ;
|
||||
apple_N = nChislo "яблок" ;
|
||||
art_N = nChislo "искусств" ;
|
||||
ask_V2Q = tvDir (mkRegVerb imperfective first "спрашива" "ю" "спрашивал" "спрашивай" "спрашивать") ;
|
||||
baby_N = nMalush "малыш";
|
||||
bad_A = AKakoj_Nibud "плох" "" "хуже";
|
||||
bank_N = nBank "банк" ;
|
||||
beautiful_A = AStaruyj "красив" "красивее";
|
||||
become_VA = mkRegVerb perfective second "станов" "лю" "стал" "стань" "стать" ;
|
||||
beer_N = nChislo "пив" ;
|
||||
beg_V2V = tvDir (mkRegVerb imperfective second "про" "шу" "просил" "проси" "просить" );
|
||||
big_A = AKakoj_Nibud "больш" "" "больше" ;
|
||||
bike_N = nTelefon "велосипед" ;
|
||||
bird_N = nEdinica "птиц" ;
|
||||
black_A = AStaruyj "чёрн" "чернее";
|
||||
blue_A = AMolodoj "голуб" "голубее";
|
||||
boat_N = nMashina "лодк" ;
|
||||
book_N = nMashina "книг" ;
|
||||
boot_N = nBank "сапог" ;
|
||||
boss_N = nStomatolog "начальник" ;
|
||||
boy_N = nStomatolog "мальчик" ;
|
||||
bread_N = nAdres "хлеб" ;
|
||||
break_V2 = tvDir (mkRegVerb imperfective first "прерыва" "ю" "прерывал" "прерывай" "прерывать" );
|
||||
␍ broad_A = AMalenkij "широк" "шире";
|
||||
brother_N2 = mkN2 (nBrat ",брат") ;
|
||||
brown_A = AStaruyj "коричнев" "коричневее";
|
||||
butter_N = nChislo "масл";
|
||||
buy_V2 = tvDir (mkRegVerb imperfective first "покупа" "ю" "покупал" "покупай" "покупать" );
|
||||
camera_N = nMashina "kamer" ;
|
||||
cap_N = nNoga "чашк" ; -- чаш-ек Pl-Gen
|
||||
car_N = nMashina "машин" ;
|
||||
carpet_N = mkN "ковёр" "ковра" "ковру" "ковёр" "ковром" "ковре" "ковры" "ковров" "коврам" "ковры" "коврами" "коврах" masculine inanimate;
|
||||
cat_N = nMashina "кошк" ;
|
||||
ceiling_N = nPotolok "потол" ;
|
||||
chair_N = nStul "стул" ;
|
||||
cheese_N = nTelefon "сыр" ;
|
||||
child_N = mkN "ребёнок" "ребёнка" "ребёнку" "ребёнка" "ребёнком" "ребёнке" "дети" "детей" "детям" "детей" "детьми" "детях" masculine animate ;
|
||||
church_N = mkN "церковь" "церкви" "церкви" "церковь" "церковью" "церкви" "церкви" "церквей" "церквям" "церкви" "церквями" "церквях" masculine inanimate;
|
||||
city_N = nAdres "город" ;␍
|
||||
clean_A = AStaruyj "чист" "чище";
|
||||
clever_A = AStaruyj "умн" "умнее";
|
||||
close_V2= tvDir (mkRegVerb imperfective first "закрыва" "ю" "закрывал" "закрывай" "закрывать" );
|
||||
coat_N = mkIndeclinableNoun "пальто" masculine inanimate ;
|
||||
cold_A = AStaruyj "холодн" "холоднее";
|
||||
come_V = mkRegVerb imperfective first "прихо" "жу" "приходил" "приходи" "приходить" ;
|
||||
computer_N = nTelefon "компьютер" ;
|
||||
country_N = nMashina "стран" ;
|
||||
cousin_N = nTelefon "кузен" ;
|
||||
cow_N = nMashina "коров" ;
|
||||
die_V = mkRegVerb imperfective first "умира" "ю" "умирал" "умрай" "умирать" ;
|
||||
dirty_A = AStaruyj "грязн" "грязнее" ;
|
||||
doctor_N = nAdres "доктор" ;
|
||||
dog_N = nNoga "собак" ;
|
||||
door_N = nBol "двер" ;
|
||||
drink_V2 = tvDir (mkRegVerb imperfective firstE "пь" "ю" "пил" "пей" "пить" );
|
||||
eat_V2 = tvDir (mkRegVerb imperfective first "куша" "ю" "кушал" "кушай" "кушать" );
|
||||
enemy_N = nStomatolog "враг" ;
|
||||
factory_N = nNoga "фабрик" ;
|
||||
father_N2 = mkN2 (mkN "отец" "отца" "отцу" "отца" "отцом" "отце" "отцы" "отцов" "отцам" "отцов" "отцами" "отцах" masculine animate);
|
||||
fear_VS= mkRegVerb imperfective second "бо" "ю" "боял" "бой" "боять" ;
|
||||
find_V2 = tvDir (mkRegVerb imperfective second "нахо" "жу" "находил" "находи" "находить" );
|
||||
fish_N = nMashina "рыб" ;
|
||||
floor_N = nTelefon "пол" ;
|
||||
forget_V2= tvDir (mkRegVerb imperfective first "забыва" "ю" "забывал" "забывай" "забывать" );
|
||||
fridge_N = nBank "холодильник" ;
|
||||
friend_N = mkN "друг" "друга" "другу" "друга" "другом" "друге" "друзья" "друзей" "друзьям" "друзей" "дузьями" "друзьях" masculine animate;
|
||||
fruit_N = nTelefon "фрукт" ;
|
||||
garden_N = nTelefon "сад" ;
|
||||
girl_N = nNoga "девочк" ;
|
||||
glove_N = nNoga "перчатк" ;
|
||||
gold_N = nChislo "золот" ;
|
||||
good_A = AKhoroshij "хорош" "лучше" ;
|
||||
go_V= mkRegVerb imperfective second "хо" "жу" "ходил" "ходи" "ходить" ;
|
||||
green_A = AStaruyj "зелен" "зеленее" ;
|
||||
harbour_N = nTelefon "залив" ;
|
||||
hate_V2= tvDir (mkRegVerb imperfective second "ненави" "жу" "ненавидел" "ненавидь" "ненавидеть" );
|
||||
hat_N = nMashina "шляп" ;
|
||||
have_V2= tvDir (mkRegVerb imperfective first "име" "ю" "имел" "имей" "иметь" );
|
||||
hear_V2= tvDir (mkRegVerb imperfective first "слуша" "ю" "слушал" "слушай" "слушать" );
|
||||
hill_N = nTelefon "холм" ;
|
||||
hope_VS= mkRegVerb imperfective first "наде" "ю" "надеял" "надей" "надеять" ;
|
||||
horse_N = nBol "лошад" ;
|
||||
hot_A = AKhoroshij "горяч" "горячее" ;
|
||||
house_N = nAdres "дом" ;␍
|
||||
important_A = AStaruyj "важн" "важнее" ;
|
||||
industry_N = nChislo "производств" ;
|
||||
iron_N = nChislo "желез" ;
|
||||
king_N = mkN "король" "короля" "королю" "короля" "королем" "короле" "короли" "королей" "королям" "королей" "королями" "королях" masculine animate;
|
||||
know_V2= tvDir (mkRegVerb imperfective first "зна" "ю" "знал" "знай" "знать" );
|
||||
lake_N = nChislo "озер" ;
|
||||
lamp_N = nMashina "ламп" ;
|
||||
learn_V2= tvDir (mkRegVerb imperfective second "уч" "у" "учил" "учи" "учить" );
|
||||
leather_N = nEdinica "кож" ;
|
||||
leave_V2= tvDir (mkRegVerb imperfective second "ухож" "у" "уходил" "уходи" "уходить" );
|
||||
like_V2= tvDir (mkRegVerb imperfective second "нрав" "лю" "нравил" "нравь" "нравить" );
|
||||
listen_V2= tvDir (mkRegVerb imperfective first "слуша" "ю" "слушал" "слушай" "слушать" );
|
||||
live_V= mkRegVerb imperfective firstE "жив" "у" "жил" "живи" "жить" ;
|
||||
long_A = AStaruyj "длинн" "длиннее" ;
|
||||
lose_V2 = tvDir (mkRegVerb imperfective first "теря" "ю" "терял" "теряй" "терять" );
|
||||
love_N = nBol "любов" ;
|
||||
love_V2= tvDir (mkRegVerb imperfective second "люб" "лю" "любил" "люби" "любить" );
|
||||
man_N = nStomatolog "человек" ;
|
||||
meat_N =nChislo "мяс" ;
|
||||
milk_N = nChislo "молок" ;
|
||||
moon_N = nMashina "лун" ;
|
||||
mother_N2 = mkN2 ( nMashina "мам") ;
|
||||
mountain_N = nMashina "гор" ;
|
||||
music_N = nNoga "музык" ;
|
||||
narrow_A = AStaruyj "узк" "уже" ;␍
|
||||
new_A = AStaruyj "нов" "новее" ;
|
||||
newspaper_N = nMashina "газет" ;
|
||||
oil_N = nBol "нефть" ;
|
||||
old_A = AStaruyj "стар" "старше" ;
|
||||
open_V2= tvDir (mkRegVerb imperfective first "открыва" "ю" "открывал" "открывай" "открывать" );
|
||||
paper_N = nNoga "бумаг" ;
|
||||
peace_N = nTelefon "мир" ;
|
||||
pen_N = nNoga "ручк" ;
|
||||
planet_N = nMashina "планет" ;
|
||||
plastic_N = nMashina "пластмасс" ;
|
||||
play_V2 = tvDir (mkRegVerb imperfective first "игра" "ю" "играл" "играй" "играть" );
|
||||
policeman_N = nTelefon "милиционер" ;
|
||||
priest_N = nStomatolog "священник" ;
|
||||
queen_N = nMashina "королев" ;
|
||||
radio_N = mkIndeclinableNoun "радио" neuter inanimate;
|
||||
read_V2 = tvDir (mkRegVerb imperfective first "чита" "ю" "читал" "читай" "читать" );
|
||||
red_A = AStaruyj "красн" "краснее" ;
|
||||
religion_N = nMalyariya "религи" ;
|
||||
restaurant_N = nTelefon "ресторан" ;
|
||||
river_N = nNoga "рек" ;
|
||||
rock_N = nUroven "кам" ;
|
||||
roof_N = nEdinica "крыш" ;
|
||||
rubber_N = nMashina "резин" ;
|
||||
run_V = mkRegVerb imperfective first "бега" "ю" "бегал" "бегай" "бегать" ;
|
||||
say_VS = mkRegVerb imperfective second "говор" "ю" "говорил" "говори" "говорить" ;
|
||||
school_N = nMashina "школ" ;
|
||||
science_N = nEdinica "наук" ;
|
||||
sea_N = nProizvedenie "мор" ;
|
||||
seek_V2 = tvDir (mkRegVerb imperfective first "ищ" "у" "искал" "ищи" "искать" );
|
||||
see_V2 = tvDir (mkRegVerb imperfective second "виж" "у" "видел" "видь" "видеть" );
|
||||
sell_V3 = tvDirDir (mkRegVerb imperfective firstE "прода" "ю" "продавал" "продавай" "продавать" );
|
||||
send_V3 = tvDirDir (mkRegVerb imperfective first "посыла" "ю" "посылал" "посылай" "посылать" );
|
||||
sheep_N = nMashina "овц" ;
|
||||
ship_N = nNol "корабл" ;␍
|
||||
shirt_N = nNoga "рубашк" ;
|
||||
shoe_N = mkN "туфля" "туфли" "туфле" "туфлю" "туфлей" "туфле" "туфли" "туфель" "туфлям" "туфли" "туфлями" "туфлях" masculine inanimate;
|
||||
shop_N = nTelefon "магазин" ;
|
||||
short_A = AMalenkij "коротк" "короче" ;
|
||||
silver_N = nChislo "серебр" ;
|
||||
sister_N = nMashina "сестр" ;
|
||||
sleep_V = mkRegVerb imperfective second "сп" "лю" "спал" "спи" "спать" ;
|
||||
small_A = AMalenkij "маленьк" "меньше" ;
|
||||
snake_N = nTetya"зме" ;
|
||||
sock_N = nPotolok "нос" ;
|
||||
speak_V2 = tvDir (mkRegVerb imperfective second "говор" "ю" "говорил" "говори" "говорить" );
|
||||
star_N = nMashina "звезд" ;
|
||||
steel_N = nBol "стал" ;
|
||||
stone_N = nNol "камен" ;
|
||||
stove_N = nBol "печ" ;
|
||||
student_N = nTelefon "студент" ;
|
||||
stupid_A = AMolodoj "тупой" "тупее" ;
|
||||
sun_N = mkN "солнце" "солнца" "солнцу" "солнце" "солнцем" "солнце" "солнца" "солнц" "солнцам" "солнца" "солнцами" "солнцах" neuter inanimate;
|
||||
switch8off_V2 = tvDir (mkRegVerb imperfective first "выключа" "ю" "выключал" "выключай" "выключать") ;
|
||||
switch8on_V2 = tvDir (mkRegVerb imperfective first "включа" "ю" "включал" "включай" "включать") ;
|
||||
table_N = nTelefon "стол" ;
|
||||
teacher_N = nNol "учител" ;
|
||||
teach_V2 = tvDir (mkRegVerb imperfective second "уч" "у" "учил" "учи" "учить" );
|
||||
television_N = nProizvedenie "телевидени" ;
|
||||
thick_A = AStaruyj "толст" "толще" ;
|
||||
thin_A = AMalenkij "тонк" "тоньше" ;
|
||||
train_N = nAdres "поезд" ;
|
||||
travel_V = mkRegVerb imperfective first "путешеству" "ю" "путешествовал" "путешествуй" "путешествовать" ;
|
||||
tree_N = nChislo "дерев" ;
|
||||
--trousers_N = mkN "" "" "" "" "" "" "штаны" "штанов" "штанам" "штаны" "штанами" "штанах" masculine inanimate;
|
||||
ugly_A = AStaruyj "некрасив" "некрасивее" ;
|
||||
understand_V2 = tvDir (mkRegVerb imperfective first "понима" "ю" "понимал" "понимай" "понимать" );
|
||||
university_N = nTelefon "университет" ;
|
||||
village_N = nMalyariya "деревн" ;
|
||||
wait_V2 = tvDir (mkRegVerb imperfective firstE "жд" "у" "ждал" "жди" "ждать" );
|
||||
walk_V = mkRegVerb imperfective first "гуля" "ю" "гулял" "гуляй" "гулять" ;
|
||||
warm_A = AStaruyj "тёпл" "теплее" ;
|
||||
war_N = nMashina "войн" ;
|
||||
watch_V2 = tvDir (mkRegVerb imperfective second "смотр" "ю" "смотрел" "смотри" "смотреть" );
|
||||
water_N = nMashina "вод" ;
|
||||
white_A = AStaruyj "бел" "белее" ;␍
|
||||
window_N = nChislo "окн" ;
|
||||
wine_N = nChislo "вин" ;
|
||||
win_V2 = tvDir (mkRegVerb imperfective first "выигрыва" "ю" "выигрывал" "выигрывай" "выигрывать" );
|
||||
woman_N = nZhenchina "женщин" ;
|
||||
wood_N = nChislo "дерев" ;
|
||||
write_V2 = tvDir (mkRegVerb imperfective first "пиш" "у" "писал" "пиши" "писать" );
|
||||
yellow_A = AStaruyj "жёлт" "желтее" ;
|
||||
young_A = AMolodoj "молод" "моложе";
|
||||
|
||||
do_V2 = tvDir (mkRegVerb imperfective first "дела" "ю" "делал" "делай" "делать" );
|
||||
now_Adv = mkAdv "сейчас" ;
|
||||
already_Adv = mkAdv "уже" ;
|
||||
song_N = nTetya "песн" ;
|
||||
add_V3 = mkV3 (mkRegVerb imperfective first "складыва" "ю" "складывал" "складывай" "складывать" ) "" "в" accusative accusative;
|
||||
number_N = nChislo "числ" ;
|
||||
put_V2 = tvDir (mkRegVerb imperfective firstE "клад" "у" "клал" "клади" "класть" );
|
||||
stop_V = mkRegVerb imperfective first "останавлива" "ю" "останавливал" "останавливай" "останавливать";
|
||||
jump_V = mkRegVerb imperfective first "прыга" "ю" "прыгал" "прыгай" "прыгать" ;
|
||||
|
||||
distance_N3 = mkN3 (nProizvedenie "расстоян") from_Prep to_Prep ;
|
||||
|
||||
-- in Russian combinations with verbs are expressed with adverbs:
|
||||
-- "легко понять" ("easy to understand"), which is different from
|
||||
-- adjective expression "легкий для понимания" ("easy for understanding")
|
||||
-- So the next to words are adjectives, since there are such adjectives
|
||||
-- in Russian, but to use them with verb would be wrong in Russian:
|
||||
fun_AV = AStaruyj "весёл" "веселее";
|
||||
easy_A2V = mkA2 (AMalenkij "легк" "легче") "для" genitive ;
|
||||
|
||||
empty_A = AMolodoj "пуст" "пустее";
|
||||
married_A2 = mkA2 (adjInvar "замужем") "за" instructive ;
|
||||
paint_V2A = tvDir (mkRegVerb imperfective first "рису" "ю" "рисовал" "рисуй" "рисовать" ) ;
|
||||
probable_AS = AStaruyj "возможный" "возможнее";
|
||||
-- rain_V0 No such verb in Russian!
|
||||
talk_V3 = mkV3 (mkRegVerb imperfective second "говор" "ю" "говорил" "говори" "говорить" ) "с" "о" instructive prepositional;
|
||||
wonder_VQ = mkRegVerb imperfective first "интересу" "ю" "интересовал" "интересуй" "интересовать";
|
||||
|
||||
-- Nouns
|
||||
|
||||
animal_N = nZhivotnoe "животн" ;
|
||||
ashes_N = nPepel "пеп" ;
|
||||
back_N = nMashina "спин" ;
|
||||
bark_N = mkN "лай" "лая" "лаю" "лай" "лаем" "лае" "лаи" "лаев" "лаям" "лаи" "лаями" "лаях" masculine inanimate;
|
||||
belly_N = nTelefon "живот" ;
|
||||
bird_N = nEdinica "птиц" ;
|
||||
blood_N = nBol "кров" ;
|
||||
bone_N = nBol "кост" ;
|
||||
breast_N = nBol "грудь" ;
|
||||
|
||||
cloud_N = nChislo "облак" ;
|
||||
day_N = mkN "день" "дня" "дню" "день" "днём" "дне" "дни" "дней" "дням" "дни" "днями" "днях" masculine inanimate ;
|
||||
|
||||
dust_N = nBol "пыл" ;
|
||||
ear_N = nChislo "ухо" ;
|
||||
earth_N = nTetya "земл" ;
|
||||
egg_N = nChislo "яйц" ;
|
||||
eye_N = nAdres "глаз" ;
|
||||
fat_N = nBank "жир" ;
|
||||
|
||||
-- father_N = UseN2 father_N2 ;
|
||||
feather_N = mkN "перо" "пера" "перу" "пера" "пером" "пере" "перья" "перьев" "перьям" "перьев" "перьями" "перьях" neuter inanimate ;
|
||||
fingernail_N = mkN "ноготь" "ногтя" "ногтю" "ногтя" "ногтем" "ногте" "ногти" "ногтей" "ногтям" "ногтей" "ногтями" "ногтях" masculine inanimate ;
|
||||
fire_N = mkN "огонь" "огня" "огню" "огня" "огнём" "огне" "огни" "огней" "огням" "огней" "огнями" "огнях" masculine inanimate ;
|
||||
fish_N = nMashina "рыб" ;
|
||||
flower_N = mkN "отец" "отца" "отцу" "отца" "отцом" "отце" "отцы" "отцов" "отцам" "отцов" "отцами" "отцах" masculine animate ;
|
||||
fog_N = nTelefon "туман" ;
|
||||
foot_N = nTetya "ступн" ;
|
||||
forest_N = nAdres "лес" ;
|
||||
fruit_N = nTelefon "фрукт";
|
||||
grass_N = nMashina "трав" ;
|
||||
guts_N = nBol "внутренност" ;
|
||||
hair_N = nTelefon "волос" ;
|
||||
hand_N = nNoga "рук" ;
|
||||
head_N = nMashina "голов" ;
|
||||
heart_N = mkN "сердце" "сердца" "сердцу" "сердца" "сердцем" "сердце" "сердца" "сердец" "сердцам" "сердец" "сердцами" "сердцах" neuter inanimate;
|
||||
horn_N = nAdres "рог" ;
|
||||
husband_N = mkN "муж" "мужа" "мужу" "мужа" "мужем" "муже" "мужья" "мужей" "мужьям" "мужей" "мужьями" "мужьях" masculine animate ;
|
||||
ice_N = mkN "лёд" "льда" "льду" "льда" "льдом" "льде" "льды" "льдов" "льдам" "льдов" "льдами" "льдах" masculine inanimate ;
|
||||
knee_N = mkN "колено" "колена" "колену" "колена" "коленом" "колене" "колени" "колен" "коленам" "колен" "коленями" "коленях" neuter inanimate ;
|
||||
lake_N = nChislo "озер" ;
|
||||
leaf_N = nStul "лист" ;
|
||||
leg_N = nNoga "ног" ;
|
||||
liver_N = nBol "печен" ;
|
||||
louse_N = mkN "вошь" "вши" "вши" "вошь" "вошью" "вше" "вши" "вшей" "вшам" "вшей" "вшами" "вшах" feminine animate ;
|
||||
|
||||
meat_N = nChislo "мяс" ;
|
||||
moon_N = nMashina "лун" ;
|
||||
|
||||
|
||||
mountain_N = nMashina "гор" ;
|
||||
mouth_N = mkN "рот" "рта" "рту" "рот" "ртом" "рте" "рты" "ртов" "ртам" "рты" "ртами" "ртах" masculine inanimate;
|
||||
name_N = mkN "имя" "имени" "имени" "имя" "именем" "имени" "имена" "имён" "именам" "имена" "именами" "именах" neuter inanimate;
|
||||
neck_N = nTetya "ше" ;
|
||||
night_N = nBol "ноч" ;
|
||||
nose_N = nTelefon "нос" ;
|
||||
person_N = nBol "личность" ;
|
||||
rain_N = nNol "дожд" ;
|
||||
|
||||
road_N = nNoga "дорог" ;
|
||||
root_N = nUroven "кор" ;
|
||||
rope_N = nNoga "веревк" ;
|
||||
salt_N = nBol "сол" ;
|
||||
sand_N = mkN "песок" "песка" "песку" "песок" "песком" "песке" "пески" "песков" "пескам" "песков" "песками" "песках" masculine inanimate ;
|
||||
sea_N = nProizvedenie "мор" ;
|
||||
seed_N = mkN "семя" "семени" "семении" "семя" "семенем" "семени" "семена" "семян" "семенам" "семена" "семенами" "семенах" neuter inanimate ;
|
||||
skin_N = nEdinica "кож" ;
|
||||
sky_N = mkN "небо" "неба" "небу" "небо" "небом" "небе" "небеса" "небес" "небесам" "небес" "небесами" "небесах" neuter inanimate ;
|
||||
smoke_N = nTelefon "дым" ;
|
||||
snake_N = nTetya "зме" ;
|
||||
snow_N = nAdres "снег" ;
|
||||
star_N = nMashina "звезд" ;
|
||||
stick_N = nNoga "палк" ;
|
||||
|
||||
|
||||
tail_N = nTelefon "хвост" ;
|
||||
tongue_N = nBank "язык" ;
|
||||
tooth_N = nTelefon "зуб" ;
|
||||
tree_N = nChislo "дерев" ;
|
||||
water_N = nMashina "вод" ;
|
||||
wife_N = nMashina "жен" ;
|
||||
wind_N = mkN "ветер" "ветра" "ветру" "ветер" "ветром" "ветра" "ветров" "ветра" "ветрам" "ветров" "ветрами" "ветрах" masculine inanimate ;
|
||||
wing_N = mkN "крыло" "крыла" "крылу" "крыло" "крылом" "крыле" "крылья" "крыльев" "крыльям" "крылья" "крыльями" "крыльях" neuter inanimate ;
|
||||
|
||||
worm_N = nNol "черв" ;
|
||||
year_N = nAdres "год" ;
|
||||
|
||||
|
||||
-- Verbs
|
||||
|
||||
bite_V2 = tvDir (mkRegVerb imperfective first "куса" "ю" "кусал" "кусай" "кусать");
|
||||
blow_V = mkRegVerb imperfective first "ду" "ю" "дул" "дуй" "дуть" ;
|
||||
breathe_V = mkRegVerb imperfective second "дыш" "у" "дышал" "дыши" "дышать" ;
|
||||
burn_V = mkRegVerb imperfective second "гор" "ю" "горел" "гори" "гореть" ;
|
||||
count_V2 = tvDir (mkRegVerb imperfective first "счита" "ю" "считал" "считай" "считать" ) ;
|
||||
cut_V2 = tvDir (mkRegVerb imperfective first "реж" "у" "резал" "режь" "резать" ) ;
|
||||
dig_V = mkRegVerb imperfective first "копа" "ю" "копал" "копай" "копать" ;
|
||||
|
||||
|
||||
fall_V = mkRegVerb imperfective first "пада" "ю" "падал" "падай" "падать" ;
|
||||
|
||||
fight_V2 = tvDir (mkRegVerb imperfective firstE "дер" "у" "драл" "дери" "драть" ) ;
|
||||
float_V = mkRegVerb imperfective firstE "плыв" "у" "плыл" "плыви" "плыть" ;
|
||||
flow_V = mkRegVerb imperfective firstE "тек" "у" "тёк" "теки" "течь" ;
|
||||
fly_V = mkRegVerb imperfective second "лета" "ю" "летал" "летай" "летать" ;
|
||||
freeze_V = mkRegVerb imperfective first "замерза" "ю" "замерзал" "замерзай" "замерзать" ;
|
||||
give_V3 = tvDirDir (mkRegVerb imperfective firstE "да" "ю" "давал" "давай" "давать" ) ;
|
||||
|
||||
hit_V2 = tvDir (mkRegVerb imperfective first "ударя" "ю" "ударял" "ударяй" "ударять" );
|
||||
hold_V2 = tvDir (mkRegVerb imperfective second "держ" "у" "держал" "держи" "держать" );
|
||||
hunt_V2 = tvDir (mkRegVerb imperfective second "охоч" "у" "охотил" "охоть" "охотить" ) ;
|
||||
kill_V2 = tvDir (mkRegVerb imperfective first "убива" "ю" "убивал" "убивай" "убивать" ) ;
|
||||
|
||||
laugh_V = mkRegVerb imperfective firstE "сме" "ю" "смеял" "смей" "смеять" ;
|
||||
lie_V = mkRegVerb imperfective firstE "лг" "у" "лгал" "лги" "лгать" ;
|
||||
play_V = mkRegVerb imperfective first "игра" "ю" "играл" "играй" "играть" ;
|
||||
pull_V2 = tvDir (mkRegVerb imperfective first "тян" "у" "тянул" "тяни" "тянуть" ) ;
|
||||
push_V2 = tvDir (mkRegVerb imperfective first "толка" "ю" "толкал" "толкай" "толкать" );
|
||||
rub_V2 = tvDir (mkRegVerb imperfective firstE "тр" "у" "тёр" "три" "тереть" );
|
||||
|
||||
scratch_V2 = tvDir (mkRegVerb imperfective first "чеш" "у" "чесал" "чеши" "чесать" ) ;
|
||||
|
||||
sew_V = mkRegVerb imperfective firstE "шь" "ю" "шил" "шей" "шить" ;
|
||||
sing_V = mkRegVerb imperfective firstE "по" "ю" "пел" "пой" "петь" ;
|
||||
sit_V = mkVerbum imperfective "сижу" "сидишь" "сидит" "сидим" "сидите" "сидят" "сидел" "сиди" "сидеть" ;
|
||||
smell_V = mkRegVerb imperfective first "пахн" "у" "пахнул" "пахни" "пахнуть" ;
|
||||
spit_V = mkRegVerb imperfective firstE "плю" "ю" "плевал" "плюй" "плевать" ;
|
||||
split_V2 = tvDir (mkRegVerb imperfective first "разбива" "ю" "разбивал" "разбей" "разбивать" ) ;
|
||||
squeeze_V2 = tvDir (mkRegVerb imperfective first "сжима" "ю" "сжимал" "сжимай" "сжимать" ) ;
|
||||
stab_V2 = tvDir (mkRegVerb imperfective first "кол" "ю" "колол" "коли" "колоть" ) ;
|
||||
stand_V = mkRegVerb imperfective second "сто" "ю" "стоял" "стой" "стоять" ;
|
||||
suck_V2 = tvDir (mkRegVerb imperfective firstE "сос" "у" "сосал" "соси" "сосать") ;
|
||||
swell_V = mkRegVerb imperfective first "опуха" "ю" "опухал" "опухай" "опухать" ;
|
||||
swim_V = mkRegVerb imperfective first "плава" "ю" "плавал" "плавай" "плавать" ;
|
||||
think_V = mkRegVerb imperfective first "дума" "ю" "думал" "думай" "думать" ;
|
||||
throw_V2 = tvDir (mkRegVerb imperfective first "броса" "ю" "бросал" "бросай" "бросать" ) ;
|
||||
tie_V2 = tvDir (mkRegVerb imperfective first "вяж" "у" "вязал" "вяжи" "вязать") ;
|
||||
turn_V = mkRegVerb imperfective first "поворачива" "ю" "поворачивал" "поворачивай" "поворачивать" ;
|
||||
vomit_V = mkRegVerb imperfective firstE "рв" "у" "рвал" "рви" "рвать" ;
|
||||
wash_V2 = tvDir (mkRegVerb imperfective first "мо" "ю" "мыл" "мой" "мыть" ) ;
|
||||
wipe_V2 = tvDir (mkRegVerb imperfective first "вытира" "ю" "вытирал" "вытирай" "вытирать" );
|
||||
|
||||
|
||||
correct_A = AStaruyj "правильн" "правильнее";
|
||||
dry_A = AMolodoj "сух" "суше";␍
|
||||
|
||||
dull_A = AStaruyj "скучн" "скучнее";
|
||||
far_Adv = mkAdv "далеко";
|
||||
full_A = AStaruyj "полн" "полнее";
|
||||
heavy_A = AStaruyj "тяжел" "тяжелее";
|
||||
left_Ord = (uy_j_EndDecl "лев" ) ** {lock_A = <>};
|
||||
near_A = AMalenkij "близк" "ближе";
|
||||
right_Ord = (uy_j_EndDecl "прав") ** {lock_A = <>} ;
|
||||
rotten_A = AMolodoj "гнил" "гнилее";
|
||||
round_A = AStaruyj "кругл" "круглее";
|
||||
sharp_A = AStaruyj "остр" "острее";
|
||||
smooth_A = AMalenkij "гладк" "глаже";
|
||||
straight_A = AMolodoj "прям" "прямее";
|
||||
wet_A = AStaruyj "мокр" "мокрее";
|
||||
wide_A = AMalenkij "широк" "шире";
|
||||
|
||||
fear_V2 =tvDir (mkRegVerb imperfective first "бо" "ю" "боял" "бой" "боять" );
|
||||
|
||||
paris_PN = mkPN "Париж" Masc Inanimate ;
|
||||
--rain_V0 Does not exist in Russian
|
||||
|
||||
|
||||
}
|
||||
|
||||
+1804
-199
File diff suppressed because it is too large.
Load diff
+166
-77
@@ -1,77 +1,166 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
|
||||
|
||||
concrete NounRus of Noun = CatRus ** open ResRus, Prelude in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
-- DetCN det cn = {
|
||||
-- s = \\c => det.s ++ cn.s ! det.n ! c ;
|
||||
-- a = agrP3 det.n
|
||||
-- } ;
|
||||
-- UsePN pn = pn ** {a = agrP3 Sg} ;
|
||||
-- UsePron p = p ;
|
||||
--
|
||||
-- PredetNP pred np = {
|
||||
-- s = \\c => pred.s ++ np.s ! c ;
|
||||
-- a = np.a
|
||||
-- } ;
|
||||
--
|
||||
-- DetSg quant ord = {
|
||||
-- s = quant.s ++ ord.s ;
|
||||
-- n = Sg
|
||||
-- } ;
|
||||
--
|
||||
-- DetPl quant num ord = {
|
||||
-- s = quant.s ++ num.s ++ ord.s ;
|
||||
-- n = Pl
|
||||
-- } ;
|
||||
--
|
||||
-- SgQuant quant = {s = quant.s ! Sg} ;
|
||||
-- PlQuant quant = {s = quant.s ! Pl} ;
|
||||
--
|
||||
-- PossPron p = {s = \\_ => p.s ! Gen} ;
|
||||
--
|
||||
-- NoNum, NoOrd = {s = []} ;
|
||||
--
|
||||
-- NumInt n = n ;
|
||||
-- OrdInt n = {s = n.s ++ "th"} ; ---
|
||||
--
|
||||
-- NumNumeral numeral = {s = numeral.s ! NCard} ;
|
||||
-- OrdNumeral numeral = {s = numeral.s ! NOrd} ;
|
||||
--
|
||||
-- AdNum adn num = {s = adn.s ++ num.s} ;
|
||||
--
|
||||
-- OrdSuperl a = {s = a.s ! AAdj Superl} ;
|
||||
--
|
||||
-- DefArt = {s = \\_ => artDef} ;
|
||||
--
|
||||
-- IndefArt = {
|
||||
-- s = table {
|
||||
-- Sg => artIndef ;
|
||||
-- Pl => []
|
||||
-- }
|
||||
-- } ;
|
||||
--
|
||||
-- MassDet = {s = [] ; n = Sg} ;
|
||||
--
|
||||
-- UseN n = n ;
|
||||
-- UseN2 n = n ;
|
||||
-- UseN3 n = n ;
|
||||
--
|
||||
-- ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ;
|
||||
-- ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ;
|
||||
--
|
||||
-- AdjCN ap cn = {
|
||||
-- s = \\n,c => preOrPost ap.isPre (ap.s ! agrP3 n) (cn.s ! n ! c)
|
||||
-- } ;
|
||||
-- RelCN cn rs = {s = \\n,c => cn.s ! n ! c ++ rs.s ! {n = n ; p = P3}} ;
|
||||
-- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s} ;
|
||||
--
|
||||
-- SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s} ;
|
||||
--
|
||||
-- ApposCN cn np = {s = \\n,c => cn.s ! n ! Nom ++ np.s ! c} ;
|
||||
--
|
||||
}
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
DetCN kazhduj okhotnik = {
|
||||
s = \\c => case kazhduj.c of {
|
||||
Nom =>
|
||||
kazhduj.s ! AF (extCase c) okhotnik.anim (gNum okhotnik.g kazhduj.n) ++
|
||||
okhotnik.s ! kazhduj.n ! (extCase c) ;
|
||||
_ =>
|
||||
kazhduj.s ! AF (extCase c) okhotnik.anim (gNum okhotnik.g kazhduj.n) ++
|
||||
okhotnik.s ! kazhduj.n ! kazhduj.c };
|
||||
n = kazhduj.n ;
|
||||
p = P3 ;
|
||||
pron = False;
|
||||
g = kazhduj.g ;
|
||||
anim = okhotnik.anim
|
||||
} ;
|
||||
|
||||
UsePN masha = {
|
||||
s = \\c => masha.s ! (extCase c) ;
|
||||
p = P3; g = PGen masha.g ; anim = masha.anim ;
|
||||
n = Sg; nComp = Sg; pron = False} ;
|
||||
|
||||
UsePron p = p ** {anim = Inanimate};
|
||||
|
||||
PredetNP pred np = {
|
||||
s = \\pf => pred.s! (AF (extCase pf) np.anim (gNum (pgen2gen np.g) np.n))++ np.s ! pf ;
|
||||
n = np.n;
|
||||
p = np.p;
|
||||
g = np.g;
|
||||
anim = np.anim;
|
||||
pron = np.pron
|
||||
} ;
|
||||
|
||||
DetSg quant ord = {
|
||||
s = \\af => quant.s!af ++ ord.s!af ;
|
||||
n = quant.n;
|
||||
g = quant.g;
|
||||
c = quant.c
|
||||
} ;␍
|
||||
|
||||
DetPl quant num ord = {
|
||||
s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ++ ord.s!af ;
|
||||
n = Pl;
|
||||
g = quant.g;
|
||||
c = quant.c
|
||||
} ;
|
||||
|
||||
SgQuant quant = {s = quant.s; c=quant.c; g=quant.g; n= Sg} ;
|
||||
PlQuant quant = {s = quant.s ; c=quant.c; g=quant.g; n= Pl} ;
|
||||
|
||||
PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gNum (genAF af) (numAF af) )); c=Nom; g = PNoGen} ;
|
||||
|
||||
NoNum = {s = \\_,_ => []} ; -- cardinal numeral
|
||||
NoOrd = {s = \\_ => []} ; -- adjective
|
||||
|
||||
-- unclear how to tell apart the numbers from their string representation,
|
||||
-- so just leave a decimal representation, without case-suffixes:
|
||||
NumInt i = {s = table { _ => table {_ => i.s } } } ;
|
||||
|
||||
-- OrdInt n = case n of {
|
||||
-- 0|2|6 => (uy_oj_EndDecl n.s) ;
|
||||
-- 3 => (ti_j_EndDecl n.s) ;
|
||||
-- _ => uy_j_EndDecl n.s } ;
|
||||
|
||||
-- OrdNumeral numeral =
|
||||
-- {s = \\ af => (uy_j_EndDecl (numeral.s ! caseAF af ! genAF af)).s!af} ;
|
||||
|
||||
NumNumeral n = n ;
|
||||
|
||||
|
||||
AdNum adn num = {s = \\c,n => adn.s ++ num.s!c!n} ;
|
||||
|
||||
OrdSuperl a = {s = a.s!Posit};
|
||||
|
||||
DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen };
|
||||
IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen };
|
||||
MassDet = {s = \\_=>[] ; c=Nom; g = PNoGen; n = Sg} ;
|
||||
|
||||
UseN sb =
|
||||
{s = \\n,c => sb.s ! SF n c ;
|
||||
g = sb.g ;
|
||||
anim = sb.anim
|
||||
} ;
|
||||
|
||||
-- It is possible to use a function word as a common noun; the semantics is
|
||||
-- often existential or indexical.
|
||||
UseN2 x = x ;
|
||||
UseN3 x = x ;
|
||||
|
||||
-- The application of a function gives, in the first place, a common noun:
|
||||
-- "ключ от дома". From this, other rules of the resource grammar
|
||||
-- give noun phrases, such as "ключи от дома", "ключи от дома
|
||||
-- и от машины", and "ключ от дома и машины" (the
|
||||
-- latter two corresponding to distributive and collective functions,
|
||||
-- respectively). Semantics will eventually tell when each
|
||||
-- of the readings is meaningful.
|
||||
|
||||
ComplN2 mama ivan =
|
||||
{s = \\n, cas => case ivan.pron of
|
||||
{ True => ivan.s ! (mkPronForm cas No (Poss (gNum mama.g n))) ++ mama.s ! n ! cas;
|
||||
False => mama.s ! n ! cas ++ mama.s2 ++
|
||||
ivan.s ! (mkPronForm mama.c Yes (Poss (gNum mama.g n)))
|
||||
};
|
||||
g = mama.g ;
|
||||
anim = mama.anim
|
||||
} ;
|
||||
|
||||
-- Two-place functions add one argument place.
|
||||
-- There application starts by filling the first place.
|
||||
|
||||
ComplN3 poezd paris =
|
||||
{s = \\n,c => poezd.s ! n ! c ++ poezd.s2 ++ paris.s ! (PF poezd.c Yes NonPoss) ;
|
||||
g = poezd.g ; anim = poezd.anim;
|
||||
s2 = poezd.s3; c = poezd.c2
|
||||
} ;
|
||||
|
||||
|
||||
-- The two main functions of adjective are in predication ("Иван - молод")
|
||||
-- and in modification ("молодой человек"). Predication will be defined
|
||||
-- later, in the chapter on verbs.
|
||||
|
||||
AdjCN khoroshij novayaMashina =
|
||||
{s = \\n, c =>
|
||||
khoroshij.s ! AF c novayaMashina.anim (gNum novayaMashina.g n) ++
|
||||
novayaMashina.s ! n ! c ;
|
||||
g = novayaMashina.g ;
|
||||
anim = novayaMashina.anim
|
||||
} ;
|
||||
|
||||
-- This is a source of the "man with a telescope" ambiguity, and may produce
|
||||
-- strange things, like "машины всегда".
|
||||
-- Semantics will have to make finer distinctions among adverbials.
|
||||
|
||||
AdvCN chelovek uTelevizora =
|
||||
{s = \\n,c => chelovek.s ! n ! c ++ uTelevizora.s ;
|
||||
g = chelovek.g ;
|
||||
anim = chelovek.anim
|
||||
} ;
|
||||
|
||||
-- Constructions like "the idea that two is even" are formed at the
|
||||
-- first place as common nouns, so that one can also have "a suggestion that...".
|
||||
|
||||
SentCN idea x =
|
||||
{s = \\n,c => idea.s ! n ! c ++ ["о том, что"] ++ x.s ;
|
||||
g = idea.g; anim = idea.anim
|
||||
} ;
|
||||
|
||||
RelCN idea x =
|
||||
{s = \\n,c => idea.s ! n ! c ++ ["о том, что"] ++ x.s !(gNum idea.g n)!c!idea.anim ;
|
||||
g = idea.g; anim = idea.anim
|
||||
} ;
|
||||
|
||||
ApposCN cn s =
|
||||
{s = \\n,c => cn.s ! n ! c ++ s.s! PF c No NonPoss ;
|
||||
g = cn.g ;
|
||||
anim = cn.anim
|
||||
} ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,46 +1,103 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete NumeralRus of Numeral = CatRus ** open ResRus in {
|
||||
--
|
||||
--lincat
|
||||
-- Digit = {s : DForm => CardOrd => Str} ;
|
||||
-- Sub10 = {s : DForm => CardOrd => Str ; n : Number} ;
|
||||
-- Sub100 = {s : CardOrd => Str ; n : Number} ;
|
||||
-- Sub1000 = {s : CardOrd => Str ; n : Number} ;
|
||||
-- Sub1000000 = {s : CardOrd => Str ; n : Number} ;
|
||||
--
|
||||
--lin num x = x ;
|
||||
--lin n2 = let two = mkNum "two" "twelve" "twenty" "second" in
|
||||
-- {s = \\f,c => case <f,c> of {
|
||||
-- <teen,NOrd> => "twelfth" ;
|
||||
-- _ => two.s ! f ! c
|
||||
-- }
|
||||
-- } ;
|
||||
--
|
||||
--lin n3 = mkNum "three" "thirteen" "thirty" "third" ;
|
||||
--lin n4 = mkNum "four" "fourteen" "forty" "fourth" ;
|
||||
--lin n5 = mkNum "five" "fifteen" "fifty" "fifth" ;
|
||||
--lin n6 = regNum "six" ;
|
||||
--lin n7 = regNum "seven" ;
|
||||
--lin n8 = mkNum "eight" "eighteen" "eighty" "eighth" ;
|
||||
--lin n9 = regNum "nine" ;
|
||||
--
|
||||
--lin pot01 = mkNum "one" "eleven" "ten" "first" ** {n = Sg} ;
|
||||
--lin pot0 d = d ** {n = Pl} ;
|
||||
--lin pot110 = regCardOrd "ten" ** {n = Pl} ;
|
||||
--lin pot111 = regCardOrd "eleven" ** {n = Pl} ;
|
||||
--lin pot1to19 d = {s = d.s ! teen} ** {n = Pl} ;
|
||||
--lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ;
|
||||
--lin pot1 d = {s = d.s ! ten} ** {n = Pl} ;
|
||||
--lin pot1plus d e = {
|
||||
-- s = \\c => d.s ! ten ! NCard ++ "-" ++ e.s ! unit ! c ; n = Pl} ;
|
||||
--lin pot1as2 n = n ;
|
||||
--lin pot2 d = {s = \\c => d.s ! unit ! NCard ++ mkCard c "hundred"} ** {n = Pl} ;
|
||||
--lin pot2plus d e = {
|
||||
-- s = \\c => d.s ! unit ! NCard ++ "hundred" ++ "and" ++ e.s ! c ; n = Pl} ;
|
||||
--lin pot2as3 n = n ;
|
||||
--lin pot3 n = {
|
||||
-- s = \\c => n.s ! NCard ++ mkCard c "thousand" ; n = Pl} ;
|
||||
--lin pot3plus n m = {
|
||||
-- s = \\c => n.s ! NCard ++ "thousand" ++ m.s ! c ; n = Pl} ;
|
||||
}
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete NumeralRus of Numeral = CatRus ** open ResRus in {
|
||||
|
||||
flags coding=utf8 ;
|
||||
|
||||
-- Toiska, 13/8/2000, AR with Arto Mustajoki.
|
||||
|
||||
lincat Digit = {s : DForm => Gender => Str ; size : Size} ;
|
||||
lincat Sub10 = {s : Place => DForm => Gender => Str ; size : Size} ;
|
||||
lincat Sub100 = {s : Place => Gender => Str ; size : Size} ;
|
||||
lincat Sub1000 = {s : Place => Gender => Str ; size : Size} ;
|
||||
lincat Sub1000000 = {s : Gender => Str} ;
|
||||
|
||||
lin num x = {s = table{ _ => x.s }};
|
||||
|
||||
lin n2 =
|
||||
{s = table {{unit} => table {{Fem} => "две" ; _ => "два"} ;
|
||||
{teen} => gg "двенадцать" ;
|
||||
{ten} => gg "двадцать" ;
|
||||
{hund} => gg "двести"} ;
|
||||
size = sgg} ;
|
||||
lin n3 =
|
||||
{s = table {{unit} => gg "три" ;
|
||||
{teen} => gg "тринадцать" ;
|
||||
{ten} => gg "тридцать" ;
|
||||
{hund} => gg "триста"} ;
|
||||
size = sgg} ;
|
||||
lin n4 =
|
||||
{s = table {{unit} => gg "четыре" ;
|
||||
{teen} => gg "четырнадцать" ;
|
||||
{ten} => gg "сорок" ;
|
||||
{hund} => gg "четыреста"} ;
|
||||
size = sgg} ;
|
||||
lin n5 =
|
||||
{s = table {{unit} => gg "пять" ;
|
||||
{teen} => gg "пятнадцать" ;
|
||||
{ten} => gg "пятьдесят" ;
|
||||
{hund} => gg "пятьсот"} ;
|
||||
size = plg} ;
|
||||
lin n6 =
|
||||
{s = table {{unit} => gg "шесть" ;
|
||||
{teen} => gg "шестнадцать" ;
|
||||
{ten} => gg "шестьдесят" ;
|
||||
{hund} => gg "шестьсот"} ;
|
||||
size = plg} ;
|
||||
lin n7 =
|
||||
{s = table {{unit} => gg "семь" ;
|
||||
{teen} => gg "семнадцать" ;
|
||||
{ten} => gg "семьдесят" ;
|
||||
{hund} => gg "семьсот"} ;
|
||||
size = plg} ;
|
||||
lin n8 =
|
||||
{s = table {{unit} => gg "восемь" ;
|
||||
{teen} => gg "восемнадцать" ;
|
||||
{ten} => gg "восемьдесят" ;
|
||||
{hund} => gg "восемьсот"} ;
|
||||
size = plg} ;
|
||||
lin n9 =
|
||||
{s = table {{unit} => gg "девять" ;
|
||||
{teen} => gg "девятнадцать" ;
|
||||
{ten} => gg "девяносто" ;
|
||||
{hund} => gg "девятьсот"} ;
|
||||
size = plg} ;
|
||||
|
||||
|
||||
lin pot01 =
|
||||
{s = table {{attr} => table {{hund} => gg "сто" ; _ => gg []} ;
|
||||
_ => table {{hund} => gg "сто" ;
|
||||
_ => table {{Masc} => "один" ; {Fem} => "одна" ; _ => "одно"}}} ;
|
||||
size = nom} ;
|
||||
lin pot0 d =
|
||||
{s = table {_ => d.s} ; size = d.size} ;
|
||||
lin pot110 =
|
||||
{s = table {_ => gg "десять"} ; size = plg} ;
|
||||
lin pot111 =
|
||||
{s = table {_ => gg "одиннадцать"} ; size = plg} ; --- 11
|
||||
lin pot1to19 d =
|
||||
{s = table {_ => d.s ! teen} ; size = plg} ;
|
||||
lin pot0as1 n =
|
||||
{s = table {p => n.s ! p ! unit} ; size = n.size} ;
|
||||
lin pot1 d =
|
||||
{s = table {_ => d.s ! ten} ; size = plg} ; ---
|
||||
lin pot1plus d e =
|
||||
{s = table {_ =>
|
||||
table {g => d.s ! ten ! g ++ e.s ! indep ! unit ! g}} ; size = e.size} ;
|
||||
lin pot1as2 n =
|
||||
{s = n.s ; size = n.size} ;
|
||||
lin pot2 d =
|
||||
{s = table {p => d.s ! p ! hund} ; size = plg} ;
|
||||
lin pot2plus d e =
|
||||
{s = table {p => table {g => d.s ! p ! hund ! g ++ e.s ! indep ! g}} ; size = e.size} ;
|
||||
lin pot2as3 n =
|
||||
{s = n.s ! indep} ;
|
||||
lin pot3 n =
|
||||
{s = gg (n.s ! attr ! Fem ++ mille ! n.size)} ;
|
||||
lin pot3plus n m =
|
||||
{s = table {g => n.s ! attr ! Fem ++ mille ! n.size ++ m.s ! indep ! g}} ;
|
||||
|
||||
--- TODO
|
||||
--- raz/odin
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,25 +1,25 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete PhraseRus of Phrase = CatRus ** open Prelude, ResRus in {
|
||||
--
|
||||
-- lin
|
||||
-- PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
--
|
||||
-- UttS s = s ;
|
||||
-- UttQS qs = {s = qs.s ! QDir} ;
|
||||
-- UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
|
||||
-- UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
|
||||
--
|
||||
-- UttIP ip = {s = ip.s ! Nom} ; --- Acc also
|
||||
-- UttIAdv iadv = iadv ;
|
||||
-- UttNP np = {s = np.s ! Acc} ;
|
||||
-- UttVP vp = {s = infVP False vp (agrP3 Sg)} ;
|
||||
-- UttAdv adv = adv ;
|
||||
--
|
||||
-- NoPConj = {s = []} ;
|
||||
-- PConjConj conj = conj ;
|
||||
--
|
||||
-- NoVoc = {s = []} ;
|
||||
-- VocNP np = {s = "," ++ np.s ! Nom} ;
|
||||
--
|
||||
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
|
||||
UttS s = s ;
|
||||
UttQS qs = {s = qs.s ! QDir} ;
|
||||
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc! Sg} ;
|
||||
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ;
|
||||
|
||||
UttIP ip = {s = ip.s ! PF Nom No NonPoss} ; --- Acc also
|
||||
UttIAdv iadv = iadv ;
|
||||
UttNP np = {s = np.s ! PF Acc No NonPoss} ;
|
||||
UttVP vp = {s = vp.s ! ClInfinit ! ASg Masc! P3} ;
|
||||
UttAdv adv = adv ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
PConjConj conj = conj ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
VocNP np = {s = "," ++ np.s ! PF Nom No NonPoss} ;
|
||||
|
||||
}
|
||||
@@ -1,61 +1,55 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete QuestionRus of Question = CatRus ** open ResRus, Prelude in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
--
|
||||
-- QuestCl cl = {
|
||||
-- s = \\t,a,p =>
|
||||
-- let cls = cl.s ! t ! a ! p
|
||||
-- in table {
|
||||
-- QDir => cls ! OQuest ;
|
||||
-- QIndir => "if" ++ cls ! ODir
|
||||
-- } ---- "whether" in ExtRus
|
||||
-- } ;
|
||||
--
|
||||
-- QuestVP qp vp =
|
||||
-- let cl = mkClause (qp.s ! Nom) {n = qp.n ; p = P3} vp
|
||||
-- in {s = \\t,a,b,_ => cl.s ! t ! a ! b ! ODir} ;
|
||||
--
|
||||
-- QuestSlash ip slash =
|
||||
-- mkQuestion (ss (slash.c2 ++ ip.s ! Acc)) slash ;
|
||||
-- --- stranding in ExtRus
|
||||
--
|
||||
-- QuestIAdv iadv cl = mkQuestion iadv cl ;
|
||||
--
|
||||
-- QuestIComp icomp np =
|
||||
-- mkQuestion icomp (mkClause (np.s ! Nom) np.a (predAux auxBe)) ;
|
||||
--
|
||||
--
|
||||
-- PrepIP p ip = {s = p.s ++ ip.s ! Nom} ;
|
||||
--
|
||||
-- AdvIP ip adv = {
|
||||
-- s = \\c => ip.s ! c ++ adv.s ;
|
||||
-- n = ip.n
|
||||
-- } ;
|
||||
--
|
||||
-- IDetCN idet num ord cn = {
|
||||
-- s = \\c => idet.s ++ num.s ++ ord.s ++ cn.s ! idet.n ! c ;
|
||||
-- n = idet.n
|
||||
-- } ;
|
||||
--
|
||||
-- CompIAdv a = a ;
|
||||
--
|
||||
-- oper
|
||||
-- mkQuestion :
|
||||
-- {s : Str} -> Clause ->
|
||||
-- {s : Tense => Anteriority => Polarity => QForm => Str} = \wh,cl ->
|
||||
-- {
|
||||
-- s = \\t,a,p =>
|
||||
-- let
|
||||
-- cls = cl.s ! t ! a ! p ;
|
||||
-- why = wh.s
|
||||
-- in table {
|
||||
-- QDir => why ++ cls ! OQuest ;
|
||||
-- QIndir => why ++ cls ! ODir
|
||||
-- }
|
||||
-- } ;
|
||||
--
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
QuestCl cl = {s = \\b,cf,_ => cl.s ! b ! cf } ;
|
||||
|
||||
QuestVP kto spit =
|
||||
{s = \\b,clf,qf => (predVerbPhrase kto spit).s!b!clf } ;
|
||||
|
||||
QuestSlash Kto yaGovoruO =
|
||||
let { kom = Kto.s ! (mkPronForm yaGovoruO.c No NonPoss) ; o = yaGovoruO.s2 } in
|
||||
{s = \\b,clf,_ => o ++ kom ++ yaGovoruO.s ! b ! clf
|
||||
} ;
|
||||
|
||||
QuestIAdv kak tuPozhivaesh =
|
||||
{s = \\b,clf,q => kak.s ++ tuPozhivaesh.s!b!clf } ;
|
||||
|
||||
QuestIComp kak tuPozhivaesh =
|
||||
{s = \\b,clf,q => let ne = case b of {Neg => ""; Pos => []}
|
||||
in
|
||||
kak.s ++ ne ++tuPozhivaesh.s! PF Nom No NonPoss } ;
|
||||
|
||||
|
||||
PrepIP p ip = {s = p.s ++ ip.s ! PF Nom No NonPoss} ;
|
||||
|
||||
AdvIP ip adv = {
|
||||
s = \\c => ip.s ! c ++ adv.s ;
|
||||
n = ip.n; p=ip.p; g=ip.g; anim=ip.anim; pron=ip.pron
|
||||
} ;
|
||||
|
||||
IDetCN kakoj pyat umeluj okhotnik =
|
||||
{s = \\pf => case kakoj.c of {
|
||||
Nom =>
|
||||
kakoj.s ! AF (extCase pf) okhotnik.anim (gNum okhotnik.g kakoj.n) ++
|
||||
pyat.s! (extCase pf) ! okhotnik.g ++
|
||||
umeluj.s!AF (extCase pf) okhotnik.anim (gNum okhotnik.g kakoj.n)++
|
||||
okhotnik.s ! kakoj.n ! (extCase pf) ;
|
||||
_ =>
|
||||
kakoj.s ! AF (extCase pf) okhotnik.anim (gNum okhotnik.g kakoj.n) ++
|
||||
pyat.s! (extCase pf) ! okhotnik.g ++
|
||||
umeluj.s!AF (extCase pf) okhotnik.anim (gNum okhotnik.g kakoj.n)++
|
||||
okhotnik.s ! kakoj.n ! kakoj.c };
|
||||
n = kakoj.n ;
|
||||
p = P3 ;
|
||||
pron = False;
|
||||
g = kakoj.g ;
|
||||
anim = okhotnik.anim
|
||||
} ;
|
||||
|
||||
CompIAdv a = a ;
|
||||
}
|
||||
@@ -1,46 +1,36 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete RelativeRus of Relative = CatRus ** open ResRus in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
--
|
||||
-- RelCl cl = {
|
||||
-- s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir
|
||||
-- } ;
|
||||
--
|
||||
-- RelVP rp vp = {
|
||||
-- s = \\t,ant,b,ag =>
|
||||
-- let
|
||||
-- agr = case rp.a of {
|
||||
-- RNoAg => ag ;
|
||||
-- RAg a => a
|
||||
-- } ;
|
||||
-- cl = mkClause (rp.s ! RC Nom) agr vp
|
||||
-- in
|
||||
-- cl.s ! t ! ant ! b ! ODir
|
||||
-- } ;
|
||||
--
|
||||
---- Preposition stranding: "that we are looking at". Pied-piping is
|
||||
---- deferred to $ExtRus.gf$ ("at which we are looking").
|
||||
--
|
||||
-- RelSlash rp slash = {
|
||||
-- s = \\t,a,p,_ => rp.s ! RC Acc ++ slash.s ! t ! a ! p ! ODir ++ slash.c2
|
||||
-- } ;
|
||||
--
|
||||
-- FunRP p np rp = {
|
||||
-- s = \\c => np.s ! Acc ++ p.s ++ rp.s ! RPrep ;
|
||||
-- a = RAg np.a
|
||||
-- } ;
|
||||
--
|
||||
-- IdRP = {
|
||||
-- s = table {
|
||||
-- RC Gen => "whose" ;
|
||||
-- RC _ => "that" ;
|
||||
-- RPrep => "which"
|
||||
-- } ;
|
||||
-- a = RNoAg
|
||||
-- } ;
|
||||
--
|
||||
}
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete RelativeRus of Relative = CatRus ** open ResRus, MorphoRus in {
|
||||
|
||||
flags optimize=all_subs ; coding=utf8 ;
|
||||
|
||||
lin
|
||||
|
||||
RelCl A = {s = \\b,clf,gn,c, anim =>
|
||||
takoj.s ! AF c anim gn ++ "что" ++ A.s !b!clf};
|
||||
|
||||
RelVP kotoruj gulyaet =
|
||||
{ s = \\b,clf,gn, c, anim => let { nu = numGNum gn } in
|
||||
kotoruj.s ! gn ! c ! anim ++ gulyaet.s2 ++ gulyaet.s ! clf ! gn !P3 ++
|
||||
gulyaet.s3 ! genGNum gn ! nu
|
||||
} ;
|
||||
|
||||
|
||||
-- Preposition stranding: "that we are looking at". Pied-piping is
|
||||
-- deferred to $ExtRus.gf$ ("at which we are looking").
|
||||
|
||||
RelSlash kotoruj yaVizhu =
|
||||
{s = \\b,clf,gn, _ , anim => yaVizhu.s2 ++ kotoruj.s ! gn ! yaVizhu.c ! anim
|
||||
++ yaVizhu.s!b!clf
|
||||
} ;
|
||||
|
||||
FunRP p mama kotoruj =
|
||||
{s = \\gn,c, anim => let {nu = numGNum gn} in
|
||||
mama.s ! PF c No NonPoss ++
|
||||
p.s ++ kotoruj.s ! gn ! p.c ! anim
|
||||
} ;
|
||||
|
||||
IdRP ={ s = \\gn, c, anim =>
|
||||
kotorujDet.s ! (AF c anim gn )} ;
|
||||
}
|
||||
|
||||
+710
-393
File diff suppressed because it is too large.
Load diff
@@ -1,51 +1,79 @@
|
||||
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
|
||||
concrete SentenceRus of Sentence = CatRus ** open Prelude, ResRus in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
--
|
||||
-- PredVP np vp = mkClause (np.s ! Nom) np.a vp ;
|
||||
--
|
||||
-- PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;
|
||||
--
|
||||
-- ImpVP vp = {
|
||||
-- s = \\pol,n =>
|
||||
-- let
|
||||
-- agr = {n = n ; p = P2} ;
|
||||
-- verb = infVP True vp agr ;
|
||||
-- dont = case pol of {
|
||||
-- Neg => "don't" ;
|
||||
-- _ => []
|
||||
-- }
|
||||
-- in
|
||||
-- dont ++ verb
|
||||
-- } ;
|
||||
--
|
||||
-- SlashV2 np v2 =
|
||||
-- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
|
||||
--
|
||||
-- SlashVVV2 np vv v2 =
|
||||
-- mkClause (np.s ! Nom) np.a
|
||||
-- (insertObj (\\a => infVP vv.isAux (predV v2) a) (predVV vv)) **
|
||||
-- {c2 = v2.c2} ;
|
||||
--
|
||||
-- AdvSlash slash adv = {
|
||||
-- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
|
||||
-- c2 = slash.c2
|
||||
-- } ;
|
||||
--
|
||||
-- SlashPrep cl prep = cl ** {c2 = prep.s} ;
|
||||
--
|
||||
-- EmbedS s = {s = conjThat ++ s.s} ;
|
||||
-- EmbedQS qs = {s = qs.s ! QIndir} ;
|
||||
-- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr
|
||||
--
|
||||
-- UseCl t a p cl = {s = t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! ODir} ;
|
||||
-- UseQCl t a p cl = {s = \\q => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! q} ;
|
||||
-- UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ;
|
||||
--
|
||||
}
|
||||
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
|
||||
concrete SentenceRus of Sentence = CatRus ** open Prelude, ResRus in {
|
||||
|
||||
flags optimize=all_subs ; coding=utf8 ;
|
||||
|
||||
lin
|
||||
|
||||
PredVP Ya tebyaNeVizhu = { s = \\b,clf =>
|
||||
let {
|
||||
ya = Ya.s ! (case clf of {
|
||||
ClInfinit => (mkPronForm Acc No NonPoss);
|
||||
_ => (mkPronForm Nom No NonPoss)
|
||||
});
|
||||
ne = case b of {Pos=>""; Neg=>"не"};␍
|
||||
vizhu = tebyaNeVizhu.s ! clf ! (pgNum Ya.g Ya.n)! Ya.p;
|
||||
tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.g) ! Ya.n
|
||||
}
|
||||
in
|
||||
if_then_else Str tebyaNeVizhu.negBefore
|
||||
(ya ++ ne ++ vizhu ++ tebya)
|
||||
(ya ++ vizhu ++ ne ++ tebya)
|
||||
} ;
|
||||
|
||||
|
||||
PredSCVP sc vp = { s = \\b,clf =>
|
||||
let {
|
||||
ne = case b of {Pos=>""; Neg=>"не"};␍
|
||||
vizhu = vp.s ! clf ! (ASg Neut)! P3;
|
||||
tebya = vp.s3 ! Neut ! Sg
|
||||
}
|
||||
in
|
||||
if_then_else Str vp.negBefore
|
||||
(sc.s ++ ne ++ vizhu ++ tebya)
|
||||
(sc.s ++ vizhu ++ ne ++ tebya)
|
||||
} ;
|
||||
|
||||
SlashV2 ivan lubit = { s=\\b,clf => ivan.s ! PF Nom No NonPoss ++
|
||||
lubit.s! (getActVerbForm clf (pgen2gen ivan.g) ivan.n ivan.p) ;
|
||||
s2=lubit.s2; c=lubit.c };
|
||||
|
||||
SlashVVV2 ivan khotet lubit =
|
||||
{ s=\\b,clf => ivan.s ! PF Nom No NonPoss ++ khotet.s! (getActVerbForm clf (pgen2gen ivan.g) ivan.n ivan.p) ++ lubit.s! VFORM Act VINF ;
|
||||
s2=lubit.s2;
|
||||
c=lubit.c };
|
||||
|
||||
AdvSlash slash adv = {
|
||||
s = \\b,clf => slash.s ! b ! clf ++ adv.s ;
|
||||
c = slash.c;
|
||||
s2 = slash.s2;
|
||||
} ;
|
||||
|
||||
SlashPrep cl p = {s=cl.s; s2=p.s; c=p.c} ;
|
||||
|
||||
ImpVP inf = {s = \\pol, g,n =>
|
||||
let
|
||||
dont = case pol of {
|
||||
Neg => "don't" ;
|
||||
_ => []
|
||||
}
|
||||
in
|
||||
dont ++ inf.s ! ClImper ! (gNum g n )!P3++
|
||||
inf.s2++inf.s3!g!n
|
||||
} ;
|
||||
|
||||
EmbedS s = {s = "что" ++ s.s} ;
|
||||
-- In Russian "Whether you go" transformed in "go whether you":
|
||||
EmbedQS qs = {s = qs.s ! QIndir} ;
|
||||
EmbedVP vp = {s = vp.s!ClInfinit!(ASg Masc) !P3} ;
|
||||
|
||||
UseCl t a p cl = {s = cl.s! p.p ! ClIndic t.t a.a};
|
||||
|
||||
UseQCl t a p qcl= {s = qcl.s!p.p! ClIndic t.t a.a };
|
||||
UseRCl t a p rcl ={s = rcl.s! p.p ! ClIndic t.t a.a };
|
||||
|
||||
}
|
||||
|
||||
@@ -1,117 +1,136 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete StructuralRus of Structural = CatRus **
|
||||
-- open MorphoRus, (P = ParadigmsRus), Prelude in {
|
||||
--
|
||||
-- flags optimize=all ;
|
||||
--
|
||||
-- lin
|
||||
-- above_Prep = ss "above" ;
|
||||
-- after_Prep = ss "after" ;
|
||||
-- all_Predet = ss "all" ;
|
||||
-- almost_AdA, almost_AdN = ss "almost" ;
|
||||
-- although_Subj = ss "although" ;
|
||||
-- always_AdV = ss "always" ;
|
||||
-- and_Conj = ss "and" ** {n = Pl} ;
|
||||
-- because_Subj = ss "because" ;
|
||||
-- before_Prep = ss "before" ;
|
||||
-- behind_Prep = ss "behind" ;
|
||||
-- between_Prep = ss "between" ;
|
||||
-- both7and_DConj = sd2 "both" "and" ** {n = Pl} ;
|
||||
-- but_PConj = ss "but" ;
|
||||
-- by8agent_Prep = ss "by" ;
|
||||
-- by8means_Prep = ss "by" ;
|
||||
-- can8know_VV, can_VV = {
|
||||
-- s = table VVForm [["be able to"] ; "can" ; "could" ;
|
||||
-- ["been able to"] ; ["being able to"] ; "can't" ; "couldn't"] ;
|
||||
-- isAux = True
|
||||
-- } ;
|
||||
-- during_Prep = ss "during" ;
|
||||
-- either7or_DConj = sd2 "either" "or" ** {n = Sg} ;
|
||||
-- everybody_NP = regNP "everybody" Sg ;
|
||||
-- every_Det = mkDeterminer Sg "every" ;
|
||||
-- everything_NP = regNP "everything" Sg ;
|
||||
-- everywhere_Adv = ss "everywhere" ;
|
||||
-- few_Det = mkDeterminer Pl "few" ;
|
||||
-- first_Ord = ss "first" ;
|
||||
-- from_Prep = ss "from" ;
|
||||
-- he_Pron = mkNP "he" "him" "his" Sg P3 ;
|
||||
-- here_Adv = ss "here" ;
|
||||
-- here7to_Adv = ss ["to here"] ;
|
||||
-- here7from_Adv = ss ["from here"] ;
|
||||
-- how_IAdv = ss "how" ;
|
||||
-- how8many_IDet = mkDeterminer Pl ["how many"] ;
|
||||
-- if_Subj = ss "if" ;
|
||||
-- in8front_Prep = ss ["in front of"] ;
|
||||
-- i_Pron = mkNP "I" "me" "my" Sg P1 ;
|
||||
-- in_Prep = ss "in" ;
|
||||
-- it_Pron = mkNP "it" "it" "its" Sg P3 ;
|
||||
-- less_CAdv = ss "less" ;
|
||||
-- many_Det = mkDeterminer Pl "many" ;
|
||||
-- more_CAdv = ss "more" ;
|
||||
-- most_Predet = ss "most" ;
|
||||
-- much_Det = mkDeterminer Sg "much" ;
|
||||
-- must_VV = {
|
||||
-- s = table VVForm [["be have to"] ; "must" ; ["had to"] ;
|
||||
-- ["had to"] ; ["having to"] ; "mustn't" ; ["hadn't to"]] ; ----
|
||||
-- isAux = True
|
||||
-- } ;
|
||||
-- no_Phr = ss "no" ;
|
||||
-- on_Prep = ss "on" ;
|
||||
-- one_Quant = mkDeterminer Sg "one" ;
|
||||
-- only_Predet = ss "only" ;
|
||||
-- or_Conj = ss "or" ** {n = Sg} ;
|
||||
-- otherwise_PConj = ss "otherwise" ;
|
||||
-- part_Prep = ss "of" ;
|
||||
-- please_Voc = ss "please" ;
|
||||
-- possess_Prep = ss "of" ;
|
||||
-- quite_Adv = ss "quite" ;
|
||||
-- she_Pron = mkNP "she" "her" "her" Sg P3 ;
|
||||
-- so_AdA = ss "so" ;
|
||||
-- somebody_NP = regNP "somebody" Sg ;
|
||||
-- someSg_Det = mkDeterminer Sg "some" ;
|
||||
-- somePl_Det = mkDeterminer Pl "some" ;
|
||||
-- something_NP = regNP "something" Sg ;
|
||||
-- somewhere_Adv = ss "somewhere" ;
|
||||
-- that_Quant = mkQuant "that" "those" ;
|
||||
-- that_NP = regNP "that" Sg ;
|
||||
-- there_Adv = ss "there" ;
|
||||
-- there7to_Adv = ss "there" ;
|
||||
-- there7from_Adv = ss ["from there"] ;
|
||||
-- therefore_PConj = ss "therefore" ;
|
||||
-- these_NP = regNP "these" Pl ;
|
||||
-- they_Pron = mkNP "they" "them" "their" Pl P3 ;
|
||||
-- this_Quant = mkQuant "this" "these" ;
|
||||
-- this_NP = regNP "this" Sg ;
|
||||
-- those_NP = regNP "those" Pl ;
|
||||
-- through_Prep = ss "through" ;
|
||||
-- too_AdA = ss "too" ;
|
||||
-- to_Prep = ss "to" ;
|
||||
-- under_Prep = ss "under" ;
|
||||
-- very_AdA = ss "very" ;
|
||||
-- want_VV = P.mkVV (P.regV "want") ;
|
||||
-- we_Pron = mkNP "we" "us" "our" Pl P1 ;
|
||||
-- whatPl_IP = mkIP "what" "what" "what's" Sg ;
|
||||
-- whatSg_IP = mkIP "what" "what" "what's" Sg ;
|
||||
-- when_IAdv = ss "when" ;
|
||||
-- when_Subj = ss "when" ;
|
||||
-- where_IAdv = ss "where" ;
|
||||
-- whichPl_IDet = mkDeterminer Pl ["which"] ;
|
||||
-- whichSg_IDet = mkDeterminer Sg ["which"] ;
|
||||
-- whoSg_IP = mkIP "who" "whom" "whose" Sg ;
|
||||
-- whoPl_IP = mkIP "who" "whom" "whose" Pl ;
|
||||
-- why_IAdv = ss "why" ;
|
||||
-- without_Prep = ss "without" ;
|
||||
-- with_Prep = ss "with" ;
|
||||
-- yes_Phr = ss "yes" ;
|
||||
-- youSg_Pron = mkNP "you" "you" "your" Sg P2 ;
|
||||
-- youPl_Pron = mkNP "you" "you" "your" Pl P2 ;
|
||||
-- youPol_Pron = mkNP "you" "you" "your" Sg P2 ;
|
||||
--
|
||||
--
|
||||
--oper
|
||||
-- mkQuant : Str -> Str -> {s : Number => Str} = \x,y -> {
|
||||
-- s = table Number [x ; y]
|
||||
-- } ;
|
||||
--
|
||||
}
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete StructuralRus of Structural = CatRus **
|
||||
open ResRus, MorphoRus, (P = ParadigmsRus), Prelude, NounRus, in {
|
||||
|
||||
flags optimize=all ; coding=utf8 ;
|
||||
|
||||
lin
|
||||
-- First mount the numerals.
|
||||
-- UseNumeral i = i ;
|
||||
|
||||
-- Then an alphabetical list of structural words
|
||||
|
||||
above_Prep = { s = "над" ; c = Inst} ;
|
||||
after_Prep = { s = "после" ; c = Gen };
|
||||
-- all8mass_Det = vesDet ** {n = Sg; g = PNoGen; c = Nom} ;
|
||||
all_Predet = vseDetPl ** { g = PNoGen; c = Nom} ;
|
||||
almost_AdA = {s= "почти"} ;
|
||||
almost_AdN = {s= "почти"} ;
|
||||
although_Subj = ss "хотя" ;
|
||||
always_AdV = ss "всегда" ;
|
||||
and_Conj = ss "и" ** {n = Pl} ;
|
||||
because_Subj = ss ["потому что"] ;
|
||||
before_Prep ={ s = "перед" ; c = Inst};
|
||||
behind_Prep = { s = "за" ; c = Inst };
|
||||
between_Prep = { s = "между" ; c = Inst};
|
||||
both7and_DConj = sd2 "как" [", так и"] ** {n = Pl} ;
|
||||
but_PConj = ss "но" ;
|
||||
by8agent_Prep = { s = ["с помощью"] ; c = Gen};
|
||||
by8means_Prep = { s = ["с помощью"] ; c = Gen};
|
||||
can8know_VV = verbMoch ;
|
||||
can_VV = verbMoch ;
|
||||
during_Prep = { s = ["в течение"] ; c = Gen};
|
||||
either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ;
|
||||
-- comma is not visible in GUI!
|
||||
every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom} ;
|
||||
everybody_NP = mkNP Pl (UseN ((eEnd_Decl "вс")**{lock_N=<>})) ;
|
||||
everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ;
|
||||
everywhere_Adv = ss "везде" ;
|
||||
few_Det = (ij_EndK_G_KH_Decl "немног") **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom}; -- AMalenkij
|
||||
first_Ord = (uy_j_EndDecl "перв" ) ** {lock_A = <>}; --AStaruyj
|
||||
from_Prep = { s = "от" ; c = Gen };
|
||||
he_Pron = pronOn ;
|
||||
here_Adv = ss "здесь" ;
|
||||
here7to_Adv = ss "сюда" ;
|
||||
here7from_Adv = ss "отсюда" ;
|
||||
how_IAdv = ss "как" ;
|
||||
how8many_IDet = skolkoSgDet ** {n = Sg; g = (PGen Neut); c= Gen};
|
||||
i_Pron = pronYa ;
|
||||
if_Subj = ss "если" ;
|
||||
in8front_Prep = { s = "перед" ; c = Inst};
|
||||
in_Prep = { s = "в" ; c = Prepos };
|
||||
it_Pron = pronOno ;
|
||||
less_CAdv = ss "меньше" ;
|
||||
many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ;
|
||||
more_CAdv = ss "более" ;
|
||||
most_Predet = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ;
|
||||
-- inanimate, Sg: "большинство телефонов безмолству-ет"
|
||||
-- most8many_Det = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ;
|
||||
-- animate, Pl: "большинство учащихся хорошо подготовлен-ы"
|
||||
much_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; -- same as previous
|
||||
must_VV = verbDolzhen ;
|
||||
no_Phr = ss ["Нет ."] ;
|
||||
on_Prep = { s = "на" ; c = Prepos };
|
||||
one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom };
|
||||
--AStaruyj :
|
||||
only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom };
|
||||
or_Conj = ss "или" ** {n = Sg} ;
|
||||
otherwise_PConj = ss "иначе" ;
|
||||
part_Prep = { s = "" ; c = Nom}; -- missing in Russian
|
||||
please_Voc = ss "пожалуйста" ;
|
||||
possess_Prep = { s = "" ; c = Gen}; --- ?? AR 19/2/2004
|
||||
quite_Adv = ss "довольно" ;
|
||||
she_Pron = pronOna ;
|
||||
so_AdA = ss "так";
|
||||
somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>});
|
||||
someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
||||
somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom} ;
|
||||
something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ;
|
||||
somewhere_Adv = ss "где-нибудь" ;
|
||||
--- these_NP n = { s =\\_ => [] ; n = Pl; p = P3; g= PGen Fem ;
|
||||
--- anim = Animate ; pron = True} ; -- missing in Russian
|
||||
--- those_NP n = { s =\\_ => [] ; n = Pl; p = P3; g=PGen Fem ;
|
||||
--- anim = Animate ; pron = True} ; -- missing in Russian
|
||||
that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
||||
that_NP = det2NounPhrase totDet ; -- inanimate form only
|
||||
there_Adv = ss "там" ;
|
||||
there7to_Adv = ss "туда" ;
|
||||
there7from_Adv = ss "оттуда" ;
|
||||
therefore_PConj = ss "следовательно" ;
|
||||
-- these_NDet = etotDet ** { g = PNoGen; c= Nom} ;
|
||||
-- they8fem_NP = UsePron pronOni Animate;
|
||||
they_Pron = pronOni;
|
||||
this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
||||
this_NP = det2NounPhrase etotDet ; -- inanimate form only
|
||||
-- those_NDet = totDet ** {g = PNoGen; c= Nom} ;
|
||||
-- thou_NP = UsePron pronTu Animate;
|
||||
through_Prep = { s = "через" ; c = Acc };
|
||||
to_Prep = { s = "к" ; c = Dat };
|
||||
too_AdA = ss "слишком" ;
|
||||
under_Prep = { s = "под" ; c = Inst };
|
||||
very_AdA = ss "очень" ;
|
||||
want_VV = verbKhotet ;
|
||||
we_Pron = pronMu ;
|
||||
whatPl_IP = pron2NounPhraseNum pronChto Inanimate Pl;
|
||||
whatSg_IP = pron2NounPhraseNum pronChto Inanimate Sg;
|
||||
when_IAdv = ss "когда" ;
|
||||
when_Subj = ss "когда" ;
|
||||
where_IAdv = ss "где" ;
|
||||
whichPl_IDet = kotorujDet ** {n = Pl; g = PNoGen; c= Nom} ;
|
||||
whichSg_IDet = kotorujDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
||||
whoPl_IP = pron2NounPhraseNum pronKto Animate Pl;
|
||||
whoSg_IP = pron2NounPhraseNum pronKto Animate Sg;
|
||||
why_IAdv = ss "почему" ;
|
||||
with_Prep = { s = "с" ; c = Inst};
|
||||
without_Prep = { s = "без" ; c = Gen};
|
||||
youPl_Pron = pronVu;
|
||||
yes_Phr = ss ["Да ."] ;
|
||||
youSg_Pron = pronVu;
|
||||
youPol_Pron = pronVu;
|
||||
|
||||
--- NoDet = nikakojDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
||||
--- AnyDet = lubojDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
||||
--- AnyNumDet = mkDeterminerNum (lubojDet ** {n = Pl; g = PNoGen; c= Nom} );
|
||||
--- NoNumDet = mkDeterminerNum (nikakojDet ** {n = Pl; g = PNoGen; c= Nom} );
|
||||
---NobodyNP = UsePron pronNikto Animate;
|
||||
---NothingNP = UsePron pronNichto Inanimate;
|
||||
|
||||
-- In case of "neither.. no" expression double negation is not
|
||||
-- only possible, but also required in Russian.
|
||||
-- There is no means of control for this however in the resource grammar.
|
||||
--- NeitherNor = sd2 "ни" [", ни"] ** {n = Sg} ;
|
||||
--- NowhereNP = ss "нигде" ;
|
||||
--- AgentPrep = { s = "" ; c = Nom}; -- missing in Russian
|
||||
}
|
||||
|
||||
+239
-41
@@ -1,41 +1,239 @@
|
||||
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
|
||||
concrete VerbRus of Verb = CatRus ** open ResRus in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
-- UseV = predV ;
|
||||
-- ComplV2 v np = insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v) ;
|
||||
-- ComplV3 v np np2 =
|
||||
-- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ;
|
||||
--
|
||||
-- ComplVV v vp = insertObj (\\a => infVP v.isAux vp a) (predVV v) ;
|
||||
--
|
||||
-- ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;
|
||||
-- ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
|
||||
--
|
||||
-- ComplVA v ap = insertObj (ap.s) (predV v) ;
|
||||
-- ComplV2A v np ap =
|
||||
-- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ;
|
||||
--
|
||||
-- UseComp comp = insertObj comp.s (predAux auxBe) ;
|
||||
--
|
||||
-- AdvVP vp adv = insertObj (\\_ => adv.s) vp ;
|
||||
--
|
||||
-- AdVVP adv vp = insertAdV adv.s vp ;
|
||||
--
|
||||
-- ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ;
|
||||
--
|
||||
-- PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ;
|
||||
--
|
||||
-- UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to"
|
||||
--
|
||||
-- CompAP ap = ap ;
|
||||
-- CompNP np = {s = \\_ => np.s ! Acc} ;
|
||||
-- CompAdv a = {s = \\_ => a.s} ;
|
||||
--
|
||||
--
|
||||
}
|
||||
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
concrete VerbRus of Verb = CatRus ** open ResRus, Prelude in {
|
||||
|
||||
flags optimize=all_subs ; coding=utf8 ;
|
||||
lin
|
||||
CompNP masha =
|
||||
{ s=\\clf,gn,p => case clf of
|
||||
{
|
||||
(ClIndic Present _) => masha.s ! (mkPronForm Nom No NonPoss) ;
|
||||
(ClIndic Past _) => case gn of
|
||||
{ (ASg Fem) =>"была"++masha.s ! (mkPronForm Inst No NonPoss);
|
||||
(ASg Masc) =>"был" ++ masha.s!(mkPronForm Inst No NonPoss);
|
||||
(ASg Neut) =>"было" ++ masha.s!(mkPronForm Inst No NonPoss);
|
||||
APl => "были" ++ masha.s ! (mkPronForm Inst No NonPoss)
|
||||
};
|
||||
(ClIndic Future _) => case gn of
|
||||
{ APl => case p of
|
||||
{ P3 => "будут"++masha.s ! (mkPronForm Inst No NonPoss);
|
||||
P2 => "будете"++masha.s !(mkPronForm Inst No NonPoss);
|
||||
P1 => "будем"++masha.s ! (mkPronForm Inst No NonPoss)
|
||||
};
|
||||
(ASg _) => case p of
|
||||
{ P3=>"будет"++masha.s!(mkPronForm Inst No NonPoss) ;
|
||||
P2 => "будешь"++ masha.s ! (mkPronForm Inst No NonPoss) ;
|
||||
P1=> "буду"++ masha.s ! (mkPronForm Inst No NonPoss)
|
||||
} --case p
|
||||
}; --case gn
|
||||
ClCondit => "" ;
|
||||
ClImper => case (numGNum gn) of
|
||||
{Sg => "будь" ++ masha.s ! (mkPronForm Inst No NonPoss);
|
||||
Pl => "будьте" ++ masha.s ! (mkPronForm Inst No NonPoss)
|
||||
};
|
||||
ClInfin => "быть" ++ masha.s ! (mkPronForm Inst No NonPoss)
|
||||
}; -- case clf
|
||||
asp = Imperfective ;
|
||||
w = Act;
|
||||
negBefore = True;
|
||||
s2 = "";
|
||||
s3 = \\g,n => ""
|
||||
} ;
|
||||
|
||||
CompAP zloj ={
|
||||
s= \\clf,gn,p => case clf of { ␍
|
||||
-- person is ignored !
|
||||
ClInfinit => "быть" ++ zloj.s ! AF Inst Animate (ASg Masc) ;
|
||||
ClImper => case gn of
|
||||
{ (ASg _) => "будь" ++ zloj.s ! AF Inst Animate (ASg Masc);
|
||||
APl => "будьте" ++ zloj.s ! AF Inst Animate APl
|
||||
};
|
||||
-- infinitive does not save GenNum,
|
||||
-- but indicative does for the sake of adjectival predication !
|
||||
ClIndic Present _ => zloj.s ! AF Nom Animate gn ;
|
||||
ClIndic Past _ => case gn of
|
||||
{ (ASg Fem) => "была" ++ zloj.s! AF Nom Animate (ASg Fem);␍
|
||||
(ASg Masc) => "был" ++ zloj.s! AF Nom Animate (ASg Masc);
|
||||
(ASg Neut) => "был" ++ zloj.s! AF Nom Animate (ASg Neut);
|
||||
APl => "были" ++ zloj.s! AF Nom Animate APl
|
||||
};
|
||||
ClIndic Future _ => case gn of
|
||||
{ APl => case p of
|
||||
{ P3 => "будут" ++ zloj.s! AF Nom Animate APl;
|
||||
P2 => "будете" ++ zloj.s! AF Nom Animate APl;
|
||||
P1 => "будем" ++ zloj.s! AF Nom Animate APl
|
||||
} ;
|
||||
(ASg _) => case p of
|
||||
{P3 => "будет" ++ zloj.s! AF Nom Animate (ASg (genGNum gn));
|
||||
P2 => "будешь"++ zloj.s! AF Nom Animate (ASg (genGNum gn));
|
||||
P1=> "буду" ++ zloj.s! AF Nom Animate (ASg (genGNum gn))
|
||||
}
|
||||
};
|
||||
ClCondit => ""
|
||||
} ; ␍
|
||||
|
||||
asp = Imperfective ;
|
||||
w = Act;
|
||||
negBefore = True;
|
||||
s2 = "";
|
||||
s3 = \\g,n=> ""
|
||||
} ;
|
||||
|
||||
|
||||
-- Verb phrases can also be formed from adjectives (" молод"),
|
||||
-- common nouns (" человек"), and noun phrases (" самый молодой").
|
||||
-- The third rule is overgenerating: " каждый человек" has to be ruled out
|
||||
-- on semantic grounds.␍
|
||||
-- Note: we omit a dash "-" because it will cause problems with negation word order:
|
||||
-- "Я не - волшебник". Alternatively, we can consider verb-based VP and
|
||||
-- all the rest.
|
||||
|
||||
CompAdv zloj =
|
||||
{ s= \\clf,gn,p => case clf of {
|
||||
ClImper => case gn of
|
||||
{ ASg _ => "будь" ++ zloj.s; -- person is ignored !
|
||||
APl => "будьте" ++ zloj.s
|
||||
};
|
||||
ClInfinit => "быть" ++ zloj.s;
|
||||
ClIndic Present _ => zloj.s ;
|
||||
ClIndic Past _ => case gn of
|
||||
{ (ASg Fem) => "была" ++ zloj.s;
|
||||
(ASg Masc) => "был" ++ zloj.s;
|
||||
(ASg Neut) => "было" ++ zloj.s;
|
||||
APl => "были" ++ zloj.s
|
||||
};
|
||||
ClIndic Future _ => case gn of
|
||||
{ (ASg _) => "будет" ++ zloj.s;
|
||||
APl => "будут" ++ zloj.s
|
||||
};
|
||||
ClCondit => ""
|
||||
} ;
|
||||
asp = Imperfective ;
|
||||
w = Act;
|
||||
s2 = "";
|
||||
negBefore = True;
|
||||
s3 = \\g,n => ""
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
UseComp comp = comp ;
|
||||
UseVS, UseVQ = \vv -> {s = vv.s ; asp = vv.asp; s2 = [] ; c = Acc} ;
|
||||
|
||||
-- CompAP ap = ap ;
|
||||
-- CompNP np = {s = \\_ => np.s ! Acc} ;
|
||||
-- CompAdv a = {s = \\_ => a.s} ;
|
||||
|
||||
|
||||
-- A simple verb can be made into a verb phrase with an empty complement.
|
||||
-- There are two versions, depending on if we want to negate the verb.
|
||||
-- N.B. negation is *not* a function applicable to a verb phrase, since
|
||||
-- double negations with "inte" are not grammatical.
|
||||
|
||||
UseV se =
|
||||
{s=\\clf,gn,p => se.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ;
|
||||
asp = se.asp ;
|
||||
w=Act;
|
||||
s2 = "";
|
||||
negBefore = True;
|
||||
s3 = table{_=> table{_ => ""}}
|
||||
} ;
|
||||
|
||||
-- The rule for using transitive verbs is the complementization rule:
|
||||
ComplV2 se tu =
|
||||
{s =\\clf,gn,p => se.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p)
|
||||
++ se.s2 ++ tu.s ! (mkPronForm se.c No NonPoss) ;
|
||||
asp = se.asp ;
|
||||
w = Act;
|
||||
s2 = "";
|
||||
s3 = \\g,n => "";
|
||||
negBefore = True
|
||||
} ;
|
||||
|
||||
ComplV3 dat tu pivo =
|
||||
let
|
||||
tebepivo = dat.s2 ++
|
||||
tu.s ! PF dat.c No NonPoss ++ dat.s4 ++ pivo.s ! PF dat.c2 Yes NonPoss
|
||||
in
|
||||
{s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tebepivo ;
|
||||
asp = dat.asp ;
|
||||
w = Act;
|
||||
negBefore = True;
|
||||
s2 = "";
|
||||
s3 = \\g,n=> ""
|
||||
} ;
|
||||
|
||||
ReflV2 v =
|
||||
{ s = \\clf,gn,p => v.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ v.s2 ++ sebya!v.c;
|
||||
asp = v.asp ;
|
||||
w = Act;
|
||||
negBefore = True;
|
||||
s2 = "";
|
||||
s3 = \\g,n=> ""
|
||||
} ;
|
||||
|
||||
-- To generate "сказал, что Иван гуляет" / "не сказал, что Иван гуляет":
|
||||
ComplVS vidit tuUlubaeshsya =
|
||||
{s = \\clf,gn,p => vidit.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p)
|
||||
++ [", что"] ++ tuUlubaeshsya.s ;
|
||||
asp = vidit.asp;
|
||||
w = Act;
|
||||
s2="";
|
||||
negBefore = True;
|
||||
s3 = \\g,n => ""
|
||||
} ;
|
||||
-- To generate "can walk"/"can't walk"; "tries to walk"/"does not try to walk":
|
||||
-- The contraction of "not" is not provided, since it would require changing
|
||||
-- the verb parameter type.
|
||||
|
||||
ComplVV putatsya bezhat =
|
||||
{ s = \\clf,gn,p => putatsya.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ bezhat.s!clf!gn!p ;
|
||||
asp = putatsya.asp ;
|
||||
w = Act;
|
||||
negBefore = True;
|
||||
s2 = "";
|
||||
s3 =\\g,n => ""
|
||||
} ;
|
||||
ComplVQ dat esliOnPridet =
|
||||
{s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ esliOnPridet.s ! QDir ;
|
||||
asp = dat.asp ;
|
||||
w = Act;
|
||||
negBefore = True;
|
||||
s2 = "";
|
||||
s3 = \\g,n=> ""
|
||||
} ;
|
||||
ComplVA vuglyadet molodoj =
|
||||
{s = \\clf,gn,p => vuglyadet.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ;
|
||||
asp = vuglyadet.asp ;
|
||||
w = Act;
|
||||
negBefore = True;
|
||||
s2 = "";
|
||||
s3 = \\g,n => molodoj.s!(AF Inst Animate (gNum g n))
|
||||
} ;
|
||||
|
||||
ComplV2A obechat tu molodoj =
|
||||
{s = \\clf,gn,p => obechat.s2++obechat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tu.s ! PF obechat.c No NonPoss ++molodoj.s!AF Inst tu.anim (pgNum tu.g tu.n) ;
|
||||
asp = obechat.asp ;
|
||||
w = Act;
|
||||
negBefore = True;
|
||||
s2 = "";
|
||||
s3 = \\g,n =>""
|
||||
} ;
|
||||
AdvVP poet khorosho =
|
||||
{s = \\clf,gn,p => poet.s ! clf!gn!p; s2 = poet.s2 ++ khorosho.s; s3 = poet.s3;
|
||||
asp = poet.asp; w = poet.w; t = poet.t ; negBefore = poet.negBefore } ;
|
||||
|
||||
AdVVP khorosho poet =
|
||||
{s = \\clf,gn,p => poet.s ! clf!gn!p; s2 = poet.s2 ++ khorosho.s; s3 = poet.s3;
|
||||
asp = poet.asp; w = poet.w; t = poet.t ; negBefore = poet.negBefore } ;
|
||||
|
||||
PassV2 se =
|
||||
{s=\\clf,gn,p => se.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ;
|
||||
asp=se.asp; w=Pass; s2 = se.s2;
|
||||
negBefore = True;
|
||||
s3 = table{_=> table{_ => ""}}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user