summaryrefslogtreecommitdiff
path: root/next-lib/src/russian/ParadigmsRus.gf
diff options
context:
space:
mode:
Diffstat (limited to 'next-lib/src/russian/ParadigmsRus.gf')
-rw-r--r--next-lib/src/russian/ParadigmsRus.gf470
1 files changed, 0 insertions, 470 deletions
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 = <>};
-
-} ;
-