added more comments to Czech files

This commit is contained in:
aarneranta
2020-04-08 11:07:12 +02:00
parent 05be672d6a
commit 0d6948f59b
6 changed files with 56 additions and 27 deletions

View File

@@ -12,15 +12,15 @@ concrete CatCze of Cat =
Cl = {subj,clit,compl : Str ; verb : VerbForms ; a : Agr} ; Cl = {subj,clit,compl : Str ; verb : VerbForms ; a : Agr} ;
Comp = {s : Agr => Str} ; Comp = {s : Agr => Str} ;
QS = {s : Str} ; ---- QS = {s : Str} ; ---- TODO: indirect questions
QCl = {subj,clit,compl : Str ; verb : VerbForms ; a : Agr} ; ---- QCl = {subj,clit,compl : Str ; verb : VerbForms ; a : Agr} ; -- = Cl ---- check if enough
IAdv = {s : Str} ; IAdv = {s : Str} ;
RS = {s : Agr => Str} ; RS = {s : Agr => Str} ;
RCl = {subj,clit,compl : Agr => Str ; verb : VerbForms} ; ---- RAgr RCl = {subj,clit,compl : Agr => Str ; verb : VerbForms} ; ---- RAgr with composite RP
RP = AdjForms ; RP = AdjForms ;
VP = {verb : VerbForms ; clit,compl : Agr => Str} ; ---- VP = {verb : VerbForms ; clit,compl : Agr => Str} ; ---- more fields probably needed
VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase} ; ---- VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase} ; ----
V = ResCze.VerbForms ; V = ResCze.VerbForms ;
V2 = ResCze.VerbForms ** {c : ComplementCase} ; V2 = ResCze.VerbForms ** {c : ComplementCase} ;
@@ -33,22 +33,22 @@ concrete CatCze of Cat =
N = ResCze.NounForms ; N = ResCze.NounForms ;
CN = ResCze.Noun ; -- {s : Number => Case => Str ; g : Gender} CN = ResCze.Noun ; -- {s : Number => Case => Str ; g : Gender}
NP = {s,clit,prep : Case => Str ; a : Agr ; hasClit : Bool} ; ---- NP = {s,clit,prep : Case => Str ; a : Agr ; hasClit : Bool} ; -- clit,prep differ for pronouns
PN = {s : Case => Str ; g : Gender} ; ---- PN = {s : Case => Str ; g : Gender} ;
Det = Determiner ; -- {s : Gender => Case => Str ; size : NumSize} ; Det = Determiner ; -- {s : Gender => Case => Str ; size : NumSize} ; -- can contain a numeral, therefore NumSize
Quant = {s : Gender => Number => Case => Str} ; -- same as AP Quant = {s : Gender => Number => Case => Str} ; -- same as AP
Num = {s : Gender => Case => Str ; size : NumSize} ; Num = Determiner ;
Card = Determiner ; -- {s : Gender => Case => Str ; size : NumSize} ; Card = Determiner ; -- {s : Gender => Case => Str ; size : NumSize} ;
Pron = PronForms ; Pron = PronForms ;
Adv = {s : Str} ; 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} ; ---- Conj = {s1,s2 : Str} ; ---- may need a number
Pol = {s : Str ; p : Bool} ; Pol = {s : Str ; p : Bool} ;
Temp = {s : Str ; t : CTense} ; ---- Temp = {s : Str ; t : CTense} ;
Tense = {s : Str ; t : CTense} ; ---- Tense = {s : Str ; t : CTense} ;
Ant = {s : Str ; t : CTense} ; ---- Ant = {s : Str ; t : CTense} ;
PConj = {s : Str} ; PConj = {s : Str} ;
Voc = {s : Str} ; Voc = {s : Str} ;
@@ -63,7 +63,7 @@ concrete CatCze of Cat =
A = \s -> s.msnom ; A = \s -> s.msnom ;
lincat Numeral = Determiner ; ---- should contain Ord as well lincat Numeral = Determiner ; ---- TODO: should contain Ord as well
lincat Digits = {s:Str ; size : NumSize} ; lincat Digits = {s:Str ; size : NumSize} ;

View File

@@ -88,7 +88,7 @@ lin
UseN n = nounFormsNoun n ; UseN n = nounFormsNoun n ;
ApposCN cn np = { ApposCN cn np = {
s = \\n,c => cn.s ! n ! c ++ np.s ! c ; ---- s = \\n,c => cn.s ! n ! c ++ np.s ! c ; ---- TODO check apposition order
g = cn.g g = cn.g
} ; } ;

View File

@@ -9,6 +9,7 @@ concrete NumeralCze of Numeral =
-- from gf-contrib/numerals/czech.gf, added inflections -- from gf-contrib/numerals/czech.gf, added inflections
-- AR 2020-03-20 -- AR 2020-03-20
---- TODO ordinal forms
oper LinNumeral = Determiner ; -- {s : NumeralForms ; size : NumSize} ; oper LinNumeral = Determiner ; -- {s : NumeralForms ; size : NumSize} ;

View File

@@ -1,5 +1,9 @@
resource ResCze = open Prelude in { resource ResCze = open Prelude in {
-- AR March 2020
-- sources:
-- Wiki = https://en.wikipedia.org/wiki/Czech_declension, https://en.wikipedia.org/wiki/Czech_conjugation
-- CEG = J. Naughton, Czech: an Essential Grammar, Routledge 2005.
-- parameters -- parameters
@@ -15,7 +19,7 @@ param
Agr = Ag Gender Number Person ; Agr = Ag Gender Number Person ;
CTense = CTPres | CTPast ; ----- CTense = CTPres | CTPast ; ----- TODO complete the tense system to match Czech verb morphology
-- phonology -- phonology
@@ -31,8 +35,6 @@ oper
"b" | "f" | "l" | "m" | "p" | "s" | "v" "b" | "f" | "l" | "m" | "p" | "s" | "v"
) ; ) ;
dropFleetingE : Str -> Str = \s -> case s of { dropFleetingE : Str -> Str = \s -> case s of {
x + "e" + c@("k"|"c") => x + c ; x + "e" + c@("k"|"c") => x + c ;
x + "e" + "ň" => x + "n" ; x + "e" + "ň" => x + "n" ;
@@ -89,10 +91,25 @@ oper
--------------- ---------------
-- Nouns -- Nouns
---------------
-- novel idea (for RGL): lexical items stored as records rather than tables
-- advantages:
-- - easier to make exceptions to paradigms (by ** {})
-- - easier to keep the number of forms minimal
-- - easier to see what is happening than with lots of anonymous arguments to mkN, mkA, mkV
-- so this is the lincat of N
Noun : Type = {s : Number => Case => Str ; g : Gender} ;
NounForms : Type = {snom,sgen,sdat,sacc,svoc,sloc,sins, pnom,pgen,pdat,pacc,ploc,pins : Str ; g : Gender} ; NounForms : Type = {snom,sgen,sdat,sacc,svoc,sloc,sins, pnom,pgen,pdat,pacc,ploc,pins : Str ; g : Gender} ;
-- But traditional tables make agreement easier to handle in syntax
-- so this is the lincat of CN
Noun : Type = {s : Number => Case => Str ; g : Gender} ;
-- this is used in UseN
nounFormsNoun : NounForms -> Noun nounFormsNoun : NounForms -> Noun
= \forms -> { = \forms -> {
s = table { s = table {
@@ -117,7 +134,7 @@ oper
g = forms.g g = forms.g
} ; } ;
-- terminology of CEG
DeclensionType : Type = Str -> NounForms ; DeclensionType : Type = Str -> NounForms ;
declensionNounForms : (nom,gen : Str) -> Gender -> NounForms declensionNounForms : (nom,gen : Str) -> Gender -> NounForms
@@ -142,6 +159,8 @@ oper
} }
in decl nom ; in decl nom ;
-- the "smartest" one-argument mkN
guessNounForms : Str -> NounForms guessNounForms : Str -> NounForms
= \s -> case s of { = \s -> case s of {
_ + "ost" => declKOST s ; _ + "ost" => declKOST s ;
@@ -155,11 +174,11 @@ oper
_ + "í" => declSTAVENI s ; _ + "í" => declSTAVENI s ;
_ => Predef.error ("cannot guess declension type for" ++ s) _ => Predef.error ("cannot guess declension type for" ++ s)
} ; } ;
-- source: https://en.wikipedia.org/wiki/Czech_declension -- the traditional declensions, in both CEG and Wiki
-- they are also exported in ParadigmsCze with names panN etc
declPAN : DeclensionType = \pan -> --- plural nom ové|i|é should be given as extra arg 3.5.1 declPAN : DeclensionType = \pan -> --- plural nom ové|i|é can be changed with ** {pnom = ...} CEG 3.5.1
{ {
snom = pan ; snom = pan ;
sgen,sacc = pan + "a" ; sgen,sacc = pan + "a" ;
@@ -406,6 +425,7 @@ oper
Adjective : Type = {s : Gender => Number => Case => Str} ; Adjective : Type = {s : Gender => Number => Case => Str} ;
-- to be used for A, in three degrees: 15 forms in each -- to be used for A, in three degrees: 15 forms in each
---- TODO other degrees than positive
AdjForms : Type = { AdjForms : Type = {
msnom, fsnom, nsnom : Str ; -- svoc = snom msnom, fsnom, nsnom : Str ; -- svoc = snom
@@ -420,6 +440,8 @@ oper
pins : Str ; pins : Str ;
} ; } ;
-- used in PositA but will also work in Compar and Superl by calling their record fields
adjFormsAdjective : AdjForms -> Adjective = \afs -> { adjFormsAdjective : AdjForms -> Adjective = \afs -> {
s = \\g,n,c => case <n,c,g> of { s = \\g,n,c => case <n,c,g> of {
@@ -562,6 +584,9 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
pastpartpl = "měli" ; pastpartpl = "měli" ;
} ; } ;
-- just an example of a traditional paradigm
---- TODO other traditional paradigms
iii_kupovatVerbForms : Str -> VerbForms = \kupovat -> iii_kupovatVerbForms : Str -> VerbForms = \kupovat ->
let let
kupo = Predef.tk 3 kupovat ; kupo = Predef.tk 3 kupovat ;
@@ -593,6 +618,8 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
a : Agr a : Agr
} ; } ;
---- TODO: possessives
personalPron : Agr -> PronForms = \a -> personalPron : Agr -> PronForms = \a ->
{a = a ; cnom = []} ** {a = a ; cnom = []} **
case a of { case a of {
@@ -682,7 +709,7 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
} ; } ;
-------------------------------- --------------------------------
-- demonstrative pronouns -- demonstrative pronouns, used for Quant and Det
oper oper
DemPronForms : Type = { DemPronForms : Type = {
@@ -785,7 +812,7 @@ oper
-- example: number 1 -- example: number 1
oneNumeral : Determiner = numeralFormsDeterminer (mkDemPronForms "jed") Num1 ; oneNumeral : Determiner = numeralFormsDeterminer (mkDemPronForms "jed") Num1 ;
-- numbers 2,3,4 ---- to check if everything comes out right with this type -- numbers 2,3,4 ---- to check if everything comes out right with the determiner type
twoNumeral : Determiner = twoNumeral : Determiner =
let forms = { let forms = {
msnom = "dva" ; fsnom, nsnom, fsacc = "dvě" ; msnom = "dva" ; fsnom, nsnom, fsacc = "dvě" ;
@@ -830,7 +857,7 @@ oper
-- combining nouns with numerals -- combining nouns with numerals
param param
NumSize = Num1 | Num2_4 | Num5 ; -- essential grammar 6.1 NumSize = Num1 | Num2_4 | Num5 ; -- CEG 6.1
oper oper
numSizeForm : (Number => Case => Str) -> NumSize -> Case -> Str numSizeForm : (Number => Case => Str) -> NumSize -> Case -> Str

View File

@@ -17,8 +17,9 @@ lin
s = temp.s ++ cl.subj ++ cl.clit ++ pol.s ++ verbAgr cl.verb cl.a pol.p ++ cl.compl ; s = temp.s ++ cl.subj ++ cl.clit ++ pol.s ++ verbAgr cl.verb cl.a pol.p ++ cl.compl ;
} ; } ;
--- TODO is inversion the standard? ; add indirect questions
UseQCl temp pol cl = { UseQCl temp pol cl = {
s = temp.s ++ cl.clit ++ pol.s ++ verbAgr cl.verb cl.a pol.p ++ cl.subj ++ cl.compl ; ---- inversion optional s = temp.s ++ cl.clit ++ pol.s ++ verbAgr cl.verb cl.a pol.p ++ cl.subj ++ cl.compl ;
} ; } ;
UseRCl temp pol rcl = { UseRCl temp pol rcl = {

View File

@@ -12,7 +12,7 @@ lin
many_Det = regNumeral "mnoho" "mnoha" ; -- CEG 6.8 ---- many_Det = regNumeral "mnoho" "mnoha" ; -- CEG 6.8 ----
or_Conj = mkConj "nebo" ; or_Conj = mkConj "nebo" ;
somePl_Det = regNumeral "několik" "několika" ; -- CEG 6.8 ---- somePl_Det = regNumeral "několik" "několika" ; -- CEG 6.8 ----
something_NP = {s,clit,prep = \\c => "ně" ++ coForms ! c ; a = Ag Neutr Sg P3 ; hasClit = False} ; -- CEG 5.6.3 something_NP = {s,clit,prep = \\c => "ně" + coForms ! c ; a = Ag Neutr Sg P3 ; hasClit = False} ; -- CEG 5.6.3
possess_Prep = mkPrep "" Gen ; possess_Prep = mkPrep "" Gen ;
that_Quant = demPronFormsAdjective (mkDemPronForms "tamt") "" ; that_Quant = demPronFormsAdjective (mkDemPronForms "tamt") "" ;
this_Quant = demPronFormsAdjective (mkDemPronForms "t") "to" ; this_Quant = demPronFormsAdjective (mkDemPronForms "t") "to" ;