diff --git a/src/czech/AdverbCze.gf b/src/czech/AdverbCze.gf index a441d2cf..b6b18631 100644 --- a/src/czech/AdverbCze.gf +++ b/src/czech/AdverbCze.gf @@ -6,4 +6,8 @@ lin s = prep.s ++ np.prep ! prep.c } ; + SubjS subj s = { + s = subj.s ++ s.s + } ; + } diff --git a/src/czech/CatCze.gf b/src/czech/CatCze.gf index 04166930..d7d42239 100644 --- a/src/czech/CatCze.gf +++ b/src/czech/CatCze.gf @@ -24,7 +24,7 @@ concrete CatCze of Cat = VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase} ; ---- V = ResCze.VerbForms ; V2 = ResCze.VerbForms ** {c : ComplementCase} ; - VS,VQ = ResCze.VerbForms ; + VS,VQ,VV = ResCze.VerbForms ; A = ResCze.AdjForms ; AP = ResCze.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str} diff --git a/src/czech/ExtendCze.gf b/src/czech/ExtendCze.gf index 9d094ebc..97b9db43 100644 --- a/src/czech/ExtendCze.gf +++ b/src/czech/ExtendCze.gf @@ -12,7 +12,6 @@ concrete ExtendCze of Extend = CatCze ** ,SlashBareV2S ,PredIAdvVP ,PredAPVP - ,ExistsNP ,ExistS ,ExistPluralCN ,ExistNPQS diff --git a/src/czech/IdiomCze.gf b/src/czech/IdiomCze.gf index d4314dcc..b7d61c65 100644 --- a/src/czech/IdiomCze.gf +++ b/src/czech/IdiomCze.gf @@ -1,5 +1,32 @@ concrete IdiomCze of Idiom = CatCze ** open Prelude, ResCze in { +lin + ImpP3 np vp = { + s = "nechť" ++ np.s ! Nom ++ vp.clit ! np.a ++ + verbAgr vp.verb np.a True ++ vp.compl ! np.a + } ; + ImpersCl vp = let agr = Ag Neutr Sg P3 in { + subj = [] ; + clit = vp.clit ! agr ; + compl = vp.compl ! agr ; + verb = vp.verb ; + a = agr + } ; + + GenericCl vp = let agr = Ag (Masc Anim) Pl P3 in { + subj = [] ; + clit = vp.clit ! agr ; + compl = vp.compl ! agr ; + verb = vp.verb ; + a = agr + } ; + + ExistNP np = { + subj, clit = [] ; + compl = np.s ! Nom ; + verb = iii_kupovatVerbForms "existovat" ; + a = np.a + } ; } diff --git a/src/czech/MissingCze.gf b/src/czech/MissingCze.gf index de1fb188..02ce581c 100644 --- a/src/czech/MissingCze.gf +++ b/src/czech/MissingCze.gf @@ -9,12 +9,10 @@ oper AdjOrd : Ord -> AP = notYet "AdjOrd" ; oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ; oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ; oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ; -oper AdvS : Adv -> S -> S = notYet "AdvS" ; oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ; oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ; oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ; oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ; -oper CompCN : CN -> Comp = notYet "CompCN" ; oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ; oper CompIP : IP -> IComp = notYet "CompIP" ; oper ComparA : A -> NP -> AP = notYet "ComparA" ; diff --git a/src/czech/NounCze.gf b/src/czech/NounCze.gf index 6b31f8f7..59372f68 100644 --- a/src/czech/NounCze.gf +++ b/src/czech/NounCze.gf @@ -99,5 +99,12 @@ lin NumDecimal ds = ds ** {s = \\_,_ => ds.s} ; NumNumeral nu = nu ; + SentCN cn sc = cn ** {s = \\n,c => cn.s ! n ! c ++ sc.s} ; + + PredetNP pred np = np ** { + s = \\c => pred.s ++ np.s ! c ; + clit = \\c => pred.s ++ np.clit ! c ; + prep = \\c => pred.s ++ np.prep ! c + } ; } diff --git a/src/czech/PhraseCze.gf b/src/czech/PhraseCze.gf index c1a0fda6..50bd9dc9 100644 --- a/src/czech/PhraseCze.gf +++ b/src/czech/PhraseCze.gf @@ -8,6 +8,10 @@ lin UttNP np = {s = np.s ! Nom} ; UttVP vp = let agr = Ag Neutr Sg P3 in {s = vp.clit ! agr ++ vp.verb.inf ++ vp.compl ! agr} ; + UttImpSg pol imp = {s = pol.s ++ imp.s} ; + UttImpPl pol imp = {s = pol.s ++ imp.s} ; + UttImpPol pol imp = {s = pol.s ++ imp.s} ; + PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; diff --git a/src/czech/QuestionCze.gf b/src/czech/QuestionCze.gf index d5390caa..d0bea0ee 100644 --- a/src/czech/QuestionCze.gf +++ b/src/czech/QuestionCze.gf @@ -4,4 +4,6 @@ concrete QuestionCze of Question = CatCze ** lin QuestCl cl = cl ; ---- + QuestIAdv iadv cl = cl ** {clit = iadv.s ++ cl.clit} ; + } diff --git a/src/czech/SentenceCze.gf b/src/czech/SentenceCze.gf index 2793ec35..661df8e6 100644 --- a/src/czech/SentenceCze.gf +++ b/src/czech/SentenceCze.gf @@ -28,5 +28,24 @@ lin pol.s ++ verbAgr rcl.verb a pol.p ++ rcl.compl ! a ; } ; - + +-- no imperative in VerbForms yet; the 1st person plural present is used +-- instead, which is the normal register in mathematical Czech +-- ("předpokládáme, že ..." = "we assume that ...") + ImpVP vp = let agr = Ag (Masc Anim) Pl P1 in + {s = vp.clit ! agr ++ verbAgr vp.verb agr True ++ vp.compl ! agr} ; + + EmbedS s = {s = "že" ++ s.s} ; + + EmbedQS qs = {s = qs.s} ; + + EmbedVP vp = let agr = Ag Neutr Sg P3 in + {s = vp.clit ! agr ++ vp.verb.inf ++ vp.compl ! agr} ; + + AdvS a s = {s = a.s ++ s.s} ; + + ExtAdvS a s = {s = a.s ++ SOFT_BIND ++ "," ++ s.s} ; + + SSubjS a subj b = {s = a.s ++ SOFT_BIND ++ "," ++ subj.s ++ b.s} ; + } diff --git a/src/czech/StructuralCze.gf b/src/czech/StructuralCze.gf index ef14b1a2..b56c7ffa 100644 --- a/src/czech/StructuralCze.gf +++ b/src/czech/StructuralCze.gf @@ -1,11 +1,42 @@ concrete StructuralCze of Structural = CatCze ** open ParadigmsCze, ResCze, Prelude in { +-- a singular determiner inflecting like an adjective, e.g. "každý", "nějaký" +oper + adjDet : AdjForms -> Determiner = \afs -> { + s = \\g,c => (adjFormsAdjective afs).s ! g ! Sg ! c ; + size = Num1 + } ; + lin + all_Predet = {s = "všechny"} ; and_Conj = mkConj "a" ; + both7and_DConj = {s1 = "jak" ; s2 = "tak"} ; + between_Prep = mkPrep "mezi" Ins ; by8agent_Prep = mkPrep "od" Gen ; ---- TODO this means "from", there might be no good translation + by8means_Prep = mkPrep "pomocí" Gen ; + can_VV = { + inf = "moci" ; + pressg1 = "mohu" ; + pressg2 = "můžeš" ; + pressg3, negpressg3 = "může" ; + prespl1 = "můžeme" ; + prespl2 = "můžete" ; + prespl3 = "mohou" ; + pastpartsg = "mohl" ; + pastpartpl = "mohli" ; + } ; + either7or_DConj = {s1 = "buď" ; s2 = "nebo"} ; + every_Det = adjDet (mladyAdjForms "každý") ; few_Det = invarNumeral "málo" ; -- CEG 6.8 --- TODO genitive mála for_Prep = mkPrep "pro" accusative ; + if_Subj = {s = "jestliže"} ; + no_Quant = adjFormsAdjective (mladyAdjForms "žádný") ; + on_Prep = mkPrep "na" Loc ; + someSg_Det = adjDet (mladyAdjForms "nějaký") ; + that_Subj = {s = "že"} ; + under_Prep = mkPrep "pod" Ins ; + where_IAdv = {s = "kde"} ; from_Prep = mkPrep (pre {"s"|"z" => "ze" ; _ => "z"}) Gen ; ---- consonant clusters have_V2 = mkV2 haveVerbForms ; in_Prep = mkPrep (pre {"v"|"m" => "ve" ; _ => "v"}) Loc ; ---- diff --git a/src/czech/VerbCze.gf b/src/czech/VerbCze.gf index e80c25c7..4cc9c8e2 100644 --- a/src/czech/VerbCze.gf +++ b/src/czech/VerbCze.gf @@ -36,6 +36,12 @@ lin CompNP np = { s = \\a_ => np.s ! Nom ; ---- InstrC in Pol } ; + + CompCN cn = { + s = \\a => case a of { + Ag _ n _ => cn.s ! n ! Nom ---- InstrC also possible + } + } ; CompAdv adv = { s = \\a_ => adv.s @@ -45,4 +51,24 @@ lin compl = \\a => vp.compl ! a ++ adv.s } ; +-- VerbForms has no passive participle yet, so the reflexive passive is used: +-- "číslo se dělí" = "the number is divided" + PassV2 v = { + verb = v ; + clit = \\_ => "se" ; + compl = \\_ => [] + } ; + + ComplVV vv vp = { + verb = vv ; + clit = vp.clit ; + compl = \\a => vp.verb.inf ++ vp.compl ! a + } ; + + ComplVS vs s = { + verb = vs ; + clit = \\_ => [] ; + compl = \\_ => SOFT_BIND ++ "," ++ "že" ++ s.s + } ; + }