diff options
Diffstat (limited to 'next-lib/src/russian')
26 files changed, 0 insertions, 4370 deletions
diff --git a/next-lib/src/russian/AdjectiveRus.gf b/next-lib/src/russian/AdjectiveRus.gf deleted file mode 100644 index 23336bb98..000000000 --- a/next-lib/src/russian/AdjectiveRus.gf +++ /dev/null @@ -1,66 +0,0 @@ -
---# -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
- } ;
-
- ---- AR 17/12/2008
- UseComparA bolshoj =
- {s = \\af => bolshoj.s ! Compar ! af ;
- p = True
- } ;
-
- ---- AR 17/12/2008
- CAdvAP ad ap np = let adp = ad.s in { ---- should be ad.p
- s = \\af => ad.s ++ ap.s ! af ++ adp ++ np.s ! (mkPronForm Gen Yes NonPoss) ;
- p = True ----?
- } ;
-
- ---- AR 17/12/2008
- AdjOrd a = {
- s = a.s ;
- p = True ---- ?
- } ;
-
--- $SuperlA$ belongs to determiner syntax in $Noun$.
-
- ComplA2 vlublen tu =
- {s = \\af => vlublen.s !Posit! af ++ vlublen.c2.s ++
- tu.s ! (mkPronForm vlublen.c2.c No NonPoss) ;
- p = True
- } ;
-
- ReflA2 vlublen =
- {s = \\af => vlublen.s !Posit! af ++ vlublen.c2.s ++ sam.s ! vlublen.c2.c;
- 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 = {
- s = \\af => a.s ! Posit ! af ;
- p = True
- } ;
-}
-
diff --git a/next-lib/src/russian/AdverbRus.gf b/next-lib/src/russian/AdverbRus.gf deleted file mode 100644 index 4e283431d..000000000 --- a/next-lib/src/russian/AdverbRus.gf +++ /dev/null @@ -1,24 +0,0 @@ ---# -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 ;
-
- AdnCAdv cadv = {s = cadv.s ++ "чем"} ;
-
-}
-
diff --git a/next-lib/src/russian/AllRus.gf b/next-lib/src/russian/AllRus.gf deleted file mode 100644 index 024ce67e1..000000000 --- a/next-lib/src/russian/AllRus.gf +++ /dev/null @@ -1,6 +0,0 @@ ---# -path=.:../abstract:../common:prelude - -concrete AllRus of AllRusAbs = - LangRus, - ExtraRus - ** {flags coding=utf8 ;} ; diff --git a/next-lib/src/russian/AllRusAbs.gf b/next-lib/src/russian/AllRusAbs.gf deleted file mode 100644 index eff645337..000000000 --- a/next-lib/src/russian/AllRusAbs.gf +++ /dev/null @@ -1,6 +0,0 @@ ---# -path=.:../abstract:../common:prelude - -abstract AllRusAbs = - Lang, - ExtraRusAbs - ** {} ; diff --git a/next-lib/src/russian/CatRus.gf b/next-lib/src/russian/CatRus.gf deleted file mode 100644 index e71eabf69..000000000 --- a/next-lib/src/russian/CatRus.gf +++ /dev/null @@ -1,99 +0,0 @@ ---# -path=.:../abstract:../common:../../prelude
-
-concrete CatRus of Cat = CommonX ** open ResRus, Prelude in {
-
- flags optimize=all_subs ; coding=utf8 ;
-
- lincat
-
--- Tensed/Untensed
-
- S = {s : Str} ;
- QS = {s : QForm => Str} ;
- RS = {s : GenNum => Case => Animacy => Str} ;
- SSlash = {s : Str; s2: Str ; c: Case} ;
-
--- Sentence
- -- clause (variable tense) e.g. "John walks"/"John walked"
- Cl ={s : Polarity => ClForm => Str} ;
- ClSlash = {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} ;
- IComp = {s : Str} ;
- IDet = Adjective ** {n: Number; g: PronGen; c: Case} ;
- IQuant = {s : Number => AdjForm => Str; g: PronGen; c: Case} ; -- AR 16/6/2008
-
--- Relative
-
- RCl = {s : Polarity => ClForm => GenNum => Case => Animacy => Str} ;
- RP = {s : GenNum => Case => Animacy => Str} ;
-
--- Verb
- -- Polarity =>
- Comp, VP = VerbPhrase ;
- VPSlash = VerbPhrase ** {sc : Str ; c : Case} ;
-
--- Adjective
-
- AP = {s : AdjForm => Str; p : IsPostfixAdj} ;
-
--- Noun
-
- CN = {s : NForm => 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
-
- Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case} ;
- Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case} ;
-
--- Numeral
-
- Num, Numeral, Card = {s : Case => Gender => Str ; n : Number} ;
- Digits = {s : Str ; n : Number} ; ----
-
--- 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 = {s1,s2 : Str ; n : Number} ;
- Subj = {s : Str} ;
- Prep = Complement ;
-
--- Open lexical classes, e.g. Lexicon
-
- V, VS, VV, VQ, VA = Verbum ; -- = {s : VerbForm => Str ; asp : Aspect } ;
- V2, V2A = Verbum ** {c2 : Complement} ;
- V2V, V2S, V2Q = Verbum ** {c2 : Complement} ; --- AR
- V3 = Verbum ** {c2,c3 : Complement} ;
--- VV = {s : VVForm => Str ; isAux : Bool} ;
-
- Ord = {s : AdjForm => Str} ;
- A = {s : Degree => AdjForm => Str} ;
- A2 = A ** {c2 : Complement} ;
-
- -- Substantives moreover have an inherent gender.
- N = {s : NForm => Str; g : Gender; anim : Animacy} ;
- N2 = {s : NForm => Str; g : Gender; anim : Animacy} ** {c2 : Complement} ;
- N3 = {s : NForm => Str; g : Gender; anim : Animacy} ** {c2,c3 : Complement} ;
- PN = {s : Case => Str ; g : Gender ; anim : Animacy} ;
-
-
-}
-
diff --git a/next-lib/src/russian/ConjunctionRus.gf b/next-lib/src/russian/ConjunctionRus.gf deleted file mode 100644 index 783399ad0..000000000 --- a/next-lib/src/russian/ConjunctionRus.gf +++ /dev/null @@ -1,107 +0,0 @@ ---# -path=.:../abstract:../common:../../prelude
-
-concrete ConjunctionRus of Conjunction =
- CatRus ** open ResRus, Coordination, Prelude in {
-
- flags optimize=all_subs ; coding=utf8 ;
-
- lin
-
- ConjS = conjunctDistrSS ;
-
- ConjAdv = conjunctDistrSS ;
-
- ConjNP 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 = conjunctDistrTable AdjForm c xs ** {p = xs.p} ;
-
- ---- AR 17/12/2008
- ConjRS c xs = conjunctDistrTable3 GenNum Case Animacy 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 } ;
-
- ---- AR 17/12/2008
- BaseRS x y = twoTable3 GenNum Case Animacy x y ** {c = y.c} ;
- ConsRS xs x = consrTable3 GenNum Case Animacy comma xs x ** {c = xs.c} ;
-
-
-
- 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} ;
-
- ---- AR 17/12/2008
- [RS] = {s1,s2 : GenNum => Case => Animacy => Str} ;
-
-oper
-
--- We have to define a calculus of numbers of persons. For numbers,
--- it is like the conjunction with $Pl$ corresponding to $False$.
---
--- The following are given in $ParamX$.
---
--- 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 ;
-
-
-}
-
diff --git a/next-lib/src/russian/ExtraLexRus.gf b/next-lib/src/russian/ExtraLexRus.gf deleted file mode 100644 index 9c33235fd..000000000 --- a/next-lib/src/russian/ExtraLexRus.gf +++ /dev/null @@ -1,74 +0,0 @@ ---# -path=.:abstract:common -concrete ExtraLexRus of ExtraLexRusAbs = CatRus ** - open ParadigmsRus in { -flags - coding=utf8 ; -lin ---- bridge_N = mkN "мост" ; ---- candle_N = nSvecha "свеч" ; -- +++ MG_UR: added +++ ---- citizen_N = nGrazhdanin "господ" ; -- +++ MG_UR: added +++ - daughter_N = - {s = table { - NF Sg Nom => "дочь" ; - NF Sg Gen => "дочери" ; - NF Sg Dat => "дочери" ; - NF Sg Acc => "дочь" ; - NF Sg Inst => "дочерью" ; - NF Sg (Prepos _) => "дочери" ; - NF Pl Nom => "дочери" ; - NF Pl Gen => "дочерей" ; - NF Pl Dat => "дочерям" ; - NF Pl Acc => "дочерей" ; - NF Pl Inst => "дочерьми" ; - NF Pl (Prepos _) => "дочерях" - } ; - g = Fem ; anim = Animate - } ; - ---- desk_N = nStol "стол" ; ---- dictionary_N = nSlovar "словар" ; ---- fellow_N = nTovarish "товарищ" ; -- +++ MG_UR: added +++ ---- flag_N = nVremja "зна" ; ---- heaven_N = nNebo "неб" ; -- +++ MG_UR: added +++ ---- museum_N = nMusej "музе" ; -- +++ MG_UR: added +++ --- name_N = mkN "имя" "имени" "имени" "имя" "именем" "имени" "имени" "имена" "имён" "именам" "имена" "именами" "именах" neuter inanimate ; ---- ocean_N = nMorje "мор" ; -- +++ MG_UR: added +++ - son_N = - {s = table - { NF Sg Nom => syn ; - NF Sg Gen => syn+"а" ; - NF Sg Dat => syn+"у" ; - NF Sg Acc => syn +"а"; - NF Sg Inst => syn+"ом" ; - NF Sg (Prepos _) => syn+"е" ; - NF Pl Nom => syn+"ья" ; - NF Pl Gen => syn+"ьев" ; - NF Pl Dat => syn+"ьям" ; - NF Pl Acc => syn +"ьев"; - NF Pl Inst => syn+"ьями" ; - NF Pl (Prepos _) => syn+"ьяах" - } ; - g = Masc ; anim = Animate - } ; ---- time_N = nVremja "вре" ; -- +++ MG_UR: added +++ ---- vocationalschool_N = nUchilishe "училищ" ; -- +++ MG_UR: added +++ - way_N = - {s = table - { NF Sg Nom => put+"ь" ; - NF Sg Gen => put+"и" ; - NF Sg Dat => put+"и" ; - NF Sg Acc => put+"ь" ; - NF Sg Inst => put+"ём" ; - NF Sg (Prepos _) => put+"и" ; - NF Pl Nom => put+"и" ; - NF Pl Gen => put+"ей" ; - NF Pl Dat => put+"ям" ; - NF Pl Acc => put+"и" ; - NF Pl Inst => put+"ями" ; - NF Pl (Prepos _) => put+"ях" - } ; - g = Masc ; anim = Inanimate - } ; - ---- word_N = nSlovo "слов" ; -- +++ MG_UR: added +++ -}
\ No newline at end of file diff --git a/next-lib/src/russian/ExtraRus.gf b/next-lib/src/russian/ExtraRus.gf deleted file mode 100644 index d592b6e64..000000000 --- a/next-lib/src/russian/ExtraRus.gf +++ /dev/null @@ -1,3 +0,0 @@ -concrete ExtraRus of ExtraRusAbs = CatRus ** { -flags coding=utf8 ; -} diff --git a/next-lib/src/russian/ExtraRusAbs.gf b/next-lib/src/russian/ExtraRusAbs.gf deleted file mode 100644 index e1a9d8e9d..000000000 --- a/next-lib/src/russian/ExtraRusAbs.gf +++ /dev/null @@ -1,3 +0,0 @@ -abstract ExtraRusAbs = { - -} diff --git a/next-lib/src/russian/GrammarRus.gf b/next-lib/src/russian/GrammarRus.gf deleted file mode 100644 index 052d5204c..000000000 --- a/next-lib/src/russian/GrammarRus.gf +++ /dev/null @@ -1,17 +0,0 @@ ---# -path=.:../abstract:../common:../../prelude - -concrete GrammarRus of Grammar = - NounRus, - VerbRus, - AdjectiveRus, - AdverbRus, - NumeralRus, - SentenceRus, - QuestionRus, - RelativeRus, - ConjunctionRus, - PhraseRus, - TextX, - StructuralRus, - IdiomRus - ** { flags startcat = Phr ; unlexer = text ; lexer = text ; coding=utf8 ;} ; diff --git a/next-lib/src/russian/IdiomRus.gf b/next-lib/src/russian/IdiomRus.gf deleted file mode 100644 index 1c64ae51d..000000000 --- a/next-lib/src/russian/IdiomRus.gf +++ /dev/null @@ -1,58 +0,0 @@ ---# -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 => verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen bar.g) Sg P3)
- ++ bar.s ! PF Nom No NonPoss;
- Neg => "не" ++ verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen bar.g) Sg P3)
- ++ bar.s ! PF Nom No NonPoss
- }
-} ;
-
- ExistIP Kto =
- let { kto = Kto.s ! (PF Nom No NonPoss) } in
- {s = \\b,clf,_ => case b of
- {Pos => kto ++ verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen Kto.g) Sg P3) ;
- Neg => kto ++ "не" ++ verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen Kto.g) Sg P3)
- }
- } ;
-
- CleftAdv adv sen = {s= \\ b, clf => let ne= case b of {Pos =>[]; Neg =>"не"}
- in
- "это" ++ ne ++ adv.s ++ [", "]++ sen.s };
-
- CleftNP np rs = {s= \\ b, clf =>
- let
- ne= case b of {Pos =>[]; Neg =>"не"};
- gn = case np.n of {Pl => GPl; _=> GSg (pgen2gen np.g)}
- in
- "это" ++ ne ++ np.s ! (PF Nom No NonPoss) ++
- rs.s ! gn !Nom!Animate };
-
- ImpPl1 vp = {s= "давайте" ++ vp.s! (ClIndic Future Simul)! GPl ! P1};
-
- ImpersCl vp = {s= \\ b, clf => let ne= case b of {Pos =>[]; Neg =>"не"}
- in
- ne ++ vp.s! clf! (GSg 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! (GSg Masc) ! P2 };
-
- ProgrVP vp = vp ;
-
-}
-
diff --git a/next-lib/src/russian/IrregRus.gf b/next-lib/src/russian/IrregRus.gf deleted file mode 100644 index 37e109b68..000000000 --- a/next-lib/src/russian/IrregRus.gf +++ /dev/null @@ -1,182 +0,0 @@ ---# -path=.:../abstract:../common:../../prelude - --- -concrete IrregRus of IrregRusAbs = CatRus ** open ParadigmsRus in { --- -flags optimize=values ; coding=utf8 ; --- --- lin --- awake_V = irregV "awake" "awoke" "awoken" ; --- bear_V = irregV "bear" "bore" "born" ; --- beat_V = irregV "beat" "beat" "beat" ; --- become_V = irregV "become" "became" "become" ; --- begin_V = irregV "begin" "began" "begun" ; --- bend_V = irregV "bend" "bent" "bent" ; --- beset_V = irregV "beset" "beset" "beset" ; --- bet_V = irregDuplV "bet" "bet" "bet" ; --- bid_V = irregDuplV "bid" (variants {"bid" ; "bade"}) (variants {"bid" ; "bidden"}) ; --- bind_V = irregV "bind" "bound" "bound" ; --- bite_V = irregV "bite" "bit" "bitten" ; --- bleed_V = irregV "bleed" "bled" "bled" ; --- blow_V = irregV "blow" "blew" "blown" ; --- break_V = irregV "break" "broke" "broken" ; --- breed_V = irregV "breed" "bred" "bred" ; --- bring_V = irregV "bring" "brought" "brought" ; --- broadcast_V = irregV "broadcast" "broadcast" "broadcast" ; --- build_V = irregV "build" "built" "built" ; --- burn_V = irregV "burn" (variants {"burned" ; "burnt"}) (variants {"burned" ; "burnt"}) ; --- burst_V = irregV "burst" "burst" "burst" ; --- buy_V = irregV "buy" "bought" "bought" ; --- cast_V = irregV "cast" "cast" "cast" ; --- catch_V = irregV "catch" "caught" "caught" ; --- choose_V = irregV "choose" "chose" "chosen" ; --- cling_V = irregV "cling" "clung" "clung" ; --- come_V = irregV "come" "came" "come" ; --- cost_V = irregV "cost" "cost" "cost" ; --- creep_V = irregV "creep" "crept" "crept" ; --- cut_V = irregDuplV "cut" "cut" "cut" ; --- deal_V = irregV "deal" "dealt" "dealt" ; --- dig_V = irregDuplV "dig" "dug" "dug" ; --- dive_V = irregV "dive" (variants {"dived" ; "dove"}) "dived" ; --- do_V = mkV "do" "does" "did" "done" "doing" ; --- draw_V = irregV "draw" "drew" "drawn" ; --- dream_V = irregV "dream" (variants {"dreamed" ; "dreamt"}) (variants {"dreamed" ; "dreamt"}) ; --- drive_V = irregV "drive" "drove" "driven" ; --- drink_V = irregV "drink" "drank" "drunk" ; --- eat_V = irregV "eat" "ate" "eaten" ; --- fall_V = irregV "fall" "fell" "fallen" ; --- feed_V = irregV "feed" "fed" "fed" ; --- feel_V = irregV "feel" "felt" "felt" ; --- fight_V = irregV "fight" "fought" "fought" ; --- find_V = irregV "find" "found" "found" ; --- fit_V = irregDuplV "fit" "fit" "fit" ; --- flee_V = irregV "flee" "fled" "fled" ; --- fling_V = irregV "fling" "flung" "flung" ; --- fly_V = irregV "fly" "flew" "flown" ; --- forbid_V = irregDuplV "forbid" "forbade" "forbidden" ; --- forget_V = irregDuplV "forget" "forgot" "forgotten" ; --- forgive_V = irregV "forgive" "forgave" "forgiven" ; --- forsake_V = irregV "forsake" "forsook" "forsaken" ; --- freeze_V = irregV "freeze" "froze" "frozen" ; --- get_V = irregDuplV "get" "got" "gotten" ; --- give_V = irregV "give" "gave" "given" ; --- go_V = irregV "go" "went" "gone" ; --- grind_V = irregV "grind" "ground" "ground" ; --- grow_V = irregV "grow" "grew" "grown" ; --- hang_V = irregV "hang" "hung" "hung" ; --- have_V = mkV "have" "has" "had" "had" "having" ; --- hear_V = irregV "hear" "heard" "heard" ; --- hide_V = irregV "hide" "hid" "hidden" ; --- hit_V = irregDuplV "hit" "hit" "hit" ; --- hold_V = irregV "hold" "held" "held" ; --- hurt_V = irregV "hurt" "hurt" "hurt" ; --- keep_V = irregV "keep" "kept" "kept" ; --- kneel_V = irregV "kneel" "knelt" "knelt" ; --- knit_V = irregDuplV "knit" "knit" "knit" ; --- know_V = irregV "know" "knew" "know" ; --- lay_V = irregV "lay" "laid" "laid" ; --- lead_V = irregV "lead" "led" "led" ; --- leap_V = irregV "leap" (variants {"leaped" ; "lept"}) (variants {"leaped" ; "lept"}) ; --- learn_V = irregV "learn" (variants {"learned" ; "learnt"}) (variants {"learned" ; "learnt"}) ; --- leave_V = irregV "leave" "left" "left" ; --- lend_V = irregV "lend" "lent" "lent" ; --- let_V = irregDuplV "let" "let" "let" ; --- lie_V = irregV "lie" "lay" "lain" ; --- light_V = irregV "light" (variants {"lighted" ; "lit"}) "lighted" ; --- lose_V = irregV "lose" "lost" "lost" ; --- make_V = irregV "make" "made" "made" ; --- mean_V = irregV "mean" "meant" "meant" ; --- meet_V = irregV "meet" "met" "met" ; --- misspell_V = irregV "misspell" (variants {"misspelled" ; "misspelt"}) (variants {"misspelled" ; "misspelt"}) ; --- mistake_V = irregV "mistake" "mistook" "mistaken" ; --- mow_V = irregV "mow" "mowed" (variants {"mowed" ; "mown"}) ; --- overcome_V = irregV "overcome" "overcame" "overcome" ; --- overdo_V = mkV "overdo" "overdoes" "overdid" "overdone" "overdoing" ; --- overtake_V = irregV "overtake" "overtook" "overtaken" ; --- overthrow_V = irregV "overthrow" "overthrew" "overthrown" ; --- pay_V = irregV "pay" "paid" "paid" ; --- plead_V = irregV "plead" "pled" "pled" ; --- prove_V = irregV "prove" "proved" (variants {"proved" ; "proven"}) ; --- put_V = irregDuplV "put" "put" "put" ; --- quit_V = irregDuplV "quit" "quit" "quit" ; --- read_V = irregV "read" "read" "read" ; --- rid_V = irregDuplV "rid" "rid" "rid" ; --- ride_V = irregV "ride" "rode" "ridden" ; --- ring_V = irregV "ring" "rang" "rung" ; --- rise_V = irregV "rise" "rose" "risen" ; --- run_V = irregDuplV "run" "ran" "run" ; --- saw_V = irregV "saw" "sawed" (variants {"sawed" ; "sawn"}) ; --- say_V = irregV "say" "said" "said" ; --- see_V = irregV "see" "saw" "seen" ; --- seek_V = irregV "seek" "sought" "sought" ; --- sell_V = irregV "sell" "sold" "sold" ; --- send_V = irregV "send" "sent" "sent" ; --- set_V = irregDuplV "set" "set" "set" ; --- sew_V = irregV "sew" "sewed" (variants {"sewed" ; "sewn"}) ; --- shake_V = irregV "shake" "shook" "shaken" ; --- shave_V = irregV "shave" "shaved" (variants {"shaved" ; "shaven"}) ; --- shear_V = irregV "shear" "shore" "shorn" ; --- shed_V = irregDuplV "shed" "shed" "shed" ; --- shine_V = irregV "shine" "shone" "shone" ; --- shoe_V = irregV "shoe" "shoed" (variants {"shoed" ; "shod"}) ; --- shoot_V = irregV "shoot" "shot" "shot" ; --- show_V = irregV "show" "showed" (variants {"showed" ; "shown"}) ; --- shrink_V = irregV "shrink" "shrank" "shrunk" ; --- shut_V = irregDuplV "shut" "shut" "shut" ; --- sing_V = irregV "sing" "sang" "sung" ; --- sink_V = irregV "sink" "sank" "sunk" ; --- sit_V = irregDuplV "sit" "sat" "sat" ; --- sleep_V = irregV "sleep" "slept" "slept" ; --- slay_V = irregV "slay" "slew" "slain" ; --- slide_V = irregV "slide" "slid" "slid" ; --- sling_V = irregV "sling" "slung" "slung" ; --- slit_V = irregDuplV "slit" "slit" "slit" ; --- smite_V = irregV "smite" "smote" "smitten" ; --- sow_V = irregV "sow" "sowed" (variants {"sowed" ; "sown"}) ; --- speak_V = irregV "speak" "spoke" "spoken" ; --- speed_V = irregV "speed" "sped" "sped" ; --- spend_V = irregV "spend" "spent" "spent" ; --- spill_V = irregV "spill" (variants {"spilled" ; "spilt"}) (variants {"spilled" ; "spilt"}) ; --- spin_V = irregDuplV "spin" "spun" "spun" ; --- spit_V = irregDuplV "spit" (variants {"spit" ; "spat"}) "spit" ; --- split_V = irregDuplV "split" "split" "split" ; --- spread_V = irregV "spread" "spread" "spread" ; --- spring_V = irregV "spring" (variants {"sprang" ; "sprung"}) "sprung" ; --- stand_V = irregV "stand" "stood" "stood" ; --- steal_V = irregV "steal" "stole" "stolen" ; --- stick_V = irregV "stick" "stuck" "stuck" ; --- sting_V = irregV "sting" "stung" "stung" ; --- stink_V = irregV "stink" "stank" "stunk" ; --- stride_V = irregV "stride" "strod" "stridden" ; --- strike_V = irregV "strike" "struck" "struck" ; --- string_V = irregV "string" "strung" "strung" ; --- strive_V = irregV "strive" "strove" "striven" ; --- swear_V = irregV "swear" "swore" "sworn" ; --- sweep_V = irregV "sweep" "swept" "swept" ; --- swell_V = irregV "swell" "swelled" (variants {"swelled" ; "swollen"}) ; --- swim_V = irregDuplV "swim" "swam" "swum" ; --- swing_V = irregV "swing" "swung" "swung" ; --- take_V = irregV "take" "took" "taken" ; --- teach_V = irregV "teach" "taught" "taught" ; --- tear_V = irregV "tear" "tore" "torn" ; --- tell_V = irregV "tell" "told" "told" ; --- think_V = irregV "think" "thought" "thought" ; --- thrive_V = irregV "thrive" (variants {"thrived" ; "throve"}) "thrived" ; --- throw_V = irregV "throw" "threw" "thrown" ; --- thrust_V = irregV "thrust" "thrust" "thrust" ; --- tread_V = irregV "tread" "trod" "trodden" ; --- understand_V = irregV "understand" "understood" "understood" ; --- uphold_V = irregV "uphold" "upheld" "upheld" ; --- upset_V = irregDuplV "upset" "upset" "upset" ; --- wake_V = irregV "wake" "woke" "woken" ; --- wear_V = irregV "wear" "wore" "worn" ; --- weave_V = irregV "weave" (variants {"weaved" ; "wove"}) (variants {"weaved" ; "woven"}) ; --- wed_V = irregDuplV "wed" "wed" "wed" ; --- weep_V = irregV "weep" "wept" "wept" ; --- wind_V = irregV "wind" "wound" "wound" ; --- win_V = irregDuplV "win" "won" "won" ; --- withhold_V = irregV "withhold" "withheld" "withheld" ; --- withstand_V = irregV "withstand" "withstood" "withstood" ; --- wring_V = irregV "wring" "wrung" "wrung" ; --- write_V = irregV "write" "wrote" "written" ; -} diff --git a/next-lib/src/russian/LangRus.gf b/next-lib/src/russian/LangRus.gf deleted file mode 100644 index c41981d63..000000000 --- a/next-lib/src/russian/LangRus.gf +++ /dev/null @@ -1,10 +0,0 @@ ---# -path=.:../abstract:../common:src/prelude - -concrete LangRus of Lang = - GrammarRus, - LexiconRus - ** { - -flags startcat = Phr ; unlexer = text ; lexer = text ; coding=utf8 ; - -} ; diff --git a/next-lib/src/russian/LexiconRus.gf b/next-lib/src/russian/LexiconRus.gf deleted file mode 100644 index 6cee3846b..000000000 --- a/next-lib/src/russian/LexiconRus.gf +++ /dev/null @@ -1,357 +0,0 @@ ---# -path=.:abstract:common -concrete LexiconRus of Lexicon = CatRus ** - open ParadigmsRus, Prelude, StructuralRus, MorphoRus in { -flags - optimize=values ; - coding=utf8 ; -lin - add_V3 = mkV3 (regV imperfective first "складыва" "ю" "складывал" "складывай" "складывать" ) "" "в" accusative accusative; - airplane_N = mkN "самолёт" ; - already_Adv = mkAdv "уже" ; - animal_N = mkN "животное" animate; - answer_V2S = dirV2 (regV imperfective first "отвеча" "ю" "отвечал" "отвечай" "отвечать" ); - apartment_N = mkN "квартира" ; - apple_N = mkN "яблоко" ; - art_N = mkN "искусство" ; - ashes_N = mkN "пепел" ; - ask_V2Q = dirV2 (regV imperfective first "спрашива" "ю" "спрашивал" "спрашивай" "спрашивать") ; - baby_N = mkN "малыш" animate; - back_N = mkN "спина" ; - bad_A = mkA "плохой" "хуже"; - bank_N = mkN "банк" ; - bark_N = mkN "кора"; - beautiful_A = mkA "красивый"; - become_VA = regV perfective second "станов" "лю" "стал" "стань" "стать" ; - beer_N = mkN "пиво" ; - beg_V2V = dirV2 (mkV imperfective "прошу" "просишь" "просит" "просим" "просите" "просят" "просил" "проси" "просить" ); - belly_N = mkN "живот" ; - big_A = mkA "большой" "больше" ; - bike_N = mkN "велосипед" ; - bird_N = mkN "птица" animate; - bite_V2 = dirV2 (regV imperfective first "куса" "ю" "кусал" "кусай" "кусать"); - black_A = mkA "чёрный"; - blood_N = mkN "кровь" ; - blow_V = regV imperfective first "ду" "ю" "дул" "дуй" "дуть" ; - blue_A = mkA "голубой" ; - boat_N = mkN "лодка" ; - bone_N = mkN "кость" ; - book_N = mkN "книга" ; - boot_N = mkN "сапог" ; - boss_N = mkN "начальник" animate; - boy_N = mkN "мальчик" animate; - bread_N = mkN "хлеб" ; - break_V2 = dirV2 (regV imperfective first "прерыва" "ю" "прерывал" "прерывай" "прерывать" ); - breast_N = mkN "грудь" ; - breathe_V = regV imperfective second "дыш" "у" "дышал" "дыши" "дышать" ; - broad_A = mkA "широкий" "шире"; - brother_N2 = mkN2 (mkN "брат" animate) ; -- FIXME: special case - brown_A = mkA "коричневый"; - burn_V = regV imperfective second "гор" "ю" "горел" "гори" "гореть" ; - butter_N = mkN "масло"; - buy_V2 = dirV2 (regV imperfective first "покупа" "ю" "покупал" "покупай" "покупать" ); - camera_N = mkN "фотоаппарат" ; - cap_N = mkN "чашка" ; -- vowel change - car_N = mkN "машина" ; - carpet_N = mkN "ковёр"; -- vowel change - cat_N = mkN "кошка" animate ; -- vowel change - ceiling_N = mkN "потолок" ; -- vowel change - chair_N = mkN "стул" ; -- irregular - cheese_N = mkN "сыр" ; - child_N = mkN "ребёнок" "ребёнка" "ребёнку" "ребёнка" "ребёнком" "ребёнке" "ребёнке" "дети" "детей" "детям" "детей" "детьми" "детях" masculine animate ; - church_N = mkN "церковь" "церкви" "церкви" "церковь" "церковью" "церкви" "церкви" "церкви" "церквей" "церквям" "церкви" "церквями" "церквях" masculine inanimate ; - city_N = mkN "город" ; - clean_A = mkA "чистый" "чище"; - clever_A = mkA "умный"; - close_V2= dirV2 (regV imperfective first "закрыва" "ю" "закрывал" "закрывай" "закрывать" ); - cloud_N = mkN "облако" ; -- irregular - coat_N = mkIndeclinableNoun "пальто" masculine inanimate ; - cold_A = mkA "холодный"; - come_V = regV imperfective first "прихо" "жу" "приходил" "приходи" "приходить" ; - computer_N = mkN "компьютер" ; - correct_A = mkA "правильный" ; - count_V2 = dirV2 (regV imperfective first "счита" "ю" "считал" "считай" "считать" ) ; - country_N = mkN "страна" ; - cousin_N = mkN "кузен" ; -- FIXME: is this really correct? can't find it in the dictionary - cow_N = mkN "корова" animate ; - cut_V2 = dirV2 (regV imperfective first "реж" "у" "резал" "режь" "резать" ) ; - day_N = mkN "день" "дня" "дню" "день" "днём" "дне" "дне" "дни" "дней" "дням" "дни" "днями" "днях" masculine inanimate ; - die_V = regV imperfective first "умира" "ю" "умирал" "умирай" "умирать" ; - dig_V = regV imperfective first "копа" "ю" "копал" "копай" "копать" ; - dirty_A = mkA "грязный" ; - distance_N3 = mkN3 (mkN "расстояние") from_Prep to_Prep ; - do_V2 = dirV2 (regV imperfective first "дела" "ю" "делал" "делай" "делать" ); - doctor_N = mkN "доктор" animate ; - dog_N = mkN "собака" animate; - door_N = mkN "дверь" ; - drink_V2 = dirV2 (regV imperfective firstE "пь" "ю" "пил" "пей" "пить" ); - dry_A = mkA "сухой" "суше"; - dull_A = mkA "скучный" ; - dust_N = mkN "пыль" ; - ear_N = mkN "ухо" ; - earth_N = mkN "земля" ; - easy_A2V = mkA2 (mkA "лёгкий" "легче") "для" genitive ; - eat_V2 = dirV2 (regV imperfective first "куша" "ю" "кушал" "кушай" "кушать" ); - egg_N = mkN "яйцо" ; - empty_A = mkA "пустой" ; - enemy_N = mkN "враг" animate ; - eye_N = mkN "глаз" ; -- FIXME: Pl -a - factory_N = mkN "фабрика" ; - fall_V = regV imperfective first "пада" "ю" "падал" "падай" "падать" ; - far_Adv = mkAdv "далеко"; - fat_N = mkN "жир" ; - father_N2 = mkN2 (mkN "отец" "отца" "отцу" "отца" "отцом" "отце" "отце" "отцы" "отцов" "отцам" "отцов" "отцами" "отцах" masculine animate); - fear_V2 =dirV2 (regV imperfective first "бо" "ю" "боял" "бой" "боять" ); - fear_VS = regV imperfective second "бо" "ю" "боял" "бой" "боять" ; - feather_N = mkN "перо" "пера" "перу" "пера" "пером" "пере" "пере" "перья" "перьев" "перьям" "перьев" "перьями" "перьях" neuter inanimate ; - fight_V2 = dirV2 (regV imperfective firstE "дер" "у" "драл" "дери" "драть" ) ; - find_V2 = dirV2 (mkV imperfective "нахожу" "находишь" "находит" "находим" "находите" "находят" "находил" "находи" "находить" ); - fingernail_N = mkN "ноготь" "ногтя" "ногтю" "ногтя" "ногтем" "ногте" "ногте" "ногти" "ногтей" "ногтям" "ногтей" "ногтями" "ногтях" masculine inanimate ; - fire_N = mkN "огонь" "огня" "огню" "огня" "огнём" "огне" "огне" "огни" "огней" "огням" "огней" "огнями" "огнях" masculine inanimate ; - fish_N = mkN "рыба" animate; - float_V = regV imperfective firstE "плыв" "у" "плыл" "плыви" "плыть" ; - floor_N = mkN "пол" ; - flow_V = regV imperfective firstE "тек" "у" "тёк" "теки" "течь" ; - flower_N = mkN "цветок"; - fly_V = regV imperfective second "лета" "ю" "летал" "летай" "летать" ; - fog_N = mkN "туман" ; - foot_N = mkN "ступня" ; - forest_N = mkN "лес" ; -- prepos -u - forget_V2= dirV2 (regV imperfective first "забыва" "ю" "забывал" "забывай" "забывать" ); - freeze_V = regV imperfective first "замерза" "ю" "замерзал" "замерзай" "замерзать" ; - fridge_N = mkN "холодильник" ; - friend_N = mkN "друг" "друга" "другу" "друга" "другом" "друге" "друге" "друзья" "друзей" "друзьям" "друзей" "дузьями" "друзьях" masculine animate ; - fruit_N = mkN "фрукт" ; - full_A = mkA "полный"; - fun_AV = mkA "весёлый"; - garden_N = mkN "сад" ; - girl_N = mkN "девочка" animate; -- vowel change - give_V3 = tvDirDir (regV imperfective firstE "да" "ю" "давал" "давай" "давать" ) ; - glove_N = mkN "перчатка" ; -- vowel change - go_V= regV imperfective second "хо" "жу" "ходил" "ходи" "ходить" ; - gold_N = mkN "золото" ; - good_A = mkA "хороший" "лучше" ; - grammar_N = mkN "грамматикa"; - grass_N = mkN "трава"; - green_A = mkA "зелёный" ; - guts_N = mkN "внутренность" ; - hair_N = mkN "волос" ; -- FIXME: always plural? - hand_N = mkN "рука" ; - harbour_N = mkN "порт" ; -- prepos -u - hat_N = mkN "шляпа" ; - hate_V2= dirV2 (regV imperfective second "ненави" "жу" "ненавидел" "ненавидь" "ненавидеть" ); - head_N = mkN "голова" ; - hear_V2= dirV2 (regV imperfective first "слуша" "ю" "слушал" "слушай" "слушать" ); - heart_N = mkN "сердце" "сердца" "сердцу" "сердца" "сердцем" "сердце" "сердце" "сердца" "сердец" "сердцам" "сердец" "сердцами" "сердцах" neuter inanimate ; - heavy_A = mkA "тяжёлый" ; - hill_N = mkN "холм" ; - hit_V2 = dirV2 (regV imperfective first "ударя" "ю" "ударял" "ударяй" "ударять" ); - hold_V2 = dirV2 (regV imperfective second "держ" "у" "держал" "держи" "держать" ); - hope_VS= regV imperfective first "наде" "ю" "надеял" "надей" "надеять" ; - horn_N = mkN "рог" ; - horse_N = mkN "лошадь" animate; -- irregular - hot_A = mkA "горячий" ; - house_N = mkN "дом" ; - hunt_V2 = dirV2 (regV imperfective second "охоч" "у" "охотил" "охоть" "охотить" ) ; - husband_N = mkN "муж" "мужа" "мужу" "мужа" "мужем" "муже" "муже" "мужья" "мужей" "мужьям" "мужей" "мужьями" "мужьях" masculine animate ; - ice_N = mkN "лёд" "льда" "льду" "льда" "льдом" "льде" "льде" "льды" "льдов" "льдам" "льдов" "льдами" "льдах" masculine inanimate ; - important_A = mkA "важный" ; - industry_N = mkN "промышленность" ; - iron_N = mkN "железо" ; - john_PN = mkPN "Иван" Masc Animate ; - jump_V = regV imperfective first "прыга" "ю" "прыгал" "прыгай" "прыгать" ; - kill_V2 = dirV2 (regV imperfective first "убива" "ю" "убивал" "убивай" "убивать" ) ; - king_N = mkN "король" "короля" "королю" "короля" "королем" "короле" "короле" "короли" "королей" "королям" "королей" "королями" "королях" masculine animate ; - knee_N = mkN "колено" "колена" "колену" "колена" "коленом" "колене" "колене" "колени" "колен" "коленам" "колен" "коленями" "коленях" neuter inanimate ; - know_V2= dirV2 (regV imperfective first "зна" "ю" "знал" "знай" "знать" ); - lake_N = mkN "озеро" ; -- gen pl "озёр" - lamp_N = mkN "лампа" ; - language_N = mkN "язык" ; - laugh_V = regV imperfective firstE "сме" "ю" "смеял" "смей" "смеять" ; - leaf_N = mkN "лист" ; -- irregular pl - learn_V2= dirV2 (regV imperfective second "уч" "у" "учил" "учи" "учить" ); - leather_N = mkN "кожа" ; - leave_V2= dirV2 (regV imperfective second "ухож" "у" "уходил" "уходи" "уходить" ); - left_Ord = (uy_j_EndDecl "лев" ) ** {lock_A = <>}; - leg_N = mkN "нога" ; - lie_V = regV imperfective firstE "лг" "у" "лгал" "лги" "лгать" ; - like_V2= dirV2 (regV imperfective second "нрав" "лю" "нравил" "нравь" "нравить" ); - listen_V2= dirV2 (regV imperfective first "слуша" "ю" "слушал" "слушай" "слушать" ); - live_V= regV imperfective firstE "жив" "у" "жил" "живи" "жить" ; - liver_N = mkN "печень" ; - long_A = mkA "длинный" ; - lose_V2 = dirV2 (regV imperfective first "теря" "ю" "терял" "теряй" "терять" ); - louse_N = mkN "вошь" "вши" "вши" "вошь" "вошью" "вше" "вше" "вши" "вшей" "вшам" "вшей" "вшами" "вшах" feminine animate ; - love_N = mkN "любовь" ; -- vowel change - love_V2= dirV2 (regV imperfective second "люб" "лю" "любил" "люби" "любить" ); - man_N = mkN "человек" ; -- null gen pl - married_A2 = mkA2 (mkA "замужем") "за" instructive ; - meat_N = mkN "мясо" ; - milk_N = mkN "молоко" ; - moon_N = mkN "луна" ; - mother_N2 = mkN2 (mkN "мать" "матери" "матери" "мать" "матерью" "матери" "матери" "матери" "матерей" "матерям" "матерей" "матерями" "матерях" feminine animate) ; - mountain_N = mkN "гора" ; - mouth_N = mkN "рот" "рта" "рту" "рот" "ртом" "рте" "рте" "рты" "ртов" "ртам" "рты" "ртами" "ртах" masculine inanimate ; - music_N = mkN "музыка" ; - name_N = mkN "имя" ; - narrow_A = mkA "узкий" "уже" ; - near_A = mkA "близкий" "ближе"; - neck_N = mkN "шея" ; - new_A = mkA "новый" ; - newspaper_N = mkN "газета" ; - night_N = mkN "ночь" ; - nose_N = mkN "нос" ; - now_Adv = mkAdv "сейчас" ; - number_N = mkN "число" ; -- gen pl "чисел" - oil_N = mkN "нефть" ; - old_A = mkA "старый" "старше" ; - open_V2= dirV2 (regV imperfective first "открыва" "ю" "открывал" "открывай" "открывать" ); ---- organise_V2 = dirV2 (regV imperfective foreign "организу" "ю" "организовал" "организуй" "организовать" ); -- +++ MG_UR: added +++ - paint_V2A = dirV2 (regV imperfective first "рису" "ю" "рисовал" "рисуй" "рисовать" ) ; ---- palace_N = nDvorec "двор" ; -- +++ MG_UR: added +++ - paper_N = mkN "бумага" ; - paris_PN = mkPN "Париж" Masc Inanimate ; - peace_N = mkN "мир" ; - pen_N = mkN "ручка" ; - person_N = mkN "лицo" animate ; -- irregular - planet_N = mkN "планета" ; - plastic_N = mkN "пластмасса" ; - play_V = regV imperfective first "игра" "ю" "играл" "играй" "играть" ; - play_V2 = mkV2 (regV imperfective first "игра" "ю" "играл" "играй" "играть" ) "c" instructive; - policeman_N = mkN "милиционер" animate ; - priest_N = mkN "священник" animate; - probable_AS = mkA "возможный" ; - pull_V2 = dirV2 (regV imperfective first "тян" "у" "тянул" "тяни" "тянуть" ) ; - push_V2 = dirV2 (regV imperfective first "толка" "ю" "толкал" "толкай" "толкать" ); - put_V2 = dirV2 (regV imperfective firstE "клад" "у" "клал" "клади" "класть" ); - queen_N = mkN "королева" animate ; - question_N = mkN "вопрос" ; - radio_N = mkIndeclinableNoun "радио" neuter inanimate; - rain_N = mkN "дождь" ; - rain_V0 = idetDozhd verbIdti; -- No such verb in Russian! - read_V2 = dirV2 (regV imperfective first "чита" "ю" "читал" "читай" "читать" ); --- ready_A = ; - reason_N = mkN "причина"; - red_A = mkA "красный" ; - religion_N = mkN "религия" ; - restaurant_N = mkN "ресторан" ; - right_Ord = (uy_j_EndDecl "прав") ** {lock_A = <>} ; - river_N = mkN "рекa" ; - road_N = mkN "дорогa" ; - rock_N = mkN "камень" ; - roof_N = mkN "крыша" ; - root_N = mkN "корень" ; - rope_N = mkN "верёвка" ; - rotten_A = mkA "гнилой"; - round_A = mkA "круглый"; - rub_V2 = dirV2 (regV imperfective firstE "тр" "у" "тёр" "три" "тереть" ); - rubber_N = mkN "резина" ; - rule_N = mkN "правило" ; - run_V = regV imperfective first "бега" "ю" "бегал" "бегай" "бегать" ; - salt_N = mkN "соль" ; - sand_N = mkN "песок" "песка" "песку" "песок" "песком" "песке" "песке" "пески" "песков" "пескам" "песков" "песками" "песках" masculine inanimate ; - say_VS = regV imperfective second "говор" "ю" "говорил" "говори" "говорить" ; - school_N = mkN "школа" ; - science_N = mkN "наука" ; - scratch_V2 = dirV2 (regV imperfective first "чеш" "у" "чесал" "чеши" "чесать" ) ; - sea_N = mkN "море" ; - see_V2 = dirV2 (regV imperfective second "ви" "жу" "видел" "видь" "видеть" ); - seed_N = mkN "семя"; - seek_V2 = dirV2 (regV imperfective first "ищ" "у" "искал" "ищи" "искать" ); - sell_V3 = tvDirDir (regV imperfective firstE "прода" "ю" "продавал" "продавай" "продавать" ); - send_V3 = tvDirDir (regV imperfective first "посыла" "ю" "посылал" "посылай" "посылать" ); - sew_V = regV imperfective firstE "шь" "ю" "шил" "шей" "шить" ; - sharp_A = mkA "острый"; - sheep_N = mkN "овца" animate ; - ship_N = mkN "корабль" ; - shirt_N = mkN "рубашка" ; - shoe_N = mkN "туфля" "туфли" "туфле" "туфлю" "туфлей" "туфле" "туфле" "туфли" "туфель" "туфлям" "туфли" "туфлями" "туфлях" masculine inanimate ; - shop_N = mkN "магазин" ; - short_A = mkA "короткий" "короче" ; - silver_N = mkN "серебро" ; - sing_V = regV imperfective firstE "по" "ю" "пел" "пой" "петь" ; - sister_N = mkN "сестра" animate ; - sit_V = mkV imperfective "сижу" "сидишь" "сидит" "сидим" "сидите" "сидят" "сидел" "сиди" "сидеть" ; - skin_N = mkN "кожа" ; - sky_N = mkN "небо" "неба" "небу" "небо" "небом" "небе" "небе" "небеса" "небес" "небесам" "небес" "небесами" "небесах" neuter inanimate ; - sleep_V = regV imperfective second "сп" "лю" "спал" "спи" "спать" ; - small_A = mkA "маленький" "меньше" ; - smell_V = regV imperfective first "пахн" "у" "пахнул" "пахни" "пахнуть" ; - smoke_N = mkN "дым" ; - smooth_A = mkA "гладкий" "глаже"; - snake_N = mkN "змея" animate ; - snow_N = mkN "снег" ; - sock_N = mkN "носок" ; - song_N = mkN "песня" ; - speak_V2 = mkV2 (regV imperfective secondA "говор" "ю" "говорил" "говори" "говорить") - "на" prepositional ; - spit_V = regV imperfective firstE "плю" "ю" "плевал" "плюй" "плевать" ; - split_V2 = dirV2 (regV imperfective first "разбива" "ю" "разбивал" "разбей" "разбивать" ) ; - squeeze_V2 = dirV2 (regV imperfective first "сжима" "ю" "сжимал" "сжимай" "сжимать" ) ; - stab_V2 = dirV2 (regV imperfective first "кол" "ю" "колол" "коли" "колоть" ) ; - stand_V = regV imperfective second "сто" "ю" "стоял" "стой" "стоять" ; - star_N = mkN "звезда" ; - steel_N = mkN "сталь" ; - stick_N = mkN "палка" ; - stone_N = mkN "камень" ; - stop_V = regV imperfective first "останавлива" "ю" "останавливал" "останавливай" "останавливать"; - stove_N = mkN "печь" ; - straight_A = mkA "прямой" ; - student_N = mkN "студент" animate ; - stupid_A = mkA "тупой" "тупее" ; - suck_V2 = dirV2 (regV imperfective firstE "сос" "у" "сосал" "соси" "сосать") ; - sun_N = mkN "солнце" "солнца" "солнцу" "солнце" "солнцем" "солнце" "солнце" "солнца" "солнц" "солнцам" "солнца" "солнцами" "солнцах" neuter inanimate ; - swell_V = regV imperfective first "опуха" "ю" "опухал" "опухай" "опухать" ; - swim_V = regV imperfective first "плава" "ю" "плавал" "плавай" "плавать" ; - switch8off_V2 = dirV2 (regV imperfective first "выключа" "ю" "выключал" "выключай" "выключать") ; - switch8on_V2 = dirV2 (regV imperfective first "включа" "ю" "включал" "включай" "включать") ; - table_N = mkN "стол" ; - tail_N = mkN "хвост" ; - talk_V3 = mkV3 (regV imperfective second "говор" "ю" "говорил" "говори" "говорить" ) "с" "о" instructive prepositional; - teach_V2 = dirV2 (regV imperfective second "уч" "у" "учил" "учи" "учить" ); - teacher_N = mkN "учитель" animate ; - television_N = mkN "телевидение" ; -- FIXME: televizor? - thick_A = mkA "толстый" "толще" ; - thin_A = mkA "тонкий" "тоньше" ; - think_V = regV imperfective first "дума" "ю" "думал" "думай" "думать" ; - throw_V2 = dirV2 (regV imperfective first "броса" "ю" "бросал" "бросай" "бросать" ) ; - tie_V2 = dirV2 (regV imperfective first "вяж" "у" "вязал" "вяжи" "вязать") ; --- today_Adv = ; - tongue_N = mkN "язык" ; - tooth_N = mkN "зуб" ; - train_N = mkN "поезд" ; - travel_V = regV imperfective first "путешеству" "ю" "путешествовал" "путешествуй" "путешествовать" ; - tree_N = mkN "дерево" ; -- irregular - turn_V = regV imperfective first "поворачива" "ю" "поворачивал" "поворачивай" "поворачивать" ; - ugly_A = mkA "некрасивый" ; --- uncertain_A = ; - understand_V2 = dirV2 (regV imperfective first "понима" "ю" "понимал" "понимай" "понимать" ); - university_N = mkN "университет" ; - village_N = mkN "деревня" ; - vomit_V = regV imperfective firstE "рв" "у" "рвал" "рви" "рвать" ; - wait_V2 = dirV2 (regV imperfective firstE "жд" "у" "ждал" "жди" "ждать" ); - walk_V = regV imperfective first "гуля" "ю" "гулял" "гуляй" "гулять" ; ---- want_V2 = dirV2 (regV imperfective mixed "хо" "чу" "хотел" "хоти" "хотеть" ); - war_N = mkN "война" ; - warm_A = mkA "тёплый" ; - wash_V2 = dirV2 (regV imperfective first "мо" "ю" "мыл" "мой" "мыть" ) ; - watch_V2 = dirV2 (regV imperfective second "смотр" "ю" "смотрел" "смотри" "смотреть" ); - water_N = mkN "вода" ; - wet_A = mkA "мокрый" ; - white_A = mkA "белый" ; - wide_A = mkA "широкий" "шире"; - wife_N = mkN "жена" animate ; - win_V2 = dirV2 (regV imperfective first "выигрыва" "ю" "выигрывал" "выигрывай" "выигрывать" ); - wind_N = mkN "ветер" "ветра" "ветру" "ветер" "ветром" "ветра" "ветра" "ветров" "ветра" "ветрам" "ветров" "ветрами" "ветрах" masculine inanimate ; - window_N = mkN "окно" ; -- "окон" - wine_N = mkN "вино" ; - wing_N = mkN "крыло" ; -- pl крылья крыльев etc - wipe_V2 = dirV2 (regV imperfective first "вытира" "ю" "вытирал" "вытирай" "вытирать" ); - woman_N = mkN "женщина" ; - wonder_VQ = regV imperfective first "интересу" "ю" "интересовал" "интересуй" "интересовать"; - wood_N = mkN "дерево" ; - worm_N = mkN "черв" ; - write_V2 = dirV2 (regV imperfective first "пиш" "у" "писал" "пиши" "писать" ); - year_N = mkN "годь" ; - yellow_A = mkA "жёлтый" ; - young_A = mkA "молодой" "моложе"; -} diff --git a/next-lib/src/russian/MorphoRus.gf b/next-lib/src/russian/MorphoRus.gf deleted file mode 100644 index c5bac7bd0..000000000 --- a/next-lib/src/russian/MorphoRus.gf +++ /dev/null @@ -1,1314 +0,0 @@ ---# -path=.:../../prelude:../common - ---1 A Simple Russian Resource Morphology - --- Aarne Ranta, Janna Khegai 2006 - --- This resource morphology contains definitions of the lexical entries --- needed in the resource syntax. --- It moreover contains copies of the most usual inflectional patterns. - --- We use the parameter types and word classes defined for morphology. - -resource MorphoRus = ResRus ** open Prelude in { - -flags coding=utf8 ; - -----2 Personal (together with possesive) pronouns. - -oper pronYa : Pronoun = - let nonPoss = { s = table { Nom => "я" ; - Gen => "меня" ; - Dat => "мне" ; - Acc => "меня" ; - Inst => "мной" ; - Prepos _ => "мне" } } - in pronYaTu nonPoss "мо" P1 ; - -oper pronTu : Pronoun = - let nonPoss = { s = table { Nom => "ты" ; - Gen => "тебя" ; - Dat => "тебе" ; - Acc => "тебя" ; - Inst => "тобой" ; - Prepos _ => "тебе" } } - in pronYaTu nonPoss "тво" P2 ; - --- Pronouns ya, tu, svoj -oper pronYaTu : { s : Case => Str } -> Str -> Person -> Pronoun = - \nonPoss, mo, pers -> - { s = table { - PF c _ NonPoss => nonPoss.s!c ; - PF c _ (Poss gn) => case <c, gn> of { - <Nom, GSg Neut > => mo + "ё" ; - <Nom, GSg Masc > => mo + "й" ; - <Gen, GSg (Masc | Neut)> => mo + "его" ; - <Dat, GSg (Masc | Neut)> => mo + "ему" ; - <Acc, GSg (Masc | Neut)> => mo + "его" ; - <Inst, GSg (Masc | Neut)> => mo + "им" ; - <Prepos _, GSg (Masc | Neut)> => mo + "ём" ; - - <Nom, GSg Fem> => mo + "я" ; - <Gen, GSg Fem> => mo + "ей" ; - <Dat, GSg Fem> => mo + "ей" ; - <Acc, GSg Fem> => mo + "ю" ; - <Inst, GSg Fem> => mo + "ей" ; - <Prepos _, GSg Fem> => mo + "ей" ; - - <Nom, GPl> => mo + "и" ; - <Gen, GPl> => mo + "их" ; - <Dat, GPl> => mo + "им" ; - <Acc, GPl> => mo + "их" ; - <Inst, GPl> => mo + "им" ; - <Prepos _, GPl> => mo + "их" - - } - } ; - g = PNoGen ; n = Sg ; p = pers ; pron = True - } ; - -oper pronNAfterPrep : Pronoun -> Pronoun = \p -> - { s = table { - PF c Yes NonPoss => case p.s!(PF c No NonPoss) of { - x@(("е"|"ё"|"и")+_) => "н"+x; - x => x }; - pf => p.s!pf }; - g = p.g ; n = p.n ; p = p.p ; pron = p.pron - } ; - -oper pronOn : Pronoun = pronNAfterPrep - { s = table { - PF _ _ (Poss _) => "его" ; - PF Nom _ _ => "он" ; - PF (Gen|Acc) _ _ => "его" ; - PF Dat _ _ => "ему" ; - PF Inst _ _ => "им" ; - PF (Prepos _) _ _ => "ём" - } ; - g = PGen Masc ; n = Sg ; p = P3 ; pron = True - } ; - -oper pronOna : Pronoun = pronNAfterPrep - { s = table { - PF _ _ (Poss _ ) => "её" ; - PF Nom _ NonPoss => "она" ; - PF (Gen|Acc) _ _ => "её" ; - PF (Dat|Inst|Prepos _) _ _ => "ей" - } ; - g = PGen Fem ; n = Sg ; p = P3 ; pron = True - } ; - -oper pronOno: Pronoun = - { s = table { - PF Nom _ NonPoss => "оно" ; - pf => pronOn.s!pf - } ; - g = PGen Neut ; n = Sg ; p = P3 ; pron = True - } ; - -oper pronMuVu : Str -> Str -> Person -> Pronoun = - \mu,na,pers -> - { s = table { - PF Nom _ NonPoss => mu ; - PF Gen _ NonPoss => na + "с" ; - PF Dat _ NonPoss => na + "м" ; - PF Acc _ NonPoss => na + "с" ; - PF Inst _ NonPoss => na + "ми" ; - PF (Prepos _) _ NonPoss => na + "с" ; - - PF Nom _ (Poss (GSg Masc)) => na + "ш" ; - PF Nom _ (Poss (GSg Neut)) => na + "ше" ; - PF Gen _ (Poss (GSg (Masc | Neut))) => na + "шего" ; - PF Dat _ (Poss (GSg (Masc | Neut))) => na + "шему" ; - PF Acc _ (Poss (GSg (Masc | Neut))) => na + "шего" ; - PF Inst _ (Poss (GSg (Masc | Neut))) => na + "шим" ; - PF (Prepos _) _ (Poss (GSg (Masc | Neut))) => na + "шем" ; - - PF Nom _ (Poss (GSg Fem)) => na + "ша" ; - PF Gen _ (Poss (GSg Fem)) => na + "шей" ; - PF Dat _ (Poss (GSg Fem)) => na + "шей" ; - PF Acc _ (Poss (GSg Fem)) => na + "шу" ; - PF Inst _ (Poss (GSg Fem)) => na + "шею" ; - PF (Prepos _) _ (Poss (GSg Fem)) => na + "шей" ; - - PF Nom _ (Poss GPl) => na + "ши" ; - PF Gen _ (Poss GPl) => na + "ших" ; - PF Dat _ (Poss GPl) => na + "шим" ; - PF Acc _ (Poss GPl) => na + "ших" ; - PF Inst _ (Poss GPl) => na + "шими" ; - PF (Prepos _) _ (Poss GPl) => na + "ших" - }; - g = PNoGen ; n = Pl ; p = pers ; pron = True - } ; - -oper pronMu: Pronoun = pronMuVu "мы" "на" P1; - -oper pronVu: Pronoun = pronMuVu "вы" "ва" P2; - -oper pronOni: Pronoun = pronNAfterPrep - { s = table { - PF _ _ (Poss _) => "их" ; - PF Nom _ _ => "они" ; - PF Dat _ _ => "им" ; - PF (Gen|Acc|Prepos _) _ _ => "их" ; - PF Inst _ _ => "ими" - } ; - g = PNoGen ; n = Pl ; p = P3 ; pron = True - } ; - -oper pronKto: Pronoun = - { s = table { - PF Nom _ _ => "кто" ; - PF Gen _ _ => "кого" ; - PF Dat _ _ => "кому" ; - PF Acc _ _ => "кого" ; - PF Inst _ _ => "кем" ; - PF (Prepos _) _ _ => "ком" - } ; - g = PGen Masc; - n = Sg ; - p = P3 ; - pron = False - } ; - -oper pronChto: Pronoun = - { s = table { - PF Nom _ _ => "что" ; - PF Gen _ _ => "чего" ; - PF Dat _ _ => "чему" ; - PF Acc _ _ => "что" ; - PF Inst _ _ => "чем" ; - PF (Prepos _) _ _ => "чём" - } ; - g = PGen Masc; - n = Sg ; - p = P3 ; - pron = False - } ; - -oper pron_add_to : Pronoun -> Pronoun = \p -> - { s = \\pf => (p.s!pf) + "-то" ; - g = p.g ; - n = p.n ; - p = p.p ; - pron = p.pron - } ; - -oper pronKtoTo : Pronoun = pron_add_to pronKto ; - -oper pronChtoTo: Pronoun = pron_add_to pronChto ; - -oper pronEti: Pronoun = - { s = table { - PF Nom _ _ => "эти" ; - PF Gen _ _ => "этих" ; - PF Dat _ _ => "этим" ; - PF Acc _ _ => "этих" ; - PF Inst _ _ => "этими" ; - PF (Prepos _) _ _ => "этих" - } ; - n = Pl; - p = P3; - g= PGen Fem ; - anim = Animate ; - pron = False - } ; - -oper pronTe: Pronoun = - { s = table { - PF Nom _ _ => "те" ; - PF Gen _ _ => "тех" ; - PF Dat _ _ => "тем" ; - PF Acc _ _ => "тех" ; - PF Inst _ _ => "теми" ; - PF (Prepos _) _ _ => "тех" - } ; - n = Pl; - p = P3; - g=PGen Fem ; - anim = Animate ; - pron = False - } ; - - ---oper pronNikto: Pronoun = --- { s = table { --- PF Nom _ _ => "никто" ; --- PF Gen _ _ => "никого" ; --- PF Dat _ _ => "никому" ; --- PF Acc _ _ => "никого" ; --- PF Inst _ _ => "никем" ; --- PF (Prepos _) _ _ => ["ни о ком"] -- only together with a preposition; --- } ; --- g = PGen Masc; --- n = Sg ; --- p = P3 ; --- pron = False --- } ; --- ---oper pronNichto: Pronoun = --- { s = table { --- PF Nom _ _ => "ничто" ; --- PF Gen _ _ => "ничего" ; --- PF Dat _ _ => "ничему" ; --- PF Acc _ _ => "ничего" ; --- PF Inst _ _ => "ничем" ; --- PF (Prepos _) _ _ => ["ни о чём"] -- only together with preposition; --- } ; --- g = PGen Masc; --- n = Sg ; --- p = P3 ; --- pron = False --- } ; --- - -oper pronVseInanimate: Pronoun = - { s = table { - PF Nom _ _ => "всё" ; - PF Gen _ _ => "всего" ; - PF Dat _ _ => "всему" ; - PF Acc _ _ => "всё" ; - PF Inst _ _ => "всем" ; - PF (Prepos _) _ _ => "всём" - } ; - g = PGen Neut; - n = Sg ; - p = P3 ; - pron = False - } ; - - - -----2 Nouns --- ----- Help type SubstFormDecl is introduced to reduce repetition in ----- the declination definitions. It allows us to define a declination type, ----- namely, the String component "s" of the CommNoun type ----- without any reference to the Gender parameter "g". --- - -{- - -Paradigms: -1. hard regular - Masc -Consonant - Neut -o - Fem -a -1*. with vowel changes, Masc in Gen Sg, Fem and Neut in Gen Pl -2. soft regular: - Masc -ь - Neut -е - Fem -я -2*. with vowel changes, Masc in Gen Sg, Fem in Gen Pl (no Neut) -3. stem ending in г, к, х - - Masc, Fem same as 1 but use и instead of ы (Nom/Acc Pl, Gen Sg) - - Neut -кo has Nom Pl -ки instead of -кa -3* with vowel changes, Masc in Gen Sg, Fem and Neut in Gen Pl -4. stem ending in ш, ж, ч, щ, hard endings, - use и instead of ы, and use е instead of unstressed o -5. stem ending in ц, hard endings, use е instead of unstressed o -5*. with vowel changes, Masc in Gen Sg, Fem and Neut in Gen Pl -6. Masc ending in -й, Fem stem ending in vowel, Neut ending in ь? -6* with vowel changes -7. stem ending in и -8. F2, Fem ending in -ь - all -чь, -щь, -шь, -жь - all -пь, -энь, -мь, -фь, - most -дь, -ть, -сть, -сь, -вь, -бь, -8*. with vowel changes in Ins Sg, Gen Sg -9. Neut ending in -мя -10. Masc in -oнoк -11. Masc in -aнин -12. Nom Pl in -ья - --} - - - oper iAfter : Str -> Str = \stem -> - case stem of { - _ + ("г"|"к"|"х") => "и" ; - _ + ("ш"|"ж"|"ч"|"щ") => "и" ; - _ => "ы" - }; - - oper oAfter : Str -> Str = \stem -> - case stem of { - _ + ("ш"|"ж"|"ч"|"щ") => "е" ; - _ + "ц" => "е" ; - _ => "о" - }; - - -- 1. Hard regular masculine inanimate, e.g. spor. - -- 3. stem ending in г, к, х - -- 4. stem ending in ш, ж, ч, щ - -- 5. stem ending in ц - oper nRegHardMasc : Str ->CommNoun= \stem -> - let i = iAfter stem in - let o = oAfter stem in - { s = table { - NF Sg Nom => stem ; - NF Sg Gen => stem+"а" ; - NF Sg Dat => stem+"у" ; - NF Sg Acc => stem ; - NF Sg Inst => stem+o+"м" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+i ; - NF Pl Gen => stem+case stem of { _+("ш"|"ж"|"ч"|"щ") => "ей"; _ => "ов" } ; - NF Pl Dat => stem+"ам" ; - NF Pl Acc => stem+i ; - NF Pl Inst => stem+"ами" ; - NF Pl (Prepos _) => stem+"ах" }; - g = Masc; anim = Inanimate }; - - -- 1. Hard regular neuter inanimate, e.g. pravilo. - -- 3. stem ending in г, к, х - -- 4. stem ending in ш, ж, ч, щ - -- 5. stem ending in ц - oper nRegHardNeut : Str ->CommNoun= \stem -> - let o = oAfter stem in - { s = table { - NF Sg Nom => stem+o ; - NF Sg Gen => stem+"а" ; - NF Sg Dat => stem+"у" ; - NF Sg Acc => stem+o ; - NF Sg Inst => stem+o+"м" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+case stem of { _+"к" => "и" ; _ => "а" } ; - NF Pl Gen => stem ; - NF Pl Dat => stem+"ам" ; - NF Pl Acc => stem+"а" ; - NF Pl Inst => stem+"ами" ; - NF Pl (Prepos _) => stem+"ах" }; - g = Neut; anim = Inanimate }; - - -- 1. Hard regular feminine inanimate, e.g. karta. - -- 3. stem ending in г, к, х - -- 4. stem ending in ш, ж, ч, щ - -- 5. stem ending in ц - oper nRegHardFem : Str ->CommNoun= \stem -> - let i = iAfter stem in - let o = oAfter stem in - { s = table { - NF Sg Nom => stem+"а" ; - NF Sg Gen => stem+i ; - NF Sg Dat => stem+"е" ; - NF Sg Acc => stem+"у" ; - NF Sg Inst => stem+o+"й" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+i ; - NF Pl Gen => stem ; - NF Pl Dat => stem+"ам" ; - NF Pl Acc => stem+i ; - NF Pl Inst => stem+"ами" ; - NF Pl (Prepos _) => stem+"ах" }; - g = Fem; anim = Inanimate }; - - -- 2. Soft regular masculine inanimate, e.g. vichr' - oper nRegSoftMasc : Str ->CommNoun= \stem -> - { s = table { - NF Sg Nom => stem+"ь"; - NF Sg Gen => stem+"я" ; - NF Sg Dat => stem+"ю" ; - NF Sg Acc => stem+"ь" ; - NF Sg Inst => stem+"ем" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+"и" ; - NF Pl Gen => stem+"ей" ; - NF Pl Dat => stem+"ям" ; - NF Pl Acc => stem+"и" ; - NF Pl Inst => stem+"ями" ; - NF Pl (Prepos _) => stem+"ях" }; - g = Masc; anim = Inanimate }; - - -- 2. Soft regular neuter inanimate, e.g. more - oper nRegSoftNeut : Str ->CommNoun= \stem -> - { s = table { - NF Sg Nom => stem+"е"; - NF Sg Gen => stem+"я" ; - NF Sg Dat => stem+"ю" ; - NF Sg Acc => stem+"е" ; - NF Sg Inst => stem+"ем" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+"я" ; - NF Pl Gen => stem+"ей" ; - NF Pl Dat => stem+"ям" ; - NF Pl Acc => stem+"я" ; - NF Pl Inst => stem+"ями" ; - NF Pl (Prepos _) => stem+"ях" }; - g = Neut; anim = Inanimate }; - - -- 2. Soft regular feminine inanimate, e.g. burya - oper nRegSoftFem : Str ->CommNoun= \stem -> - { s = table { - NF Sg Nom => stem+"я"; - NF Sg Gen => stem+"и" ; - NF Sg Dat => stem+"е" ; - NF Sg Acc => stem+"ю" ; - NF Sg Inst => stem+"ей" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+"и" ; - NF Pl Gen => stem+"ь" ; - NF Pl Dat => stem+"ям" ; - NF Pl Acc => stem+"и" ; - NF Pl Inst => stem+"ями" ; - NF Pl (Prepos _) => stem+"ях" }; - g = Fem; anim = Inanimate }; - - -- 6. Masc ending in -Vй (V = vowel) - oper nDecl6Masc : Str ->CommNoun= \stem -> - let n = nRegSoftMasc stem in - { s = table { - NF Sg (Nom|Acc) => stem+"й"; - NF Pl Gen => stem+"ев" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - -- 6. Neut ending in -Ve (V = vowel) (not adjectives) - oper nDecl6Neut : Str ->CommNoun= \stem -> - let n = nRegSoftNeut stem in - { s = table { - NF Pl Gen => stem+"й" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - -- 6. Fem ending in -Vя (V = vowel) - oper nDecl6Fem : Str ->CommNoun= \stem -> - let n = nRegSoftFem stem in - { s = table { - NF Pl Gen => stem+"й" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - -- 7. stem ending in и - oper nDecl7Masc : Str ->CommNoun= \stem -> - let n = nDecl6Masc stem in - { s = table { - NF Sg (Prepos _) => stem+"и" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - -- 7. stem ending in и - oper nDecl7Neut : Str ->CommNoun= \stem -> - let n = nDecl6Neut stem in - { s = table { - NF Sg (Prepos _) => stem+"и" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - -- 7. stem ending in и - oper nDecl7Fem : Str ->CommNoun= \stem -> - let n = nDecl6Fem stem in - { s = table { - NF Sg (Dat|Prepos _) => stem+"и" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - - -- 8. Feminine ending in soft consonant - oper nDecl8 : Str ->CommNoun= \stem -> - let a : Str = case stem of { _+("ч"|"щ"|"ш"|"ж") => "а"; _ => "я" } in - { s = table { - NF Sg Nom => stem+"ь"; - NF Sg Gen => stem+"и" ; - NF Sg Dat => stem+"и" ; - NF Sg Acc => stem+"ь" ; - NF Sg Inst => stem+"ью" ; - NF Sg (Prepos _) => stem+"и" ; - NF Pl Nom => stem+"и" ; - NF Pl Gen => stem+"ей" ; - NF Pl Dat => stem+a+"м" ; - NF Pl Acc => stem+"и" ; - NF Pl Inst => stem+a+"ми" ; - NF Pl (Prepos _) => stem+a+"х" }; - g = Fem; anim = Inanimate }; - - -- 9. Neut ending in -мя - oper nDecl9 : Str ->CommNoun= \stem -> - { s = table { - NF Sg Nom => stem+"мя"; - NF Sg Gen => stem+"мени" ; - NF Sg Dat => stem+"мени" ; - NF Sg Acc => stem+"мя" ; - NF Sg Inst => stem+"менем" ; - NF Sg (Prepos _) => stem+"мени" ; - NF Pl Nom => stem+"мена" ; - NF Pl Gen => stem+"мён" ; - NF Pl Dat => stem+"менам" ; - NF Pl Acc => stem+"мена" ; - NF Pl Inst => stem+"менами" ; - NF Pl (Prepos _) => stem+"менах" }; - g = Fem; anim = Inanimate }; - - -- 10. Masc in -oнoк - oper nDecl10Hard : Str -> CommNoun = \stem -> - nAnimate (nSplitSgPl (nRegHardMasc (stem+"онок")) -- FIXME: vowel change in sg - (nRegHardNeut (stem+"ат"))) ; - - -- 10. Masc in -ёнoк - oper nDecl10Soft : Str -> CommNoun = \stem -> - nAnimate (nSplitSgPl (nRegHardMasc (stem+"ёнок")) -- FIXME: vowel change in sg - (nRegHardNeut (stem+"ят"))) ; - - oper nSplitSgPl : CommNoun -> CommNoun -> CommNoun = \x, y -> - {s = table { - NF Sg c => x.s!(NF Sg c) ; - NF Pl c => y.s!(NF Pl c) - } ; - g = x.g ; anim = y.anim - } ; - - -- Nouns inflected as adjectives. - oper nAdj : Adjective -> Gender ->CommNoun= \a,g -> - { s = table { - NF Sg c => a.s!AF c Inanimate (GSg g) ; - NF Pl c => a.s!AF c Inanimate GPl }; - g = g; anim = Inanimate } ; - --- Makes a noun animate. - oper nAnimate : CommNoun -> CommNoun = \n -> - { s = table { - NF Sg Acc => case n.g of { - Masc => n.s!(NF Sg Gen); - _ => n.s!(NF Sg Acc) - }; - NF Pl Acc => n.s!(NF Pl Gen); - sf => n.s!sf } ; - g = n.g ; - anim = Animate - } ; - -oper - SubstFormDecl = SS1 NForm ; - -oper nullEndInAnimateDeclStul: Str -> CommNoun = \brat -> - {s = table - { NF Sg Nom => brat ; - NF Sg Gen => brat+"а" ; - NF Sg Dat => brat+"у" ; - NF Sg Acc => brat +"а"; - NF Sg Inst => brat+"ом" ; - NF Sg (Prepos _) => brat+"е" ; - NF Pl Nom => brat+"ья" ; - NF Pl Gen => brat+"ьев" ; - NF Pl Dat => brat+"ьям" ; - NF Pl Acc => brat +"ьев"; - NF Pl Inst => brat+"ьями" ; - NF Pl (Prepos _) => brat+"ьяах" - } ; - g = Masc ; anim = Inanimate - } ; - -oper nullEndAnimateDeclBrat: Str -> CommNoun = \brat -> - {s = table - { NF Sg Nom => brat ; - NF Sg Gen => brat+"а" ; - NF Sg Dat => brat+"у" ; - NF Sg Acc => brat +"а"; - NF Sg Inst => brat+"ом" ; - NF Sg (Prepos _) => brat+"е" ; - NF Pl Nom => brat+"ья" ; - NF Pl Gen => brat+"ьев" ; - NF Pl Dat => brat+"ьям" ; - NF Pl Acc => brat +"ьев"; - NF Pl Inst => brat+"ьями" ; - NF Pl (Prepos _) => brat+"ьяах" - } ; - g = Masc ; anim = Animate - } ; - -oper irregPl_StemInAnimateDecl: Str -> CommNoun = \derev -> - { s = table - { NF Sg Nom => derev+"о" ; - NF Sg Gen => derev+"а" ; - NF Sg Dat => derev+"у" ; - NF Sg Acc => derev +"о"; - NF Sg Inst => derev+"ом" ; - NF Sg (Prepos _) => derev+"е" ; - NF Pl Nom => derev+"ья" ; - NF Pl Gen => derev+"ьев" ; - NF Pl Dat => derev+"ьям" ; - NF Pl Acc => derev +"ья" ; - NF Pl Inst => derev+"ьями" ; - NF Pl (Prepos _) => derev+"ьяах" - } ; - g = Masc ; anim = Inanimate - } ; - -oper kg_oEnd_SgDecl: Str -> CommNoun = \mnog -> -{ s = table { - NF _ Nom => mnog+"о" ; - NF _ Gen => mnog +"их"; - NF _ Dat => mnog+"им" ; - NF _ Acc => mnog+"о" ; - NF _ Inst => mnog+"ими" ; - NF _ (Prepos _) => mnog+"их" - } ; - g = Neut ; anim = Inanimate -} ; - -oper oEnd_PlDecl: Str -> CommNoun = \menshinstv -> - { s = table { - NF _ Nom => menshinstv+"а" ; - NF _ Gen => menshinstv; - NF _ Dat => menshinstv+"ам" ; - NF _ Acc => menshinstv+"ва" ; - NF _ Inst => menshinstv+"ами" ; - NF _ (Prepos _) => menshinstv+"вах" - } ; - g = Neut ; anim = Inanimate -} ; - -oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv -> - {s = table { - NF _ Nom => bolshinstv+"о" ; - NF _ Gen => bolshinstv+"а" ; - NF _ Dat => bolshinstv+"у" ; - NF _ Acc => bolshinstv+"о" ; - NF _ Inst => bolshinstv+"ом" ; - NF _ (Prepos _) => bolshinstv+"е" - } ; - g = Neut ; anim = Inanimate -} ; - --- Note: Now we consider only the plural form of the pronoun "все" (all) --- treated as an adjective (see AllDetPl definition). --- The meaning "entire" is not considered, which allows us to form --- the pronoun-adjective from the substantive form below: - -oper eEnd_Decl: Str -> CommNoun = \vs -> -{ s = table { - NF Sg Nom => vs+"е" ; - NF Sg Gen => vs+"ех" ; - NF Sg Dat => vs+"ем" ; - NF Sg Acc => vs+"ех" ; - NF Sg Inst => vs+"еми" ; - NF Sg (Prepos _) => vs+"ех" ; - NF Pl Nom => vs+"е" ; - NF Pl Gen => vs +"ех"; - NF Pl Dat => vs+"ем" ; - NF Pl Acc => vs+ "ех" ; - NF Pl Inst => vs+"еми" ; - NF Pl (Prepos _) => vs+"ех" - } ; - g = Neut ; anim = Inanimate -} ; - - -----2 Adjectives --- ----- Type Adjective only has positive degree while AdjDegr type ----- includes also comparative and superlative forms. --- - kazhdujDet: Adjective = aRegHardStemStress "кажд" ; - samuj : Adjective = aRegHardStemStress "сам" ; - --- lubojDet: Adjective = uy_oj_EndDecl "люб" ; --- drugojDet: Adjective = uy_oj_EndDecl "друг" ; --- glaznoj: Adjective = uy_oj_EndDecl "глазн" ; - kotorujDet: Adjective = aRegHardStemStress "котор"; - nekotorujDet: Adjective = aRegHardStemStress "некотор"; - takoj: Adjective = aRegHardEndStress "так"; --- kakojNibudDet: Adjective = i_oj_EndDecl "как" "-нибудь"; --- kakojDet: Adjective = i_oj_EndDecl "как" []; --- nikakojDet: Adjective = i_oj_EndDecl "никак" []; - bolshinstvoSgDet: Adjective = extAdjFromSubst (nRegHardNeut "большинств"); - mnogoSgDet: Adjective = extAdjFromSubst (nRegHardNeut "мног"); - nemnogoSgDet: Adjective = extAdjFromSubst (nRegHardNeut "немног"); - skolkoSgDet: Adjective = extAdjFromSubst (nRegHardNeut "скольк"); - --- bolshinstvoPlDet: Adjective = extAdjFromSubst (oEnd_PlDecl "большинств"); - - - - oper aRegHardStemStress : Str -> Adjective = \stem -> aRegHard stem False ; - - oper aRegHardEndStress : Str -> Adjective = \stem -> aRegHard stem True; - - -- 1. regular hard adjective - -- 3. stem ending with г, к, х - -- 4. stem ending with ш, ж, ч, щ - -- 5. stem ending with ц - oper aRegHard : Str -> Bool -> Adjective = \stem, endStress -> - let i = iAfter stem in - let o = case endStress of { - True => "о" ; - False => oAfter stem } in - { s = table { - AF Nom _ (GSg Masc) => stem + case endStress of { - True => "ой"; - False => iAfter stem + "й" } ; - AF Nom _ (GSg Neut) => stem + o+"е"; - AF Gen _ (GSg (Masc|Neut)) => stem + o+"го"; - AF Dat _ (GSg (Masc|Neut)) => stem + o+"му"; - AF Acc Inanimate (GSg Masc) => stem + i+"й"; - AF Acc Animate (GSg Masc) => stem + o+"го"; - AF Acc _ (GSg Neut) => stem + o+"е"; - AF Inst _ (GSg (Masc|Neut)) => stem + i+"м"; - AF (Prepos _) _ (GSg (Masc|Neut)) => stem + o+"м"; - - AF Nom _ (GSg Fem) => stem + "ая"; - AF Acc _ (GSg Fem) => stem + "ую"; - AF _ _ (GSg Fem) => stem + o+"й"; - - AF Nom _ GPl => stem + i+"е"; - AF Acc Inanimate GPl => stem + i+"е"; - AF Acc Animate GPl => stem + i+"х"; - AF Gen _ GPl => stem + i+"х"; - AF Inst _ GPl => stem + i+"ми"; - AF Dat _ GPl => stem + i+"м"; - AF (Prepos _) _ GPl => stem + i+"х"; - - AFShort (GSg Masc) => stem; - AFShort (GSg Fem) => stem + "а"; - AFShort (GSg Neut) => stem + o ; - AFShort GPl => stem + i; - - AdvF => stem + o - } } ; - - oper aRegSoft : Str -> Adjective = \stem -> - { s = table { - AF Nom _ (GSg Masc) => stem + "ий" ; - AF Nom _ (GSg Neut) => stem + "ее"; - AF Gen _ (GSg (Masc|Neut)) => stem + "его"; - AF Dat _ (GSg (Masc|Neut)) => stem + "ему"; - AF Acc Inanimate (GSg Masc) => stem + "ий"; - AF Acc Animate (GSg Masc) => stem + "его"; - AF Acc _ (GSg Neut) => stem + "ее"; - AF Inst _ (GSg (Masc|Neut)) => stem + "им"; - AF (Prepos _) _ (GSg (Masc|Neut)) => stem + "ем"; - - AF Nom _ (GSg Fem) => stem + "яя"; - AF Acc _ (GSg Fem) => stem + "юю"; - AF _ _ (GSg Fem) => stem + "ей"; - - AF Nom _ GPl => stem + "ие"; - AF Acc Inanimate GPl => stem + "ие"; - AF Acc Animate GPl => stem + "их"; - AF Gen _ GPl => stem + "их"; - AF Inst _ GPl => stem + "ими"; - AF Dat _ GPl => stem + "им"; - AF (Prepos _) _ GPl => stem + "их"; - - AFShort (GSg Masc) => stem; -- FIXME: add e if stem ends in consonant + n - AFShort (GSg Fem) => stem + "я"; - AFShort (GSg Neut) => stem + "е" ; - AFShort GPl => stem + "и" ; - - AdvF => stem + "е" - } } ; - - - - - vseDetPl: Adjective = extAdjFromSubst (eEnd_Decl "вс") ; - extAdjFromSubst: CommNoun -> Adjective = \ vse -> - {s = \\af => vse.s ! NF (numAF af) (caseAF af) } ; - - -oper totDet: Adjective = {s = table { - AF Nom _ (GSg Masc) => "тот"; - AF Nom _ (GSg Fem) => "та"; - AF Nom _ (GSg Neut) => "то"; - AF Nom _ GPl => "те"; - AF Acc Inanimate (GSg Masc) => "тот"; - AF Acc Animate (GSg Masc) => "того"; - AF Acc _ (GSg Fem) => "ту"; - AF Acc _ (GSg Neut) => "то"; - AF Acc Inanimate GPl => "те"; - AF Acc Animate GPl => "тех"; - AF Gen _ (GSg Masc) => "того"; - AF Gen _ (GSg Fem) => "той"; - AF Gen _ (GSg Neut) => "того"; - AF Gen _ GPl => "тех"; - AF Inst _ (GSg Masc) => "тем"; - AF Inst _ (GSg Fem) => "той"; - AF Inst _ (GSg Neut) => "тем"; - AF Inst _ GPl => "теми"; - AF Dat _ (GSg Masc) => "тому"; - AF Dat _ (GSg Fem) => "той"; - AF Dat _ (GSg Neut) => "тому"; - AF Dat _ GPl => "тем"; - AF (Prepos _) _ (GSg Masc) => "том"; - AF (Prepos _) _ (GSg Fem) => "той"; - AF (Prepos _) _ (GSg Neut) => "том"; - AF (Prepos _) _ GPl => "тех" ; - AFShort (GSg Masc) => "тот"; - AFShort (GSg Fem) => "та"; - AFShort (GSg Neut) => "то"; - AFShort GPl => "те"; - AdvF => "то" - } - } ; - -oper odinDet: Adjective = {s = table { - AF Nom _ (GSg Masc) => "один"; - AF Nom _ (GSg Fem) => "одна"; - AF Nom _ (GSg Neut) => "одно"; - AF Nom _ GPl => "одни"; - AF Acc Inanimate (GSg Masc) => "один"; - AF Acc Animate (GSg Masc) => "одного"; - AF Acc _ (GSg Fem) => "одну"; - AF Acc _ (GSg Neut) => "одно"; - AF Acc Inanimate GPl => "одни"; - AF Acc Animate GPl => "одних"; - AF Gen _ (GSg Masc) => "одного"; - AF Gen _ (GSg Fem) => "одной"; - AF Gen _ (GSg Neut) => "одного"; - AF Gen _ GPl => "одних"; - AF Inst _ (GSg Masc) => "одним"; - AF Inst _ (GSg Fem) => "одной"; - AF Inst _ (GSg Neut) => "одним"; - AF Inst _ GPl => "одними"; - AF Dat _ (GSg Masc) => "одному"; - AF Dat _ (GSg Fem) => "одной"; - AF Dat _ (GSg Neut) => "одному"; - AF Dat _ GPl => "одним"; - AF (Prepos _) _ (GSg Masc) => "одном"; - AF (Prepos _) _ (GSg Fem) => "одной"; - AF (Prepos _) _ (GSg Neut) => "одном"; - AF (Prepos _) _ GPl => "одних"; - AFShort (GSg Masc) => "один"; - AFShort (GSg Fem) => "одна"; - AFShort (GSg Neut) => "одно"; - AFShort GPl => "одни"; - AdvF => "одно" - } - } ; - -oper etotDet: Adjective = {s = table { - AF Nom _ (GSg Masc) => "этот"; - AF Nom _ (GSg Fem) => "эта"; - AF Nom _ (GSg Neut) => "это"; - AF Nom _ GPl => "эти"; - AF Acc Inanimate (GSg Masc) => "этот"; - AF Acc Animate (GSg Masc) => "этого"; - AF Acc _ (GSg Fem) => "эту"; - AF Acc _ (GSg Neut) => "это"; - AF Acc Inanimate GPl => "эти"; - AF Acc Animate GPl => "этих"; - AF Gen _ (GSg Masc) => "этого"; - AF Gen _ (GSg Fem) => "этой"; - AF Gen _ (GSg Neut) => "этого"; - AF Gen _ GPl => "этих"; - AF Inst _ (GSg Masc) => "этим"; - AF Inst _ (GSg Fem) => "этой"; - AF Inst _ (GSg Neut) => "этим"; - AF Inst _ GPl => "этими"; - AF Dat _ (GSg Masc) => "этому"; - AF Dat _ (GSg Fem) => "этой"; - AF Dat _ (GSg Neut) => "этому"; - AF Dat _ GPl => "этим"; - AF (Prepos _) _ (GSg Masc) => "этом"; - AF (Prepos _) _ (GSg Fem) => "этой"; - AF (Prepos _) _ (GSg Neut) => "этом"; - AF (Prepos _) _ GPl => "этих"; - AFShort (GSg Masc) => "этот"; - AFShort (GSg Fem) => "эта"; - AFShort (GSg Neut) => "это"; - AFShort GPl => "эти"; - AdvF => "это" - } - } ; - -oper vesDet: Adjective = {s = table { - AF Nom _ (GSg Masc) => "весь"; - AF Nom _ (GSg Fem) => "вся"; - AF Nom _ (GSg Neut) => "всё"; - AF Nom _ GPl => "все"; - AF Acc Animate (GSg Masc) => "весь"; - AF Acc Inanimate (GSg Masc) => "всего"; - AF Acc _ (GSg Fem) => "всю"; - AF Acc _ (GSg Neut) => "всё"; - AF Acc Inanimate GPl => "все"; - AF Acc Animate GPl => "всех"; - AF Gen _ (GSg Masc) => "всего"; - AF Gen _ (GSg Fem) => "всей"; - AF Gen _ (GSg Neut) => "всего"; - AF Gen _ GPl => "всех"; - AF Inst _ (GSg Masc) => "всем"; - AF Inst _ (GSg Fem) => "всей"; - AF Inst _ (GSg Neut) => "всем"; - AF Inst _ GPl => "всеми"; - AF Dat _ (GSg Masc) => "ему"; - AF Dat _ (GSg Fem) => "ей"; - AF Dat _ (GSg Neut) => "ему"; - AF Dat _ GPl => "всем"; - AF (Prepos _) _ (GSg Masc) => "всём"; - AF (Prepos _) _ (GSg Fem) => "всей"; - AF (Prepos _) _ (GSg Neut) => "всём"; - AF (Prepos _) _ GPl => "всех" ; - AFShort (GSg Masc) => "весь"; - AFShort (GSg Fem) => "вся"; - AFShort (GSg Neut) => "всё"; - AFShort GPl => "все"; - AdvF => "полностью" - } - } ; - -oper uy_j_EndDecl : Str -> Adjective = \s ->{s = table { - AF Nom _ (GSg Masc) => s+ "ый"; - AF Nom _ (GSg Fem) => s + "ая"; - AF Nom _ (GSg Neut) => s + "ое"; - AF Nom _ GPl => s + "ые"; - AF Acc Inanimate (GSg Masc) => s + "ый"; - AF Acc Animate (GSg Masc) => s + "ого"; - AF Acc _ (GSg Fem) => s + "ую"; - AF Acc _ (GSg Neut) => s + "ое"; - AF Acc Inanimate GPl => s + "ые"; - AF Acc Animate GPl => s + "ых"; - AF Gen _ (GSg Masc) => s + "ого"; - AF Gen _ (GSg Fem) => s + "ой"; - AF Gen _ (GSg Neut) => s + "ого"; - AF Gen _ GPl => s + "ых"; - AF Inst _ (GSg Masc) => s + "ым"; - AF Inst _ (GSg Fem) => s + "ой"; - AF Inst _ (GSg Neut) => s + "ым"; - AF Inst _ GPl => s + "ыми"; - AF Dat _ (GSg Masc) => s + "ому"; - AF Dat _ (GSg Fem) => s + "ой"; - AF Dat _ (GSg Neut) => s + "ому"; - AF Dat _ GPl => s + "ым"; - AF (Prepos _) _ (GSg Masc) => s + "ом"; - AF (Prepos _) _ (GSg Fem) => s + "ой"; - AF (Prepos _) _ (GSg Neut) => s + "ом"; - AF (Prepos _) _ GPl => s + "ых"; - AFShort (GSg Masc) => s; - AFShort (GSg Fem) => s + "а"; - AFShort (GSg Neut) => s + "о" ; - AFShort GPl => s + "ы"; - AdvF => s +"о" - } - } ; - -{- --- Commented out since I don't know what the short forms are -oper ti_j_EndDecl : Str -> Adjective = \s ->{s = table { - AF Nom _ (GSg Masc) => s+"ий"; - AF Nom _ (GSg Fem) => s+"ья"; - AF Nom _ (GSg Neut) => s+"ье"; - AF Nom _ GPl => s+"ьи"; - AF Acc Inanimate (GSg Masc) => s+"ий"; - AF Acc Animate (GSg Masc) => s+"ьего"; - AF Acc _ (GSg Fem) => s+"ью"; - AF Acc _ (GSg Neut) => s+"ье"; - AF Acc Inanimate GPl => s+"ьи"; - AF Acc Animate GPl => s+"ьих"; - AF Gen _ (GSg Masc) => s+"ьего"; - AF Gen _ (GSg Fem) => s+"ьей"; - AF Gen _ (GSg Neut) => s+"ьего"; - AF Gen _ GPl => s+"ьих"; - AF Inst _ (GSg Masc) => s+"ьим"; - AF Inst _ (GSg Fem) => s+"ьей"; - AF Inst _ (GSg Neut) => s+"ьим"; - AF Inst _ GPl => s+"ьими"; - AF Dat _ (GSg Masc) => s+"ьему"; - AF Dat _ (GSg Fem) => s+"ьей"; - AF Dat _ (GSg Neut) => s+"ьему"; - AF Dat _ GPl => s+"ьим"; - AF (Prepos _) _ (GSg Masc) => s+"ьем"; - AF (Prepos _) _ (GSg Fem) => s+"ьей"; - AF (Prepos _) _ (GSg Neut) => s+"ьем"; - AF (Prepos _) _ GPl => s+"ьих"; - AdvF => s + "ье" - } - } ; --} - - - ----- 2 Adverbs --- ---oper vsegda: Adverb = { s = "всегда" } ; ---oper chorosho: Adverb = { s = "хорошо" } ; --- ----- 2 Verbs --- ----- Dummy verbum "have" that corresponds to the phrases like ----- "I have a headache" in English. The corresponding sentence ----- in Russian doesn't contain a verb: --- ---oper have: Verbum = {s=\\ vf => "-" ; asp = Imperfective} ; --- ----- There are two common conjugations ----- (according to the number and the person of the subject) ----- patterns in the present tense in the indicative mood. - --- +++ MG_UR: new conjugation class 'Foreign' introduced +++ -param Conjugation = First | FirstE | Second | SecondA | Mixed | Dolzhen | Foreign ; - - ---3 First conjugation (in Present) verbs : -oper verbIdti : Verbum = verbDecl Imperfective First "ид" "у" "шел" "иди" "идти"; - ---oper verbGulyat : Verbum = verbDecl Imperfective First "гуля" "ю" "гулял" "гуляй" "гулять"; ---oper verbVkluchat : Verbum = verbDecl Imperfective First "включа" "ю" "включал" "включай" "включать"; -oper verbSuchestvovat : Verbum = verbDecl Imperfective First "существу" "ю" "существовал" "существуй" "существовать"; ---oper verbVukluchat : Verbum = verbDecl Imperfective First "выключа" "ю" "выключал" "выключай" "выключать"; ---oper verbZhdat : Verbum = verbDecl Imperfective First "жд" "у" "ждал" "жди" "ждать" ; ---oper verbBegat : Verbum = verbDecl Imperfective First "бега" "ю" "бегал" "бегай" "бегать"; ---oper verbPrinimat : Verbum = verbDecl Imperfective First "принима" "ю" "принимал" "принимай" "принимать"; ---oper verbDokazuvat : Verbum = verbDecl Imperfective First "доказыва" "ю" "доказывал" "доказывай" "доказывать"; ---oper verbPredpochitat : Verbum = verbDecl Imperfective First "предпочита" "ю" "предпочитал" "предпочитай" "предпочитать"; ---oper verbOtpravlyat : Verbum = verbDecl Imperfective First "отправля" "ю" "отправлял" "отправляй" "отправлять"; ---oper verbSlomat : Verbum = verbDecl Perfective First "слома" "ю" "сломал" "сломай" "сломать"; - - ----- Verbs with vowel "ё": "даёшь" (give), "пьёшь" (drink) : ---oper verbDavat : Verbum = verbDecl Imperfective FirstE "да" "ю" "давал" "давай" "давать"; ---oper verbPit : Verbum = verbDecl Imperfective FirstE "пь" "ю" "пил" "пей" "пить"; --- - - -oper verbByut : Verbum = verbDecl Perfective First "буд" "у" "был" "будь" "быть"; - -oper verbMoch : Verbum = verbDeclMoch Imperfective First "мог" "у" "мог" "моги" "мочь" "мож"; - -----3 Second conjugation (in Present) verbs : --- ---oper verbLubit : Verbum = verbDecl Imperfective Second "люб" "лю" "любил" "люби" "любить"; ---oper verbGovorit : Verbum = verbDecl Imperfective Second "говор" "ю" "говорил" "говори" "говорить"; --- ---oper verbBolet_2 : Verbum = verbDecl Imperfective Second "бол" "ю" "болел" "боли" "болеть"; ---oper verbPoranit : Verbum = verbDecl Perfective Second "поран" "ю" "поранил" "порань" "поранить"; --- --- Irregular Mixed: -oper verbKhotet : Verbum = verbDecl Imperfective Mixed "хоч" "у" "хотел" "хоти" "хотеть"; - --- Irregular -oper verbDolzhen : Verbum = verbDecl Imperfective Dolzhen "долж" "ен" "долж" ["будь должен"] ["быть должным"] ; - - --- further conjugation class added by Magda Gerritsen and Ulrich Real: --- foreign words introduced in Russian - -oper verbOrganisuet : Verbum = verbDecl Imperfective Foreign "организу" "ю" "организовал" "организуй" "организовать"; - - -oper idetDozhd: Verbum -> Verbum = \idet -> {s = \\vf=>idet.s!vf ++ "дождь"; asp = Imperfective}; - --- "PresentVerb" takes care of the present tense conjugation. - -param PresentVF = PRF GenNum Person; -oper PresentVerb : Type = PresentVF => Str ; - -oper presentConjDolzhen: Str -> Str -> PresentVerb = \del, sgP1End -> - table { - PRF GPl _ => del + "ны" ; - PRF (GSg Masc) _ => del + sgP1End ; - PRF (GSg Fem) _ => del + "на" ; - PRF (GSg Neut) _ => del + "но" - }; - --- +++ MG_UR: changed! +++ -oper presentConjMixed: Str -> Str -> PresentVerb = \del, sgP1End -> - table { - PRF (GSg _) P1 => del+ sgP1End ; -- sgP1End "чу" - PRF (GSg _) P2 => del+ "чешь" ; - PRF (GSg _) P3 => del+ "чет" ; - PRF GPl P1 => del+ "тим" ; - PRF GPl P2 => del+ "тите" ; - PRF GPl P3 => del+ "тят" - }; - --- +++ MG_UR: changed! (+ д) +++ -oper presentConj2: Str -> Str -> PresentVerb = \del, sgP1End -> -table { - PRF (GSg _) P1 => del+ sgP1End ; -- sgP1End "жу" - PRF (GSg _) P2 => del+ "дишь" ; - PRF (GSg _) P3 => del+ "дит" ; - PRF GPl P1 => del+ "дим" ; - PRF GPl P2 => del+ "дите" ; - PRF GPl P3 => del+ "дят" - }; - -oper presentConj2a: Str -> Str -> PresentVerb = \del, sgP1End -> -table { - PRF (GSg _) P1 => del+ sgP1End ; -- sgP1End "жу" - PRF (GSg _) P2 => del+ "ишь" ; - PRF (GSg _) P3 => del+ "ит" ; - PRF GPl P1 => del+ "им" ; - PRF GPl P2 => del+ "ите" ; - PRF GPl P3 => del+ "ят" - }; - -oper presentConj1E: Str -> Str -> PresentVerb = \del, sgP1End -> - table { - PRF (GSg _) P1 => del+ sgP1End ; - PRF (GSg _) P2 => del+ "ёшь" ; - PRF (GSg _) P3 => del+ "ёт" ; - PRF GPl P1 => del+ "ём" ; - PRF GPl P2 => del+ "ёте" ; - PRF GPl P3 => del+ sgP1End + "т" - }; - -oper presentConj1: Str -> Str -> PresentVerb = \del, sgP1End -> - table { - PRF (GSg _) P1 => del+ sgP1End ; - PRF (GSg _) P2 => del+ "ешь" ; - PRF (GSg _) P3 => del+ "ет" ; - PRF GPl P1 => del+ "ем" ; - PRF GPl P2 => del+ "ете" ; - PRF GPl P3 => del+ sgP1End + "т" - }; - -oper presentConj1Moch: Str -> Str -> Str -> PresentVerb = \del, sgP1End, altRoot -> - table { - PRF (GSg _) P1 => del + sgP1End ; - PRF (GSg _) P2 => altRoot + "ешь" ; - PRF (GSg _) P3 => altRoot + "ет" ; - PRF GPl P1 => altRoot + "ем" ; - PRF GPl P2 => altRoot + "ете" ; - PRF GPl P3 => del+ sgP1End + "т" - }; - --- "PastVerb" takes care of the past tense conjugation. - -param PastVF = PSF GenNum ; -oper PastVerb : Type = PastVF => Str ; -oper pastConj: Str -> PastVerb = \del -> - table { - PSF (GSg Masc) => del ; - PSF (GSg Fem) => del +"а" ; - PSF (GSg Neut) => del+"о" ; - PSF GPl => del+ "и" - }; - -oper pastConjDolzhen: Str -> PastVerb = \del -> - table { - PSF (GSg Masc) => ["был "] + del + "ен" ; - PSF (GSg Fem) => ["была "] + del + "на" ; - PSF (GSg Neut) => ["было "] + del + "но" ; - PSF GPl => ["были "] + del + "ны" - }; - --- further class added by Magda Gerritsen and Ulrich Real -oper presentConjForeign: Str -> Str -> PresentVerb = \del, sgP1End -> - table { - PRF (GSg _) P1 => del+ sgP1End ; -- sgP1End "ю" - PRF (GSg _) P2 => del+ "ешь" ; - PRF (GSg _) P3 => del+ "ет" ; - PRF GPl P1 => del+ "ем" ; - PRF GPl P2 => del+ "ете" ; - PRF GPl P3 => del+ "ют" -}; - --- "verbDecl" sorts out verbs according to the aspect and voice parameters. --- It produces the full conjugation table for a verb entry - --- +++ MG_UR: new conjugation class 'Foreign' introduced +++ -oper verbDecl: Aspect -> Conjugation -> Str -> Str -> Str -> Str -> Str -> Verbum = - \a, c, del, sgP1End, sgMascPast, imperSgP2, inf -> - let conj = case c of { - First => <presentConj1,pastConj> ; - FirstE => <presentConj1E,pastConj> ; - Second => <presentConj2,pastConj> ; - SecondA => <presentConj2a,pastConj> ; - Mixed => <presentConjMixed,pastConj> ; - Dolzhen => <presentConjDolzhen,pastConjDolzhen> ; - Foreign => <presentConjForeign,pastConj> } in - let patt = case a of { - Perfective => mkVerbImperfective; - Imperfective => mkVerbImperfective } in - patt inf imperSgP2 (conj.p1 del sgP1End) (conj.p2 sgMascPast) ; - --- for verbs like "мочь" ("can") with changing consonants (first conjugation): --- "могу - можешь" -oper verbDeclMoch: Aspect -> Conjugation -> Str -> Str -> Str -> Str ->Str -> Str -> Verbum = - \a, c, del, sgP1End, sgMascPast, imperSgP2, inf, altRoot -> - let patt = case a of { - Perfective => mkVerbImperfective; - Imperfective => mkVerbImperfective } in - patt inf imperSgP2 (presentConj1Moch del sgP1End altRoot) (pastConj sgMascPast); - -oper add_sya : Voice -> Str -> Str = \v,x -> - case v of { - Act => x ; - Pas => case Predef.dp 2 x of { - "а" | "е" | "ё" | "и" | "о" | "у" | "ы" | "э" | "ю" | "я" => x + "сь" ; - _ => x + "ся" - } - }; - - --- Generation the imperfective active pattern given --- a number of basic conjugation forms. - -oper mkVerbImperfective : Str -> Str -> PresentVerb -> PastVerb -> Verbum = - \inf, imper, presentFuture, past -> { s = table { VFORM vox vf => - case vf of { - VINF => add_sya vox inf ; - - VIMP _ P1 => "давайте" ++ add_sya vox inf ; - VIMP Sg P2 => add_sya vox imper ; - VIMP Pl P2 => add_sya vox (imper+"те") ; - VIMP Sg P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF (GSg Masc) P3)) ; - VIMP Pl P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF GPl P3)) ; - - VSUB gn => add_sya vox (past ! (PSF gn)) ++ "бы"; - - VIND (GSg _) (VPresent p) => add_sya vox (presentFuture ! (PRF (GSg Masc) p)); - VIND GPl (VPresent p) => add_sya vox (presentFuture ! (PRF GPl p)); - VIND (GSg _) (VFuture P1) => "буду" ++ add_sya vox inf ; - VIND (GSg _) (VFuture P2) => "будешь" ++ add_sya vox inf ; - VIND (GSg _) (VFuture P3) => "будет" ++ add_sya vox inf ; - VIND GPl (VFuture P1) => "будем" ++ add_sya vox inf ; - VIND GPl (VFuture P2) => "будете" ++ add_sya vox inf ; - VIND GPl (VFuture P3) => "будут" ++ add_sya vox inf ; - VIND gn VPast => add_sya vox (past ! (PSF gn)) - } } ; - asp = Imperfective - } ; - -oper mkVerbPerfective: Str -> Str -> PresentVerb -> PastVerb -> Verbum = - \inf, imper, presentFuture, past -> { s = table { VFORM vox vf => - case vf of { - VINF => add_sya vox inf ; - VIMP Sg P1 => "давайте" ++ add_sya vox (presentFuture ! (PRF (GSg Masc) P1)); - VIMP Pl P1 => "давайте" ++ add_sya vox (presentFuture ! (PRF GPl P1)); - VIMP Sg P2 => add_sya vox imper ; - VIMP Pl P2 => add_sya vox (imper+"те") ; - VIMP Sg P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF (GSg Masc) P3)) ; - VIMP Pl P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF GPl P3)) ; - - VSUB gn => add_sya vox (past ! (PSF gn)) ++ "бы" ; - - VIND (GSg _) (VPresent _) => nonExist ; - VIND GPl (VPresent P1) => nonExist ; - VIND GPl (VPresent P2) => nonExist ; - VIND GPl (VPresent P3) => nonExist ; - VIND gn (VFuture p) => add_sya vox (presentFuture ! (PRF gn p)) ; - VIND gn VPast => add_sya vox (past ! (PSF gn)) - } } ; - asp = Perfective - } ; - -----2 Proper names are a simple kind of noun phrases. --- -oper ProperName : Type = {s : Case => Str ; g : Gender ; anim : Animacy} ; --- --- mkCNProperName : CommNoun -> ProperName = \cn -> ---{s = \\c => cn.s! (NF Sg c); g=cn.g; anim = cn.anim }; --- - mkProperNameMasc : Str -> Animacy -> ProperName = \ivan, anim -> - { s = table { Nom => ivan ; - Gen => ivan + "а"; - Dat => ivan + "у"; - Acc => case anim of - { Animate => ivan + "а"; - Inanimate => ivan - }; - Inst => ivan + "ом"; - (Prepos _) => ivan + "е" } ; - g = Masc; anim = anim }; - - mkProperNameFem : Str -> Animacy -> ProperName = \masha, anim -> - { s = table { Nom => masha + "а"; - Gen => masha + "и"; - Dat => masha + "е"; - Acc => masha + "у"; - Inst => masha + "ей"; - (Prepos _) => masha + "е" }; - g = Fem ; anim = anim }; - -}; diff --git a/next-lib/src/russian/NounRus.gf b/next-lib/src/russian/NounRus.gf deleted file mode 100644 index f62e55cac..000000000 --- a/next-lib/src/russian/NounRus.gf +++ /dev/null @@ -1,258 +0,0 @@ ---# -path=.:../abstract:../common:../../prelude
-
-concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
-
- flags optimize=all_subs ; coding=utf8 ;
-
- lin
- DetCN kazhduj okhotnik = {
- s = \\c => case kazhduj.c of {
- Nom =>
- kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
- okhotnik.s ! NF kazhduj.n (extCase c) ;
- _ =>
- kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
- okhotnik.s ! NF kazhduj.n kazhduj.c };
- n = kazhduj.n ;
- p = P3 ;
- pron = False;
- g = case kazhduj.g of { PNoGen => (PGen okhotnik.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 (gennum (pgen2gen np.g) np.n))++ np.s ! pf ;
- n = np.n;
- p = np.p;
- g = np.g;
- anim = np.anim;
- pron = np.pron
- } ;
-
- PPartNP np v2 = {
- s = \\pf => np.s ! pf ++ v2.s ! VFORM Act VINF ;
- -- no participles in the Verbum type as they behave as adjectives
- n = np.n;
- p = np.p;
- g = np.g;
- anim = np.anim;
- pron = np.pron
- } ;
-
- AdvNP np adv = {
- s = \\pf => np.s ! pf ++ adv.s ;
- n = np.n;
- p = np.p;
- g = np.g;
- anim = np.anim;
- pron = np.pron
- } ;
-
--- 1.4 additions AR 17/6/2008
-
- DetNP kazhduj =
- let
- g = Neut ; ----
- anim = Inanimate ;
- in {
- s = \\c => kazhduj.s ! AF (extCase c) anim (gennum g kazhduj.n) ;
- n = kazhduj.n ;
- p = P3 ;
- pron = False;
- g = case kazhduj.g of { PNoGen => (PGen g); _ => kazhduj.g };
- anim = anim
- } ;
-
- DetQuantOrd quant num ord = {
- s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ++ ord.s!af ;
- n = num.n ;
- g = quant.g;
- c = quant.c
- } ;
-
- DetQuant quant num = {
- s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ;
- n = num.n ;
- g = quant.g;
- c = quant.c
- } ;
-{-
- DetArtOrd quant num ord = {
- s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ++ ord.s!af ;
- n = num.n ;
- g = quant.g;
- c = quant.c
- } ;
-
- DetArtCard quant num = {
- s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ;
- n = num.n ;
- g = quant.g;
- c = quant.c
- } ;
--}
--- MassDet = {s = \\_=>[] ; c=Nom; g = PNoGen; n = Sg} ;
-
- MassNP okhotnik = {
- s = \\c => okhotnik.s ! NF Sg (extCase c) ;
- n = Sg ;
- p = P3 ;
- pron = False;
- g = PGen okhotnik.g ;
- anim = okhotnik.anim
- } ;
-{-
- DetArtSg kazhduj okhotnik = {
- s = \\c => -- art case always Nom (AR 17/6/2008)
- kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g Sg) ++
- okhotnik.s ! Sg ! (extCase c) ;
- n = Sg ;
- p = P3 ;
- pron = False;
- g = case kazhduj.g of { PNoGen => (PGen okhotnik.g); _ => kazhduj.g };
- anim = okhotnik.anim
- } ;
-
- DetArtPl kazhduj okhotnik = {
- s = \\c => -- art case always Nom (AR 17/6/2008)
- kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g Pl) ++
- okhotnik.s ! Pl ! (extCase c) ;
- n = Pl ;
- p = P3 ;
- pron = False;
- g = case kazhduj.g of { PNoGen => (PGen okhotnik.g); _ => kazhduj.g };
- anim = okhotnik.anim
- } ;
--}
- PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gennum (genAF af) (numAF af) )); c=Nom; g = PNoGen} ;
-
- NumCard c = c ;
- NumSg = {s = \\_,_ => [] ; n = Sg} ;
- NumPl = {s = \\_,_ => [] ; n = Pl} ;
-
- OrdNumeral numeral = variants {} ; ---- TODO; needed to compile Constructors
- OrdDigits numeral = variants {} ; ---- TODO; needed to compile Constructors
----- OrdDigits TODO
- -- {s = \\ af => (uy_j_EndDecl (numeral.s ! caseAF af ! genAF af)).s!af} ;
-
- NumNumeral n = n ;
- NumDigits n = {s = \\_,_ => n.s ; n = n.n} ;
-
- AdNum adn num = {s = \\c,n => adn.s ++ num.s!c!n ; n = num.n} ;
-
- OrdSuperl a = {s = a.s!Posit};
-
- DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen };
- IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen };
-
- UseN noun = noun ;
- UseN2 noun = noun ;
-
--- 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 f x = {
- s = \\nf => case x.pron of {
- True => x.s ! (case nf of {NF n c => mkPronForm c No (Poss (gennum f.g n))}) ++ f.s ! nf ;
- False => f.s ! nf ++ f.c2.s ++
- x.s ! (case nf of {NF n c => mkPronForm f.c2.c Yes (Poss (gennum f.g n))})
- };
- g = f.g ;
- anim = f.anim
- } ;
-
--- Two-place functions add one argument place.
--- There application starts by filling the first place.
-
- ComplN3 f x = {
- s = \\nf => f.s ! nf ++ f.c2.s ++ x.s ! (PF f.c2.c Yes NonPoss) ;
- g = f.g ;
- anim = f.anim ;
- c2 = f.c3 ;
- } ;
-
- ---- AR 17/12/2008
- Use2N3 f = {
- s = f.s ;
- g = f.g ;
- anim = f.anim ;
- c2 = f.c2
- } ;
-
- ---- AR 17/12/2008
- Use3N3 f = {
- s = f.s ;
- g = f.g ;
- anim = f.anim ;
- c2 = f.c3
- } ;
-
-
--- The two main functions of adjective are in predication ("Иван - молод")
--- and in modification ("молодой человек"). Predication will be defined
--- later, in the chapter on verbs.
-
- AdjCN ap cn = {
- s = \\nf => ap.s ! case nf of {NF n c => AF c cn.anim (gennum cn.g n)} ++
- cn.s ! nf ;
- g = cn.g ;
- anim = cn.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 cn adv = {
- s = \\nf => cn.s ! nf ++ adv.s ;
- g = cn.g ;
- anim = cn.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 = \\nf => idea.s ! nf ++ x.s ;
- g = idea.g ;
- anim = idea.anim
- } ;
-
- RelCN idea x = {
- s = \\nf => idea.s ! nf ++ case nf of {NF n c => x.s ! (gennum idea.g n)!c!idea.anim} ;
- g = idea.g ;
- anim = idea.anim
- } ;
-
- ---- AR 17/12/2008
- ApposCN cn s = {
- s = \\nf => cn.s ! nf ++ s.s ! (case nf of {NF n c => PF c No NonPoss}) ;
- g = cn.g ;
- anim = cn.anim
- } ;
-
- RelNP np rel = {
- s = \\c => np.s ! c ++ rel.s ! (gennum (pgen2gen np.g) np.n) ! extCase c ! np.anim ;
- n = np.n ;
- p = np.p ;
- pron = np.pron ;
- g = np.g ;
- anim = np.anim ;
- nComp = np.nComp
- } ;
-
-
-}
-
diff --git a/next-lib/src/russian/NumeralRus.gf b/next-lib/src/russian/NumeralRus.gf deleted file mode 100644 index c1900358f..000000000 --- a/next-lib/src/russian/NumeralRus.gf +++ /dev/null @@ -1,143 +0,0 @@ ---# -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 } ; n = Pl}; ---- n TODO ; Size? AR 18/12/2007
-
-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} ;
--- {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
-
--- numerals as sequences of digits
-
- lincat
- Dig = TDigit ;
-
- lin
- IDig d = {s = d.s ; n = d.n} ;
-
- IIDig d i = {
- s = d.s ++ i.s ;
- n = Pl
- } ;
-
- D_0 = mkDig "0" ;
- D_1 = mk3Dig "1" "1" Sg ; ----
- D_2 = mkDig "2" ;
- D_3 = mkDig "3" ;
- D_4 = mkDig "4" ;
- D_5 = mkDig "5" ;
- D_6 = mkDig "6" ;
- D_7 = mkDig "7" ;
- D_8 = mkDig "8" ;
- D_9 = mkDig "9" ;
-
- oper
- mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
- mkDig : Str -> TDigit = \c -> mk2Dig c (c + "o") ;
-
- mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> {
- s = c ; ---- gender
- n = n
- } ;
-
- TDigit = {
- n : Number ;
- s : Str
- } ;
-
-}
-
diff --git a/next-lib/src/russian/ParadigmsRus.gf b/next-lib/src/russian/ParadigmsRus.gf deleted file mode 100644 index e3abbe191..000000000 --- a/next-lib/src/russian/ParadigmsRus.gf +++ /dev/null @@ -1,470 +0,0 @@ ---# -path=.:../abstract:../../prelude:../common - ---1 Russian Lexical Paradigms --- --- Janna Khegai 2003--2006 --- --- This is an API for the user of the resource grammar --- for adding lexical items. It gives functions for forming --- expressions of open categories: nouns, adjectives, verbs. --- --- Closed categories (determiners, pronouns, conjunctions) are --- accessed through the resource syntax API, $Structural.gf$. --- --- The main difference with $MorphoRus.gf$ is that the types --- referred to are compiled resource grammar types. We have moreover --- had the design principle of always having existing forms, rather --- than stems, as string arguments of the paradigms. --- --- The structure of functions for each word class $C$ is the following: --- first we give a handful of patterns that aim to cover all --- regular cases. Then we give a worst-case function $mkC$, which serves as an --- escape to construct the most irregular words of type $C$. --- --- The following modules are presupposed: - -resource ParadigmsRus = open - Prelude, - MorphoRus, - CatRus, - NounRus - in { - -flags coding=utf8 ; - ---2 Parameters --- --- To abstract over gender names, we define the following identifiers. - -oper - Gender : Type ; - masculine : Gender ; - feminine : Gender ; - neuter : Gender ; - --- To abstract over case names, we define the following. - Case : Type ; - - nominative : Case ; - genitive : Case ; - dative : Case ; - accusative : Case ; - instructive : Case ; - prepositional : Case ; - --- In some (written in English) textbooks accusative case --- is put on the second place. However, we follow the case order --- standard for Russian textbooks. - --- To abstract over number names, we define the following. - Number : Type ; - - singular : Number ; - plural : Number ; - ---2 Nouns - - Animacy: Type ; - - animate: Animacy; - inanimate: Animacy; - --- Indeclinabe nouns: "кофе", "пальто", "ВУЗ". - - mkIndeclinableNoun: Str -> Gender -> Animacy -> N ; - - mkN : overload { - --- The regular function captures the variants for some common noun endings. - - mkN : (karta : Str) -> N ; - mkN : (tigr : Str) -> Animacy -> N ; - --- Worst case - give six singular forms: --- Nominative, Genetive, Dative, Accusative, Instructive and Prepositional; --- and the prepositional form after в and на, and --- the corresponding six plural forms and the gender and animacy. - - mkN : (nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg, nomPl, genPl, datPl, accPl, instPl, preposPl : Str) -> Gender -> Animacy -> N - } ; - - mkN2 : overload { - --- Genitive with no preposition. - - mkN2 : N -> N2 ; - mkN2 : N -> Prep -> N2 ; - } ; - - - mkN3 : N -> Prep -> Prep -> N3 ; - --- Proper names. - - mkPN : Str -> Gender -> Animacy -> PN ; -- "Иван", "Маша" - nounPN : N -> PN ; - - ---2 Adjectives - --- Non-comparison (only positive degree) one-place adjectives need 28 (4 by 7) --- forms in the worst case: - - --- (Masculine | Feminine | Neutral | Plural) * - --- (Nominative | Genitive | Dative | Accusative Inanimate | Accusative Animate | --- Instructive | Prepositional) - - --- Notice that 4 short forms, which exist for some adjectives are not included --- in the current description, otherwise there would be 32 forms for --- positive degree. - - mkA : overload { - --- Regular and invariant adjectives with regular comparative. - - mkA : (positive : Str) -> A ; - --- Adjectives with irregular comparative. - - mkA : (positive, comparative : Str) -> A ; - } ; - --- Two-place adjectives need a preposition and a case as extra arguments. - - mkA2 : A -> Str -> Case -> A2 ; -- "делим на" - --- Comparison adjectives need a positive adjective --- (28 forms without short forms). --- Taking only one comparative form (non-syntactic) and --- only one superlative form (syntactic) we can produce the --- comparison adjective with only one extra argument - --- non-syntactic comparative form. --- Syntactic forms are based on the positive forms. - - --- mkADeg : A -> Str -> ADeg ; - --- On top level, there are adjectival phrases. The most common case is --- just to use a one-place adjective. --- ap : A -> IsPostfixAdj -> AP ; - ---2 Adverbs - --- Adverbs are not inflected. - - mkAdv : Str -> Adv ; - ---2 Verbs --- --- In our lexicon description ("Verbum") there are 62 forms: --- 2 (Voice) by { 1 (infinitive) + [2(number) by 3 (person)](imperative) + --- [ [2(Number) by 3(Person)](present) + [2(Number) by 3(Person)](future) + --- 4(GenNum)(past) ](indicative)+ 4 (GenNum) (subjunctive) } --- Participles (Present and Past) and Gerund forms are not included, --- since they fuction more like Adjectives and Adverbs correspondingly --- rather than verbs. Aspect is regarded as an inherent parameter of a verb. --- Notice, that some forms are never used for some verbs. - -Voice: Type; -Aspect: Type; -Bool: Type; -Conjugation: Type ; - -first: Conjugation; -- "гуля-Ешь, гуля-Ем" -firstE: Conjugation; -- Verbs with vowel "ё": "даёшь" (give), "пьёшь" (drink) -second: Conjugation; -- "вид-Ишь, вид-Им" -mixed: Conjugation; -- "хоч-Ешь - хот-Им" -dolzhen: Conjugation; -- irregular -foreign: Conjugation; -- foreign words which are used in Russian, +++ MG_UR: added +++ - - -true: Bool; -false: Bool; - -active: Voice ; -passive: Voice ; -imperfective: Aspect; -perfective: Aspect ; - - --- The worst case need 6 forms of the present tense in indicative mood --- ("я бегу", "ты бежишь", "он бежит", "мы бежим", "вы бежите", "они бегут"), --- a past form (singular, masculine: "я бежал"), an imperative form --- (singular, second person: "беги"), an infinitive ("бежать"). --- Inherent aspect should also be specified. - --- mkVerbum : Aspect -> (presentSgP1,presentSgP2,presentSgP3, - mkV : Aspect -> (presentSgP1,presentSgP2,presentSgP3, - presentPlP1,presentPlP2,presentPlP3, - pastSgMasculine,imperative,infinitive: Str) -> V ; - --- Common conjugation patterns are two conjugations: --- first - verbs ending with "-ать/-ять" and second - "-ить/-еть". --- Instead of 6 present forms of the worst case, we only need --- a present stem and one ending (singular, first person): --- "я люб-лю", "я жд-у", etc. To determine where the border --- between stem and ending lies it is sufficient to compare --- first person from with second person form: --- "я люб-лю", "ты люб-ишь". Stems shoud be the same. --- So the definition for verb "любить" looks like: --- regV Imperfective Second "люб" "лю" "любил" "люби" "любить"; - - regV :Aspect -> Conjugation -> (stemPresentSgP1,endingPresentSgP1, - pastSgP1,imperative,infinitive : Str) -> V ; - - --- Two-place verbs, and the special case with direct object. Notice that --- a particle can be included in a $V$. - - mkV2 : V -> Str -> Case -> V2 ; -- "войти в дом"; "в", accusative - mkV3 : V -> Str -> Str -> Case -> Case -> V3 ; -- "сложить письмо в конверт" - dirV2 : V -> V2 ; -- "видеть", "любить" - tvDirDir : V -> V3 ; - --- The definitions should not bother the user of the API. So they are --- hidden from the document. ---. - Gender = MorphoRus.Gender ; - Case = MorphoRus.Case ; - Number = MorphoRus.Number ; - Animacy = MorphoRus.Animacy; - Aspect = MorphoRus.Aspect; - Voice = MorphoRus.Voice ; - --Tense = Tense ; - Bool = Prelude.Bool ; - Conjugation = MorphoRus.Conjugation; -first = First ; -firstE = FirstE ; -second = Second ; -secondA = SecondA ; -mixed = Mixed ; -dolzhen = Dolzhen; -foreign = Foreign; -- +++ MG_UR: added +++ - - true = True; - false = False ; - masculine = Masc ; - feminine = Fem ; - neuter = Neut ; - nominative = Nom ; - accusative = Acc ; - dative = Dat ; - genitive = Gen ; - instructive = Inst ; - prepositional = Prepos PrepOther ; -- FIXME: not correct for v and na - singular = Sg ; - plural = Pl ; - animate = Animate ; - inanimate = Inanimate ; - active = Act ; - passive = Pass ; - imperfective = Imperfective ; - perfective = Perfective ; - -- present = Present ; - --past = Past ; - -- Degree = Pos | Comp | Super ; - -- Person = P1 | P2 | P3 ; - -- AfterPrep = Yes | No ; - -- Possessive = NonPoss | Poss GenNum ; - --- Noun definitions - - mkN = overload { - mkN : (karta : Str) -> N = mk1N ; - mkN : (tigr : Str) -> Animacy -> N = \nom, anim -> case anim of { Animate => nAnimate (mk1N nom) ; - Inanimate => mk1N nom } ; - mkN : (nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg, - nomPl, genPl, datPl, accPl, instPl, preposPl : Str) -> Gender -> Animacy -> N = mkWorstN - } ; - - mkIndeclinableNoun = \s,g, anim -> - { - s = table { NF _ _ => s } ; - g = g ; - anim = anim - } ** {lock_N = <>}; - - oper mkWorstN : (nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg, - nomPl, genPl, datPl, accPl, instPl, preposPl : Str) -> Gender -> Animacy -> N - = \nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg, - nomPl, genPl, datPl, accPl, instPl, preposPl, g, anim -> - { - s = table { - NF Sg Nom => nomSg ; - NF Sg Gen => genSg ; - NF Sg Dat => datSg ; - NF Sg Acc => accSg ; - NF Sg Inst => instSg ; - NF Sg (Prepos PrepOther) => preposSg ; - NF Sg (Prepos PrepVNa) => prepos2Sg ; - NF Pl Nom => nomPl ; - NF Pl Gen => genPl ; - NF Pl Dat => datPl ; - NF Pl Acc => accPl ; - NF Pl Inst => instPl ; - NF Pl (Prepos _) => preposPl - } ; - g = g ; - anim = anim - } ** {lock_N = <>} ; - - oper mk1N : Str -> N = \x -> - case x of { - stem+"онок" => nDecl10Hard stem ; - stem+"ёнок" => nDecl10Soft stem ; --- stem+"aнин" => nDecl11 stem ; - stem@(_+"и")+"й" => nDecl7Masc stem; - stem@(_+"и")+"я" => nDecl7Fem stem; - stem@(_+"и")+"е" => nDecl7Neut stem; - stem+"ее" => nAdj { s = (mk1A (stem+"ий")).s!Posit } Neut; - stem+"ое" => nAdj { s = (mk1A (stem+(iAfter stem)+"й")).s!Posit } Neut; - stem+"мя" => nDecl9 stem ; - stem@(_+("а"|"е"|"ё"|"о"|"у"|"ы"|"э"|"ю"|"я"))+"й" => nDecl6Masc stem ; - stem@(_+("а"|"е"|"ё"|"о"|"у"|"ы"|"э"|"ю"|"я"))+"е" => nDecl6Neut stem ; - stem@(_+("а"|"е"|"ё"|"о"|"у"|"ы"|"э"|"ю"|"я"))+"я" => nDecl6Fem stem ; - stem@(_+("ч"|"щ"|"ш"|"ж"|"п"|"эн"|"м"|"ф"))+"ь" => nDecl8 stem ; - stem@(_+("д"|"т"|"ст"|"с"|"в"|"б"))+"ь" => nDecl8 stem ; - stem@(_+"ш"|"ж"|"ч"|"щ"|"ц")+"е" => nRegHardNeut stem; - stem+"е" => nRegSoftNeut stem ; - stem+"я" => nRegSoftFem stem ; - stem+"ь" => nRegSoftMasc stem ; - stem+"о" => nRegHardNeut stem ; - stem+"а" => nRegHardFem stem ; - stem => nRegHardMasc stem - } ** {lock_N = <>} ; - - - --- An individual-valued function is a common noun together with the --- preposition prefixed to its argument ("клZ+ о' дома"). --- The situation is analogous to two-place adjectives and transitive verbs. --- --- We allow the genitive construction to be used as a variant of --- all function applications. It would definitely be too restrictive only --- to allow it when the required case is genitive. We don't know if there --- are counterexamples to the liberal choice we've made. - - oper mkN2 = overload { - mkN2 : N -> N2 = \n -> mkFun n nullPrep ; - mkN2 : N -> Prep -> N2 = mkFun; - } ; - - mkFun : N -> Prep -> N2 = \f,p -> UseN f ** {c2 = p ; lock_N2 = <>} ; - - nullPrep : Prep = {s = []; c= Gen; lock_Prep=<>} ; - - mkN3 f p2 p3 = (UseN f) ** {c2 = p2; c3 = p3; lock_N3 = <>} ; - - - mkPN = \ivan, g, anim -> - case g of { - Masc => mkProperNameMasc ivan anim ; - _ => mkProperNameFem ivan anim - } ** {lock_PN =<>}; - nounPN n = {s=\\c => n.s! NF Sg c; anim=n.anim; g=n.g; lock_PN=<>}; - --- On the top level, it is maybe $CN$ that is used rather than $N$, and --- $NP$ rather than $PN$. - - makeCN : N -> CN ; - makeNP : Str -> Gender -> Animacy -> NP ; - - - makeCN = UseN; - - makeNP = \x,y,z -> UsePN (mkPN x y z) ; - - mkA = overload { - mkA : (positive : Str) -> A = mk1A ; - mkA : (positive, comparative : Str) -> A = mk2A; - } ; - - mk1A : Str -> A = \positive -> - let stem = Predef.tk 2 positive in mk2A positive (stem+"ее") ; - - mk2A : Str -> Str -> A = \positive, comparative -> - case positive of { - stem+"ый" => mkAdjDeg (aRegHardStemStress stem) comparative ; - stem+"ой" => mkAdjDeg (aRegHardEndStress stem) comparative ; - stem@(_+("г"|"к"|"х"))+"ий" => mkAdjDeg (aRegHardStemStress stem) comparative; - stem@(_+("ш"|"ж"|"ч"|"щ"))+"ий" => mkAdjDeg (aRegHardStemStress stem) comparative; - stem+"ий" => mkAdjDeg (aRegSoft stem) comparative ; - stem => mkAdjDeg (adjInvar stem) comparative - } ; - - -- khaki, mini, hindi, netto - adjInvar : Str -> Adjective = \stem -> { s = \\_ => stem } ; - - oper mkAdjDeg: Adjective -> Str -> A = \adj, s -> - { s = table - { - Posit => adj.s ; - Compar => \\af => s ; - Superl => \\af => samuj.s !af ++ adj.s ! af - } - } ** {lock_A = <>}; - - - mkA2 a p c= a ** {c2 = {s=p; c=c}; lock_A2 = <>}; --- mkADeg a s = mkAdjDeg a s ** {lock_ADeg = <>}; -- defined in morpho.RusU - --- ap a p = mkAdjPhrase a p ** {lock_AP = <>}; -- defined in syntax module - - mkAdv x = ss x ** {lock_Adv = <>} ; - --- Verb definitions - --- mkVerbum = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3, - mkV = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3, - sgMascPast, imperSgP2, inf -> case asp of { - Perfective => - mkVerbPerfective inf imperSgP2 - (presentConj sgP1 sgP2 sgP3 plP1 plP2 plP3) (pastConj sgMascPast) - ** { lock_V=<> }; - Imperfective => - mkVerbImperfective inf imperSgP2 - (presentConj sgP1 sgP2 sgP3 plP1 plP2 plP3) (pastConj sgMascPast) - ** { lock_V=<> } - }; - - oper presentConj: (_,_,_,_,_,_: Str) -> PresentVerb = - \sgP1, sgP2, sgP3, plP1, plP2, plP3 -> - table { - PRF (GSg _) P1 => sgP1 ; - PRF (GSg _) P2 => sgP2 ; - PRF (GSg _) P3 => sgP3 ; - PRF APl P1 => plP1 ; - PRF APl P2 => plP2 ; - PRF APl P3 => plP3 - }; - - regV a b c d e f g = verbDecl a b c d e f g ** {lock_V = <>} ; - -- defined in morpho.RusU.gf -{- - mkV a b = extVerb a b ** {lock_V = <>}; -- defined in types.RusU.gf - - mkPresentV = \aller, vox -> - { s = table { - VFin gn p => aller.s ! VFORM vox (VIND (VPresent (numGNum gn) p)) ; - VImper n p => aller.s ! VFORM vox (VIMP n p) ; - VInf => aller.s ! VFORM vox VINF ; - VSubj gn => aller.s ! VFORM vox (VSUB gn) - }; t = Present ; a = aller.asp ; w = vox ; lock_V = <>} ; --} - mkV2 v p cas = v ** {c2 = {s=p; c=cas}; lock_V2 = <>}; - dirV2 v = mkV2 v [] Acc; - - - tvDirDir v = mkV3 v "" "" Acc Dat; - --- *Ditransitive verbs* are verbs with three argument places. --- We treat so far only the rule in which the ditransitive --- verb takes both complements to form a verb phrase. - - mkV3 v s1 s2 c1 c2 = v ** {c2 = {s=s1; c=c1}; c3={s=s2; c=c2}; lock_V3 = <>}; - -} ; - diff --git a/next-lib/src/russian/PhraseRus.gf b/next-lib/src/russian/PhraseRus.gf deleted file mode 100644 index 0cf86c881..000000000 --- a/next-lib/src/russian/PhraseRus.gf +++ /dev/null @@ -1,27 +0,0 @@ ---# -path=.:../abstract:../common:../../prelude - -concrete PhraseRus of Phrase = CatRus ** open Prelude, ResRus in { - - flags coding=utf8 ; - 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} ; - UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc! Sg} ; ---- ?? AR - - 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 ! GSg Masc ! P3} ; - UttAdv adv = adv ; - - NoPConj = {s = []} ; - PConjConj conj = ss conj.s2 ; - - NoVoc = {s = []} ; - VocNP np = {s = "," ++ np.s ! PF Nom No NonPoss} ; - -} diff --git a/next-lib/src/russian/QuestionRus.gf b/next-lib/src/russian/QuestionRus.gf deleted file mode 100644 index e3506aef6..000000000 --- a/next-lib/src/russian/QuestionRus.gf +++ /dev/null @@ -1,72 +0,0 @@ ---# -path=.:../abstract:../common:../../prelude - -concrete QuestionRus of Question = CatRus ** open ResRus, Prelude in { - - flags optimize=all_subs ; coding=utf8 ; - - 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 okhotnik = - {s = \\pf => case kakoj.c of { - Nom => - kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++ - okhotnik.s ! NF kakoj.n (extCase pf) ; - _ => - kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++ - okhotnik.s ! NF kakoj.n kakoj.c }; - n = kakoj.n ; - p = P3 ; - pron = False; - g = kakoj.g ; - anim = okhotnik.anim - } ; - --- 1.4 additions 17/6/2008 by AR - - IdetIP kakoj = let anim = Inanimate in - {s = \\pf => kakoj.s ! AF (extCase pf) anim (pgNum kakoj.g kakoj.n) ; - n = kakoj.n ; - p = P3 ; - pron = False; - g = kakoj.g ; - anim = anim - } ; - - IdetQuant kakoj pyat = -- okhotnik = - {s = \\af => - kakoj.s ! pyat.n ! af ++ - pyat.s ! caseAF af ! genAF af ; - n = pyat.n ; - g = kakoj.g ; - c = kakoj.c - } ; - - CompIAdv a = a ; - CompIP ip = {s = ip.s ! PF Nom No NonPoss} ; -} diff --git a/next-lib/src/russian/RelativeRus.gf b/next-lib/src/russian/RelativeRus.gf deleted file mode 100644 index 51088de57..000000000 --- a/next-lib/src/russian/RelativeRus.gf +++ /dev/null @@ -1,37 +0,0 @@ ---# -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 = numGenNum 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 = numGenNum 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 )} ;
-}
-
diff --git a/next-lib/src/russian/ResRus.gf b/next-lib/src/russian/ResRus.gf deleted file mode 100644 index 477c96cc8..000000000 --- a/next-lib/src/russian/ResRus.gf +++ /dev/null @@ -1,385 +0,0 @@ ---# -path=.:../abstract:../common:../../prelude - ---1 Russian auxiliary operations. - --- This module contains operations that are needed to make the --- resource syntax work. To define everything that is needed to --- implement $Test$, it moreover contains regular lexical --- patterns needed for $Lex$. - -resource ResRus = ParamX ** open Prelude in { - -flags coding=utf8 ; optimize=all ; - ---2 Enumerated parameter types --- --- These types are the ones found in school grammars. --- Their parameter values are atomic. - --- Some parameters, such as $Number$, are inherited from $ParamX$. -param - Gender = Masc | Fem | Neut ; - Case = Nom | Gen | Dat | Acc | Inst | Prepos PrepKind ; - PrepKind = PrepOther | PrepVNa; - Animacy = Animate | Inanimate ; - Voice = Act | Pass ; - Aspect = Imperfective | Perfective ; - RusTense = Present | PastRus | Future ; --- Degree = Pos | Comp | Super ; - AfterPrep = Yes | No ; - Possessive = NonPoss | Poss GenNum ; --- Anteriority = Simul | Anter ; - ClForm = ClIndic RusTense Anteriority | ClCondit | ClInfinit | ClImper; - -- "naked infinitive" clauses - --- A number of Russian nouns have common gender. They can --- denote both males and females: "умница" (a clever person), "инженер" (an engineer). --- We overlook this phenomenon for now. - --- The AfterPrep parameter is introduced in order to describe --- the variations of the third person personal pronoun forms --- depending on whether they come after a preposition or not. - --- Declination forms depend on Case, Animacy , Gender: --- "большие дома" - "больших домов" (big houses - big houses'), --- Animacy plays role only in the Accusative case (Masc Sg and Plural forms): --- Accusative Animate = Genetive, Accusaive Inanimate = Nominative --- "я люблю большие дома-"я люблю больших мужчин" --- (I love big houses - I love big men); --- and on Number: "большой дом - "большие дома" --- (a big house - big houses). --- The plural never makes a gender distinction. - - GenNum = GSg Gender | GPl ; - - -- Coercions between the compound gen-num type and gender and number: -oper - gennum : Gender -> Number -> GenNum = \g,n -> - case n of { - Sg => GSg g ; - Pl => GPl - } ; - - numGenNum : GenNum -> Number = \gn -> - case gn of { - GSg _ => Sg ; - GPl => Pl - } ; - - --- The Possessive parameter is introduced in order to describe --- the possessives of personal pronouns, which are used in the --- Genetive constructions like "моя мама" (my mother) instead of --- "мама моя" (the mother of mine). - ---2 For $Noun$ --- Nouns decline according to number and case. --- For the sake of shorter description these parameters are --- combined in the type SubstForm. -param - NForm = NF Number Case ; - - --- Real parameter types (i.e. ones on which words and phrases depend) --- are mostly hierarchical. The alternative would be cross-products of --- simple parameters, but this would usually overgenerate. - --- However, we use the cross-products in complex cases --- (for example, aspect and tense parameter in the verb description) --- where the relationship between the parameters are non-trivial --- even though we aware that some combinations do not exist --- (for example, present perfective does not exist, but removing --- this combination would lead to having different descriptions --- for perfective and imperfective verbs, which we do not want for the --- sake of uniformity). - -param PronForm = PF Case AfterPrep Possessive; - -oper Pronoun = { s : PronForm => Str ; n : Number ; p : Person ; - g: PronGen ; pron: Bool} ; - --- Gender is not morphologically determined for first --- and second person pronouns. - -param PronGen = PGen Gender | PNoGen ; - --- The following coercion is useful: - -oper - pgen2gen : PronGen -> Gender = \p -> case p of { - PGen g => g ; - PNoGen => Masc ---- variants {Masc ; Fem} --- the best we can do for ya, tu - } ; - - -oper - extCase: PronForm -> Case = \pf -> case pf of { PF c _ _ => c } ; - - mkPronForm: Case -> AfterPrep -> Possessive -> PronForm = - \c,n,p -> PF c n p ; - - CommNoun = {s : NForm => Str ; g : Gender ; anim : Animacy } ; - - NounPhrase : Type = { s : PronForm => Str ; n : Number ; - p : Person ; g: PronGen ; anim : Animacy ; pron: Bool} ; - - mkNP : Number -> CommNoun -> NounPhrase = \n,chelovek -> - {s = \\cas => chelovek.s ! NF n (extCase cas) ; - n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ; - anim = chelovek.anim - } ; - - det2NounPhrase : Adjective -> NounPhrase = \eto -> - {s = \\pf => eto.s ! (AF (extCase pf) Inanimate (GSg Neut)); n = Sg ; g = PGen Neut ; pron = False ; p = P3 ; anim = Inanimate } ; - - - - pron2NounPhraseNum : Pronoun -> Animacy -> Number -> NounPhrase = \ona, anim, num -> - {s = ona.s ; n = num ; g = ona.g ; - pron = ona.pron; p = ona.p ; anim = anim } ; - - --- Agreement of $NP$ is a record. We'll add $Gender$ later. --- oper Agr = {n : Number ; p : Person} ; - - -----2 For $Verb$ - --- Mood is the main verb classification parameter. --- The verb mood can be infinitive, subjunctive, imperative, and indicative. - --- Note: subjunctive mood is analytical, i.e. formed from the past form of the --- indicative mood plus the particle "ли". That is why they have the same GenNum --- parameter. We choose to keep the "redundant" form in order to indicate --- the presence of the subjunctive mood in Russian verbs. - --- Aspect and Voice parameters are present in every mood, so Voice is put --- before the mood parameter in verb form description the hierachy. --- Moreover Aspect is regarded as an inherent parameter of a verb entry. --- The primary reason for that is that one imperfective form can have several --- perfective forms: "ломать" - "сломать" - "поломать" (to break). --- Besides, the perfective form could be formed from imperfective --- by prefixation, but also by taking a completely different stem: --- "говорить"-"сказать" (to say). In the later case it is even natural to --- regard them as different verb entries. --- Another reason is that looking at the Aspect as an inherent verb parameter --- seem to be customary in other similar projects: --- http://starling.rinet.ru/morph.htm - --- Note: Of course, the whole inflection table has many redundancies --- in a sense that many verbs do not have all grammatically possible --- forms. For example, passive does not exist for the verb --- "любить" (to love), but exists for the verb "ломаться" (to break). --- In present tense verbs do not conjugate according to Genus, --- so parameter GenNum instead Number is used for the sake of --- using for example as adjective in predication. - --- Depending on the tense verbs conjugate according to combinations --- of gender, person and number of the verb objects. --- Participles (Present and PastRus) and Gerund forms are not included in the --- current description. This is the verb type used in the lexicon: - -oper Verbum : Type = { s: VerbForm => Str ; asp : Aspect }; - -param - - VerbForm = VFORM Voice VerbConj ; - VerbConj = VIND GenNum VTense | VIMP Number Person | VINF | VSUB GenNum ; - VTense = VPresent Person | VPast | VFuture Person ; - -oper - getVTense : RusTense -> Person -> VTense= \t,p -> - case t of { Present => VPresent p ; PastRus => VPast; Future => VFuture p } ; - - getTense : Tense -> RusTense= \t -> - case t of { Pres => Present - ; Fut => Future --# notpresent - ; _ => PastRus --# notpresent - } ; - - - getVoice: VerbForm -> Voice = \vf -> - case vf of { - VFORM Act _ => Act; - VFORM Pass _ => Pass - }; -oper sebya : Case => Str =table { -Nom => ""; -Gen => "себя"; -Dat=> "себе"; -Acc => "себя"; -Inst => "собой"; -Prep =>"себе"}; - - Verb : Type = {s : ClForm => GenNum => Person => Str ; asp : Aspect ; w: Voice} ; --- Verb phrases are discontinuous: the parts of a verb phrase are --- (s) an inflected verb, (s2) verb adverbials (not negation though), and --- (s3) complement. This discontinuity is needed in sentence formation --- to account for word order variations. - - VerbPhrase : Type = Verb ** {s2: Str; s3 : Gender => Number => Str ; - negBefore: Bool} ; - - --- This is one instance of Gazdar's *slash categories*, corresponding to his --- $S/NP$. --- We cannot have - nor would we want to have - a productive slash-category former. --- Perhaps a handful more will be needed. --- --- Notice that the slash category has the same relation to sentences as --- transitive verbs have to verbs: it's like a *sentence taking a complement*. - - SlashNounPhrase = Clause ** {c2 : Complement} ; - Clause = {s : Polarity => ClForm => Str} ; - --- This is the traditional $S -> NP VP$ rule. - - predVerbPhrase : NounPhrase -> VerbPhrase -> SlashNounPhrase = - \Ya, tebyaNeVizhu -> { - s = \\b,clf => let { ya = Ya.s ! (mkPronForm Nom No NonPoss); - khorosho = tebyaNeVizhu.s2; - vizhu = tebyaNeVizhu.s ! clf !(gennum (pgen2gen Ya.g) Ya.n)! Ya.p; - tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.g) ! Ya.n - } - in ya ++ khorosho ++ vizhu ++ tebya; - c2 = {s = ""; c = Nom} - } ; - --- Questions are either direct ("Ты счастлив?") --- or indirect ("Потом он спросил счастлив ли ты"). - -param - QuestForm = DirQ | IndirQ ; - ----- The order of sentence is needed already in $VP$. --- --- Order = ODir | OQuest ; - -oper - getActVerbForm : ClForm -> Gender -> Number -> Person -> VerbForm = \clf,g,n, p -> case clf of - { ClIndic Future _ => VFORM Act (VIND (gennum g n) (VFuture p)); - ClIndic PastRus _ => VFORM Act (VIND (gennum g n) VPast); - ClIndic Present _ => VFORM Act (VIND (gennum g n) (VPresent p)); - ClCondit => VFORM Act (VSUB (gennum g n)); - ClInfinit => VFORM Act VINF ; - ClImper => VFORM Act (VIMP n p) - }; - - getPassVerbForm : ClForm -> Gender -> Number -> Person -> VerbForm = \clf,g,n, p -> case clf of - { ClIndic Future _ => VFORM Pass (VIND (gennum g n) (VFuture p)); - ClIndic PastRus _ => VFORM Pass (VIND (gennum g n) VPast); - ClIndic Present _ => VFORM Pass (VIND (gennum g n) (VPresent p)); - ClCondit => VFORM Pass (VSUB (gennum g n)); - ClInfinit => VFORM Pass VINF ; - ClImper => VFORM Pass (VIMP n p) - }; - - ---2 For $Adjective$ - --- The short form is only inflected in gender and number. --- Fixing this would require changing the Degree type. -param - AdjForm = AF Case Animacy GenNum | AFShort GenNum | AdvF; - -oper - Complement = {s : Str ; c : Case} ; - -oper Refl ={s: Case => Str}; -oper sam: Refl= -{s = table{ - Nom => "сам"; - Gen => "себя"; - Dat => "себе"; - Acc => "себя"; - Inst => "собой"; - Prepos _ => "себе" - } -}; - - pgNum : PronGen -> Number -> GenNum = \g,n -> - case n of - { Sg => GSg (pgen2gen g) ; -- assuming pronoun "I" is a male - Pl => GPl - } ; - -- _ => variants {GSg Masc ; GSg Fem} } ; - -- "variants" version cause "no term variants" error during linearization - -oper genGNum : GenNum -> Gender = \gn -> - case gn of { GSg Fem => Fem; GSg Masc => Masc; _ => Neut } ; - -oper numAF: AdjForm -> Number = \af -> - case af of { AdvF => Sg; AFShort gn => numGenNum gn; AF _ _ gn => (numGenNum gn) } ; - -oper genAF: AdjForm -> Gender = \af -> - case af of { AdvF => Neut; AFShort gn => genGNum gn; AF _ _ gn => (genGNum gn) } ; - -oper caseAF: AdjForm -> Case = \af -> - case af of { AdvF => Nom; AFShort _ => Nom; AF c _ _ => c } ; - --- The Degree parameter should also be more complex, since most Russian --- adjectives have two comparative forms: --- attributive (syntactic (compound), declinable) - --- "более высокий" (corresponds to "more high") --- and predicative (indeclinable)- "выше" (higher) and more than one --- superlative forms: "самый высокий" (corresponds to "the most high") - --- "высочайший" (the highest). - --- Even one more parameter independent of the degree can be added, --- since Russian adjectives in the positive degree also have two forms: --- long (attributive and predicative) - "высокий" (high) and short (predicative) - "высок" --- although this parameter will not be exactly orthogonal to the --- degree parameter. --- Short form has no case declension, so in principle --- it can be considered as an additional case. - --- Note: although the predicative usage of the long --- form is perfectly grammatical, it can have a slightly different meaning --- compared to the short form. --- For example: "он - больной" (long, predicative) vs. --- "он - болен" (short, predicative). - ---3 Adjective phrases --- --- An adjective phrase may contain a complement, e.g. "моложе Риты". --- Then it is used as postfix in modification, e.g. "человек, моложе Риты". - - IsPostfixAdj = Bool ; - - --- Simple adjectives are not postfix: - --- Adjective type includes both non-degree adjective classes: --- possesive ("мамин"[mother's], "лисий" [fox'es]) --- and relative ("русский" [Russian]) adjectives. - - Adjective : Type = {s : AdjForm => Str} ; - --- A special type of adjectives just having positive forms --- (for semantic reasons) is useful, e.g. "финский". - - AdjPhrase = Adjective ** {p : IsPostfixAdj} ; - - - mkAdjPhrase : Adjective -> IsPostfixAdj -> AdjPhrase = \novuj ,p -> novuj ** {p = p} ; - -----2 For $Relative$ --- --- RAgr = RNoAg | RAg {n : Number ; p : Person} ; --- RCase = RPrep | RC Case ; --- ---2 For $Numeral$ - -param DForm = unit | teen | ten | hund ; -param Place = attr | indep ; -param Size = nom | sgg | plg ; ---param Gend = masc | fem | neut ; -oper mille : Size => Str = table { - nom => "тысяча" ; - sgg => "тысячи" ; - _ => "тысяч"} ; - -oper gg : Str -> Gender => Str = \s -> table {_ => s} ; - --- CardOrd = NCard | NOrd ; -} diff --git a/next-lib/src/russian/SentenceRus.gf b/next-lib/src/russian/SentenceRus.gf deleted file mode 100644 index 79d691ccd..000000000 --- a/next-lib/src/russian/SentenceRus.gf +++ /dev/null @@ -1,138 +0,0 @@ - ---# -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; - khorosho = tebyaNeVizhu.s2 ; - tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.g) ! Ya.n - } - in - if_then_else Str tebyaNeVizhu.negBefore - (ya ++ ne ++ vizhu ++ tebya ++ khorosho) - (ya ++ vizhu ++ ne ++ tebya ++ khorosho) - } ; - - - PredSCVP sc vp = { s = \\b,clf => - let { - ne = case b of {Pos=>""; Neg=>"не"}; - vizhu = vp.s ! clf ! (GSg Neut)! P3; - tebya = vp.s3 ! Neut ! Sg - } - in - if_then_else Str vp.negBefore - (sc.s ++ ne ++ vizhu ++ tebya) - (sc.s ++ vizhu ++ ne ++ tebya) - } ; - - - ---- AR 17/12/2008 - SlashVP 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; - khorosho = tebyaNeVizhu.s2 ; - tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.g) ! Ya.n - } - in - if_then_else Str tebyaNeVizhu.negBefore - (ya ++ ne ++ vizhu ++ tebya ++ khorosho) - (ya ++ vizhu ++ ne ++ tebya ++ khorosho) ; - s2=tebyaNeVizhu.s2 ; - c=tebyaNeVizhu.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} ; - - --- AR 3/11/2007 - SlashVS ivan vidit tuUlubaeshsya = { - s=\\b,clf => ivan.s ! PF Nom No NonPoss ++ - vidit.s! (getActVerbForm clf (pgen2gen ivan.g) ivan.n ivan.p) ++ - [", что"] ++ tuUlubaeshsya.s ; - s2=tuUlubaeshsya.s2; - c=tuUlubaeshsya.c - } ; - - - - ImpVP inf = {s = \\pol, g,n => - let - dont = case pol of { - Neg => "не" ; - _ => [] - } - in - dont ++ inf.s ! ClImper ! gennum g n ! P2 ++ - 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.s2 ++ vp.s!ClInfinit!(GSg Masc) !P3 ++ vp.s3!Masc!Sg} ; - - UseCl t p cl = {s = case t.t of { - Cond => cl.s! p.p ! ClCondit ; --# notpresent - Pres => cl.s! p.p ! ClIndic Present t.a ---- AR work-around 13/12/2007 - ; --# notpresent - _ => cl.s! p.p ! ClIndic (getTense t.t) t.a --# notpresent - } - }; - - UseQCl t p qcl= {s = case t.t of { - Cond => qcl.s! p.p ! ClCondit ; --# notpresent - Pres => qcl.s! p.p ! ClIndic Present t.a - ; --# notpresent - _ => qcl.s!p.p! ClIndic (getTense t.t) t.a --# notpresent - }}; - - UseRCl t p rcl ={s = \\gn,c,anim => case t.t of { - Cond => [", "] ++ rcl.s! p.p ! ClCondit ! gn !c !anim ; --# notpresent - Pres => [", "] ++ rcl.s! p.p ! ClIndic Present t.a !gn !c !anim - ; --# notpresent - _ => [", "] ++ rcl.s! p.p ! ClIndic (getTense t.t) t.a !gn !c !anim --# notpresent - }}; - - UseSlash t p cl = { - s = case t.t of { - Cond => cl.s! p.p ! ClCondit ; --# notpresent - Pres => cl.s! p.p ! ClIndic Present t.a - ; --# notpresent - _ => cl.s! p.p ! ClIndic (getTense t.t) t.a --# notpresent - } ; - s2 = cl.s2 ; - c = cl.c - }; - - - AdvS a s = {s = a.s ++ "," ++ s.s} ; ---- AR 19/6/2007 - - ---- AR 17/12/2008 - RelS s r = {s = s.s ++ "," ++ r.s ! gennum Neut Sg ! Nom ! Inanimate} ; ---- ? - -} - diff --git a/next-lib/src/russian/StructuralRus.gf b/next-lib/src/russian/StructuralRus.gf deleted file mode 100644 index d5635005b..000000000 --- a/next-lib/src/russian/StructuralRus.gf +++ /dev/null @@ -1,130 +0,0 @@ ---# -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 = {s1 = [] ; s2 = "и" ; 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 = nemnogoSgDet **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom}; ---- DEPREC 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 = Pl; g = (PGen Neut); c= Gen}; - i_Pron = pronYa ; - if_Subj = ss "если" ; - in8front_Prep = { s = "перед" ; c = Inst}; - in_Prep = { s = "в" ; c = Prepos PrepVNa } ; - it_Pron = pronOno ; - less_CAdv = {s="менее"; p=""} ; - many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; - more_CAdv = {s="более"; p=""} ; - 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_Utt = ss ["Нет"] ; - on_Prep = { s = "на" ; c = Prepos PrepVNa }; ---- DEPREC 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 = {s1= [] ; s2 = "или" ; 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 "где-нибудь" ; - that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom} ; - there_Adv = ss "там" ; - there7to_Adv = ss "туда" ; - there7from_Adv = ss "оттуда" ; - therefore_PConj = ss "следовательно" ; - they_Pron = pronOni; - this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom} ; - 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 "где" ; - which_IQuant = { - s = \\_ => kotorujDet.s ; - 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_Utt = ss ["Да"] ; - youSg_Pron = pronTu; - youPol_Pron = pronVu; - - have_V2= P.dirV2 (P.regV P.imperfective P.first "име" "ю" "имел" "имей" "иметь" ); - ---- 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 -} diff --git a/next-lib/src/russian/SymbolRus.gf b/next-lib/src/russian/SymbolRus.gf deleted file mode 100644 index 54355374a..000000000 --- a/next-lib/src/russian/SymbolRus.gf +++ /dev/null @@ -1,41 +0,0 @@ ---# -path=.:abstract:common - -concrete SymbolRus of Symbol = CatRus ** open Prelude, ResRus in { - -{- TODO! -lin - SymbPN i = {s = addGenitiveS i.s ; g = Neutr} ; - IntPN i = {s = addGenitiveS i.s ; g = Neutr} ; - FloatPN i = {s = addGenitiveS i.s ; g = Neutr} ; - NumPN i = {s = i.s ; g = Neutr} ; - CNIntNP cn i = { - s = \\c => cn.s ! Sg ! Nom ++ (addGenitiveS i.s) ! c ; - a = agrgP3 Sg cn.g - } ; - CNSymbNP det cn xs = { - s = \\c => det.s ++ cn.s ! det.n ! Nom ++ (addGenitiveS xs.s) ! c ; - a = agrgP3 det.n cn.g - } ; - CNNumNP cn i = { - s = \\c => cn.s ! Sg ! Nom ++ i.s ! c ; - a = agrgP3 Sg cn.g - } ; - - SymbS sy = sy ; - - SymbNum sy = { s = addGenitiveS sy.s ; n = Pl ; hasCard = True } ; - SymbOrd sy = { s = \\c => sy.s ++ (regGenitiveS "th")!c} ; --} - -lincat - - Symb, [Symb] = SS ; - -lin - MkSymb s = s ; - --- BaseSymb = infixSS "and" ; - ConsSymb = infixSS "," ; - - -} diff --git a/next-lib/src/russian/VerbRus.gf b/next-lib/src/russian/VerbRus.gf deleted file mode 100644 index 6c0623d82..000000000 --- a/next-lib/src/russian/VerbRus.gf +++ /dev/null @@ -1,343 +0,0 @@ - ---# -path=.:../abstract:../common:../../prelude - -concrete VerbRus of Verb = CatRus ** open ResRus, Prelude in { - --- 1.4 additions by AR 17/6/2008 - - 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 PastRus _) => case gn of - { (GSg Fem) =>"была"++masha.s ! (mkPronForm Inst No NonPoss); - (GSg Masc) =>"был" ++ masha.s!(mkPronForm Inst No NonPoss); - (GSg Neut) =>"было" ++ masha.s!(mkPronForm Inst No NonPoss); - GPl => "были" ++ masha.s ! (mkPronForm Inst No NonPoss) - }; - (ClIndic Future _) => case gn of - { GPl => case p of - { P3 => "будут"++masha.s ! (mkPronForm Inst No NonPoss); - P2 => "будете"++masha.s !(mkPronForm Inst No NonPoss); - P1 => "будем"++masha.s ! (mkPronForm Inst No NonPoss) - }; - (GSg _) => 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 (numGenNum 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 (GSg Masc) ; - ClImper => case gn of - { (GSg _) => "будь" ++ zloj.s ! AF Inst Animate (GSg Masc); - GPl => "будьте" ++ zloj.s ! AF Inst Animate GPl - }; --- infinitive does not save GenNum, --- but indicative does for the sake of adjectival predication ! - ClIndic Present _ => zloj.s ! AF Nom Animate gn ; - ClIndic PastRus _ => case gn of - { (GSg Fem) => "была" ++ zloj.s! AF Nom Animate (GSg Fem); - (GSg Masc) => "был" ++ zloj.s! AF Nom Animate (GSg Masc); - (GSg Neut) => "был" ++ zloj.s! AF Nom Animate (GSg Neut); - GPl => "были" ++ zloj.s! AF Nom Animate GPl - }; - ClIndic Future _ => case gn of - { GPl => case p of - { P3 => "будут" ++ zloj.s! AF Nom Animate GPl; - P2 => "будете" ++ zloj.s! AF Nom Animate GPl; - P1 => "будем" ++ zloj.s! AF Nom Animate GPl - } ; - (GSg _) => case p of - {P3 => "будет" ++ zloj.s! AF Nom Animate (GSg (genGNum gn)); - P2 => "будешь"++ zloj.s! AF Nom Animate (GSg (genGNum gn)); - P1=> "буду" ++ zloj.s! AF Nom Animate (GSg (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 - { GSg _ => "будь" ++ zloj.s; -- person is ignored ! - GPl => "будьте" ++ zloj.s - }; - ClInfinit => "быть" ++ zloj.s; - ClIndic Present _ => zloj.s ; - ClIndic PastRus _ => case gn of - { (GSg Fem) => "была" ++ zloj.s; - (GSg Masc) => "был" ++ zloj.s; - (GSg Neut) => "было" ++ zloj.s; - GPl => "были" ++ zloj.s - }; - ClIndic Future _ => case gn of - { (GSg _) => "будет" ++ zloj.s; - GPl => "будут" ++ zloj.s - }; - ClCondit => "" - } ; - asp = Imperfective ; - w = Act; - s2 = ""; - negBefore = True; - s3 = \\g,n => "" - } ; - - - - UseComp comp = comp ; - --- 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) (numGenNum gn) p) ; - asp = se.asp ; - w=Act; - s2 = ""; - negBefore = True; - s3 = table{_=> table{_ => ""}} - } ; - --- The rule for using transitive verbs is the complementization rule: - SlashV2a se = - {s = \\clf,gn,p => se.s ! (getActVerbForm clf (genGNum gn) (numGenNum gn) p) ; - asp = se.asp ; - w = Act; - s2 = ""; - s3 = \\g,n => ""; - negBefore = True ; - sc = se.c2.s ; - c = se.c2.c - } ; - - ComplSlash se tu = - {s = \\clf,gn,p => se.s ! clf ! gn ! p - ++ se.sc ++ tu.s ! (mkPronForm se.c No NonPoss) ; - asp = se.asp ; - w = se.w; - s2 = se.s2; - s3 = se.s3; - negBefore = se.negBefore - } ; - - Slash2V3 dat tu = - let - tebepivo = dat.c2.s ++ tu.s ! PF dat.c2.c No NonPoss ++ dat.c3.s ; - in - {s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGenNum gn) p) ++ tebepivo ; - asp = dat.asp ; - w = Act; - negBefore = True; - s2 = ""; - s3 = \\g,n=> "" ; - sc = dat.c3.s ; - c = dat.c3.c - } ; - - Slash3V3 dat pivo = - let - tebepivo = dat.c3.s ++ pivo.s ! PF dat.c3.c Yes NonPoss - in - {s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGenNum gn) p) ++ tebepivo ; - asp = dat.asp ; - w = Act; - negBefore = True; - s2 = ""; - s3 = \\g,n=> "" ; - sc = dat.c2.s ; - c = dat.c2.c - } ; - - ---- AR 17/12/2008 - SlashV2Q dat esliOnPridet = - {s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGenNum gn) p) ++ esliOnPridet.s ! QDir ; - asp = dat.asp ; - w = Act; - negBefore = True; - s2 = ""; - s3 = \\g,n=> "" ; - sc = dat.c2.s ; - c = dat.c2.c - } ; - - ---- AR 17/12/2008 - SlashV2S vidit tuUlubaeshsya = - {s = \\clf,gn,p => vidit.s ! (getActVerbForm clf (genGNum gn) (numGenNum gn) p) - ++ [", что"] ++ tuUlubaeshsya.s ; - asp = vidit.asp; - w = Act; - s2=""; - negBefore = True; - s3 = \\g,n => "" ; - sc = vidit.c2.s ; - c = vidit.c2.c - } ; - - ---- AR 17/12/2008 - SlashV2V putatsya bezhat = - { s = \\clf,gn,p => putatsya.s ! (getActVerbForm clf (genGNum gn) - (numGenNum gn) p) ++ bezhat.s!ClInfinit !gn!p ; - asp = putatsya.asp ; - w = Act; - negBefore = True; - s2 = ""; - s3 =\\g,n => "" ; - sc = putatsya.c2.s ; - c = putatsya.c2.c - } ; - - ---- AR 17/12/2008 - ReflVP vp = - { s = \\clf,gn,p => vp.s ! clf ! gn ! p ++ vp.s2 ++ sebya ! vp.c; - asp = vp.asp ; - w = Act ; - negBefore = True; - s2 = ""; - s3 = \\g,n=> "" - } ; - - ---- AR 17/12/2008 - SlashVV putatsya bezhat = - { s = \\clf,gn,p => putatsya.s ! (getActVerbForm clf (genGNum gn) - (numGenNum gn) p) ++ bezhat.s!ClInfinit !gn!p ; - asp = putatsya.asp ; - w = Act; - negBefore = True; - s2 = ""; - s3 =\\g,n => "" ; - sc = bezhat.s2 ; - c = bezhat.c - } ; - - ---- AR 17/12/2008 - SlashV2VNP putatsya np bezhat = - { s = \\clf,gn,p => - putatsya.s ! (getActVerbForm clf (genGNum gn) (numGenNum gn) p) ++ - np.s ! (mkPronForm putatsya.c2.c No NonPoss) ++ ---- ? - bezhat.s!ClInfinit !gn!p ; - asp = putatsya.asp ; - w = Act; - negBefore = True; - s2 = ""; - s3 =\\g,n => "" ; - sc = bezhat.s2 ; ---- ? - c = bezhat.c - } ; - - --- To generate "сказал, что Иван гуляет" / "не сказал, что Иван гуляет": - ComplVS vidit tuUlubaeshsya = - {s = \\clf,gn,p => vidit.s ! (getActVerbForm clf (genGNum gn) (numGenNum 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) - (numGenNum gn) p) ++ bezhat.s!ClInfinit !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) (numGenNum 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) (numGenNum gn) p) ; - asp = vuglyadet.asp ; - w = Act; - negBefore = True; - s2 = ""; - s3 = \\g,n => molodoj.s!(AF Inst Animate (gennum g n)) - } ; - - SlashV2A obechat molodoj = - {s = \\clf,gn,p => - obechat.s ! (getActVerbForm clf (genGNum gn) (numGenNum gn) p) ++ - molodoj.s ! AF Inst Inanimate (GSg Neut) ; - ---- AR 17/6; AF Inst tu.anim (pgNum tu.g tu.n) ; - asp = obechat.asp ; - w = Act; - negBefore = True; - s2 = ""; - s3 = \\g,n =>"" ; - sc = obechat.c2.s ; - c = obechat.c2.c - } ; - - 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 = khorosho.s ++ poet.s2; s3 = poet.s3; - asp = poet.asp; w = poet.w; t = poet.t ; negBefore = poet.negBefore } ; - -PassV2 se = - {s=\\clf,gn,p => se.s ! (getPassVerbForm clf (genGNum gn) (numGenNum gn) p) ; - asp=se.asp; w=Pass; s2 = se.c2.s; - negBefore = True; - s3 = table{_=> table{_ => ""}} -}; - -} - |
