Files
gf-core/lib/resource/bulgarian/MorphoFunsBul.gf

182 lines
3.8 KiB
Plaintext

--# -path=.:../abstract:../../prelude:../common
resource MorphoFunsBul = open
Prelude,
CatBul,
MorphoBul
in {
oper
--2 Adverbs
-- Adverbs are not inflected. Most lexical ones have position
-- after the verb. Some can be preverbal (e.g. "always").
mkAdv : Str -> Adv = \x -> ss x ** {lock_Adv = <>} ;
mkAdV : Str -> AdV = \x -> ss x ** {lock_AdV = <>} ;
-- Adverbs modifying adjectives and sentences can also be formed.
mkAdA : Str -> AdA = \x -> ss x ** {lock_AdA = <>} ;
--2 Adjectives
--
AS, A2S, AV : Type = A ;
A2V : Type = A2 ;
mkA2 : A -> Prep -> A2 ;
mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ;
mkAS : A -> AS ;
mkAS v = v ** {lock_A = <>} ;
mkA2S : A -> Prep -> A2S ;
mkA2S v p = mkA2 v p ** {lock_A = <>} ;
mkAV : A -> AV ;
mkAV v = v ** {lock_A = <>} ;
mkA2V : A -> Prep -> A2V ;
mkA2V v p = mkA2 v p ** {lock_A2 = <>} ;
--2 Verbs
--
reflV : V -> Case -> V ;
reflV v c = {s = v.s; vtype = VMedial c; lock_V=<>} ;
phrasalV : V -> Case -> V ;
phrasalV v c = {s = v.s; vtype = VPhrasal c; lock_V=<>} ;
actionV : VTable -> VTable -> V ;
actionV imperf perf = {
s = table {Imperf=>imperf; Perf=>perf};
vtype = VNormal;
lock_V=<>
} ;
stateV : VTable -> V ;
stateV vtable = {
s = \\_=>vtable;
vtype = VNormal;
lock_V=<>
} ;
--3 Zero-place verbs
--
V0 : Type = V ;
mkV0 : V -> V0 ;
mkV0 v = v ** {lock_V = <>} ;
--3 Two-place verbs
--
prepV2 : V -> Prep -> V2 ;
prepV2 v p = {s = v.s; c2 = p; vtype = v.vtype; lock_V2 = <>} ;
dirV2 : V -> V2 ;
dirV2 v = prepV2 v noPrep ;
--3 Three-place verbs
--
-- Three-place (ditransitive) verbs need two prepositions, of which
-- the first one or both can be absent.
mkV3 : V -> Prep -> Prep -> V3 ; -- speak, with, about
mkV3 v p q = {s = v.s; s1 = v.s1; c2 = p; c3 = q; vtype = v.vtype; lock_V3 = <>} ;
dirV3 : V -> Prep -> V3 ; -- give,_,to
dirV3 v p = mkV3 v noPrep p ;
dirdirV3 : V -> V3 ; -- give,_,_
dirdirV3 v = dirV3 v noPrep ;
--3 Other verbs
--
V2S, V2V, V2Q : Type = V2 ;
mkV2S : V -> Prep -> V2S ;
mkV2S v p = prepV2 v p ** {lock_V2 = <>} ;
mkV2V : V -> Prep -> Prep -> V2V ;
mkV2V v p t = prepV2 v p ** {s4 = t ; lock_V2 = <>} ;
mkV2A : V -> Prep -> V2A ;
mkV2A v p = prepV2 v p ** {lock_V2A = <>} ;
mkV2Q : V -> Prep -> V2Q ;
mkV2Q v p = prepV2 v p ** {lock_V2 = <>} ;
mkVS : V -> VS ;
mkVS v = v ** {lock_VS = <>} ;
mkVV : V -> VV ;
mkVV v = v ** {lock_VV = <>} ;
mkVA : V -> VA ;
mkVA v = v ** {lock_VA = <>} ;
mkV2A : V -> Prep -> V2A ;
mkV2A v p = prepV2 v p ** {lock_V2A = <>} ;
mkVQ : V -> VQ ;
mkVQ v = v ** {lock_VQ = <>} ;
mkV2Q : V -> Prep -> V2Q ;
mkV2Q v p = prepV2 v p ** {lock_V2 = <>} ;
--2 Nouns
--3 Two-place Nouns
--
prepN2 : N -> Prep -> N2 ;
prepN2 n p = {s = n.s; g = n.g; c2 = p; lock_N2 = <>} ;
dirN2 : N -> N2 ;
dirN2 n = prepN2 n noPrep ;
--3 Three-place Nouns
--
prepN3 : N -> Prep -> Prep -> N3 ;
prepN3 n p q = {s = n.s; g = n.g; c2 = p; c3 = q; lock_N3 = <>} ;
dirN3 : N -> Prep -> N3 ;
dirN3 n p = prepN3 n noPrep p ;
dirdirN3 : N -> N3 ;
dirdirN3 n = dirN3 n noPrep ;
--2 Prepositions
--
-- A preposition as used for rection in the lexicon, as well as to
-- build $PP$s in the resource API, just requires a string.
mkPrep : Str -> Case -> Prep = \p,c -> {s = p; c = c; lock_Prep = <>} ;
noPrep : Prep = mkPrep [] Acc ;
--2 Proper Names
--
mkPN : Str -> Gender -> PN ;
mkPN s g = {s = s; g = g ; lock_PN = <>} ;
--2 IAdv
--
mkIAdv : Str -> IAdv ;
mkIAdv s = {s1 = s; s2 = s + "ňî"; lock_IAdv = <>} ;
}