forked from GitHub/gf-rgl
247 lines
5.6 KiB
Plaintext
247 lines
5.6 KiB
Plaintext
resource ParadigmsHrv = open CatHrv, ResHrv, (R=ResHrv), Prelude in {
|
|
|
|
----------------
|
|
-- Parameters
|
|
|
|
oper
|
|
singular : Number
|
|
= Sg ;
|
|
plural : Number
|
|
= Pl ;
|
|
|
|
mascAnimate : Gender
|
|
= Masc Anim ;
|
|
mascInanimate : Gender
|
|
= Masc Inanim ;
|
|
masculine : Gender
|
|
= Masc Inanim ;
|
|
feminine : Gender
|
|
= Fem ;
|
|
neuter : Gender
|
|
= Neutr ;
|
|
|
|
nominative : Case
|
|
= Nom ;
|
|
genitive : Case
|
|
= Gen ;
|
|
dative : Case
|
|
= Dat ;
|
|
accusative : Case
|
|
= Acc ;
|
|
vocative : Case
|
|
= R.Voc ;
|
|
locative : Case
|
|
= Loc ;
|
|
instrumental : Case
|
|
= Ins ;
|
|
|
|
------------------------------
|
|
-- Nouns
|
|
|
|
oper
|
|
|
|
mkN = overload {
|
|
mkN : (sgnom : Str) -> N -- guessing gender
|
|
= \sgnom -> lin N (smartLexNoun sgnom) ;
|
|
mkN : (sgnom : Str) -> Gender -> N
|
|
= \sgnom, g -> lin N (mkgLexNoun sgnom g) ;
|
|
mkN : NForms -> Gender -> N -- the worst case
|
|
= \nfs,g -> lin N (nfs ** {g = g}) ;
|
|
} ;
|
|
|
|
-- The following standard declensions can be used with good accuracy.
|
|
-- However, they have some defaults that may have to be overwritten.
|
|
-- This can be done easily by overriding those formes with record extension (**).
|
|
|
|
NForms = {snom,sgen,sdat,sacc,svoc,sins,pnom,pgen,pdat,pacc : Str} ;
|
|
|
|
izvorNForms : Str -> NForms
|
|
= izvorN ;
|
|
nokatNForms : Str -> NForms
|
|
= nokatN ;
|
|
gradaninNForms : Str -> NForms
|
|
= gradaninN ;
|
|
vojnikNForms : Str -> NForms
|
|
= vojnikN ;
|
|
bubregNForms : Str -> NForms
|
|
= bubregN ;
|
|
trbuhNForms : Str -> NForms
|
|
= trbuhN ;
|
|
cvorakNForms : Str -> NForms
|
|
= cvorakN ;
|
|
panjNForms : Str -> NForms
|
|
= panjN ;
|
|
suzanjNForms : Str -> NForms
|
|
= suzanjN ;
|
|
pristNForms : Str -> NForms
|
|
= pristN ;
|
|
stricNForms : Str -> NForms
|
|
= stricN ;
|
|
klinacNForms : Str -> NForms
|
|
= klinacN ;
|
|
posjetilacNForms : Str -> NForms
|
|
= posjetilacN ;
|
|
pepeoNForms : Str -> NForms
|
|
= pepeoN ;
|
|
ugaoNForms : Str -> NForms
|
|
= ugaoN ;
|
|
bifeNForms : Str -> NForms
|
|
= bifeN ;
|
|
ziriNForms : Str -> NForms
|
|
= ziriN ;
|
|
taksiNForms : Str -> NForms
|
|
= taksiN ;
|
|
koljenoNForms : Str -> NForms
|
|
= koljenoN ;
|
|
jedroNForms : Str -> NForms
|
|
= jedroN ;
|
|
poljeNForms : Str -> NForms
|
|
= poljeN ;
|
|
zenaNForms : Str -> NForms
|
|
= zenaN ;
|
|
|
|
PNForms : Type = {snom, sgen, sdat, sacc, svoc, sins : Str} ;
|
|
|
|
mkPN = overload {
|
|
mkPN : Str -> PN
|
|
= \s ->
|
|
let
|
|
nf = smartLexNoun s ;
|
|
n = nounFormsNoun nf nf.g
|
|
in lin PN {
|
|
s = \\c => n.s ! Sg ! c ; ---- TODO check this
|
|
g = nf.g
|
|
} ;
|
|
mkPN : PNForms -> Gender -> PN
|
|
= \fs, g -> lin PN {
|
|
s = table {
|
|
Nom => fs.snom ;
|
|
Gen => fs.sgen ;
|
|
Dat | Loc => fs.sdat ;
|
|
Acc => fs.sacc ;
|
|
Voc => fs.svoc ;
|
|
Ins => fs.sins
|
|
} ;
|
|
g = g
|
|
} ;
|
|
} ;
|
|
|
|
---------------------
|
|
-- Adjectives
|
|
|
|
-- Only positive forms so far ----
|
|
|
|
mkA = overload {
|
|
mkA : Str -> A
|
|
= \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 : AForms) -> (compar : Str) -> A
|
|
= \posit,compar -> lin A {
|
|
posit = posit ;
|
|
compar = velikA compar ;
|
|
superl = superlAForms (velikA compar)
|
|
} ;
|
|
mkA : (posit, compar : AForms) -> A
|
|
= \posit,compar -> lin A {
|
|
posit = posit ;
|
|
compar = compar ;
|
|
superl = superlAForms compar
|
|
} ;
|
|
mkA : (posit : AForms) -> A
|
|
= \posit ->
|
|
let
|
|
compar = regComparAForms posit
|
|
in lin A {
|
|
posit = posit ;
|
|
compar = compar ;
|
|
superl = superlAForms compar
|
|
} ;
|
|
} ;
|
|
|
|
invarA : Str -> A
|
|
= \s -> lin A {posit,compar,superl = invarAForms s} ; ---- TODO compar, superl?
|
|
|
|
AForms : Type
|
|
= R.AdjForms ;
|
|
|
|
-- the complete definition of AForms is
|
|
-- {msnom, fsnom, nsnom, msgen, fsgen, msdat,
|
|
-- fsdat, fsacc, msloc, msins, fsins, mpnom, pgen : Str} ;
|
|
|
|
velikAForms : Str -> AForms
|
|
= velikA ;
|
|
|
|
invarAForms : Str -> AForms
|
|
= \s -> invarAdjForms s ;
|
|
|
|
|
|
-------------------------
|
|
-- Verbs
|
|
|
|
mkV = overload {
|
|
mkV : (raditi : Str) -> V
|
|
= \s -> lin V {s = smartVerbForms s} ;
|
|
mkV : (raditi, radem, radio : Str) -> V
|
|
= \raditi, radem, radio ->
|
|
lin V {s = aeiVerbForms raditi radem radio} ;
|
|
mkV : VerbForms -> V
|
|
= \vf -> lin V {s = vf} ;
|
|
} ;
|
|
|
|
|
|
mkV2 = overload {
|
|
mkV2 : V -> V2
|
|
= \v -> lin V2 {s = v.s ;
|
|
c = {s = [] ; c = accusative ; hasPrep = False}} ;
|
|
mkV2 : V -> Case -> V2
|
|
= \v,c -> lin V2 {s = v.s ;
|
|
c = {s = [] ; c = c ; hasPrep = False}} ;
|
|
mkV2 : V -> Prep -> V2
|
|
= \v,c -> lin V2 {s = v.s ; c = c} ;
|
|
} ;
|
|
|
|
------------------------
|
|
-- Adverbs, prepositions, conjunctions, ...
|
|
|
|
mkAdv : Str -> Adv
|
|
= \s -> lin Adv {s = s} ;
|
|
|
|
mkPrep = overload {
|
|
mkPrep : Str -> Prep -- genitive prepositions
|
|
= \s -> lin Prep {s = s ; c = genitive ; hasPrep = True} ;
|
|
mkPrep : Case -> Prep -- oblique cases, empty string
|
|
= \c -> lin Prep {s = [] ; c = c ; hasPrep = False} ;
|
|
mkPrep : Str -> Case -> Prep
|
|
= \s,c -> lin Prep {s = s ; c = c ; hasPrep = True} ;
|
|
} ;
|
|
|
|
mkConj : Str -> Conj
|
|
= \s -> lin Conj {s1 = [] ; s2 = s} ;
|
|
|
|
mkAdN : Str -> AdN
|
|
= \s -> lin AdN {s = s} ;
|
|
|
|
mkOrd : Str -> Ord
|
|
= \s -> lin Ord (velikA s) ;
|
|
|
|
ifPluralNP : NP -> Bool
|
|
= \np -> case np.a of {
|
|
Ag _ Pl _ => True ;
|
|
_ => False
|
|
} ;
|
|
|
|
}
|