forked from GitHub/gf-rgl
Hrv comparison forms
This commit is contained in:
@@ -2,12 +2,20 @@ concrete AdjectiveHrv of Adjective = CatHrv ** open ResHrv, Prelude in {
|
||||
|
||||
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} ;
|
||||
|
||||
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 =
|
||||
let ap = adjFormsAdjective a
|
||||
in
|
||||
@@ -18,7 +26,7 @@ concrete AdjectiveHrv of Adjective = CatHrv ** open ResHrv, Prelude in {
|
||||
|
||||
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} ;
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ concrete CatHrv of Cat =
|
||||
V2 = {s : VerbForms ; c : ComplementCase} ;
|
||||
VS,VQ = {s : VerbForms} ;
|
||||
|
||||
A = ResHrv.AdjForms ;
|
||||
A = {posit, compar, superl : AdjForms} ;
|
||||
AP = ResHrv.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str}
|
||||
A2 = ResHrv.AdjForms ** {c : ComplementCase} ;
|
||||
|
||||
@@ -62,7 +62,8 @@ concrete CatHrv of Cat =
|
||||
|
||||
linref
|
||||
N = \s -> s.snom ;
|
||||
A = \s -> s.msnom ;
|
||||
A = \s -> s.posit.msnom ;
|
||||
V = \v -> v.s ! VInf ;
|
||||
|
||||
|
||||
lincat Numeral = {s : AdjForms ; size : NumSize} ;
|
||||
|
||||
@@ -3,7 +3,7 @@ concrete IdiomHrv of Idiom = CatHrv ** open Prelude, ResHrv in {
|
||||
lin
|
||||
ExistNP np = { ---- TODO verify this
|
||||
subj = np.s ! Nom ;
|
||||
verb = biti_VerbForms ; ---- TODO: jesam
|
||||
verb = copula_VerbForms ;
|
||||
clit, compl = [] ;
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
@@ -14,7 +14,6 @@ oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
|
||||
oper CompCN : CN -> Comp = notYet "CompCN" ;
|
||||
oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ;
|
||||
oper CompIP : IP -> IComp = notYet "CompIP" ;
|
||||
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
|
||||
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
|
||||
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
|
||||
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
|
||||
|
||||
@@ -95,7 +95,7 @@ lin
|
||||
} ;
|
||||
|
||||
AdNum adn card = card ** {s = \\g,c => adn.s ++ card.s ! g ! c} ;
|
||||
OrdSuperl a = a ; ---- TODO superl
|
||||
OrdSuperl a = a.superl ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -117,13 +117,31 @@ oper
|
||||
|
||||
mkA = overload {
|
||||
mkA : Str -> A
|
||||
= \s -> lin A (velikA s) ;
|
||||
mkA : AForms -> A
|
||||
= \s -> lin A s ;
|
||||
= \s ->
|
||||
let
|
||||
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
|
||||
= \s -> lin A (invarAForms s) ;
|
||||
= \s -> lin A {posit,compar,superl = invarAForms s} ; ---- TODO compar, superl?
|
||||
|
||||
AForms : Type
|
||||
= R.AdjForms ;
|
||||
|
||||
@@ -12,7 +12,7 @@ lin
|
||||
}
|
||||
} ;
|
||||
|
||||
IdRP = mkA "koji" ;
|
||||
IdRP = (mkA "koji").posit ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -400,6 +400,17 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
||||
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
|
||||
-- Wiki
|
||||
@@ -475,6 +486,15 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
||||
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" ;
|
||||
|
||||
imati_VerbForms : VerbForms = aeiVerbForms "imati" "imam" "imao" ;
|
||||
@@ -580,52 +600,6 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
||||
mkPron : Agr -> PronForms ** {poss : AdjForms} = \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_ ;
|
||||
|
||||
@@ -636,49 +610,7 @@ oper
|
||||
} ;
|
||||
|
||||
{-
|
||||
mkDemPronForms : Str -> DemPronForms = \jedn -> {
|
||||
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
|
||||
-- interrogatives TODO
|
||||
|
||||
ktoForms : Case => Str = table {
|
||||
Nom => "kto" ;
|
||||
@@ -695,87 +627,9 @@ oper
|
||||
Loc => "čom" ;
|
||||
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
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ lin
|
||||
} ;
|
||||
|
||||
UseComp comp = {
|
||||
verb = biti_VerbForms ; ---- TODO: jesam
|
||||
verb = copula_VerbForms ;
|
||||
clit = \\_ => [] ;
|
||||
compl = comp.s
|
||||
} ;
|
||||
|
||||
Reference in New Issue
Block a user