Hrv comparison forms

This commit is contained in:
Aarne Ranta
2022-09-30 18:12:48 +02:00
parent 60c733bd35
commit 8fc2460af6
9 changed files with 61 additions and 181 deletions

View File

@@ -2,12 +2,20 @@ concrete AdjectiveHrv of Adjective = CatHrv ** open ResHrv, Prelude in {
lin lin
PositA a = adjFormsAdjective a ** {isPost = False} ; PositA a = adjFormsAdjective a.posit ** {isPost = False} ;
AdAP ada ap = ap ** {s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c} ; AdAP ada ap = ap ** {s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c} ;
AdjOrd a = adjFormsAdjective a ** {isPost = False} ; AdjOrd a = adjFormsAdjective a ** {isPost = False} ;
ComparA a np =
let ap = adjFormsAdjective a.compar
in
ap ** {
s = \\g,n,c => ap.s ! g ! n ! c ++ od_Str ++ np.s ! Gen ;
isPost = True ;
} ;
ComplA2 a np = ComplA2 a np =
let ap = adjFormsAdjective a let ap = adjFormsAdjective a
in in
@@ -18,7 +26,7 @@ concrete AdjectiveHrv of Adjective = CatHrv ** open ResHrv, Prelude in {
UseA2 a = adjFormsAdjective a ** {isPost = False} ; UseA2 a = adjFormsAdjective a ** {isPost = False} ;
UseComparA a = adjFormsAdjective a ** {isPost = False} ; ---- TODO: this gives positive forms UseComparA a = adjFormsAdjective a.compar ** {isPost = False} ;
AdvAP ap adv = ap ** {s = \\g,n,c => ap.s ! g ! n ! c ++ adv.s ; isPost = True} ; AdvAP ap adv = ap ** {s = \\g,n,c => ap.s ! g ! n ! c ++ adv.s ; isPost = True} ;

View File

@@ -26,7 +26,7 @@ concrete CatHrv of Cat =
V2 = {s : VerbForms ; c : ComplementCase} ; V2 = {s : VerbForms ; c : ComplementCase} ;
VS,VQ = {s : VerbForms} ; VS,VQ = {s : VerbForms} ;
A = ResHrv.AdjForms ; A = {posit, compar, superl : AdjForms} ;
AP = ResHrv.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str} AP = ResHrv.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str}
A2 = ResHrv.AdjForms ** {c : ComplementCase} ; A2 = ResHrv.AdjForms ** {c : ComplementCase} ;
@@ -62,7 +62,8 @@ concrete CatHrv of Cat =
linref linref
N = \s -> s.snom ; N = \s -> s.snom ;
A = \s -> s.msnom ; A = \s -> s.posit.msnom ;
V = \v -> v.s ! VInf ;
lincat Numeral = {s : AdjForms ; size : NumSize} ; lincat Numeral = {s : AdjForms ; size : NumSize} ;

View File

@@ -3,7 +3,7 @@ concrete IdiomHrv of Idiom = CatHrv ** open Prelude, ResHrv in {
lin lin
ExistNP np = { ---- TODO verify this ExistNP np = { ---- TODO verify this
subj = np.s ! Nom ; subj = np.s ! Nom ;
verb = biti_VerbForms ; ---- TODO: jesam verb = copula_VerbForms ;
clit, compl = [] ; clit, compl = [] ;
a = np.a a = np.a
} ; } ;

View File

@@ -14,7 +14,6 @@ oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
oper CompCN : CN -> Comp = notYet "CompCN" ; oper CompCN : CN -> Comp = notYet "CompCN" ;
oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ; oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ;
oper CompIP : IP -> IComp = notYet "CompIP" ; oper CompIP : IP -> IComp = notYet "CompIP" ;
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ; oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ; oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ; oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;

View File

@@ -95,7 +95,7 @@ lin
} ; } ;
AdNum adn card = card ** {s = \\g,c => adn.s ++ card.s ! g ! c} ; AdNum adn card = card ** {s = \\g,c => adn.s ++ card.s ! g ! c} ;
OrdSuperl a = a ; ---- TODO superl OrdSuperl a = a.superl ;
} }

View File

@@ -117,13 +117,31 @@ oper
mkA = overload { mkA = overload {
mkA : Str -> A mkA : Str -> A
= \s -> lin A (velikA s) ; = \s ->
mkA : AForms -> A let
= \s -> lin A s ; velik = velikA s ;
velikiji = regComparAForms velik ;
in lin A {
posit = velik ;
compar = velikiji ;
superl = superlAForms velikiji
} ;
mkA : (pos, comp : Str) -> A
= \pos, comp -> lin A {
posit = velikA pos ;
compar = velikA comp ;
superl = superlAForms (velikA comp)
} ;
mkA : (posit, compar : AForms) -> A
= \posit,compar -> lin A {
posit = posit ;
compar = compar ;
superl = superlAForms compar
} ;
} ; } ;
invarA : Str -> A invarA : Str -> A
= \s -> lin A (invarAForms s) ; = \s -> lin A {posit,compar,superl = invarAForms s} ; ---- TODO compar, superl?
AForms : Type AForms : Type
= R.AdjForms ; = R.AdjForms ;

View File

@@ -12,7 +12,7 @@ lin
} }
} ; } ;
IdRP = mkA "koji" ; IdRP = (mkA "koji").posit ;
} }

View File

@@ -400,6 +400,17 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
pgen = velk + "ih" ; pgen = velk + "ih" ;
} ; } ;
regComparAForms : AdjForms -> AdjForms
= \aposit -> case init aposit.fsnom of {
grub@(_ + "b"|"p"|"v"|"h") => velikA (grub + "lji") ;
star => velikA (star + "iji")
} ;
superlAForms : AdjForms -> AdjForms
= \acompar -> velikA ("naj" + acompar.msnom) ;
od_Str = "od" ;
--------------------- ---------------------
-- Verbs -- Verbs
-- Wiki -- Wiki
@@ -474,6 +485,15 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
} ; } ;
negative = \\n,p => "ni" + sam ! n ! p negative = \\n,p => "ni" + sam ! n ! p
} ; } ;
-- Wiki: some grammars (chiefly Serbian ones) treat jesam as a defective verb
-- having only present tense. Others treat these forms as two realizations
-- of the same irregular verb biti, jesam being imperfective and budem perfective.
copula_VerbForms : VerbForms = table {
VPres n p => jesam_Copula.short ! n ! p ;
v => biti_VerbForms ! v
} ;
biti_VerbForms : VerbForms = aeiVerbForms "biti" "budem" "bio" ; biti_VerbForms : VerbForms = aeiVerbForms "biti" "budem" "bio" ;
@@ -580,52 +600,6 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
mkPron : Agr -> PronForms ** {poss : AdjForms} = \a -> mkPron : Agr -> PronForms ** {poss : AdjForms} = \a ->
personalPron a ** {poss = possessivePron a} ; personalPron a ** {poss = possessivePron a} ;
{-
--------------------------------
-- demonstrative pronouns, used for Quant and Det
oper
DemPronForms : Type = {
msnom, fsnom, nsnom,
msgen, fsgen, pgen,
msdat, -- fsdat = fsgen unlike AdjForms
fsacc,
msloc,
msins, fsins,
ampnom, fpnom, -- mpacc = fpacc = fpnom
pgen,
pdat, -- NOT msins like AdjForms
pins : Str
} ;
demPronFormsAdjective : DemPronForms -> Str -> Adjective =
\dem,s ->
let
demAdj = dem ** {fsdat = dem.fsgen} ;
adjAdj = adjFormsAdjective demAdj
in {
s = \\g,n,c => case <g,n,c> of {
<_,Pl,Dat> => dem.pdat ;
<Masc Anim, Pl, Acc> => dem.pgen ;
<Masc Inanim | Fem | Neutr, Pl, Nom|Acc> => dem.fpnom ;
_ => adjAdj.s ! g ! n ! c
} + s
} ;
justDemPronFormsAdjective : DemPronForms -> Adjective =
\dem ->
let
demAdj = dem ** {fsdat = dem.fsgen} ;
adjAdj = adjFormsAdjective demAdj
in {
s = \\g,n,c => case <g,n,c> of {
<_,Pl,Dat> => dem.pdat ;
<Masc Anim, Pl, Acc> => dem.pgen ;
<Masc Inanim | Fem | Neutr, Pl, Nom|Acc> => dem.fpnom ;
_ => adjAdj.s ! g ! n ! c
}
} ;
-}
param NumSize = NS_1 | NS_2_4 | NS_5_20 | NS_20_ ; param NumSize = NS_1 | NS_2_4 | NS_5_20 | NS_20_ ;
@@ -636,49 +610,7 @@ oper
} ; } ;
{- {-
mkDemPronForms : Str -> DemPronForms = \jedn -> { -- interrogatives TODO
msnom = jedn + "y" ; -- should be "jeden"
fsnom = jedn + "a" ;
nsnom = jedn + "o" ;
msgen = jedn + "ého" ;
fsgen = jedn + "ej" ;
msdat = jedn + "ému" ;
fsacc = jedn + "u" ;
msloc = jedn + "om" ;
msins = jedn + "ým" ;
fsins = jedn + "ou" ;
ampnom = jedn + "i" ;
fpnom = jedn + "y" ;
pgen = jedn + "ých" ;
pdat = jedn + "ým" ;
pins = jedn + "ými" ;
} ;
tenDemPronForms : Str -> DemPronForms = \tam -> {
msnom = tam + "ten" ;
fsnom = tam + "tá" ;
nsnom = tam + "to" ;
msgen = tam + "toho" ;
fsgen = tam + "tej" ;
msdat = tam + "tomu" ;
fsacc = tam + "tú" ;
msloc = tam + "tom" ;
msins = tam + "tým" ;
fsins = tam + "tou" ;
ampnom = tam + "tí" ;
fpnom = tam + "tie" ;
pgen = tam + "tých" ;
pdat = tam + "tým" ;
pins = tam + "tými" ;
} ;
invarDemPronForms : Str -> DemPronForms = \s -> {
msnom, fsnom, nsnom, msgen, fsgen,
msdat, fsacc, msloc, msins, fsins,
ampnom, fpnom, pgen, pdat, pins = s ;
} ;
-- interrogatives
ktoForms : Case => Str = table { ktoForms : Case => Str = table {
Nom => "kto" ; Nom => "kto" ;
@@ -695,87 +627,9 @@ oper
Loc => "čom" ; Loc => "čom" ;
Ins => "čím" Ins => "čím"
} ; } ;
-- Numerals
-- singular forms of demonstratives
NumeralForms : Type = {
---- amsnom,
msnom, fsnom, nsnom,
msgen, fsgen,
msdat,
fsacc,
msloc,
msins, fsins : Str
} ;
numeralFormsDeterminer : NumeralForms -> NumSize -> Determiner =
\nume,size ->
let
dem = nume **
{ampnom, fpnom, pgen, pdat, pins = nume.msnom} ; --- plural forms not used
demAdj = dem ** {fsdat = dem.fsgen} ;
adjAdj = adjFormsAdjective demAdj
in {
s = \\g,c => case <g,c> of {
---- <Masc Anim, Nom> => nume.amsnom ;
_ => adjAdj.s ! g ! Sg ! c
} ;
size = size
} ;
-- example: number 1
oneNumeral : Determiner = numeralFormsDeterminer ((mkDemPronForms "jedn") ** {msnom = "jeden"}) Num1 ;
-- numbers 2,3,4 ---- to check if everything comes out right with the determiner type
twoNumeral : Determiner =
let forms = {
---- amsnom = "dvaja" ;
msnom = "dva" ; fsnom, nsnom, fsacc = "dve" ;
msgen, fsgen, msloc = "dvoch" ;
msdat = "dvom" ;
msins, fsins = "dvoma"
}
in numeralFormsDeterminer forms Num2_4 ;
threeNumeral : Determiner =
let forms = {
---- amsnom = "traja" ;
msnom, fsnom, nsnom, fsacc = "tri" ; ---- amsacc = "troch"
msgen, fsgen = "troch" ;
msdat = "trom" ;
msloc = "troch" ;
msins,fsins = "tromi" ;
}
in numeralFormsDeterminer forms Num2_4 ;
fourNumeral : Determiner =
let forms = {
---- amsnom = "štyria" ;
msnom, fsnom, nsnom, fsacc = "štyri" ; ---- amsacc = "štyroch"
msgen, fsgen = "štyroch" ;
msdat = "štyrom" ;
msloc = "štyroch" ;
msins,fsins = "štyrmi" ;
}
in numeralFormsDeterminer forms Num2_4 ;
-- for the numbers 5 upwards
regNumeral : Str -> Str -> Str -> Str -> Determiner = \pät,piatich,piatim,piatimi ->
let forms = {
msnom,fsnom,nsnom, fsacc = pät ;
msgen, fsgen, msloc = piatich ;
msdat = piatim ;
msins, fsins = piatimi ;
}
in numeralFormsDeterminer forms Num5 ;
invarDeterminer : Str -> NumSize -> Determiner = \sto,size ->
regNumeral sto sto sto sto ;
invarNumeral : Str -> Determiner = \s -> invarDeterminer s Num5 ;
-} -}
-------------------------------- --------------------------------
-- combining nouns with numerals -- combining nouns with numerals

View File

@@ -22,7 +22,7 @@ lin
} ; } ;
UseComp comp = { UseComp comp = {
verb = biti_VerbForms ; ---- TODO: jesam verb = copula_VerbForms ;
clit = \\_ => [] ; clit = \\_ => [] ;
compl = comp.s compl = comp.s
} ; } ;