From 0fe84ad2cf846e516a027399adcf53428483410c Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Mon, 11 Mar 2024 08:25:12 +0100 Subject: [PATCH] change lincat PN to make it similar to LN and avoid storing rt and rel --- src/russian/CatRus.gf | 11 +++++--- src/russian/ConstructionRus.gf | 4 +-- src/russian/DocumentationRusFunctor.gf | 17 ++++++------- src/russian/NounRus.gf | 4 +-- src/russian/ParadigmsRus.gf | 35 ++++++++++---------------- src/russian/SymbolRus.gf | 8 +++--- 6 files changed, 37 insertions(+), 42 deletions(-) diff --git a/src/russian/CatRus.gf b/src/russian/CatRus.gf index e3bf36868..f8abc8dc7 100644 --- a/src/russian/CatRus.gf +++ b/src/russian/CatRus.gf @@ -1,7 +1,13 @@ concrete CatRus of Cat = CommonX ** open ResRus, Prelude in { flags coding=utf8 ; optimize=all ; lincat - N, PN = ResRus.NounForms ; + N = ResRus.NounForms ; + PN = { + s : Case => Str ; + g : Gender ; + anim : Animacy ; + n : Number ; + } ; GN = { s : Case => Str ; g : Sex ; @@ -119,8 +125,7 @@ lincat linref N = \s -> s.snom ; - PN = \s -> s.snom ; - LN = \s -> s.s ! Nom ; + PN,LN = \s -> s.s ! Nom ; Pron = \s -> s.nom ; N2 = \s -> s.snom ++ s.c2.s ; N3 = \s -> s.snom ++ s.c2.s ++ s.c3.s ; diff --git a/src/russian/ConstructionRus.gf b/src/russian/ConstructionRus.gf index df036a144..7b939cf6c 100644 --- a/src/russian/ConstructionRus.gf +++ b/src/russian/ConstructionRus.gf @@ -173,9 +173,9 @@ lin monthN month = month ; -- : Weekday -> PN ; -- Monday (is free) - weekdayPN wd = wd ; + weekdayPN wd = {s = (nounFormsNoun wd).s ! Sg; g = Neut; anim = Inanimate; n=Sg} ; -- : Month -> PN ; -- March (is cold) - monthPN month = month ; + monthPN month = {s = (nounFormsNoun month).s ! Sg; g = Neut; anim = Inanimate; n=Sg} ; -- : Card -> CN -> A -> AP ; -- x inches long n_units_AP card cn a = diff --git a/src/russian/DocumentationRusFunctor.gf b/src/russian/DocumentationRusFunctor.gf index cbb85ca59..50787ee96 100644 --- a/src/russian/DocumentationRusFunctor.gf +++ b/src/russian/DocumentationRusFunctor.gf @@ -46,15 +46,14 @@ lin Neut => "(ср.р.)" }) ; s2 = frameTable ( - tr (th (heading nominative_Parameter) ++ td (pn.snom)) ++ - tr (th (heading genitive_Parameter) ++ td (pn.sgen)) ++ - tr (th (heading dative_Parameter) ++ td (pn.sdat)) ++ - tr (th (heading accusative_Parameter) ++ td (pn.sacc)) ++ - tr (th ("творительный") ++ td (pn.sins)) ++ - tr (th ("предложный") ++ td (pn.sprep)) ++ - tr (th (heading partitive_Parameter) ++ td (pn.sptv)) ++ - tr (th ("местный") ++ td (pn.sloc)) ++ - tr (th ("звательный") ++ td (pn.svoc)) + tr (th (heading nominative_Parameter) ++ td (pn.s!Nom)) ++ + tr (th (heading genitive_Parameter) ++ td (pn.s!Gen)) ++ + tr (th (heading dative_Parameter) ++ td (pn.s!Dat)) ++ + tr (th (heading accusative_Parameter) ++ td (pn.s!Acc)) ++ + tr (th ("творительный") ++ td (pn.s!Ins)) ++ + tr (th ("предложный") ++ td (pn.s!Pre)) ++ + tr (th (heading partitive_Parameter) ++ td (pn.s!Ptv)) ++ + tr (th ("местный") ++ td (pn.s!Loc)) ) ; } ; diff --git a/src/russian/NounRus.gf b/src/russian/NounRus.gf index e7572c95e..40afa6759 100644 --- a/src/russian/NounRus.gf +++ b/src/russian/NounRus.gf @@ -19,9 +19,9 @@ lin -- : PN -> NP ; -- John UsePN pn = { - s=\\cas => (nounFormsNoun pn).s ! Sg ! cas ; + s=pn.s ; pron=False; - a=Ag (gennum pn.g Sg) P3 + a=Ag (gennum pn.g pn.n) P3 } ; -- Does NP need animacy? -- : Pron -> NP ; diff --git a/src/russian/ParadigmsRus.gf b/src/russian/ParadigmsRus.gf index 20e5b7d52..b77efa84e 100644 --- a/src/russian/ParadigmsRus.gf +++ b/src/russian/ParadigmsRus.gf @@ -396,36 +396,27 @@ oper mkPN = overload { mkPN : N -> PN - = \n -> lin PN n ; + = \n -> lin PN {s = (nounFormsNoun n).s ! Sg; g=n.g; anim=n.anim; n=Sg} ; mkPN : N -> Str -> N -> PN - = \n1,link,n2 -> lin PN (mkCompoundN n1 link n2) ; + = \n1,link,n2 -> lin PN {s = (nounFormsNoun (mkCompoundN n1 link n2)).s ! Sg; g=n1.g; anim=n1.anim; n=Sg} ; mkPN : Str -> PN - = \nom -> lin PN (guessNounForms nom (guessAdjectiveForms nonExist) GenType) ; + = \nom -> let n = guessNounForms nom (guessAdjectiveForms nonExist) GenType + in lin PN {s = (nounFormsNoun n).s ! Sg; g=n.g; anim=n.anim; n=Sg} ; mkPN : Str -> Gender -> Animacy -> PN - = \nom, g, anim -> lin PN (guessLessNounForms nom g anim (guessAdjectiveForms nonExist) GenType) ; + = \nom, g, anim -> let n = guessLessNounForms nom g anim (guessAdjectiveForms nonExist) GenType + in lin PN {s = (nounFormsNoun n).s ! Sg; g=n.g; anim=n.anim; n=Sg} ; mkPN : Str -> Gender -> Number -> Animacy -> PN - = \nom, g, n, anim -> lin PN (guessLessNounForms nom g anim (guessAdjectiveForms nonExist) GenType) ; + = \nom, g, num, anim -> let n = guessLessNounForms nom g anim (guessAdjectiveForms nonExist) GenType + in lin PN {s = (nounFormsNoun n).s ! num; g=g; anim=anim; n=num} ; mkPN : Str -> Gender -> Animacy -> Z.ZNIndex -> PN - = \word, g, anim, z -> lin PN (noMinorCases (Z.makeNoun word g anim (guessAdjectiveForms nonExist) GenType z)) ; + = \word, g, anim, z -> let n = noMinorCases (Z.makeNoun word g anim (guessAdjectiveForms nonExist) GenType z) + in lin PN {s = (nounFormsNoun n).s ! Sg; g=g; anim=anim; n=Sg} ; mkPN : Str -> Gender -> Animacy -> Str -> PN - = \word, g, anim, zi -> lin PN (noMinorCases (Z.makeNoun word g anim (guessAdjectiveForms nonExist) GenType (Z.parseIndex zi))) ; + = \word, g, anim, zi -> let n = noMinorCases (Z.makeNoun word g anim (guessAdjectiveForms nonExist) GenType (Z.parseIndex zi)) + in lin PN {s = (nounFormsNoun n).s ! Sg; g=g; anim=anim; n=Sg} ; mkPN : A -> PN -> PN = \a, pn -> pn ** { - snom = (adjFormsAdjective a).s ! (gennum pn.g Sg) ! pn.anim ! Nom ++ pn.snom ; - sgen = (adjFormsAdjective a).s ! (gennum pn.g Sg) ! pn.anim ! Gen ++ pn.sgen ; - sdat = (adjFormsAdjective a).s ! (gennum pn.g Sg) ! pn.anim ! Dat ++ pn.sdat ; - sacc = (adjFormsAdjective a).s ! (gennum pn.g Sg) ! pn.anim ! Acc ++ pn.sacc ; - sins = (adjFormsAdjective a).s ! (gennum pn.g Sg) ! pn.anim ! Ins ++ pn.sins ; - sprep = (adjFormsAdjective a).s ! (gennum pn.g Sg) ! pn.anim ! Loc ++ pn.sprep ; - sloc = (adjFormsAdjective a).s ! (gennum pn.g Sg) ! pn.anim ! Loc ++ pn.sloc ; - sptv = (adjFormsAdjective a).s ! (gennum pn.g Sg) ! pn.anim ! Gen ++ pn.sptv ; - svoc = (adjFormsAdjective a).s ! (gennum pn.g Sg) ! pn.anim ! Nom ++ pn.svoc ; - pnom = (adjFormsAdjective a).s ! (gennum pn.g Pl) ! pn.anim ! Nom ++ pn.pnom ; - pgen = (adjFormsAdjective a).s ! (gennum pn.g Pl) ! pn.anim ! Gen ++ pn.pgen ; - pdat = (adjFormsAdjective a).s ! (gennum pn.g Pl) ! pn.anim ! Dat ++ pn.pdat ; - pacc = (adjFormsAdjective a).s ! (gennum pn.g Pl) ! pn.anim ! Acc ++ pn.pacc ; - pins = (adjFormsAdjective a).s ! (gennum pn.g Pl) ! pn.anim ! Ins ++ pn.pins ; - pprep = (adjFormsAdjective a).s ! (gennum pn.g Pl) ! pn.anim ! Loc ++ pn.pprep ; + s = \\c => (adjFormsAdjective a).s ! (gennum pn.g Sg) ! pn.anim ! c ++ pn.s ! c } ; } ; diff --git a/src/russian/SymbolRus.gf b/src/russian/SymbolRus.gf index 37e397e3f..059f0483b 100644 --- a/src/russian/SymbolRus.gf +++ b/src/russian/SymbolRus.gf @@ -5,14 +5,14 @@ flags coding=utf8; lin -- : Symb -> PN ; -- x - SymbPN i = (immutableNounForms i.s Neut Inanimate) ** {g = Neut; a = Inanimate} ; + SymbPN i = {s = (nounFormsNoun (immutableNounForms i.s Neut Inanimate)).s ! Sg; g = Neut; anim = Inanimate; n=Sg} ; -- : Int -> PN ; -- 27 - IntPN i = (immutableNounForms i.s Neut Inanimate) ** {g = Neut; a = Inanimate} ; + IntPN i = {s = (nounFormsNoun (immutableNounForms i.s Neut Inanimate)).s ! Sg; g = Neut; anim = Inanimate; n=Sg} ; -- : Float -> PN ; -- 3.14159 - FloatPN i = (immutableNounForms i.s Neut Inanimate) ** {g = Neut; a = Inanimate} ; + FloatPN i = {s = (nounFormsNoun (immutableNounForms i.s Neut Inanimate)).s ! Sg; g = Neut; anim = Inanimate; n=Sg} ; -- : Card -> PN ; -- twelve [as proper name] -- TODO: implement properly - NumPN card = (immutableNounForms (card.s ! Neut ! Inanimate ! Nom) Neut Inanimate) ** {g = Neut; a = Inanimate} ; + NumPN card = {s = (nounFormsNoun (immutableNounForms (card.s ! Neut ! Inanimate ! Nom) Neut Inanimate)).s ! Sg; g = Neut; anim = Inanimate; n=Sg} ; -- : CN -> Card -> NP ; -- level five ; level 5 CNNumNP cn card = {