1
0
forked from GitHub/gf-rgl

change lincat PN to make it similar to LN and avoid storing rt and rel

This commit is contained in:
Krasimir Angelov
2024-03-11 08:25:12 +01:00
parent 2aef82181b
commit 0fe84ad2cf
6 changed files with 37 additions and 42 deletions

View File

@@ -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 ;

View File

@@ -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 =

View File

@@ -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))
) ;
} ;

View File

@@ -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 ;

View File

@@ -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
} ;
} ;

View File

@@ -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 = {