mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-27 08:58:55 -06:00
Hrv comparison forms
This commit is contained in:
@@ -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} ;
|
||||||
|
|
||||||
|
|||||||
@@ -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} ;
|
||||||
|
|||||||
@@ -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
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -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" ;
|
||||||
|
|||||||
@@ -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 ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 ;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ lin
|
|||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
IdRP = mkA "koji" ;
|
IdRP = (mkA "koji").posit ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
Reference in New Issue
Block a user