forked from GitHub/gf-rgl
added more comments to Czech files
This commit is contained in:
@@ -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} ;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -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} ;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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" ;
|
||||||
|
|||||||
Reference in New Issue
Block a user