mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-10-02 15:13:39 -06:00
more extensions by Codex + reuse the TenseX module
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
--# -path=.:../czech:../common:../abstract:../prelude
|
--# -path=.:../czech:../common:../abstract:../prelude
|
||||||
|
|
||||||
resource TryCze = ExtraCze, SyntaxCze, LexiconCze, ParadigmsCze -[mkAdv, mkDet,mkQuant]**
|
resource TryCze = ExtraCze, SyntaxCze, LexiconCze, ParadigmsCze -[mkAdv,mkAdN,mkIAdv,mkDet,mkIDet,mkIP,mkQuant,mkCard,mkPConj,mkVoc]**
|
||||||
open (P = ParadigmsCze) in {
|
open (P = ParadigmsCze) in {
|
||||||
|
|
||||||
-- oper
|
-- oper
|
||||||
|
|||||||
@@ -21,6 +21,18 @@ concrete AdjectiveCze of Adjective = CatCze ** open ResCze, Prelude in {
|
|||||||
|
|
||||||
UseA2 a = let ap = adjFormsAdjective a in ap ** {pred = longPredicate ap ; isPost = True} ;
|
UseA2 a = let ap = adjFormsAdjective a in ap ** {pred = longPredicate ap ; isPost = True} ;
|
||||||
|
|
||||||
|
ReflA2 a =
|
||||||
|
let ap = adjFormsAdjective a ;
|
||||||
|
refl : Case => Str = table {
|
||||||
|
Nom | ResCze.Voc => "sebe" ; Gen | Acc => "sebe" ;
|
||||||
|
Dat | Loc => "sobě" ; Ins => "sebou"
|
||||||
|
} ;
|
||||||
|
compl = a.c.s ++ refl ! a.c.c
|
||||||
|
in ap ** {
|
||||||
|
s = \\g,n,c => ap.s ! g ! n ! c ++ compl ;
|
||||||
|
pred = \\agr => longPredicate ap ! agr ++ compl ; isPost = True
|
||||||
|
} ;
|
||||||
|
|
||||||
UseComparA a = let ap = adjFormsAdjective a.compar in ap ** {pred = longPredicate ap ; isPost = False} ;
|
UseComparA a = let ap = adjFormsAdjective a.compar in ap ** {pred = longPredicate ap ; isPost = False} ;
|
||||||
ComparA a np = AdvAP (UseComparA a) {s = "než" ++ np.s ! Nom} ;
|
ComparA a np = AdvAP (UseComparA a) {s = "než" ++ np.s ! Nom} ;
|
||||||
AdjOrd ord = ord ** {pred = longPredicate ord ; isPost = False} ;
|
AdjOrd ord = ord ** {pred = longPredicate ord ; isPost = False} ;
|
||||||
@@ -30,4 +42,15 @@ concrete AdjectiveCze of Adjective = CatCze ** open ResCze, Prelude in {
|
|||||||
pred = \\a => ap.pred ! a ++ adv.s ; isPost = True
|
pred = \\a => ap.pred ! a ++ adv.s ; isPost = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
SentAP ap sc = ap ** {
|
||||||
|
s = \\g,n,c => ap.s ! g ! n ! c ++ sc.s ;
|
||||||
|
pred = \\a => ap.pred ! a ++ sc.s ; isPost = True
|
||||||
|
} ;
|
||||||
|
|
||||||
|
CAdvAP cadv ap np = ap ** {
|
||||||
|
s = \\g,n,c => cadv.s ++ ap.s ! g ! n ! c ++ "než" ++ np.s ! Nom ;
|
||||||
|
pred = \\a => cadv.s ++ ap.pred ! a ++ "než" ++ np.s ! Nom ;
|
||||||
|
isPost = True
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,17 @@ concrete AdverbCze of Adverb = CatCze **
|
|||||||
open ResCze, Prelude in {
|
open ResCze, Prelude in {
|
||||||
|
|
||||||
lin
|
lin
|
||||||
|
PositAdvAdj a = {s = a.nsnom} ;
|
||||||
|
PositAdAAdj a = {s = a.nsnom} ;
|
||||||
|
AdAdv ada adv = {s = ada.s ++ adv.s} ;
|
||||||
|
AdnCAdv cadv = {s = cadv.s} ;
|
||||||
|
ComparAdvAdj cadv a np = {
|
||||||
|
s = cadv.s ++ a.nsnom ++ "než" ++ np.s ! Nom
|
||||||
|
} ;
|
||||||
|
ComparAdvAdjS cadv a sent = {
|
||||||
|
s = cadv.s ++ a.nsnom ++ "než" ++ sent.s
|
||||||
|
} ;
|
||||||
|
|
||||||
PrepNP prep np = {
|
PrepNP prep np = {
|
||||||
s = fullComplement prep np.s np.prep
|
s = fullComplement prep np.s np.prep
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
+12
-28
@@ -1,24 +1,21 @@
|
|||||||
concrete CatCze of Cat =
|
concrete CatCze of Cat =
|
||||||
--- CommonX **
|
CommonX **
|
||||||
|
|
||||||
open ResCze, Prelude in {
|
open ResCze, Prelude in {
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
Text = {s : Str} ;
|
|
||||||
Phr = {s : Str} ;
|
|
||||||
Utt = {s : Str} ;
|
|
||||||
|
|
||||||
S = ResCze.Sentence ;
|
S = ResCze.Sentence ;
|
||||||
Cl = {subj,clit,compl : Str ; verb : VerbForms ; a : Agr ; isDrop,clitPresent : Bool} ;
|
Cl = ResCze.Clause ;
|
||||||
Comp = {s : Agr => Str} ;
|
Comp = {s : Agr => Str} ;
|
||||||
|
|
||||||
QS = {s,ind : Str} ;
|
QS = {s,ind : Str} ;
|
||||||
QCl = {q,subj,clit,compl : Str ; verb : VerbForms ; a : Agr ; yesNo : Bool} ;
|
ClSlash = ResCze.Clause ** {c : ComplementCase ; ind : Str} ;
|
||||||
IAdv, IComp = {s : Str} ;
|
SSlash = {s : Str ; c : ComplementCase} ;
|
||||||
|
QCl = ResCze.Clause ** {q : Str ; yesNo : Bool} ;
|
||||||
|
IComp = {s : Str} ;
|
||||||
IP = {s : Case => Str ; a : Agr} ;
|
IP = {s : Case => Str ; a : Agr} ;
|
||||||
IDet = Determiner ;
|
IDet = Determiner ;
|
||||||
IQuant = Adjective ;
|
IQuant = Adjective ;
|
||||||
Imp = {s : Bool => Agr => Str} ;
|
Imp = {s : Polarity => Agr => Str} ;
|
||||||
|
|
||||||
RS = {s : Agr => Str} ;
|
RS = {s : Agr => Str} ;
|
||||||
RCl = {subj,clit,compl : Agr => Str ; verb : VerbForms} ; ---- RAgr with composite RP
|
RCl = {subj,clit,compl : Agr => Str ; verb : VerbForms} ; ---- RAgr with composite RP
|
||||||
@@ -32,16 +29,16 @@ concrete CatCze of Cat =
|
|||||||
V = ResCze.VerbForms ;
|
V = ResCze.VerbForms ;
|
||||||
V2 = ResCze.VerbForms ** {c : ComplementCase} ;
|
V2 = ResCze.VerbForms ** {c : ComplementCase} ;
|
||||||
V3 = ResCze.VerbForms ** {c,c2 : ComplementCase} ; -- c : direct object, c2 : indirect object
|
V3 = ResCze.VerbForms ** {c,c2 : ComplementCase} ; -- c : direct object, c2 : indirect object
|
||||||
VS,VQ = ResCze.VerbForms ;
|
VS,VQ,VA = ResCze.VerbForms ;
|
||||||
VV = ResCze.VerbForms ** {isAux : Bool} ;
|
VV = ResCze.VerbForms ** {isAux : Bool} ;
|
||||||
|
V2A,V2Q,V2S,V2V = ResCze.VerbForms ** {c : ComplementCase} ;
|
||||||
|
|
||||||
A = ResCze.DegreeForms ;
|
A = ResCze.DegreeForms ;
|
||||||
AP = ResCze.Adjective ** {pred : Agr => Str ; isPost : Bool} ;
|
AP = ResCze.Adjective ** {pred : Agr => Str ; isPost : Bool} ;
|
||||||
A2 = ResCze.DegreeForms ** {c : ComplementCase} ;
|
A2 = ResCze.DegreeForms ** {c : ComplementCase} ;
|
||||||
|
|
||||||
AdA = {s : Str} ;
|
|
||||||
|
|
||||||
N = ResCze.NounForms ;
|
N = ResCze.NounForms ;
|
||||||
|
N2 = ResCze.NounForms ** {c2 : ComplementCase} ;
|
||||||
CN = ResCze.Noun ; -- {s : Number => Case => Str ; g : Gender}
|
CN = ResCze.Noun ; -- {s : Number => Case => Str ; g : Gender}
|
||||||
-- Object-clitic eligibility and subject omission are independent.
|
-- Object-clitic eligibility and subject omission are independent.
|
||||||
-- Extend.ProDrop selects isDrop; clit ! Nom retains its empty constituent.
|
-- Extend.ProDrop selects isDrop; clit ! Nom retains its empty constituent.
|
||||||
@@ -55,29 +52,16 @@ concrete CatCze of Cat =
|
|||||||
Quant = {s : Gender => Number => Case => Str} ; -- same as AP
|
Quant = {s : Gender => Number => Case => Str} ; -- same as AP
|
||||||
Predet = Adjective ** {postPron : Bool} ;
|
Predet = Adjective ** {postPron : Bool} ;
|
||||||
Num = Determiner ;
|
Num = Determiner ;
|
||||||
Card = Determiner ; -- {s : Gender => Case => Str ; size : NumSize} ;
|
Card,DAP = Determiner ; -- {s : Gender => Case => Str ; size : NumSize} ;
|
||||||
Pron = PronForms ** {poss : DemPronForms} ;
|
Pron = PronForms ** {poss : DemPronForms} ;
|
||||||
|
|
||||||
Adv = {s : Str} ;
|
|
||||||
Prep = ResCze.ComplementCase ; -- {s : Str ; c : Case ; hasPrep : Bool} ;
|
Prep = ResCze.ComplementCase ; -- {s : Str ; c : Case ; hasPrep : Bool} ;
|
||||||
Conj = {s1,s2 : Str} ; ---- may need a number
|
Conj = {s1,s2 : Str} ; ---- may need a number
|
||||||
|
|
||||||
Pol = {s : Str ; p : Bool} ;
|
|
||||||
Temp = {s : Str ; t : CTense} ;
|
|
||||||
Tense = {s : Str ; t : CTense} ;
|
|
||||||
Ant = {s : Str ; t : CTense} ;
|
|
||||||
|
|
||||||
PConj = {s : Str} ;
|
|
||||||
Voc = {s : Str} ;
|
|
||||||
|
|
||||||
AdN = {s : Str} ;
|
|
||||||
AdV = {s : Str} ;
|
|
||||||
CAdv = {s : Str} ;
|
|
||||||
SC = {s : Str} ;
|
|
||||||
|
|
||||||
linref
|
linref
|
||||||
N = \s -> s.snom ;
|
N = \s -> s.snom ;
|
||||||
A = \s -> s.msnom ;
|
A = \s -> s.msnom ;
|
||||||
|
Conj = \c -> c.s2 ;
|
||||||
|
|
||||||
|
|
||||||
lincat Numeral = Determiner ; ---- TODO: should contain Ord as well
|
lincat Numeral = Determiner ; ---- TODO: should contain Ord as well
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ concrete ConjunctionCze of Conjunction = CatCze **
|
|||||||
|
|
||||||
lincat
|
lincat
|
||||||
[Adv] = {s1,s2 : Str} ;
|
[Adv] = {s1,s2 : Str} ;
|
||||||
|
[CN] = {s1,s2 : Number => Case => Str ; g,gPl : Gender} ;
|
||||||
[AP] = {s1,s2 : Gender => Number => Case => Str ; pred1,pred2 : Agr => Str ; isPost : Bool} ;
|
[AP] = {s1,s2 : Gender => Number => Case => Str ; pred1,pred2 : Agr => Str ; isPost : Bool} ;
|
||||||
[NP] = {s1,s2,prep1,prep2 : Case => Str ; a : Agr ; m : ModifierAgr} ;
|
[NP] = {s1,s2,prep1,prep2 : Case => Str ; a : Agr ; m : ModifierAgr} ;
|
||||||
[S] = {s1 : Sentence ; s2 : Str} ;
|
[S] = {s1 : Sentence ; s2 : Str} ;
|
||||||
@@ -12,6 +13,16 @@ concrete ConjunctionCze of Conjunction = CatCze **
|
|||||||
BaseAdv = twoSS ;
|
BaseAdv = twoSS ;
|
||||||
ConsAdv = consrSS comma ;
|
ConsAdv = consrSS comma ;
|
||||||
|
|
||||||
|
BaseCN x y = {s1 = x.s ; s2 = y.s ; g = x.g ; gPl = x.gPl} ;
|
||||||
|
ConsCN x xs = {
|
||||||
|
s1 = \\n,c => x.s ! n ! c ++ comma ++ xs.s1 ! n ! c ;
|
||||||
|
s2 = xs.s2 ; g = x.g ; gPl = x.gPl
|
||||||
|
} ;
|
||||||
|
ConjCN conj xs = {
|
||||||
|
s = \\n,c => conj.s1 ++ xs.s1 ! n ! c ++ conj.s2 ++ xs.s2 ! n ! c ;
|
||||||
|
g = xs.g ; gPl = xs.gPl
|
||||||
|
} ;
|
||||||
|
|
||||||
BaseAP x y = twoTable3 Gender Number Case x y
|
BaseAP x y = twoTable3 Gender Number Case x y
|
||||||
** {pred1 = x.pred ; pred2 = y.pred ; isPost = orB x.isPost y.isPost} ;
|
** {pred1 = x.pred ; pred2 = y.pred ; isPost = orB x.isPost y.isPost} ;
|
||||||
ConsAP x xs = consrTable3 Gender Number Case comma x xs
|
ConsAP x xs = consrTable3 Gender Number Case comma x xs
|
||||||
@@ -23,14 +34,14 @@ concrete ConjunctionCze of Conjunction = CatCze **
|
|||||||
s2 = y.s ;
|
s2 = y.s ;
|
||||||
prep1 = x.prep ;
|
prep1 = x.prep ;
|
||||||
prep2 = y.prep ;
|
prep2 = y.prep ;
|
||||||
a = y.a ; m = x.m
|
a = y.a ; m = x.m ;
|
||||||
} ; -- clitics disappear ---- Agr TODO
|
} ; -- clitics disappear ---- Agr TODO
|
||||||
ConsNP x xs = {
|
ConsNP x xs = {
|
||||||
s1 = \\c => x.s ! c ++ comma ++ xs.s1 ! c ;
|
s1 = \\c => x.s ! c ++ comma ++ xs.s1 ! c ;
|
||||||
s2 = xs.s2 ;
|
s2 = xs.s2 ;
|
||||||
prep1 = \\c => x.prep ! c ++ comma ++ xs.prep1 ! c ;
|
prep1 = \\c => x.prep ! c ++ comma ++ xs.prep1 ! c ;
|
||||||
prep2 = xs.prep2 ;
|
prep2 = xs.prep2 ;
|
||||||
a = xs.a ; m = x.m ----
|
a = xs.a ; m = x.m ; ----
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
BaseS x y = {s1 = x ; s2 = y.s} ;
|
BaseS x y = {s1 = x ; s2 = y.s} ;
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
--# -path=.:../abstract:../common:../prelude
|
||||||
|
|
||||||
|
concrete ConstructionCze of Construction = CatCze **
|
||||||
|
open ResCze, Prelude, (P = ParadigmsCze), (G = GrammarCze) in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
Timeunit, Hour, Monthday, Year, Language = {s : Str} ;
|
||||||
|
Weekday, Month = {s : Str ; n : NounForms} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
ready_VP = G.UseComp (G.CompAP (G.PositA (P.mkA "připravený"))) ;
|
||||||
|
has_age_VP card = {
|
||||||
|
verb = copulaVerbForms ; clitPresent = False ; clit = \\_ => [] ;
|
||||||
|
compl = \\a => card.s ! Neutr ! Nom ++ "let" ++ "starý"
|
||||||
|
} ;
|
||||||
|
cup_of_CN np = G.PossNP (G.UseN (P.mkN "šálek")) np ;
|
||||||
|
n_units_AP card cn adj =
|
||||||
|
G.AdvAP (G.PositA adj) {s = card.s ! Neutr ! Nom ++ cn.s ! Pl ! Gen} ;
|
||||||
|
n_units_of_NP card cn np =
|
||||||
|
G.AdvNP np {s = card.s ! Neutr ! Nom ++ cn.s ! Pl ! Gen} ;
|
||||||
|
|
||||||
|
intYear year = {s = year.s} ;
|
||||||
|
yearAdv year = {s = "v roce" ++ year.s} ;
|
||||||
|
weekdayN day = day.n ;
|
||||||
|
monthN month = month.n ;
|
||||||
|
weekdayPunctualAdv day = {s = "v" ++ day.s} ;
|
||||||
|
weekdayHabitualAdv day = {s = "každý" ++ day.s} ;
|
||||||
|
|
||||||
|
monday_Weekday = {s = "pondělí" ; n = P.mkN "pondělí"} ;
|
||||||
|
tuesday_Weekday = {s = "úterý" ; n = P.mkN "úterý"} ;
|
||||||
|
wednesday_Weekday = {s = "středa" ; n = P.mkN "středa"} ;
|
||||||
|
thursday_Weekday = {s = "čtvrtek" ; n = P.mkN "čtvrtek"} ;
|
||||||
|
friday_Weekday = {s = "pátek" ; n = P.mkN "pátek"} ;
|
||||||
|
saturday_Weekday = {s = "sobota" ; n = P.mkN "sobota"} ;
|
||||||
|
sunday_Weekday = {s = "neděle" ; n = P.mkN "neděle"} ;
|
||||||
|
|
||||||
|
january_Month = {s = "leden" ; n = P.mkN "leden"} ;
|
||||||
|
february_Month = {s = "únor" ; n = P.mkN "únor"} ;
|
||||||
|
march_Month = {s = "březen" ; n = P.mkN "březen"} ;
|
||||||
|
april_Month = {s = "duben" ; n = P.mkN "duben"} ;
|
||||||
|
may_Month = {s = "květen" ; n = P.mkN "květen"} ;
|
||||||
|
june_Month = {s = "červen" ; n = P.mkN "červen"} ;
|
||||||
|
july_Month = {s = "červenec" ; n = P.mkN "červenec"} ;
|
||||||
|
august_Month = {s = "srpen" ; n = P.mkN "srpen"} ;
|
||||||
|
september_Month = {s = "září" ; n = P.mkN "září"} ;
|
||||||
|
october_Month = {s = "říjen" ; n = P.mkN "říjen"} ;
|
||||||
|
november_Month = {s = "listopad" ; n = P.mkN "listopad"} ;
|
||||||
|
december_Month = {s = "prosinec" ; n = P.mkN "prosinec"} ;
|
||||||
|
|
||||||
|
}
|
||||||
+115
-4
@@ -6,7 +6,6 @@ concrete ExtendCze of Extend = CatCze **
|
|||||||
iFem_Pron, youFem_Pron, weFem_Pron, youPlFem_Pron,
|
iFem_Pron, youFem_Pron, weFem_Pron, youPlFem_Pron,
|
||||||
theyFem_Pron, theyNeutr_Pron, youPolFem_Pron, youPolPlFem_Pron
|
theyFem_Pron, theyNeutr_Pron, youPolFem_Pron, youPolPlFem_Pron
|
||||||
---- constant not found (yet)
|
---- constant not found (yet)
|
||||||
,UttVPShort
|
|
||||||
,UttAccIP
|
,UttAccIP
|
||||||
,UttDatIP
|
,UttDatIP
|
||||||
,SubjRelNP
|
,SubjRelNP
|
||||||
@@ -21,15 +20,35 @@ concrete ExtendCze of Extend = CatCze **
|
|||||||
,ExistMassCN
|
,ExistMassCN
|
||||||
,ExistIPQS
|
,ExistIPQS
|
||||||
,ExistCN
|
,ExistCN
|
||||||
,EmptyRelSlash
|
|
||||||
,DetNPMasc
|
,DetNPMasc
|
||||||
,DetNPFem
|
,DetNPFem
|
||||||
,ComplBareVS
|
|
||||||
,CompIQuant
|
,CompIQuant
|
||||||
,CompBareCN
|
,CompBareCN
|
||||||
,PiedPipingQuestSlash
|
,PiedPipingQuestSlash
|
||||||
,PiedPipingRelSlash
|
,PiedPipingRelSlash
|
||||||
,TPastSimple
|
,MkVPS
|
||||||
|
,BaseVPS
|
||||||
|
,ConsVPS
|
||||||
|
,ConjVPS
|
||||||
|
,PredVPS
|
||||||
|
,MkVPI
|
||||||
|
,BaseVPI
|
||||||
|
,ConsVPI
|
||||||
|
,ConjVPI
|
||||||
|
,ComplVPIVV
|
||||||
|
,PassVPSlash
|
||||||
|
,PassAgentVPSlash
|
||||||
|
,PresPartAP
|
||||||
|
,PastPartAP
|
||||||
|
,PastPartAgentAP
|
||||||
|
,CompoundN
|
||||||
|
,GerundCN
|
||||||
|
,GerundNP
|
||||||
|
,GerundAdv
|
||||||
|
,InOrderToVP
|
||||||
|
,ProgrVPSlash
|
||||||
|
,PositAdVAdj
|
||||||
|
,ApposNP
|
||||||
]
|
]
|
||||||
with (Grammar = GrammarCze)
|
with (Grammar = GrammarCze)
|
||||||
**
|
**
|
||||||
@@ -37,7 +56,16 @@ open
|
|||||||
ResCze, Prelude, (S = SyntaxCze), (P = ParadigmsCze)
|
ResCze, Prelude, (S = SyntaxCze), (P = ParadigmsCze)
|
||||||
in {
|
in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
TPastSimple = {s = [] ; t = Past} ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
|
VPS = {s : Agr => Str} ;
|
||||||
|
[VPS] = {s1,s2 : Agr => Str} ;
|
||||||
|
VPI = {s : Agr => Str} ;
|
||||||
|
[VPI] = {s1,s2 : Agr => Str} ;
|
||||||
|
[Comp] = {s1,s2 : Agr => Str} ;
|
||||||
|
[Imp] = {s1,s2 : Polarity => Agr => Str} ;
|
||||||
RNP = BoundNPForms ** {m : RNPHead ; isPron : Bool} ;
|
RNP = BoundNPForms ** {m : RNPHead ; isPron : Bool} ;
|
||||||
RNPList = {s1,s2,prep1,prep2 : Agr => Case => Str ; m : RNPHead} ;
|
RNPList = {s1,s2,prep1,prep2 : Agr => Case => Str ; m : RNPHead} ;
|
||||||
|
|
||||||
@@ -45,6 +73,81 @@ param
|
|||||||
RNPHead = AntecedentHead | FixedHead ModifierAgr ;
|
RNPHead = AntecedentHead | FixedHead ModifierAgr ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
|
MkVPS temp pol vp = {s = \\a =>
|
||||||
|
tenseClitic temp.t a ++ vp.clit ! a ++
|
||||||
|
tenseVerb temp.t vp.verb a pol.p ++ vp.compl ! a
|
||||||
|
} ;
|
||||||
|
BaseVPS x y = {s1 = x.s ; s2 = y.s} ;
|
||||||
|
ConsVPS x xs = {s1 = \\a => x.s ! a ++ SOFT_BIND ++ "," ++ xs.s1 ! a ; s2 = xs.s2} ;
|
||||||
|
ConjVPS conj xs = {s = \\a => conj.s1 ++ xs.s1 ! a ++ conj.s2 ++ xs.s2 ! a} ;
|
||||||
|
PredVPS np vps = sentence True (np.s ! Nom) [] (vps.s ! np.a) ;
|
||||||
|
|
||||||
|
MkVPI vp = {s = \\a => vp.verb.inf ++ vp.clit ! a ++ vp.compl ! a} ;
|
||||||
|
BaseVPI x y = {s1 = x.s ; s2 = y.s} ;
|
||||||
|
ConsVPI x xs = {s1 = \\a => x.s ! a ++ SOFT_BIND ++ "," ++ xs.s1 ! a ; s2 = xs.s2} ;
|
||||||
|
ConjVPI conj xs = {s = \\a => conj.s1 ++ xs.s1 ! a ++ conj.s2 ++ xs.s2 ! a} ;
|
||||||
|
ComplVPIVV vv vpi = {
|
||||||
|
verb = vv ; clitPresent = False ; clit = \\_ => vv.refl ; compl = vpi.s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
BaseComp x y = {s1 = x.s ; s2 = y.s} ;
|
||||||
|
ConsComp x xs = {s1 = \\a => x.s ! a ++ SOFT_BIND ++ "," ++ xs.s1 ! a ; s2 = xs.s2} ;
|
||||||
|
ConjComp conj xs = {s = \\a => conj.s1 ++ xs.s1 ! a ++ conj.s2 ++ xs.s2 ! a} ;
|
||||||
|
BaseImp x y = {s1 = x.s ; s2 = y.s} ;
|
||||||
|
ConsImp x xs = {s1 = \\p,a => x.s ! p ! a ++ SOFT_BIND ++ "," ++ xs.s1 ! p ! a ; s2 = xs.s2} ;
|
||||||
|
ConjImp conj xs = {s = \\p,a => conj.s1 ++ xs.s1 ! p ! a ++ conj.s2 ++ xs.s2 ! p ! a} ;
|
||||||
|
|
||||||
|
PassVPSlash vp = {
|
||||||
|
verb = vp.verb ; clitPresent = True ;
|
||||||
|
clit = \\a => vp.clit ! a ++ "se" ++ vp.clitAfter ! a ;
|
||||||
|
compl = \\a => vp.compl ! a ++ vp.ind ! a
|
||||||
|
} ;
|
||||||
|
PassAgentVPSlash vp np =
|
||||||
|
let pass = PassVPSlash vp in pass ** {
|
||||||
|
compl = \\a => pass.compl ! a ++ "od" ++ np.prep ! Gen
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PresPartAP vp =
|
||||||
|
let phrase = vp.verb.inf ++ vp.clit ! Ag Neutr Sg P3 ++ vp.compl ! Ag Neutr Sg P3 ;
|
||||||
|
ap = adjFormsAdjective (invarAdjForms phrase)
|
||||||
|
in ap ** {pred = longPredicate ap ; isPost = True} ;
|
||||||
|
PastPartAP vp =
|
||||||
|
let phrase = vp.verb.pastpartsg ++ vp.compl ! Ag Neutr Sg P3 ++ vp.ind ! Ag Neutr Sg P3 ;
|
||||||
|
ap = adjFormsAdjective (invarAdjForms phrase)
|
||||||
|
in ap ** {pred = longPredicate ap ; isPost = True} ;
|
||||||
|
PastPartAgentAP vp np =
|
||||||
|
let ap = PastPartAP vp in ap ** {
|
||||||
|
s = \\g,n,c => ap.s ! g ! n ! c ++ "od" ++ np.prep ! Gen ;
|
||||||
|
pred = \\a => ap.pred ! a ++ "od" ++ np.prep ! Gen ; isPost = True
|
||||||
|
} ;
|
||||||
|
|
||||||
|
CompoundN first head = head ** {
|
||||||
|
snom = head.snom ++ first.sgen ; sgen = head.sgen ++ first.sgen ;
|
||||||
|
sdat = head.sdat ++ first.sgen ; sacc = head.sacc ++ first.sgen ;
|
||||||
|
svoc = head.svoc ++ first.sgen ; sloc = head.sloc ++ first.sgen ;
|
||||||
|
sins = head.sins ++ first.sgen ; pnom = head.pnom ++ first.sgen ;
|
||||||
|
pgen = head.pgen ++ first.sgen ; pdat = head.pdat ++ first.sgen ;
|
||||||
|
pacc = head.pacc ++ first.sgen ; ploc = head.ploc ++ first.sgen ;
|
||||||
|
pins = head.pins ++ first.sgen
|
||||||
|
} ;
|
||||||
|
|
||||||
|
GerundCN vp = {
|
||||||
|
s = \\_,_ => vp.verb.inf ++ vp.clit ! Ag Neutr Sg P3 ++ vp.compl ! Ag Neutr Sg P3 ;
|
||||||
|
g = Neutr ; gPl = Neutr
|
||||||
|
} ;
|
||||||
|
GerundNP vp = MassNP (GerundCN vp) ;
|
||||||
|
GerundAdv vp = {s = vp.verb.inf ++ vp.clit ! Ag Neutr Sg P3 ++ vp.compl ! Ag Neutr Sg P3} ;
|
||||||
|
InOrderToVP vp = {s = "aby" ++ vp.verb.inf ++ vp.clit ! Ag Neutr Sg P3 ++ vp.compl ! Ag Neutr Sg P3} ;
|
||||||
|
ProgrVPSlash vp = vp ;
|
||||||
|
PositAdVAdj a = {s = a.nsnom} ;
|
||||||
|
ApposNP first second =
|
||||||
|
let forms = appendNPForms first (SOFT_BIND ++ "," ++ second.s ! Nom)
|
||||||
|
in first ** forms ** {clit = forms.s ; hasClit = False ; isDrop = False} ;
|
||||||
|
|
||||||
|
UseDAP dap = dapNP Neutr dap ;
|
||||||
|
UseDAPMasc dap = dapNP (Masc Anim) dap ;
|
||||||
|
UseDAPFem dap = dapNP Fem dap ;
|
||||||
|
|
||||||
-- Standalone oblique NPs use full forms, never clitics or prepositional forms.
|
-- Standalone oblique NPs use full forms, never clitics or prepositional forms.
|
||||||
UttAccNP np = {s = np.s ! Acc} ;
|
UttAccNP np = {s = np.s ! Acc} ;
|
||||||
UttDatNP np = {s = np.s ! Dat} ;
|
UttDatNP np = {s = np.s ! Dat} ;
|
||||||
@@ -106,6 +209,14 @@ lin
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
dapNP : Gender -> Determiner -> S.NP = \g,dap ->
|
||||||
|
let forms : Case => Str = \\c => dap.s ! g ! c ;
|
||||||
|
agr = numeralAgr g dap P3 in
|
||||||
|
lin NP (npForms forms forms ** {
|
||||||
|
clit = forms ; a = agr ; m = numeralModAgr g dap ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False
|
||||||
|
}) ;
|
||||||
|
|
||||||
BoundNPForms : Type = {
|
BoundNPForms : Type = {
|
||||||
s,prep,before,prepBefore : Agr => Case => Str ; after : Agr => Str
|
s,prep,before,prepBefore : Agr => Case => Str ; after : Agr => Str
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ lin
|
|||||||
subj = case experiencer.hasClit of {True => [] ; False => experiencer.s ! Dat} ;
|
subj = case experiencer.hasClit of {True => [] ; False => experiencer.s ! Dat} ;
|
||||||
clit = case experiencer.hasClit of {True => experiencer.clit ! Dat ; False => []} ;
|
clit = case experiencer.hasClit of {True => experiencer.clit ! Dat ; False => []} ;
|
||||||
compl = predicate.s ! Nom ; verb = copulaVerbForms ; a = predicate.a ;
|
compl = predicate.s ! Nom ; verb = copulaVerbForms ; a = predicate.a ;
|
||||||
|
finite = (mkClause [] [] [] copulaVerbForms predicate.a False False).finite ;
|
||||||
|
auxiliary = (mkClause [] [] [] copulaVerbForms predicate.a False False).auxiliary ;
|
||||||
isDrop = experiencer.hasClit ; clitPresent = experiencer.hasClit
|
isDrop = experiencer.hasClit ; clitPresent = experiencer.hasClit
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -18,6 +20,9 @@ lin
|
|||||||
subj = case experiencer.hasClit of {True => [] ; False => experiencer.s ! Dat} ;
|
subj = case experiencer.hasClit of {True => [] ; False => experiencer.s ! Dat} ;
|
||||||
clit = case experiencer.hasClit of {True => experiencer.clit ! Dat ; False => []} ;
|
clit = case experiencer.hasClit of {True => experiencer.clit ! Dat ; False => []} ;
|
||||||
compl = [] ; verb = copulaVerbForms ; a = predicate.a ;
|
compl = [] ; verb = copulaVerbForms ; a = predicate.a ;
|
||||||
|
isDrop = False ; clitPresent = False ;
|
||||||
|
finite = (mkClause [] [] [] copulaVerbForms predicate.a False False).finite ;
|
||||||
|
auxiliary = (mkClause [] [] [] copulaVerbForms predicate.a False False).auxiliary ;
|
||||||
yesNo = False
|
yesNo = False
|
||||||
} ;
|
} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ concrete GrammarCze of Grammar =
|
|||||||
TextCze,
|
TextCze,
|
||||||
StructuralCze,
|
StructuralCze,
|
||||||
IdiomCze,
|
IdiomCze,
|
||||||
TenseCze
|
NamesCze,
|
||||||
|
TenseX
|
||||||
** {
|
** {
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-25
@@ -5,34 +5,21 @@ lin
|
|||||||
ImpP3 np vp = {
|
ImpP3 np vp = {
|
||||||
s = "nechť" ++ vp.clit ! np.a ++
|
s = "nechť" ++ vp.clit ! np.a ++
|
||||||
(case np.isDrop of {True => np.clit ! Nom ; False => np.s ! Nom}) ++
|
(case np.isDrop of {True => np.clit ! Nom ; False => np.s ! Nom}) ++
|
||||||
verbAgr vp.verb np.a True ++ vp.compl ! np.a
|
verbAgr vp.verb np.a Pos ++ vp.compl ! np.a
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ImpersCl vp = let agr = Ag Neutr Sg P3 in {
|
ImpersCl vp = let agr = Ag Neutr Sg P3 in
|
||||||
subj = [] ;
|
mkClause [] (vp.clit ! agr) (vp.compl ! agr) vp.verb agr True vp.clitPresent ;
|
||||||
clit = vp.clit ! agr ;
|
|
||||||
compl = vp.compl ! agr ;
|
|
||||||
verb = vp.verb ; clitPresent = vp.clitPresent ;
|
|
||||||
isDrop = True ;
|
|
||||||
a = agr
|
|
||||||
} ;
|
|
||||||
|
|
||||||
GenericCl vp = let agr = Ag (Masc Anim) Pl P3 in {
|
GenericCl vp = let agr = Ag (Masc Anim) Pl P3 in
|
||||||
subj = [] ;
|
mkClause [] (vp.clit ! agr) (vp.compl ! agr) vp.verb agr True vp.clitPresent ;
|
||||||
clit = vp.clit ! agr ;
|
|
||||||
compl = vp.compl ! agr ;
|
|
||||||
verb = vp.verb ; clitPresent = vp.clitPresent ;
|
|
||||||
isDrop = True ;
|
|
||||||
a = agr
|
|
||||||
} ;
|
|
||||||
|
|
||||||
ExistNP np = {
|
ExistNP np = mkClause [] [] (np.s ! Nom)
|
||||||
clitPresent = False ;
|
(iii_kupovatVerbForms "existovat") np.a True False ;
|
||||||
subj, clit = [] ;
|
|
||||||
compl = np.s ! Nom ;
|
ExistNPAdv np adv =
|
||||||
verb = iii_kupovatVerbForms "existovat" ;
|
let cl = ExistNP np in cl ** {compl = cl.compl ++ adv.s} ;
|
||||||
isDrop = True ;
|
|
||||||
a = np.a
|
ProgrVP vp = vp ;
|
||||||
} ;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
concrete LangCze of Lang =
|
concrete LangCze of Lang =
|
||||||
GrammarCze,
|
GrammarCze,
|
||||||
LexiconCze
|
LexiconCze,
|
||||||
-- ,ConstructionCze
|
ConstructionCze
|
||||||
-- ,DocumentationCze --# notpresent
|
-- ,DocumentationCze --# notpresent
|
||||||
,MarkupCze - [stringMark]
|
,MarkupCze - [stringMark]
|
||||||
** {
|
** {
|
||||||
|
|||||||
@@ -1,50 +1,13 @@
|
|||||||
resource MissingCze = open GrammarCze, Prelude in {
|
resource MissingCze = open GrammarCze, Prelude in {
|
||||||
|
|
||||||
-- temporary definitions to enable the compilation of RGL API
|
-- temporary definitions to enable the compilation of RGL API
|
||||||
oper AAnter : Ant = notYet "AAnter" ;
|
|
||||||
oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ;
|
|
||||||
oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
|
|
||||||
oper AdVVP : AdV -> VP -> VP = notYet "AdVVP" ;
|
|
||||||
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
|
|
||||||
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
|
|
||||||
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
|
|
||||||
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
|
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
|
||||||
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
|
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
|
||||||
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
|
|
||||||
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
|
|
||||||
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
|
|
||||||
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
|
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
|
||||||
oper ComplVA : VA -> AP -> VP = notYet "ComplVA" ;
|
|
||||||
oper DetNP : Det -> NP = notYet "DetNP" ;
|
|
||||||
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
|
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
|
||||||
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
|
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
|
||||||
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
|
|
||||||
oper OrdNumeral : Numeral -> Ord = notYet "OrdNumeral" ;
|
|
||||||
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
|
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
|
||||||
oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ;
|
|
||||||
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
|
|
||||||
oper ProgrVP : VP -> VP = notYet "ProgrVP" ;
|
|
||||||
oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ;
|
|
||||||
oper ReflA2 : A2 -> AP = notYet "ReflA2" ;
|
|
||||||
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
|
|
||||||
oper RelCl : Cl -> RCl = notYet "RelCl" ;
|
|
||||||
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
|
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
|
||||||
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
|
|
||||||
oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
|
|
||||||
oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ;
|
|
||||||
oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ;
|
|
||||||
oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ;
|
|
||||||
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
|
|
||||||
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
|
|
||||||
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
|
|
||||||
oper SlashVP : NP -> VPSlash -> ClSlash = notYet "SlashVP" ;
|
|
||||||
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
|
|
||||||
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
|
|
||||||
oper TCond : Tense = notYet "TCond" ;
|
|
||||||
oper TFut : Tense = notYet "TFut" ;
|
|
||||||
oper TPast : Tense = notYet "TPast" ;
|
|
||||||
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
|
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
|
||||||
oper UseN2 : N2 -> CN = notYet "UseN2" ;
|
|
||||||
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
--# -path=.:../abstract:../common:../prelude
|
||||||
|
|
||||||
|
concrete NamesCze of Names = CatCze ** open ResCze, Prelude in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
GivenName name =
|
||||||
|
npForms (\\_ => name.s) (\\_ => name.s) ** {
|
||||||
|
clit = \\_ => name.s ; a = Ag (Masc Anim) Sg P3 ; m = Mod (Masc Anim) Sg ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False
|
||||||
|
} ;
|
||||||
|
MaleSurname name =
|
||||||
|
npForms (\\_ => name.s) (\\_ => name.s) ** {
|
||||||
|
clit = \\_ => name.s ; a = Ag (Masc Anim) Sg P3 ; m = Mod (Masc Anim) Sg ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False
|
||||||
|
} ;
|
||||||
|
FemaleSurname name =
|
||||||
|
npForms (\\_ => name.s) (\\_ => name.s) ** {
|
||||||
|
clit = \\_ => name.s ; a = Ag Fem Sg P3 ; m = Mod Fem Sg ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False
|
||||||
|
} ;
|
||||||
|
PlSurname name =
|
||||||
|
npForms (\\_ => name.s) (\\_ => name.s) ** {
|
||||||
|
clit = \\_ => name.s ; a = Ag (Masc Anim) Pl P3 ; m = Mod (Masc Anim) Pl ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False
|
||||||
|
} ;
|
||||||
|
FullName name surname =
|
||||||
|
npForms (\\_ => name.s ++ surname.s) (\\_ => name.s ++ surname.s) ** {
|
||||||
|
clit = \\_ => name.s ++ surname.s ;
|
||||||
|
a = Ag (Masc Anim) Sg P3 ; m = Mod (Masc Anim) Sg ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False
|
||||||
|
} ;
|
||||||
|
UseLN name =
|
||||||
|
npForms (\\_ => name.s) (\\_ => name.s) ** {
|
||||||
|
clit = \\_ => name.s ; a = Ag Neutr Sg P3 ; m = Mod Neutr Sg ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False
|
||||||
|
} ;
|
||||||
|
PlainLN = UseLN ;
|
||||||
|
InLN name = {s = "v" ++ name.s} ;
|
||||||
|
AdjLN ap name = {s = ap.s ! Neutr ! Sg ! Nom ++ name.s} ;
|
||||||
|
|
||||||
|
}
|
||||||
+56
-2
@@ -6,10 +6,11 @@ concrete NounCze of Noun =
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
DetCN det cn =
|
DetCN det cn =
|
||||||
let s : Case => Str = \\c => det.s ! nounGender cn (numSizeNumber det.size) ! c ++ numSizeForm cn.s det.size c
|
let s : Case => Str = \\c => det.s ! nounGender cn (numSizeNumber det.size) ! c ++ numSizeForm cn.s det.size c ;
|
||||||
|
agr = numeralAgr (nounGender cn (numSizeNumber det.size)) det P3
|
||||||
in npForms s s ** {
|
in npForms s s ** {
|
||||||
clit = s ;
|
clit = s ;
|
||||||
a = numeralAgr (nounGender cn (numSizeNumber det.size)) det P3 ;
|
a = agr ;
|
||||||
m = numeralModAgr (nounGender cn (numSizeNumber det.size)) det ;
|
m = numeralModAgr (nounGender cn (numSizeNumber det.size)) det ;
|
||||||
hasClit = False ; isDrop = False ; isPron = False ;
|
hasClit = False ; isDrop = False ; isPron = False ;
|
||||||
} ;
|
} ;
|
||||||
@@ -99,6 +100,59 @@ lin
|
|||||||
|
|
||||||
UseN n = nounFormsNoun n ;
|
UseN n = nounFormsNoun n ;
|
||||||
|
|
||||||
|
UseN2 n = nounFormsNoun n ;
|
||||||
|
|
||||||
|
ComplN2 n np =
|
||||||
|
let cn = nounFormsNoun n ;
|
||||||
|
obj = fullComplement n.c2 np.s np.prep
|
||||||
|
in cn ** {s = \\num,c => cn.s ! num ! c ++ obj} ;
|
||||||
|
|
||||||
|
PossNP cn np = cn ** {s = \\n,c => cn.s ! n ! c ++ np.s ! Gen} ;
|
||||||
|
PartNP cn np = cn ** {s = \\n,c => cn.s ! n ! c ++ np.s ! Gen} ;
|
||||||
|
|
||||||
|
DetNP det =
|
||||||
|
let forms : Case => Str = \\c => det.s ! Masc Inanim ! c ;
|
||||||
|
agr = numeralAgr (Masc Inanim) det P3 in
|
||||||
|
npForms forms forms ** {
|
||||||
|
clit = forms ; a = agr ;
|
||||||
|
m = numeralModAgr (Masc Inanim) det ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdNum ad num = num ** {s = \\g,c => ad.s ++ num.s ! g ! c} ;
|
||||||
|
|
||||||
|
DetDAP det = det ;
|
||||||
|
AdjDAP dap ap = dap ** {
|
||||||
|
s = \\g,c => dap.s ! g ! c ++ ap.s ! g ! numSizeNumber dap.size ! c
|
||||||
|
} ;
|
||||||
|
|
||||||
|
CountNP det np =
|
||||||
|
let forms : Case => Str = \\c => det.s ! Neutr ! c ++ np.s ! Gen ;
|
||||||
|
agr = numeralAgr Neutr det P3 in
|
||||||
|
npForms forms forms ** {
|
||||||
|
clit = forms ; a = agr ; m = Mod Neutr Pl ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
OrdNumeral num = {
|
||||||
|
s = \\g,n,c => num.s ! g ! c ;
|
||||||
|
pred = \\_ => num.s ! Neutr ! Nom ;
|
||||||
|
isPost = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
OrdDigits ds = {
|
||||||
|
s = \\_,_,_ => ds.s ++ SOFT_BIND ++ "." ;
|
||||||
|
pred = \\_ => ds.s ++ SOFT_BIND ++ "." ; isPost = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ExtAdvNP np adv = AdvNP np adv ;
|
||||||
|
QuantityNP decimal unit =
|
||||||
|
let forms : Case => Str = \\_ => decimal.s ++ unit.s in
|
||||||
|
npForms forms forms ** {
|
||||||
|
clit = forms ; a = AgQuant Neutr ; m = Mod Neutr Pl ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
ApposCN cn np = {
|
ApposCN cn np = {
|
||||||
s = \\n,c => cn.s ! n ! c ++ np.s ! c ; ---- TODO check apposition order
|
s = \\n,c => cn.s ! n ! c ++ np.s ! c ; ---- TODO check apposition order
|
||||||
g = cn.g ; gPl = cn.gPl
|
g = cn.g ; gPl = cn.gPl
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ oper
|
|||||||
= \nom,gen,g -> lin N (declensionNounForms nom gen g) ;
|
= \nom,gen,g -> lin N (declensionNounForms nom gen g) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkN2 : N -> Prep -> N2 = \n,c -> lin N2 (n ** {c2 = c}) ;
|
||||||
|
|
||||||
mkPN = overload {
|
mkPN = overload {
|
||||||
-- Indeclinable name: every case uses the supplied string.
|
-- Indeclinable name: every case uses the supplied string.
|
||||||
mkPN : Str -> Gender -> PN = \s,g -> lin PN {s = \\_ => s ; g = g} ;
|
mkPN : Str -> Gender -> PN = \s,g -> lin PN {s = \\_ => s ; g = g} ;
|
||||||
@@ -157,13 +159,14 @@ oper
|
|||||||
pastpartsg = pastsg ; pastpartpl = pastpl ;
|
pastpartsg = pastsg ; pastpartpl = pastpl ;
|
||||||
impsg2 = imp2sg ; imppl1 = imp1pl ; imppl2 = imp2pl
|
impsg2 = imp2sg ; imppl1 = imp1pl ; imppl2 = imp2pl
|
||||||
}) ;
|
}) ;
|
||||||
|
mkV : Str -> V = \s -> lin V (mkVerb s) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Lexical reflexive clitics. The case-based interface accepts only Acc/Dat.
|
-- Lexical reflexive clitics. The case-based interface accepts only Acc/Dat.
|
||||||
seV : V -> V = \v -> reflV v Acc ;
|
seV : V -> V = \v -> reflV v Acc ;
|
||||||
siV : V -> V = \v -> reflV v Dat ;
|
siV : V -> V = \v -> reflV v Dat ;
|
||||||
reflV : V -> Case -> V = \v,c -> v ** {
|
reflV : V -> Case -> V = \v,c -> v ** {
|
||||||
isRefl = True ; refl = case c of {Acc => "se" ; Dat => "si" ; _ => nonExist}
|
isRefl = True ; refl = case c of {Dat => "si" ; _ => "se"}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkVS : V -> VS = \v -> lin VS v ;
|
mkVS : V -> VS = \v -> lin VS v ;
|
||||||
@@ -196,6 +199,10 @@ oper
|
|||||||
= \v,c -> lin V2 (v ** {c = {s = [] ; c = c ; hasPrep = False}}) ;
|
= \v,c -> lin V2 (v ** {c = {s = [] ; c = c ; hasPrep = False}}) ;
|
||||||
mkV2 : V -> Prep -> V2
|
mkV2 : V -> Prep -> V2
|
||||||
= \v,p -> lin V2 (v ** {c = p}) ;
|
= \v,p -> lin V2 (v ** {c = p}) ;
|
||||||
|
mkV2 : Str -> V2
|
||||||
|
= \s -> lin V2 ((mkVerb s) ** {
|
||||||
|
c = {s = [] ; c = Acc ; hasPrep = False}
|
||||||
|
}) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkV3 = overload {
|
mkV3 = overload {
|
||||||
@@ -204,6 +211,11 @@ oper
|
|||||||
c2 = {s = [] ; c = Dat ; hasPrep = False}}) ;
|
c2 = {s = [] ; c = Dat ; hasPrep = False}}) ;
|
||||||
mkV3 : V -> Prep -> Prep -> V3
|
mkV3 : V -> Prep -> Prep -> V3
|
||||||
= \v,p,p2 -> lin V3 (v ** {c = p ; c2 = p2}) ;
|
= \v,p,p2 -> lin V3 (v ** {c = p ; c2 = p2}) ;
|
||||||
|
mkV3 : Str -> V3
|
||||||
|
= \s -> lin V3 ((mkVerb s) ** {
|
||||||
|
c = {s = [] ; c = Acc ; hasPrep = False} ;
|
||||||
|
c2 = {s = [] ; c = Dat ; hasPrep = False}
|
||||||
|
}) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
------------------------
|
------------------------
|
||||||
@@ -230,5 +242,43 @@ oper
|
|||||||
mkConj : Str -> Conj
|
mkConj : Str -> Conj
|
||||||
= \s -> lin Conj {s1 = [] ; s2 = s} ;
|
= \s -> lin Conj {s1 = [] ; s2 = s} ;
|
||||||
|
|
||||||
|
------------------------
|
||||||
|
-- Generic lexical constructors
|
||||||
|
|
||||||
|
mkVerb : Str -> VerbForms = guessVerbForms ;
|
||||||
|
|
||||||
|
mkCard : Str -> Card = \s -> lin Card (invarDeterminer s Num5) ;
|
||||||
|
mkDet : Str -> Det = \s -> lin Det (invarDeterminer s Num5) ;
|
||||||
|
mkQuant : Str -> Quant = \s ->
|
||||||
|
lin Quant (adjFormsAdjective (mkA s)) ;
|
||||||
|
|
||||||
|
mkACard : Str -> ACard = \s -> lin ACard {s = s} ;
|
||||||
|
mkAdN : Str -> AdN = \s -> lin AdN {s = s} ;
|
||||||
|
mkAdV : Str -> AdV = \s -> lin AdV {s = s} ;
|
||||||
|
mkCAdv : Str -> CAdv = \s -> lin CAdv {s = s; p = []} ;
|
||||||
|
mkDConj : Str -> Conj = \s -> lin Conj {s1 = [] ; s2 = s} ;
|
||||||
|
mkGN : Str -> GN = \s -> lin GN {s = s} ;
|
||||||
|
mkIAdv : Str -> IAdv = \s -> lin IAdv {s = s} ;
|
||||||
|
mkIDet : Str -> IDet = \s -> lin IDet {s = \\_,_=>s; size=Num1; head=CountedHead} ;
|
||||||
|
mkIP : Str -> IP = \s -> lin IP {s = \\_=>s; a = Ag (Masc Anim) Sg P3} ;
|
||||||
|
mkIQuant : Str -> IQuant = \s -> lin IQuant {s = \\_,_,_=>s} ;
|
||||||
|
mkInterj : Str -> Interj = \s -> lin Interj {s = s} ;
|
||||||
|
mkLN : Str -> LN = \s -> lin LN {s = s} ;
|
||||||
|
mkMU : Str -> MU = \s -> lin MU {s = s; isPre=False} ;
|
||||||
|
mkPConj : Str -> PConj = \s -> lin PConj {s = s} ;
|
||||||
|
mkPredet : Str -> Predet = \s -> lin Predet {s = \\_,_,_=>s; postPron = False} ;
|
||||||
|
mkSN : Str -> SN = \s -> lin SN {s = s} ;
|
||||||
|
mkSubj : Str -> Subj = \s -> lin Subj {s = s} ;
|
||||||
|
mkVA : Str -> VA = \s -> lin VA (mkVerb s) ;
|
||||||
|
mkV2A : Str -> V2A = \s -> lin V2A ((mkVerb s) ** {
|
||||||
|
c = {s = [] ; c = Acc ; hasPrep = False}}) ;
|
||||||
|
mkV2Q : Str -> V2Q = \s -> lin V2Q ((mkVerb s) ** {
|
||||||
|
c = {s = [] ; c = Acc ; hasPrep = False}}) ;
|
||||||
|
mkV2S : Str -> V2S = \s -> lin V2S ((mkVerb s) ** {
|
||||||
|
c = {s = [] ; c = Acc ; hasPrep = False}}) ;
|
||||||
|
mkV2V : Str -> V2V = \s -> lin V2V ((mkVerb s) ** {
|
||||||
|
c = {s = [] ; c = Acc ; hasPrep = False}}) ;
|
||||||
|
mkVoc : Str -> {s : Str} = \s -> {s = s} ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,21 @@ lin
|
|||||||
QuestIAdv adv cl = cl ** {q = adv.s ; yesNo = False} ;
|
QuestIAdv adv cl = cl ** {q = adv.s ; yesNo = False} ;
|
||||||
QuestIComp comp np = {
|
QuestIComp comp np = {
|
||||||
q = comp.s ; subj = case np.isDrop of {True => np.clit ! Nom ; False => np.s ! Nom} ;
|
q = comp.s ; subj = case np.isDrop of {True => np.clit ! Nom ; False => np.s ! Nom} ;
|
||||||
clit,compl = [] ; verb = copulaVerbForms ; a = np.a ; yesNo = False
|
clit,compl = [] ; verb = copulaVerbForms ; a = np.a ; yesNo = False ;
|
||||||
|
isDrop = np.isDrop ; clitPresent = False ;
|
||||||
|
finite = (mkClause [] [] [] copulaVerbForms np.a np.isDrop False).finite ;
|
||||||
|
auxiliary = (mkClause [] [] [] copulaVerbForms np.a np.isDrop False).auxiliary
|
||||||
} ;
|
} ;
|
||||||
QuestVP ip vp = {
|
QuestVP ip vp = {
|
||||||
q = ip.s ! Nom ; subj = [] ; clit = vp.clit ! ip.a ;
|
q = ip.s ! Nom ; subj = [] ; clit = vp.clit ! ip.a ;
|
||||||
compl = vp.compl ! ip.a ; verb = vp.verb ; a = ip.a ; yesNo = False
|
compl = vp.compl ! ip.a ; verb = vp.verb ; a = ip.a ; yesNo = False ;
|
||||||
|
isDrop = True ; clitPresent = vp.clitPresent ;
|
||||||
|
finite = (mkClause [] [] [] vp.verb ip.a True vp.clitPresent).finite ;
|
||||||
|
auxiliary = (mkClause [] [] [] vp.verb ip.a True vp.clitPresent).auxiliary
|
||||||
|
} ;
|
||||||
|
QuestSlash ip cls = cls ** {
|
||||||
|
q = fullComplement cls.c ip.s ip.s ;
|
||||||
|
compl = cls.compl ++ cls.ind ; yesNo = False
|
||||||
} ;
|
} ;
|
||||||
CompIAdv adv = adv ;
|
CompIAdv adv = adv ;
|
||||||
CompIP ip = {s = ip.s ! Nom} ;
|
CompIP ip = {s = ip.s ! Nom} ;
|
||||||
|
|||||||
@@ -14,5 +14,25 @@ lin
|
|||||||
|
|
||||||
IdRP = guessAdjForms "který" ;
|
IdRP = guessAdjForms "který" ;
|
||||||
|
|
||||||
|
RelCl cl = {
|
||||||
|
subj = \\_ => cl.subj ; clit = \\_ => cl.clit ;
|
||||||
|
compl = \\_ => cl.compl ; verb = cl.verb
|
||||||
|
} ;
|
||||||
|
|
||||||
|
RelSlash rp cls = {
|
||||||
|
subj = \\_ => cls.subj ; clit = \\_ => cls.clit ; verb = cls.verb ;
|
||||||
|
compl = \\a => case a of {
|
||||||
|
Ag g n _ => fullComplement cls.c
|
||||||
|
(\\c => (adjFormsAdjective rp).s ! g ! n ! c)
|
||||||
|
(\\c => (adjFormsAdjective rp).s ! g ! n ! c) ;
|
||||||
|
AgPol g => fullComplement cls.c
|
||||||
|
(\\c => (adjFormsAdjective rp).s ! g ! Sg ! c)
|
||||||
|
(\\c => (adjFormsAdjective rp).s ! g ! Sg ! c) ;
|
||||||
|
AgQuant g => fullComplement cls.c
|
||||||
|
(\\c => (adjFormsAdjective rp).s ! g ! Pl ! c)
|
||||||
|
(\\c => (adjFormsAdjective rp).s ! g ! Pl ! c)
|
||||||
|
} ++ cls.compl ++ cls.ind
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+189
-23
@@ -1,4 +1,4 @@
|
|||||||
resource ResCze = open Prelude in {
|
resource ResCze = ParamX ** open Prelude in {
|
||||||
|
|
||||||
-- AR March 2020
|
-- AR March 2020
|
||||||
-- sources:
|
-- sources:
|
||||||
@@ -8,22 +8,28 @@ resource ResCze = open Prelude in {
|
|||||||
-- parameters
|
-- parameters
|
||||||
|
|
||||||
param
|
param
|
||||||
Number = Sg | Pl ;
|
|
||||||
|
|
||||||
Animacy = Anim | Inanim ;
|
Animacy = Anim | Inanim ;
|
||||||
Gender = Masc Animacy | Fem | Neutr ;
|
Gender = Masc Animacy | Fem | Neutr ;
|
||||||
|
|
||||||
Case = Nom | Gen | Dat | Acc | Voc | Loc | Ins ; -- traditional order
|
Case = Nom | Gen | Dat | Acc | Voc | Loc | Ins ; -- traditional order
|
||||||
|
|
||||||
Person = P1 | P2 | P3 ;
|
|
||||||
|
|
||||||
Agr = Ag Gender Number Person | AgPol Gender | AgQuant Gender ; -- polite singular: plural verb, singular predicate
|
Agr = Ag Gender Number Person | AgPol Gender | AgQuant Gender ; -- polite singular: plural verb, singular predicate
|
||||||
|
|
||||||
CTense = CTPres | CTPast ; ----- TODO complete the tense system to match Czech verb morphology
|
oper
|
||||||
|
agrGender : Agr -> Gender = \a -> case a of {
|
||||||
|
Ag g _ _ => g ; AgPol g => g ; AgQuant g => g
|
||||||
|
} ;
|
||||||
|
|
||||||
|
agrNumber : Agr -> Number = \a -> case a of {
|
||||||
|
Ag _ n _ => n ; AgPol _ => Sg ; AgQuant _ => Pl
|
||||||
|
} ;
|
||||||
|
|
||||||
|
agrPerson : Agr -> Person = \a -> case a of {
|
||||||
|
Ag _ _ p => p ; _ => P3
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- phonology
|
-- phonology
|
||||||
|
|
||||||
oper
|
|
||||||
hardConsonant : pattern Str = #("d"|"t"|"g"|"h"|"k"|"n"|"r") ;
|
hardConsonant : pattern Str = #("d"|"t"|"g"|"h"|"k"|"n"|"r") ;
|
||||||
softConsonant : pattern Str = #("ť"|"ď"|"j"|"ň"|"ř"|"š"|"c"|"č"|"ž") ;
|
softConsonant : pattern Str = #("ť"|"ď"|"j"|"ň"|"ř"|"š"|"c"|"č"|"ž") ;
|
||||||
neutralConsonant : pattern Str = #("b"|"f"|"l"|"m"|"p"|"s"|"v") ;
|
neutralConsonant : pattern Str = #("b"|"f"|"l"|"m"|"p"|"s"|"v") ;
|
||||||
@@ -669,7 +675,7 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
|||||||
msdat = mlad + "ému" ;
|
msdat = mlad + "ému" ;
|
||||||
fsacc,fsins = mlad + "ou" ;
|
fsacc,fsins = mlad + "ou" ;
|
||||||
msloc = mlad + "ém" ;
|
msloc = mlad + "ém" ;
|
||||||
msins,pdat = mlad + "ým" ;
|
msins = mlad + "ým" ;
|
||||||
mpnom = addAdjI mlad ;
|
mpnom = addAdjI mlad ;
|
||||||
pgen = mlad + "ých" ;
|
pgen = mlad + "ých" ;
|
||||||
pins = mlad + "ými" ;
|
pins = mlad + "ými" ;
|
||||||
@@ -729,7 +735,8 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
|||||||
|
|
||||||
VerbForms : Type = PositiveVerbForms ** {
|
VerbForms : Type = PositiveVerbForms ** {
|
||||||
negpressg1,negpressg2,negpressg3,negprespl1,negprespl2,negprespl3,
|
negpressg1,negpressg2,negpressg3,negprespl1,negprespl2,negprespl3,
|
||||||
negimpsg2,negimppl1,negimppl2,refl : Str ; isRefl : Bool
|
negimpsg2,negimppl1,negimppl2,
|
||||||
|
pastpartfsg,pastpartnsg,pastpartfpl,pastpartnpl,refl : Str ; isRefl : Bool
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Prefix at lexical construction time, so ordinary spelling also parses.
|
-- Prefix at lexical construction time, so ordinary spelling also parses.
|
||||||
@@ -739,7 +746,11 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
|||||||
negpressg3 = "ne" + v.pressg3 ;
|
negpressg3 = "ne" + v.pressg3 ;
|
||||||
negprespl1 = "ne" + v.prespl1 ; negprespl2 = "ne" + v.prespl2 ;
|
negprespl1 = "ne" + v.prespl1 ; negprespl2 = "ne" + v.prespl2 ;
|
||||||
negprespl3 = "ne" + v.prespl3 ;
|
negprespl3 = "ne" + v.prespl3 ;
|
||||||
negimpsg2 = "ne" + v.impsg2 ; negimppl1 = "ne" + v.imppl1 ; negimppl2 = "ne" + v.imppl2
|
negimpsg2 = "ne" + v.impsg2 ; negimppl1 = "ne" + v.imppl1 ; negimppl2 = "ne" + v.imppl2 ;
|
||||||
|
pastpartfsg = Predef.tk 1 v.pastpartsg + "la" ;
|
||||||
|
pastpartnsg = Predef.tk 1 v.pastpartsg + "lo" ;
|
||||||
|
pastpartfpl = Predef.tk 1 v.pastpartpl + "y" ;
|
||||||
|
pastpartnpl = Predef.tk 1 v.pastpartpl + "a"
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Vocalization depends on the next realized token, not on the noun head.
|
-- Vocalization depends on the next realized token, not on the noun head.
|
||||||
@@ -801,22 +812,100 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
|||||||
True => prep ! p.c ; False => bare ! p.c
|
True => prep ! p.c ; False => bare ! p.c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
verbAgr : VerbForms -> Agr -> Bool -> Str
|
verbAgr : VerbForms -> Agr -> Polarity -> Str
|
||||||
= \vf,a,b -> case <a,b> of {
|
= \vf,a,b -> case a of {
|
||||||
<Ag _ Sg P1,True> => vf.pressg1 ; <Ag _ Sg P1,False> => vf.negpressg1 ;
|
Ag _ n p => case <n,p,b> of {
|
||||||
<Ag _ Sg P2,True> => vf.pressg2 ; <Ag _ Sg P2,False> => vf.negpressg2 ;
|
<Sg,P1,Pos> => vf.pressg1 ; <Sg,P1,Neg> => vf.negpressg1 ;
|
||||||
<Ag _ Sg P3 | AgQuant _,True> => vf.pressg3 ; <Ag _ Sg P3 | AgQuant _,False> => vf.negpressg3 ;
|
<Sg,P2,Pos> => vf.pressg2 ; <Sg,P2,Neg> => vf.negpressg2 ;
|
||||||
<Ag _ Pl P1,True> => vf.prespl1 ; <Ag _ Pl P1,False> => vf.negprespl1 ;
|
<Sg,P3,Pos> => vf.pressg3 ; <Sg,P3,Neg> => vf.negpressg3 ;
|
||||||
<Ag _ Pl P2 | AgPol _,True> => vf.prespl2 ; <Ag _ Pl P2 | AgPol _,False> => vf.negprespl2 ;
|
<Pl,P1,Pos> => vf.prespl1 ; <Pl,P1,Neg> => vf.negprespl1 ;
|
||||||
<Ag _ Pl P3,True> => vf.prespl3 ; <Ag _ Pl P3,False> => vf.negprespl3
|
<Pl,P2,Pos> => vf.prespl2 ; <Pl,P2,Neg> => vf.negprespl2 ;
|
||||||
|
<Pl,P3,Pos> => vf.prespl3 ; <Pl,P3,Neg> => vf.negprespl3
|
||||||
|
} ;
|
||||||
|
AgPol _ => case b of {Pos => vf.prespl2 ; Neg => vf.negprespl2} ;
|
||||||
|
AgQuant _ => case b of {Pos => vf.pressg3 ; Neg => vf.negpressg3}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
imperativeAgr : VerbForms -> Agr -> Bool -> Str = \v,a,pos -> case <a,pos> of {
|
imperativeAgr : VerbForms -> Agr -> Polarity -> Str = \v,a,pos -> case <a,pos> of {
|
||||||
<Ag _ Sg _,True> => v.impsg2 ; <Ag _ Sg _,False> => v.negimpsg2 ;
|
<Ag _ Sg _,Pos> => v.impsg2 ; <Ag _ Sg _,Neg> => v.negimpsg2 ;
|
||||||
<Ag _ Pl P1,True> => v.imppl1 ; <Ag _ Pl P1,False> => v.negimppl1 ;
|
<Ag _ Pl P1,Pos> => v.imppl1 ; <Ag _ Pl P1,Neg> => v.negimppl1 ;
|
||||||
<_,True> => v.imppl2 ; <_,False> => v.negimppl2
|
<_,Pos> => v.imppl2 ; <_,Neg> => v.negimppl2
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
pastPartAgr : VerbForms -> Agr -> Polarity -> Str = \v,a,pos ->
|
||||||
|
let form = case a of {
|
||||||
|
Ag g n _ => case <g,n> of {
|
||||||
|
<Masc _,Sg> => v.pastpartsg ; <Fem,Sg> => v.pastpartfsg ;
|
||||||
|
<Neutr,Sg> => v.pastpartnsg ; <Masc Anim,Pl> => v.pastpartpl ;
|
||||||
|
<Neutr,Pl> => v.pastpartnpl ; <_,Pl> => v.pastpartfpl
|
||||||
|
} ;
|
||||||
|
AgPol g => case g of {
|
||||||
|
Masc _ => v.pastpartsg ; Fem => v.pastpartfsg ; Neutr => v.pastpartnsg
|
||||||
|
} ;
|
||||||
|
AgQuant _ => v.pastpartfpl
|
||||||
|
}
|
||||||
|
in case pos of {Pos => form ; Neg => "ne" ++ BIND ++ form} ;
|
||||||
|
|
||||||
|
pastAux : Agr -> Str = \a -> case a of {
|
||||||
|
Ag _ n p => case <n,p> of {
|
||||||
|
<Sg,P1> => "jsem" ;
|
||||||
|
<Sg,P2> => "jsi" ;
|
||||||
|
<Pl,P1> => "jsme" ;
|
||||||
|
<Pl,P2> => "jste" ;
|
||||||
|
_ => []
|
||||||
|
} ;
|
||||||
|
AgPol _ => "jste" ;
|
||||||
|
AgQuant _ => []
|
||||||
|
} ;
|
||||||
|
|
||||||
|
conditionalAux : Agr -> Str = \a -> case a of {
|
||||||
|
Ag _ n p => case <n,p> of {
|
||||||
|
<Sg,P1> => "bych" ; <Sg,P2> => "bys" ; <Pl,P1> => "bychom" ;
|
||||||
|
<Pl,P2> => "byste" ; _ => "by"
|
||||||
|
} ; AgPol _ => "byste" ; AgQuant _ => "by"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
futureAux : Agr -> Polarity -> Str = \a,pos ->
|
||||||
|
let form = case a of {
|
||||||
|
Ag _ n p => case <n,p> of {
|
||||||
|
<Sg,P1> => "budu" ; <Sg,P2> => "budeš" ; <Sg,P3> => "bude" ;
|
||||||
|
<Pl,P1> => "budeme" ; <Pl,P2> => "budete" ; <Pl,P3> => "budou"
|
||||||
|
} ;
|
||||||
|
AgQuant _ => "bude" ; AgPol _ => "budete"
|
||||||
|
}
|
||||||
|
in case pos of {Pos => form ; Neg => "ne" ++ BIND ++ form} ;
|
||||||
|
|
||||||
|
tenseVerb : Tense -> VerbForms -> Agr -> Polarity -> Str = \t,v,a,pos -> case t of {
|
||||||
|
Pres => verbAgr v a pos ;
|
||||||
|
Past => pastPartAgr v a pos ;
|
||||||
|
Fut => futureAux a pos ++ v.inf ;
|
||||||
|
Cond => pastPartAgr v a pos
|
||||||
|
} ;
|
||||||
|
|
||||||
|
tenseClitic : Tense -> Agr -> Str = \t,a -> case t of {
|
||||||
|
Past => pastAux a ; Cond => conditionalAux a ; _ => []
|
||||||
|
} ;
|
||||||
|
|
||||||
|
Clause : Type = {
|
||||||
|
subj,clit,compl : Str ; verb : VerbForms ; a : Agr ;
|
||||||
|
isDrop,clitPresent : Bool ;
|
||||||
|
finite : Tense => Polarity => Str ; auxiliary : Tense => Str
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkClause : Str -> Str -> Str -> VerbForms -> Agr -> Bool -> Bool -> Clause =
|
||||||
|
\subj,clit,compl,verb,a,isDrop,clitPresent -> {
|
||||||
|
subj = subj ; clit = clit ; compl = compl ; verb = verb ; a = a ;
|
||||||
|
isDrop = isDrop ; clitPresent = clitPresent ;
|
||||||
|
finite = table {
|
||||||
|
Pres => \\p => verbAgr verb a p ;
|
||||||
|
Past => \\p => pastPartAgr verb a p ;
|
||||||
|
Fut => \\p => tenseVerb Fut verb a p ;
|
||||||
|
Cond => \\p => pastPartAgr verb a p
|
||||||
|
} ;
|
||||||
|
auxiliary = table {
|
||||||
|
Pres => [] ; Past => pastAux a ; Fut => [] ; Cond => conditionalAux a
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
-- s is the ordinary order; fronted places the clitics first, ready for
|
-- s is the ordinary order; fronted places the clitics first, ready for
|
||||||
-- an external host. clit/body retain the pieces needed by further fronting.
|
-- an external host. clit/body retain the pieces needed by further fronting.
|
||||||
@@ -904,6 +993,83 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
|||||||
pastpartpl = kry + "li" ;
|
pastpartpl = kry + "li" ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- Productive defaults for lexicons that only provide an infinitive. Czech
|
||||||
|
-- has many stem alternations, so irregular verbs should still use the full
|
||||||
|
-- principal-parts constructor; these classes cover the regular majority.
|
||||||
|
atVerbForms : Str -> VerbForms = \inf ->
|
||||||
|
let stem = Predef.tk 2 inf in withNeg {
|
||||||
|
inf = inf ;
|
||||||
|
pressg1 = stem + "ám" ; pressg2 = stem + "áš" ; pressg3 = stem + "á" ;
|
||||||
|
prespl1 = stem + "áme" ; prespl2 = stem + "áte" ; prespl3 = stem + "ají" ;
|
||||||
|
pastpartsg = stem + "al" ; pastpartpl = stem + "ali" ;
|
||||||
|
impsg2 = stem + "ej" ; imppl1 = stem + "ejme" ; imppl2 = stem + "ejte"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
itVerbForms : Str -> VerbForms = \inf ->
|
||||||
|
let stem = Predef.tk 2 inf in withNeg {
|
||||||
|
inf = inf ;
|
||||||
|
pressg1 = stem + "ím" ; pressg2 = stem + "íš" ; pressg3 = stem + "í" ;
|
||||||
|
prespl1 = stem + "íme" ; prespl2 = stem + "íte" ; prespl3 = stem + "í" ;
|
||||||
|
pastpartsg = stem + "il" ; pastpartpl = stem + "ili" ;
|
||||||
|
impsg2 = stem ; imppl1 = stem + "me" ; imppl2 = stem + "te"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
etVerbForms : Str -> Str -> VerbForms = \inf,pastVowel ->
|
||||||
|
let stem = Predef.tk 2 inf in withNeg {
|
||||||
|
inf = inf ;
|
||||||
|
pressg1 = stem + "ím" ; pressg2 = stem + "íš" ; pressg3 = stem + "í" ;
|
||||||
|
prespl1 = stem + "íme" ; prespl2 = stem + "íte" ; prespl3 = stem + "í" ;
|
||||||
|
pastpartsg = stem + pastVowel + "l" ; pastpartpl = stem + pastVowel + "li" ;
|
||||||
|
impsg2 = stem ; imppl1 = stem + "me" ; imppl2 = stem + "te"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
noutVerbForms : Str -> VerbForms = \inf ->
|
||||||
|
let stem = Predef.tk 4 inf in withNeg {
|
||||||
|
inf = inf ;
|
||||||
|
pressg1 = stem + "nu" ; pressg2 = stem + "neš" ; pressg3 = stem + "ne" ;
|
||||||
|
prespl1 = stem + "neme" ; prespl2 = stem + "nete" ; prespl3 = stem + "nou" ;
|
||||||
|
pastpartsg = stem + "nul" ; pastpartpl = stem + "nuli" ;
|
||||||
|
impsg2 = stem + "ni" ; imppl1 = stem + "něme" ; imppl2 = stem + "něte"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
nestVerbForms : Str -> VerbForms = \inf ->
|
||||||
|
let prefix = Predef.tk 4 inf ; stem = prefix + "nes" in withNeg {
|
||||||
|
inf = inf ;
|
||||||
|
pressg1 = stem + "u" ; pressg2 = stem + "eš" ; pressg3 = stem + "e" ;
|
||||||
|
prespl1 = stem + "eme" ; prespl2 = stem + "ete" ; prespl3 = stem + "ou" ;
|
||||||
|
pastpartsg = stem + "l" ; pastpartpl = stem + "li" ;
|
||||||
|
impsg2 = stem ; imppl1 = stem + "me" ; imppl2 = stem + "te"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
jistVerbForms : VerbForms = withNeg {
|
||||||
|
inf = "jíst" ;
|
||||||
|
pressg1 = "jím" ; pressg2 = "jíš" ; pressg3 = "jí" ;
|
||||||
|
prespl1 = "jíme" ; prespl2 = "jíte" ; prespl3 = "jedí" ;
|
||||||
|
pastpartsg = "jedl" ; pastpartpl = "jedli" ;
|
||||||
|
impsg2 = "jez" ; imppl1 = "jezme" ; imppl2 = "jezte"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
guessVerbForms : Str -> VerbForms = \inf -> case inf of {
|
||||||
|
"být" => copulaVerbForms ;
|
||||||
|
"mít" => haveVerbForms ;
|
||||||
|
"jíst" => jistVerbForms ;
|
||||||
|
_ + "ovat" => iii_kupovatVerbForms inf ;
|
||||||
|
_ + ("ýt" | "ít") => iii_krýtVerbForms inf ;
|
||||||
|
_ + "nout" => noutVerbForms inf ;
|
||||||
|
_ + "nést" => nestVerbForms inf ;
|
||||||
|
_ + "at" => atVerbForms inf ;
|
||||||
|
_ + "it" => itVerbForms inf ;
|
||||||
|
_ + "ět" => etVerbForms inf "ě" ;
|
||||||
|
_ + "et" => etVerbForms inf "e" ;
|
||||||
|
_ => let stem = Predef.tk 1 inf in withNeg {
|
||||||
|
inf = inf ;
|
||||||
|
pressg1 = stem + "u" ; pressg2 = stem + "eš" ; pressg3 = stem + "e" ;
|
||||||
|
prespl1 = stem + "eme" ; prespl2 = stem + "ete" ; prespl3 = stem + "ou" ;
|
||||||
|
pastpartsg = stem + "l" ; pastpartpl = stem + "li" ;
|
||||||
|
impsg2 = stem ; imppl1 = stem + "me" ; imppl2 = stem + "te"
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
-- Pronouns
|
-- Pronouns
|
||||||
|
|
||||||
|
|||||||
+57
-12
@@ -4,34 +4,79 @@ lin
|
|||||||
-- A dropped subject still contributes an empty constituent, so PGF
|
-- A dropped subject still contributes an empty constituent, so PGF
|
||||||
-- retains the pronoun and constrains its person through agreement.
|
-- retains the pronoun and constrains its person through agreement.
|
||||||
subj = case np.isDrop of {True => np.clit ! Nom ; False => np.s ! Nom} ;
|
subj = case np.isDrop of {True => np.clit ! Nom ; False => np.s ! Nom} ;
|
||||||
verb = vp.verb ; clit = vp.clit ! np.a ; compl = vp.compl ! np.a ;
|
clit = vp.clit ! np.a ; compl = vp.compl ! np.a ; verb = vp.verb ;
|
||||||
a = np.a ; isDrop = np.isDrop ; clitPresent = vp.clitPresent
|
a = np.a ; isDrop = np.isDrop ; clitPresent = vp.clitPresent ;
|
||||||
|
finite = table {
|
||||||
|
Pres => \\p => verbAgr vp.verb np.a p ;
|
||||||
|
Past => \\p => pastPartAgr vp.verb np.a p ;
|
||||||
|
Fut => \\p => tenseVerb Fut vp.verb np.a p ;
|
||||||
|
Cond => \\p => pastPartAgr vp.verb np.a p
|
||||||
|
} ;
|
||||||
|
auxiliary = table {
|
||||||
|
Pres => [] ; Past => pastAux np.a ; Fut => [] ; Cond => conditionalAux np.a
|
||||||
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UseCl temp pol cl = let v = pol.s ++ verbAgr cl.verb cl.a pol.p in
|
SlashVP np vp = {
|
||||||
|
subj = case np.isDrop of {True => np.clit ! Nom ; False => np.s ! Nom} ;
|
||||||
|
clit = vp.clit ! np.a ++ vp.clitAfter ! np.a ;
|
||||||
|
compl = vp.compl ! np.a ; ind = vp.ind ! np.a ; verb = vp.verb ; c = vp.c ;
|
||||||
|
a = np.a ; isDrop = np.isDrop ; clitPresent = vp.clitPresent ;
|
||||||
|
finite = table {
|
||||||
|
Pres => \\p => verbAgr vp.verb np.a p ;
|
||||||
|
Past => \\p => pastPartAgr vp.verb np.a p ;
|
||||||
|
Fut => \\p => tenseVerb Fut vp.verb np.a p ;
|
||||||
|
Cond => \\p => pastPartAgr vp.verb np.a p
|
||||||
|
} ;
|
||||||
|
auxiliary = table {Pres => [] ; Past => pastAux np.a ; Fut => [] ; Cond => conditionalAux np.a}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
UseSlash temp pol cl = {
|
||||||
|
s = temp.s ++ cl.subj ++ cl.auxiliary ! temp.t ++ cl.clit ++
|
||||||
|
pol.s ++ cl.finite ! temp.t ! pol.p ++ cl.compl ++ cl.ind ; c = cl.c
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdvSlash cl adv = cl ** {compl = cl.compl ++ adv.s} ;
|
||||||
|
SlashPrep cl prep = cl ** {c = prep ; ind = []} ;
|
||||||
|
|
||||||
|
SlashVS np vs ssl =
|
||||||
|
let base = PredVP np {
|
||||||
|
verb = vs ; clitPresent = False ; clit = \\_ => vs.refl ;
|
||||||
|
compl = \\_ => SOFT_BIND ++ "," ++ ssl.s
|
||||||
|
}
|
||||||
|
in base ** {c = ssl.c ; ind = []} ;
|
||||||
|
|
||||||
|
UseCl temp pol cl = let v = pol.s ++ cl.finite ! temp.t ! pol.p ;
|
||||||
|
cs = cl.auxiliary ! temp.t ++ cl.clit in
|
||||||
case cl.isDrop of {
|
case cl.isDrop of {
|
||||||
True => sentence cl.clitPresent (temp.s ++ cl.subj ++ v) cl.clit cl.compl ;
|
True => sentence True (temp.s ++ cl.subj ++ v) cs cl.compl ;
|
||||||
False => sentence cl.clitPresent (temp.s ++ cl.subj) cl.clit (v ++ cl.compl)
|
False => sentence True (temp.s ++ cl.subj) cs (v ++ cl.compl)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UseQCl temp pol cl = let v = pol.s ++ verbAgr cl.verb cl.a pol.p in {
|
UseQCl temp pol cl = let v = pol.s ++ cl.finite ! temp.t ! pol.p ;
|
||||||
|
cs = cl.auxiliary ! temp.t ++ cl.clit in {
|
||||||
s = temp.s ++ case cl.yesNo of {
|
s = temp.s ++ case cl.yesNo of {
|
||||||
True => v ++ cl.clit ++ cl.subj ++ cl.compl ;
|
True => v ++ cs ++ cl.subj ++ cl.compl ;
|
||||||
False => cl.q ++ cl.clit ++ v ++ cl.subj ++ cl.compl
|
False => cl.q ++ cs ++ v ++ cl.subj ++ cl.compl
|
||||||
} ;
|
} ;
|
||||||
ind = temp.s ++ case cl.yesNo of {
|
ind = temp.s ++ case cl.yesNo of {
|
||||||
True => "jestli" ++ cl.clit ++ cl.subj ++ v ++ cl.compl ;
|
True => "jestli" ++ cs ++ cl.subj ++ v ++ cl.compl ;
|
||||||
False => cl.q ++ cl.clit ++ v ++ cl.subj ++ cl.compl
|
False => cl.q ++ cs ++ v ++ cl.subj ++ cl.compl
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UseRCl temp pol rcl = {
|
UseRCl temp pol rcl = {
|
||||||
s = \\a => temp.s ++ rcl.subj ! a ++ rcl.clit ! a ++
|
s = \\a => temp.s ++ rcl.subj ! a ++ tenseClitic temp.t a ++ rcl.clit ! a ++
|
||||||
pol.s ++ verbAgr rcl.verb a pol.p ++ rcl.compl ! a
|
pol.s ++ tenseVerb temp.t rcl.verb a pol.p ++ rcl.compl ! a
|
||||||
} ;
|
} ;
|
||||||
ImpVP vp = {s = \\pos,a =>
|
ImpVP vp = {s = \\pos,a =>
|
||||||
imperativeAgr vp.verb a pos ++ vp.clit ! a ++ vp.compl ! a
|
imperativeAgr vp.verb a pos ++ vp.clit ! a ++ vp.compl ! a
|
||||||
} ;
|
} ;
|
||||||
|
AdvImp adv imp = {s = \\pos,a => adv.s ++ imp.s ! pos ! a} ;
|
||||||
|
PredSCVP sc vp = PredVP
|
||||||
|
(npForms (\\_ => sc.s) (\\_ => sc.s) ** {
|
||||||
|
clit = \\_ => sc.s ; a = Ag Neutr Sg P3 ; m = Mod Neutr Sg ;
|
||||||
|
hasClit = False ; isDrop = False ; isPron = False}) vp ;
|
||||||
EmbedS s = {s = (frontSentence "že" s).s} ;
|
EmbedS s = {s = (frontSentence "že" s).s} ;
|
||||||
EmbedQS qs = {s = qs.ind} ;
|
EmbedQS qs = {s = qs.ind} ;
|
||||||
EmbedVP vp = let agr = Ag Neutr Sg P3 in
|
EmbedVP vp = let agr = Ag Neutr Sg P3 in
|
||||||
|
|||||||
@@ -35,10 +35,11 @@ lin
|
|||||||
|
|
||||||
-- as DetCN in NounCze, with the symbols in apposition
|
-- as DetCN in NounCze, with the symbols in apposition
|
||||||
CNSymbNP det cn xs =
|
CNSymbNP det cn xs =
|
||||||
let s : Case => Str = \\c => det.s ! nounGender cn (numSizeNumber det.size) ! c ++ numSizeForm cn.s det.size c ++ xs.s
|
let s : Case => Str = \\c => det.s ! nounGender cn (numSizeNumber det.size) ! c ++ numSizeForm cn.s det.size c ++ xs.s ;
|
||||||
|
agr = numeralAgr (nounGender cn (numSizeNumber det.size)) det P3
|
||||||
in npForms s s ** {
|
in npForms s s ** {
|
||||||
clit = s ;
|
clit = s ;
|
||||||
a = numeralAgr (nounGender cn (numSizeNumber det.size)) det P3 ;
|
a = agr ;
|
||||||
m = numeralModAgr (nounGender cn (numSizeNumber det.size)) det ;
|
m = numeralModAgr (nounGender cn (numSizeNumber det.size)) det ;
|
||||||
hasClit = False ; isDrop = False ; isPron = False ;
|
hasClit = False ; isDrop = False ; isPron = False ;
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
concrete TenseCze of Tense =
|
|
||||||
CatCze **
|
|
||||||
open
|
|
||||||
ResCze,
|
|
||||||
Prelude
|
|
||||||
in {
|
|
||||||
lin
|
|
||||||
PNeg = {
|
|
||||||
s = [] ;
|
|
||||||
p = False
|
|
||||||
} ;
|
|
||||||
PPos = {
|
|
||||||
s = [] ;
|
|
||||||
p = True
|
|
||||||
} ;
|
|
||||||
ASimul = {s = [] ; t = CTPres} ;
|
|
||||||
TPres = {s = [] ; t = CTPres} ;
|
|
||||||
TTAnt t a = {s = t.s ++ a.s ; t = t.t} ; ----
|
|
||||||
|
|
||||||
}
|
|
||||||
+77
-7
@@ -2,7 +2,7 @@ concrete VerbCze of Verb = CatCze ** open ResCze, Prelude in {
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
UseV v = {
|
UseV v = {
|
||||||
verb = v ; clitPresent = v.isRefl ;
|
verb = v ; clitPresent = False ;
|
||||||
clit = \\_ => v.refl ; compl = \\_ => []
|
clit = \\_ => v.refl ; compl = \\_ => []
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ lin
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
SlashV2a v = {
|
SlashV2a v = {
|
||||||
verb = v ; clitPresent = v.isRefl ;
|
verb = v ; clitPresent = False ;
|
||||||
clit = \\_ => v.refl ; compl = \\_ => [] ;
|
clit = \\_ => v.refl ; compl = \\_ => [] ;
|
||||||
c = v.c ;
|
c = v.c ;
|
||||||
ind = \\_ => [] ; clitAfter = \\_ => []
|
ind = \\_ => [] ; clitAfter = \\_ => []
|
||||||
@@ -31,7 +31,7 @@ lin
|
|||||||
weak = case isClit of {True => np.clit ! v.c.c ; False => []} ;
|
weak = case isClit of {True => np.clit ! v.c.c ; False => []} ;
|
||||||
before = cliticBefore v.c.c v.c2.c
|
before = cliticBefore v.c.c v.c2.c
|
||||||
in {
|
in {
|
||||||
verb = v ; clitPresent = orB v.isRefl isClit ;
|
verb = v ; clitPresent = isClit ;
|
||||||
clit = \\_ => v.refl ++ case before of {True => weak ; False => []} ;
|
clit = \\_ => v.refl ++ case before of {True => weak ; False => []} ;
|
||||||
clitAfter = \\_ => case before of {True => [] ; False => weak} ;
|
clitAfter = \\_ => case before of {True => [] ; False => weak} ;
|
||||||
compl = \\_ => case isClit of {True => [] ; False => fullComplement v.c np.s np.prep} ;
|
compl = \\_ => case isClit of {True => [] ; False => fullComplement v.c np.s np.prep} ;
|
||||||
@@ -43,7 +43,7 @@ lin
|
|||||||
weak = case isClit of {True => np.clit ! v.c2.c ; False => []} ;
|
weak = case isClit of {True => np.clit ! v.c2.c ; False => []} ;
|
||||||
before = cliticBefore v.c.c v.c2.c
|
before = cliticBefore v.c.c v.c2.c
|
||||||
in {
|
in {
|
||||||
verb = v ; clitPresent = orB v.isRefl isClit ;
|
verb = v ; clitPresent = isClit ;
|
||||||
clit = \\_ => v.refl ++ case before of {True => [] ; False => weak} ;
|
clit = \\_ => v.refl ++ case before of {True => [] ; False => weak} ;
|
||||||
clitAfter = \\_ => case before of {True => weak ; False => []} ;
|
clitAfter = \\_ => case before of {True => weak ; False => []} ;
|
||||||
compl = \\_ => [] ;
|
compl = \\_ => [] ;
|
||||||
@@ -80,6 +80,76 @@ lin
|
|||||||
compl = \\a => vp.compl ! a ++ adv.s
|
compl = \\a => vp.compl ! a ++ adv.s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
ExtAdvVP vp adv = AdvVP vp adv ;
|
||||||
|
AdVVP adv vp = vp ** {compl = \\a => adv.s ++ vp.compl ! a} ;
|
||||||
|
|
||||||
|
AdvVPSlash vp adv = vp ** {compl = \\a => vp.compl ! a ++ adv.s} ;
|
||||||
|
AdVVPSlash adv vp = vp ** {compl = \\a => adv.s ++ vp.compl ! a} ;
|
||||||
|
|
||||||
|
UseCopula = {
|
||||||
|
verb = copulaVerbForms ; clitPresent = False ;
|
||||||
|
clit,compl = \\_ => []
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ComplVA va ap = {
|
||||||
|
verb = va ; clitPresent = False ; clit = \\_ => va.refl ;
|
||||||
|
compl = ap.pred
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ReflVP vp = {
|
||||||
|
verb = vp.verb ; clitPresent = True ;
|
||||||
|
clit = \\a => vp.clit ! a ++ "se" ++ vp.clitAfter ! a ;
|
||||||
|
compl = \\a => vp.compl ! a ++ vp.ind ! a
|
||||||
|
} ;
|
||||||
|
|
||||||
|
VPSlashPrep vp prep = vp ** {
|
||||||
|
c = prep ; ind = \\_ => [] ; clitAfter = \\_ => []
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashV2A v ap = {
|
||||||
|
verb = v ; clitPresent = False ; clit = \\_ => v.refl ;
|
||||||
|
clitAfter = \\_ => [] ; c = v.c ; ind = \\a => ap.pred ! a ;
|
||||||
|
compl = \\_ => []
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashV2S v sent = {
|
||||||
|
verb = v ; clitPresent = False ; clit = \\_ => v.refl ;
|
||||||
|
clitAfter = \\_ => [] ; c = v.c ; ind = \\_ => SOFT_BIND ++ "," ++ sent.s ;
|
||||||
|
compl = \\_ => []
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashV2Q v sent = {
|
||||||
|
verb = v ; clitPresent = False ; clit = \\_ => v.refl ;
|
||||||
|
clitAfter = \\_ => [] ; c = v.c ; ind = \\_ => SOFT_BIND ++ "," ++ sent.ind ;
|
||||||
|
compl = \\_ => []
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashV2V v vp = {
|
||||||
|
verb = v ; clitPresent = False ; clit = \\_ => v.refl ;
|
||||||
|
clitAfter = \\_ => [] ; c = v.c ;
|
||||||
|
compl = \\_ => [] ;
|
||||||
|
ind = \\a => vp.verb.inf ++ vp.clit ! a ++ vp.compl ! a
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashVV vv vp = {
|
||||||
|
verb = vv ; clitPresent = andB vv.isAux vp.clitPresent ;
|
||||||
|
clit = \\a => vv.refl ++ case vv.isAux of {True => vp.clit ! a ; False => []} ;
|
||||||
|
clitAfter = vp.clitAfter ; c = vp.c ;
|
||||||
|
compl = \\a => vp.verb.inf ++ case vv.isAux of {True => [] ; False => vp.clit ! a} ++ vp.compl ! a ;
|
||||||
|
ind = vp.ind
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashV2VNP v np vp = {
|
||||||
|
verb = v ; clitPresent = np.hasClit ;
|
||||||
|
clit = \\a => v.refl ++ case hasCliticComplement v.c np.hasClit of {
|
||||||
|
True => np.clit ! v.c.c ; False => []} ;
|
||||||
|
clitAfter = vp.clitAfter ; c = vp.c ;
|
||||||
|
compl = \\a => case hasCliticComplement v.c np.hasClit of {
|
||||||
|
True => [] ; False => fullComplement v.c np.s np.prep} ++
|
||||||
|
vp.verb.inf ++ vp.clit ! a ++ vp.compl ! a ;
|
||||||
|
ind = vp.ind
|
||||||
|
} ;
|
||||||
|
|
||||||
-- VerbForms has no passive participle yet, so the reflexive passive is used:
|
-- VerbForms has no passive participle yet, so the reflexive passive is used:
|
||||||
-- "číslo se dělí" = "the number is divided"
|
-- "číslo se dělí" = "the number is divided"
|
||||||
PassV2 v = {
|
PassV2 v = {
|
||||||
@@ -89,19 +159,19 @@ lin
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
ComplVV vv vp = {
|
ComplVV vv vp = {
|
||||||
verb = vv ; clitPresent = orB vv.isRefl (andB vv.isAux vp.clitPresent) ;
|
verb = vv ; clitPresent = andB vv.isAux vp.clitPresent ;
|
||||||
clit = \\a => vv.refl ++ case vv.isAux of {True => vp.clit ! a ; False => []} ;
|
clit = \\a => vv.refl ++ case vv.isAux of {True => vp.clit ! a ; False => []} ;
|
||||||
compl = \\a => vp.verb.inf ++ case vv.isAux of {True => [] ; False => vp.clit ! a} ++ vp.compl ! a
|
compl = \\a => vp.verb.inf ++ case vv.isAux of {True => [] ; False => vp.clit ! a} ++ vp.compl ! a
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ComplVS vs s = {
|
ComplVS vs s = {
|
||||||
verb = vs ; clitPresent = vs.isRefl ;
|
verb = vs ; clitPresent = False ;
|
||||||
clit = \\_ => vs.refl ;
|
clit = \\_ => vs.refl ;
|
||||||
compl = \\_ => SOFT_BIND ++ "," ++ (frontSentence "že" s).s
|
compl = \\_ => SOFT_BIND ++ "," ++ (frontSentence "že" s).s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ComplVQ v q = {
|
ComplVQ v q = {
|
||||||
verb = v ; clitPresent = v.isRefl ; clit = \\_ => v.refl ;
|
verb = v ; clitPresent = False ; clit = \\_ => v.refl ;
|
||||||
compl = \\_ => SOFT_BIND ++ "," ++ q.ind
|
compl = \\_ => SOFT_BIND ++ "," ++ q.ind
|
||||||
} ;
|
} ;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user