From e679629d70e2a2bbe08ed866c0145e95368ca204 Mon Sep 17 00:00:00 2001 From: Roman Suzi Date: Sun, 6 Sep 2020 09:31:44 +0300 Subject: [PATCH] Prints to facilitate all form checks; Participles - first draft --- src/russian/DictRus.gf | 4 +++ src/russian/DictRusAbs.gf | 5 ++++ src/russian/ExtraRus.gf | 7 +++++ src/russian/ExtraRusAbs.gf | 2 ++ src/russian/ParadigmsRus.gf | 24 +++++++++++++-- src/russian/ResRus.gf | 50 ++++++++++++++++++++++++++++++++ src/russian/test_rus_grammar.gfs | 4 +++ 7 files changed, 94 insertions(+), 2 deletions(-) diff --git a/src/russian/DictRus.gf b/src/russian/DictRus.gf index 9ed5401da..fd4271a76 100644 --- a/src/russian/DictRus.gf +++ b/src/russian/DictRus.gf @@ -1153,6 +1153,7 @@ lin dostatq_V = mkV perfective transitive "достать" "достану" "достанет" "15a" ; dostatqsja_V = mkV perfective intransitive "достаться" "достанусь" "достанется" "15a" ; dostigatq_V = mkV imperfective transitive "достигать" "достигаю" "достигает" "1a" ; + dostigatqsja_V = mkV imperfective transitive "достигаться" "достигаюсь" "достигается" "1a" ; dostignutq_V = mkV perfective transitive "достигнуть" "достигну" "достигнет" ; dohoditq_V = mkV imperfective transitive "доходить" "дохожу" "доходит" "4c" ; drozhatq_V = mkV imperfective transitive "дрожать" "дрожу" "дрожит" "5b" ; @@ -1607,6 +1608,7 @@ lin polagatq_V = mkV imperfective transitive "полагать" "полагаю" "полагает" "1a" ; polagatq_VS = mkVS polagatq_V ; polagatqsja_V = mkV imperfective intransitive "полагаться" "полагаюсь" "полагается" "1a" ; + polzti_V = mkV imperfective intransitive "ползти" "ползу" "ползёт" "7b/b" ; poleztq_V = mkV perfective transitive "полезть" "полезу" "полезет" "7a" ; poleztq_VV = mkVV poleztq_V ; poletetq_V = mkV perfective transitive "полететь" "полечу" "полетит" "5b" ; @@ -4137,4 +4139,6 @@ lin skoree_Adv = mkAdv skoryj_A.comp ; skoraja_N = mkN skoryj_A feminine inanimate ; + uvidennyi_A = mkA (uvidetq_V ** {pppss="увиден"}) Pass Past ; + uvidevshyi_A = mkA (uvidetq_V ** {pppss="увиден"}) Act Past ; } \ No newline at end of file diff --git a/src/russian/DictRusAbs.gf b/src/russian/DictRusAbs.gf index 28984f78c..598ea7a34 100644 --- a/src/russian/DictRusAbs.gf +++ b/src/russian/DictRusAbs.gf @@ -1138,6 +1138,7 @@ fun dostatq_V : V; dostatqsja_V : V; dostigatq_V : V; + dostigatqsja_V : V; dostignutq_V : V; dohoditq_V : V; drozhatq_V : V; @@ -1592,6 +1593,7 @@ fun polagatq_V : V; polagatq_VS : VS; polagatqsja_V : V; + polzti_V : V; poleztq_V : V; poleztq_VV : VV; poletetq_V : V; @@ -4121,4 +4123,7 @@ fun skoree_Adv : Adv ; skoraja_N : N ; + + uvidennyi_A : A ; + uvidevshyi_A : A ; } \ No newline at end of file diff --git a/src/russian/ExtraRus.gf b/src/russian/ExtraRus.gf index 92340acfd..77a228043 100644 --- a/src/russian/ExtraRus.gf +++ b/src/russian/ExtraRus.gf @@ -22,6 +22,13 @@ lin wherefrom_IAdv = ss "откуда" ; whereto_IAdv = ss "куда" ; + -- : IQuant ; + what_kind_of_IQuant = (adjFormsAdjective (makeAdjectiveForms "какой" "" "3b" PreferFull)) ** { + preferShort=PreferFull ; + g=Neut ; + c=Nom + } ; + -- near deixis presently_Adv = P.mkAdv "теперь" ; therefore_Adv = P.mkAdv "поэтому" ; diff --git a/src/russian/ExtraRusAbs.gf b/src/russian/ExtraRusAbs.gf index 586228eaf..d5564af07 100644 --- a/src/russian/ExtraRusAbs.gf +++ b/src/russian/ExtraRusAbs.gf @@ -25,6 +25,8 @@ fun wherefrom_IAdv : IAdv ; whereto_IAdv : IAdv ; + what_kind_of_IQuant : IQuant ; + presently_Adv : Adv ; therefore_Adv : Adv ; fromhere_Adv : Adv ; diff --git a/src/russian/ParadigmsRus.gf b/src/russian/ParadigmsRus.gf index 9bd108d44..75bde6e24 100644 --- a/src/russian/ParadigmsRus.gf +++ b/src/russian/ParadigmsRus.gf @@ -86,7 +86,7 @@ oper non_reflexive : Reflexivity = NonReflexive ; --- Voice (not yet used) +-- Voice active : Voice = Act ; passive : Voice @@ -131,7 +131,8 @@ oper mkA : Str -> ZAIndex -> A ; mkA : Str -> Str -> ZAIndex -> A ; mkA : Str -> Str -> ZAIndex -> ShortFormPreference -> A ; - mkA : A -> Str -> A -> A -- Compound adjective like социально-экономический + mkA : A -> Str -> A -> A ; -- Compound adjective like социально-экономический + mkA : V -> Voice -> Tense -> A ; -- make participles } ; ShortenA : A -> A ; @@ -301,6 +302,25 @@ oper = \pf -> pronToAdj pf ; mkA : A -> Str -> A -> A = \a1,link,a2 -> lin A (mkCompoundA a1 link a2) ; + mkA : V -> Voice -> Tense -> A + = \v,voice,t -> case of { + => lin A (guessAdjectiveForms (v.pppss + "ный")) ; + => lin A ( -- overgenerated + let s : Str = case v.prpl1 of { + f + #consonant + "ём" => (Predef.tk 2 v.prpl1) + "омый" ; + _ => v.prpl1 + "ый" + } in + makeAdjectiveFormsUseIndex s "" (Z.ZA 1 Z.No Z.A_ Z.NoC) PreferFull) ; + => lin A ( + makeAdjectiveFormsUseIndex (Z.addRefl ((Predef.tk 1 v.prpl3) + "щий")) "" (Z.ZA 4 Z.No Z.A_ Z.NoC) PreferFull) ; + => lin A ( + let s : Str = case v.inf of { + _ + ("сти"|"зти") => (Predef.tk 1 v.prsg1) + "ший" ; -- TODO: check if not all of these cases are ok + _ => (Predef.tk 1 v.psgm) + "вший" + } in + makeAdjectiveFormsUseIndex (Z.addRefl s) "" (Z.ZA 4 Z.No Z.A_ Z.NoC) PreferFull) ; + _ => Predef.error "Error: participle for this voice and tense does not exist" + } -- TODO: suppress comp and short for all but Pass Pres; take sya into account } ; ShortenA : A -> A diff --git a/src/russian/ResRus.gf b/src/russian/ResRus.gf index 00ab429e1..bbecb2c85 100644 --- a/src/russian/ResRus.gf +++ b/src/russian/ResRus.gf @@ -1563,4 +1563,54 @@ oper applyIPronPrep : ComplementCase -> IPronounForms -> Str = \prep,ip -> prep.s ++ selectIPronCase ip prep.c ; + printNounInflections : NounForms -> Str = \nf -> + nf.snom ++ "-" + ++ nf.snom ++ "," ++ nf.pnom ++ "," + ++ nf.sgen ++ "," ++ nf.pgen ++ "," + ++ nf.sdat ++ "," ++ nf.pdat ++ "," + ++ nf.sacc ++ "," ++ nf.pacc ++ "," + ++ nf.sins ++ "," ++ nf.pins ++ "," + ++ nf.sprep ++ "," ++ nf.pprep ++ "," + ++ nf.sloc ++ "," ++ nf.sptv ; + + printAdjectiveInflections : AdjForms -> Str = \af -> + let mf = makeNFFromAF af Masc Inanimate in + let ff = makeNFFromAF af Fem Inanimate in + let nf = makeNFFromAF af Neut Inanimate in + let mfa = makeNFFromAF af Masc Animate in + let ffa = makeNFFromAF af Fem Animate in + let nfa = makeNFFromAF af Neut Animate in + af.msnom ++ "-" + ++ mf.snom ++ "," ++ ff.snom ++ "," ++ nf.snom ++ "," ++ mf.pnom ++ "," + ++ mf.sgen ++ "," ++ ff.sgen ++ "," ++ nf.sgen ++ "," ++ mf.pgen ++ "," + ++ mf.sdat ++ "," ++ ff.sdat ++ "," ++ nf.sdat ++ "," ++ mf.pdat ++ "," + ++ mf.sacc ++ "," ++ ff.sacc ++ "," ++ nf.sacc ++ "," ++ mf.pacc ++ "," + ++ mfa.sacc ++ "," ++ ffa.sacc ++ "," ++ nfa.sacc ++ "," ++ mfa.pacc ++ "," + ++ mf.sins ++ "," ++ ff.sins ++ "," ++ nf.sins ++ "," ++ mf.pins ++ "," + ++ mf.sprep ++ "," ++ ff.sprep ++ "," ++ nf.sprep ++ "," ++ mf.pprep ++ "," + ++ af.sm ++ "," ++ af.sf ++ "," ++ af.sn ++ "," ++ af.sp ++ "," + ++ af.comp + ; + + printVerbInflections : VerbForms -> Str = \v -> + let fut : Agr=>Str = \\a => verbFutAgree v a in + let pres : Agr=>Str = \\a => verbPresAgree v a in + let past : Agr=>Str = \\a => verbPastAgree v a "" in + let imp : Agr=>Str = \\a => ((verbImperativeAgree v a).p1 ++ (verbImperativeAgree v a).p2) in + let ppp : GenNum=>Str = \\gn => shortPastPassPart v gn in + let inf = verbInf v in + inf ++ "-" + ++ inf ++ "," + ++ pres ! Ag (GSg Masc) P1 ++ "," ++ pres ! Ag GPl P1 ++ "," + ++ pres ! Ag (GSg Masc) P2 ++ "," ++ pres ! Ag GPl P2 ++ "," + ++ pres ! Ag (GSg Masc) P3 ++ "," ++ pres ! Ag GPl P3 ++ "," + ++ v.prtr ++ verbRefl v ++ "," + ++ past ! Ag (GSg Masc) P1 ++ "," ++ past ! Ag (GSg Fem) P1 ++ "," ++ past ! Ag (GSg Neut) P1 ++ "," ++ past ! Ag GPl P1 ++ "," + ++ imp ! Ag (GSg Masc) P2 ++ "," ++ imp ! Ag GPl P2 ++ "," + ++ v.ptr ++ verbRefl v + ++ case v.tran of { + Transitive => "," ++ ppp ! (GSg Masc) ++ "," ++ ppp ! (GSg Fem) ++ "," ++ ppp ! (GSg Neut) ++ "," ++ ppp ! GPl ; + _ => "" + } ; + } diff --git a/src/russian/test_rus_grammar.gfs b/src/russian/test_rus_grammar.gfs index 55cf91dcf..b7a384bd9 100644 --- a/src/russian/test_rus_grammar.gfs +++ b/src/russian/test_rus_grammar.gfs @@ -241,6 +241,8 @@ gt UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (CountNP (DetQuant DefArt oba_N gt TFullStop (PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) ? (PredVP (UsePN paris_PN) (UseComp (CompNomNP (MassNP (PartNP (UseN stolica_N) (MassNP (UseN country_N))))))))) NoVoc) TEmpty | l -treebank gt ImpVP (AdvVP (AdVVP (PositAdVAdj dull_A) (SelfAdvVP hungry_VP)) (weekdayNextAdv friday_Weekday)) |l -treebank +gt UseCl (TTAnt TPres ASimul) PPos (PredSCVP (EmbedQS (UseQCl (TTAnt TPres ASimul) PPos (QuestIAdv how_IAdv (PredVP (UsePron theyFem_Pron) (ComplVV can_VV (UseV dostigatqsja_V)))))) (UseComp (CompAP (UseComparA ehffektivnyj_A)))) | l -treebank +gt UseCl (TTAnt TPres ASimul) PPos (PredSCVP (EmbedQS (UseQCl (TTAnt TPres AAnter) PPos (QuestIComp (CompIQuant what_kind_of_IQuant) (MassNP (UseN apple_N))))) (UseV fall_V)) | l -treebank gt UseCl (TTAnt ? ASimul) ? (PredVP (MassNP (UseN apple_N)) (UseComp (CompBareCN (PartNP (UseN cvet_N) (MassNP (UseN haki_N)))))) | l -treebank gt UseCl (TTAnt TFut ASimul) PPos (PredVP (MassNP (UseN apple_N)) (AdvVP UseCopula (PrepCN obj_neg_Prep (AdjCN (PositA green_A) (UseN cvet_N))))) | l -treebank @@ -333,6 +335,8 @@ gt UseCl (TTAnt TPast ASimul) PPos (PredVP (AdvNP (DetCN (DetQuant DefArt NumPl) gt UttS (ExtAdvS naprimer_Adv (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron youPlFem_Pron) (AdvVP (UseV narisovatq_V) (PrepCN nom_Prep (AdvCN (UseN person_N) (PrepNP in_Prep (DetCN (DetQuant DefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n3)))))))) (UseN sluchaj_N))))))))) | l -treebank gt UttS (AdvS (PrepNP nom_Prep (UsePron he_Pron)) (UseCl (TTAnt TPres AAnter) PPos (ImpersCl (ComplSlashPartLast (VPSlashPrep (ComplSlashPartLast (VPSlashPrep (UseV prinositq_V) nom_Prep) (DetCN (DetQuant IndefArt NumPl) (UseN apple_N))) to_dat_Prep) (UsePron youPol_Pron))))) | l -treebank +gt AdvS (PrepNP ins_Prep (DetCN (DetQuant DefArt NumPl) (UseN issledovanie_N))) (UseCl (TTAnt TPast AAnter) PPos (ImpersCl (PassVPSlash (VPSlashPrep (UseV ustanovitq_V) to_dat_Prep)))) | l -treebank + gt UttAccNP (DetCN (DetQuant (PossPron youPlFem_Pron) NumSg) (SentCN (AdvCN (UseN nebo_N) (PrepNP for_Prep (UsePron we_Pron))) (EmbedQS (UseQCl (TTAnt TPres ASimul) PPos (QuestIComp (CompIAdv how_IAdv) (MassNP (UseN zerkalo_N))))))) |l -treebank gt UseCl (TTAnt TPres ASimul) PPos (PredVP (MassNP (AdjCN (PositA rovnyj_A) (AdjCN (PositA (CompoundA white_A blue_A)) (UseN svet_N)))) (AdvVP (UseV pronizyvatq_V) (PrepNP obj_neg_Prep (AdvNP (UsePron she_Pron) iznutri_Adv)))) | l -treebank