forked from GitHub/gf-rgl
merge of the manual and automatic grammars
This commit is contained in:
@@ -10,14 +10,14 @@ concrete AdjectiveGla of Adjective = CatGla ** open ResGla, Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : A -> AP ;
|
-- : A -> AP ;
|
||||||
PositA a = a ** {
|
--PositA a = a ** {
|
||||||
compar = [] ;
|
-- compar = [] ;
|
||||||
} ;
|
-- } ;
|
||||||
|
|
||||||
-- : A -> NP -> AP ;
|
-- : A -> NP -> AP ;
|
||||||
ComparA a np = a ** {
|
--ComparA a np = a ** {
|
||||||
compar = np.s
|
-- compar = np.s
|
||||||
} ;
|
-- } ;
|
||||||
|
|
||||||
-- : A2 -> NP -> AP ; -- married to her
|
-- : A2 -> NP -> AP ; -- married to her
|
||||||
-- ComplA2 a2 np = a2 ** { } ;
|
-- ComplA2 a2 np = a2 ** { } ;
|
||||||
@@ -26,7 +26,7 @@ concrete AdjectiveGla of Adjective = CatGla ** open ResGla, Prelude in {
|
|||||||
-- ReflA2 a2 = a2 ** { } ;
|
-- ReflA2 a2 = a2 ** { } ;
|
||||||
|
|
||||||
-- : A2 -> AP ; -- married
|
-- : A2 -> AP ; -- married
|
||||||
UseA2 = PositA ;
|
-- UseA2 = PositA ;
|
||||||
|
|
||||||
-- : A -> AP ; -- warmer
|
-- : A -> AP ; -- warmer
|
||||||
-- UseComparA a = a ** {
|
-- UseComparA a = a ** {
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ lin
|
|||||||
PrepNP prep np = {
|
PrepNP prep np = {
|
||||||
s = prepAndArt ++ noun
|
s = prepAndArt ++ noun
|
||||||
} where {
|
} where {
|
||||||
defaultCase : CoreCase = prep.c2 ! getDefi np.a ;
|
defaultCase : Case = prep.c2 ! getDefi np.a ;
|
||||||
complCase : Case = case <defaultCase, np.a> of {
|
complCase : Case = case <defaultCase, np.a> of {
|
||||||
<Dat NoMutation, NotPron (DPoss _ (Sg1|Sg2|Sg3 Masc))>
|
<Dat NoMutation, NotPron (DPoss _ (Sg1|Sg2|Sg3 Masc))>
|
||||||
=> CC (Dat Lenited) ; -- force lenition if possessive triggers it
|
=> Dat Lenited ; -- force lenition if possessive triggers it
|
||||||
<Nom NoMutation, NotPron (DPoss _ (Sg1|Sg2|Sg3 Masc))>
|
<Nom NoMutation, NotPron (DPoss _ (Sg1|Sg2|Sg3 Masc))>
|
||||||
=> CC (Nom Lenited) ; -- force lenition if possessive triggers it
|
=> Nom Lenited ; -- force lenition if possessive triggers it
|
||||||
_ => CC defaultCase } ;
|
_ => defaultCase } ;
|
||||||
prepStr : Str = prep.s ! agr2pagr np.a ; -- can be Prep or Prep+Pron merged
|
prepStr : Str = prep.s ! agr2pagr np.a ; -- can be Prep or Prep+Pron merged
|
||||||
artStr : Str = np.art ! complCase ;
|
artStr : Str = np.art ! complCase ;
|
||||||
prepAndArt : Str = case np.a of {
|
prepAndArt : Str = case np.a of {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--# -path=.:../abstract:../common:../prelude
|
--# -path=.:../abstract:../common:../prelude
|
||||||
|
|
||||||
concrete AllGla of AllGlaAbs =
|
concrete AllGla of AllGlaAbs =
|
||||||
LangGla,
|
LangGla -- ,
|
||||||
ExtendGla
|
-- ExtendGla
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ concrete CatGla of Cat = CommonX ** open ResGla, Coordination, Prelude in {
|
|||||||
-- Many atomic noun phrases e.g. "everybody"
|
-- Many atomic noun phrases e.g. "everybody"
|
||||||
-- are constructed in StructuralGla.
|
-- are constructed in StructuralGla.
|
||||||
|
|
||||||
CN = ResGla.LinCN ;
|
CN = ResGla.LinN ;
|
||||||
NP = ResGla.LinNP ;
|
NP = ResGla.LinNP ;
|
||||||
Pron = LinPron ;
|
Pron = LinPron ;
|
||||||
Det = ResGla.LinDet ; -- s : Str , n : Number
|
Det = ResGla.LinDet ; -- s : Str , n : Number
|
||||||
@@ -93,17 +93,17 @@ concrete CatGla of Cat = CommonX ** open ResGla, Coordination, Prelude in {
|
|||||||
V = ResGla.LinV ;
|
V = ResGla.LinV ;
|
||||||
|
|
||||||
VV -- verb-phrase-complement verb e.g. "want"
|
VV -- verb-phrase-complement verb e.g. "want"
|
||||||
= SS ;
|
= ResGla.LinV ;
|
||||||
|
|
||||||
V2A, -- verb with NP and AP complement e.g. "paint"
|
V2A, -- verb with NP and AP complement e.g. "paint"
|
||||||
V2V, -- verb with NP and V complement e.g. "cause"
|
V2V, -- verb with NP and V complement e.g. "cause"
|
||||||
V2S, -- verb with NP and S complement e.g. "tell"
|
V2S, -- verb with NP and S complement e.g. "tell"
|
||||||
V2Q, -- verb with NP and Q complement e.g. "ask"
|
V2Q, -- verb with NP and Q complement e.g. "ask"
|
||||||
V2 = SS ;
|
V2 = LinV ** {c2 : LinPrep} ;
|
||||||
V3 = SS ;
|
V3 = LinV ** {c2,c3 : LinPrep} ;
|
||||||
|
|
||||||
A = SS ;
|
A = LinA ;
|
||||||
A2 = SS ;
|
A2 = LinA ** {c2 : LinPrep} ;
|
||||||
|
|
||||||
N = ResGla.LinN ;
|
N = ResGla.LinN ;
|
||||||
N2 = ResGla.LinN ;
|
N2 = ResGla.LinN ;
|
||||||
@@ -116,6 +116,7 @@ concrete CatGla of Cat = CommonX ** open ResGla, Coordination, Prelude in {
|
|||||||
LN = SS ; -- Location name, e.g. "Sweden"
|
LN = SS ; -- Location name, e.g. "Sweden"
|
||||||
|
|
||||||
linref
|
linref
|
||||||
|
NP = linNP ;
|
||||||
Cl = linCl ;
|
Cl = linCl ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
77
src/gaelic/DocumentationGla.gf
Normal file
77
src/gaelic/DocumentationGla.gf
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
concrete DocumentationGla of Documentation = CatGla ** open
|
||||||
|
ResGla, Prelude, HTML in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
Inflection = {t : Str; s1,s2,s3 : Str} ;
|
||||||
|
Definition = {s : Str} ;
|
||||||
|
Document = {s : Str} ;
|
||||||
|
Tag = {s : Str} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
InflectionN,InflectionN2,InflectionN3 = \x -> {
|
||||||
|
t="n" ;
|
||||||
|
s1=heading1 ("Noun"++
|
||||||
|
case x.g of {
|
||||||
|
Masc => "(masculine)" ;
|
||||||
|
Fem => "(feminine)"
|
||||||
|
}) ;
|
||||||
|
s2=frameTable (
|
||||||
|
tr (th "" ++ th "Sg" ++ th "Pl") ++
|
||||||
|
tr (intagAttr "th" "colspan=\"3\"" "indefinite") ++
|
||||||
|
tr (th "nom" ++ td (x.s ! Nom NoMutation ! Indef ! Sg) ++ td (x.s ! Nom NoMutation ! Indef ! Pl)) ++
|
||||||
|
tr (th "dat" ++ td (x.s ! Dat NoMutation ! Indef ! Sg) ++ td (x.s ! Dat NoMutation ! Indef ! Pl)) ++
|
||||||
|
tr (th "gen" ++ td (x.s ! Gen ! Indef ! Sg) ++ td (x.s ! Gen ! Indef ! Pl)) ++
|
||||||
|
tr (intagAttr "th" "colspan=\"3\"" "definite") ++
|
||||||
|
tr (th "nom" ++ td (x.s ! Nom NoMutation ! Def ! Sg) ++ td (x.s ! Nom NoMutation ! Def ! Pl)) ++
|
||||||
|
tr (th "dat" ++ td (x.s ! Dat NoMutation ! Def ! Sg) ++ td (x.s ! Dat NoMutation ! Def ! Pl)) ++
|
||||||
|
tr (th "gen" ++ td (x.s ! Gen ! Def ! Sg) ++ td (x.s ! Gen ! Def ! Pl)) ++
|
||||||
|
tr (th "voc" ++ td (x.voc ! Sg) ++ td (x.voc ! Pl))) ;
|
||||||
|
s3=[]
|
||||||
|
} ;
|
||||||
|
lin
|
||||||
|
InflectionV,InflectionV2,InflectionV2A,InflectionV2Q,InflectionV2S,InflectionV2V,InflectionV3,InflectionVA,InflectionVQ,InflectionVS,InflectionVV = \x -> {
|
||||||
|
t="v" ;
|
||||||
|
s1=heading1 "Verb" ;
|
||||||
|
s2=frameTable (
|
||||||
|
tr (th "s" ++ td (x.s)) ++
|
||||||
|
tr (intagAttr "th" "rowspan=\"2\"" "Conditional" ++ th "Sg" ++ td (x.conditional ! Sg)) ++
|
||||||
|
tr (th "Pl" ++ td (x.conditional ! Pl)) ++
|
||||||
|
tr (intagAttr "th" "rowspan=\"6\"" "Imperative" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.imperative ! P1 ! Sg)) ++
|
||||||
|
tr (th "Pl" ++ td (x.imperative ! P1 ! Pl)) ++
|
||||||
|
tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td (x.imperative ! P2 ! Sg)) ++
|
||||||
|
tr (th "Pl" ++ td (x.imperative ! P2 ! Pl)) ++
|
||||||
|
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.imperative ! P3 ! Sg)) ++
|
||||||
|
tr (th "Pl" ++ td (x.imperative ! P3 ! Pl)) ++
|
||||||
|
tr (intagAttr "th" "rowspan=\"4\"" "Indicative" ++ th "Fut" ++ td (x.future ! Indep)) ++
|
||||||
|
tr (th "Past" ++ td (x.past ! Indep)) ++
|
||||||
|
tr (th "Participle" ++ td (x.participle))) ;
|
||||||
|
s3=[]
|
||||||
|
} ;
|
||||||
|
lin
|
||||||
|
InflectionA,InflectionA2 = \x -> {
|
||||||
|
t="a" ;
|
||||||
|
s1=heading1 "Adjective" ;
|
||||||
|
s2=frameTable (
|
||||||
|
tr (intagAttr "th" "rowspan=\"2\"" "" ++
|
||||||
|
th "masculine" ++ th "feminine") ++
|
||||||
|
tr (intagAttr "th" "colspan=\"2\"" "singular") ++
|
||||||
|
tr (th "Nom" ++ td (x.s ! ASg (Nom NoMutation) Masc) ++ td (x.s ! ASg (Nom NoMutation) Fem)) ++
|
||||||
|
tr (th "Dat" ++ td (x.s ! ASg (Dat NoMutation) Masc) ++ td (x.s ! ASg (Dat NoMutation) Fem)) ++
|
||||||
|
tr (th "Gen" ++ td (x.s ! ASg Gen Masc) ++ td (x.s ! ASg Gen Fem)) ++
|
||||||
|
tr (th "Voc" ++ td (x.voc ! Masc) ++ td (x.voc ! Fem)) ++
|
||||||
|
tr (intagAttr "th" "rowspan=\"2\"" "" ++ intagAttr "th" "colspan=\"2\"" "plural") ++
|
||||||
|
tr ( intagAttr "td" "colspan=\"2\"" (x.s ! APl))) ++
|
||||||
|
heading2 "Comparative" ++
|
||||||
|
paragraph (x.compar) ;
|
||||||
|
s3=[]
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
NoDefinition t = {s=t.s};
|
||||||
|
MkDefinition t d = {s="<p><b>Definition:</b>"++t.s++d.s++"</p>"};
|
||||||
|
MkDefinitionEx t d e = {s="<p><b>Definition:</b>"++t.s++d.s++"</p><p><b>Example:</b>"++e.s++"</p>"};
|
||||||
|
|
||||||
|
lin
|
||||||
|
MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ i.s3 ++ e.s} ;
|
||||||
|
MkTag i = {s = i.t} ;
|
||||||
|
}
|
||||||
@@ -31,5 +31,6 @@ concrete ExtendGla of Extend = CatGla
|
|||||||
, UseComp_ser, UseComp_estar
|
, UseComp_ser, UseComp_estar
|
||||||
, iFem_Pron, weFem_Pron, youFem_Pron, youPlFem_Pron, youPolFem_Pron, youPolPlFem_Pron, youPolPl_Pron, theyFem_Pron, theyNeutr_Pron
|
, iFem_Pron, weFem_Pron, youFem_Pron, youPlFem_Pron, youPolFem_Pron, youPolPlFem_Pron, youPolPl_Pron, theyFem_Pron, theyNeutr_Pron
|
||||||
, GenModNP
|
, GenModNP
|
||||||
|
, PiedPipingQuestSlash, PiedPipingRelSlash, SubjunctRelCN
|
||||||
|
|
||||||
] with (Grammar=GrammarGla) ;
|
] with (Grammar=GrammarGla) ;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
--# -path=.:../abstract:../common:../prelude:../api
|
--# -path=.:../abstract:../common:../prelude:../api
|
||||||
concrete LangGla of Lang =
|
concrete LangGla of Lang =
|
||||||
GrammarGla,
|
GrammarGla,
|
||||||
LexiconGla,
|
LexiconGla
|
||||||
ConstructionGla ;
|
,DocumentationGla --# notpresent
|
||||||
|
;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ lin beg_V2V = mkV2V (mkV "") ;
|
|||||||
lin belly_N = mkN "" ;
|
lin belly_N = mkN "" ;
|
||||||
lin big_A = mkA "" ;
|
lin big_A = mkA "" ;
|
||||||
lin bike_N = mkN "" ;-}
|
lin bike_N = mkN "" ;-}
|
||||||
lin bird_N = smartN "eun" "eòin" "eòin" Masc ;{-
|
lin bird_N = mkN "eun" "eòin" "eòin" Masc ;{-
|
||||||
lin bite_V2 = mkV2 "" ;
|
lin bite_V2 = mkV2 "" ;
|
||||||
lin black_A = mkA "" ;
|
lin black_A = mkA "" ;
|
||||||
lin blood_N = mkN "" ;
|
lin blood_N = mkN "" ;
|
||||||
@@ -86,9 +86,9 @@ lin cut_V2 = mkV2 "" ;
|
|||||||
----
|
----
|
||||||
-- D
|
-- D
|
||||||
|
|
||||||
lin day_N = mkN "" ; -}
|
lin day_N = mkN "" ;
|
||||||
lin die_V = mkV "die" ;
|
lin die_V = mkV "die" ;
|
||||||
{-lin dig_V = mkV "" ;
|
lin dig_V = mkV "" ;
|
||||||
lin dirty_A = mkA "" ;
|
lin dirty_A = mkA "" ;
|
||||||
lin distance_N3 = mkN3 (mkN "") ;
|
lin distance_N3 = mkN3 (mkN "") ;
|
||||||
lin do_V2 = mkV2 "" ;
|
lin do_V2 = mkV2 "" ;
|
||||||
@@ -161,7 +161,7 @@ lin green_A = mkA "" ;
|
|||||||
-- H
|
-- H
|
||||||
|
|
||||||
lin hair_N = mkN "" ;-}
|
lin hair_N = mkN "" ;-}
|
||||||
lin hand_N = smartN "làmh" Fem ;{-
|
lin hand_N = mkN "làmh" Fem ;{-
|
||||||
lin harbour_N = mkN "" ;
|
lin harbour_N = mkN "" ;
|
||||||
lin hat_N = mkN "" ;
|
lin hat_N = mkN "" ;
|
||||||
lin hate_V2 = mkV2 "" ;
|
lin hate_V2 = mkV2 "" ;
|
||||||
@@ -199,7 +199,7 @@ lin know_VS = mkV "" ;
|
|||||||
----
|
----
|
||||||
-- L
|
-- L
|
||||||
|
|
||||||
lin lake_N = smartN "loch" "locha" "lochan" Masc ;
|
lin lake_N = mkN "loch" "locha" "lochan" Masc ;
|
||||||
{-
|
{-
|
||||||
lin lamp_N = mkN "" ;
|
lin lamp_N = mkN "" ;
|
||||||
lin language_N = mkN "" ;
|
lin language_N = mkN "" ;
|
||||||
@@ -223,7 +223,7 @@ lin love_V2 = mkV2 "" ;
|
|||||||
----
|
----
|
||||||
-- M
|
-- M
|
||||||
|
|
||||||
-}lin man_N = smartN "fear" Masc ;{-
|
-}lin man_N = mkN "fear" Masc ;{-
|
||||||
lin married_A2 = mkA2 (mkA "") ;
|
lin married_A2 = mkA2 (mkA "") ;
|
||||||
lin meat_N = mkN "" ;
|
lin meat_N = mkN "" ;
|
||||||
lin milk_N = mkN "" ;
|
lin milk_N = mkN "" ;
|
||||||
@@ -408,7 +408,7 @@ lin window_N = mkN "" ;
|
|||||||
lin wine_N = mkN "" ;
|
lin wine_N = mkN "" ;
|
||||||
lin wing_N = mkN "" ;
|
lin wing_N = mkN "" ;
|
||||||
lin wipe_V2 = mkV2 "" ;-}
|
lin wipe_V2 = mkV2 "" ;-}
|
||||||
lin woman_N = smartN "boireannach" Masc ;{-
|
lin woman_N = mkN "boireannach" Masc ;{-
|
||||||
lin wonder_VQ = mkVQ (mkV "") ;
|
lin wonder_VQ = mkVQ (mkV "") ;
|
||||||
lin wood_N = mkN "" ;
|
lin wood_N = mkN "" ;
|
||||||
lin worm_N = mkN "" ;
|
lin worm_N = mkN "" ;
|
||||||
|
|||||||
10648
src/gaelic/MorphoGla.gf
Normal file
10648
src/gaelic/MorphoGla.gf
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,10 @@ concrete NounGla of Noun = CatGla ** open ResGla, Prelude in {
|
|||||||
-- : Det -> CN -> NP
|
-- : Det -> CN -> NP
|
||||||
DetCN det cn = emptyNP ** {
|
DetCN det cn = emptyNP ** {
|
||||||
art = det.s ! cn.g ;
|
art = det.s ! cn.g ;
|
||||||
s = \\c => cn.s ! getNForm det.dt c ;
|
s = \\c => case det.dt of {
|
||||||
|
DDef n sp => cn.s ! c ! sp ! n ;
|
||||||
|
DPoss n _ => cn.s ! c ! Def ! n -- ????????????????
|
||||||
|
} ;
|
||||||
a = NotPron det.dt ;
|
a = NotPron det.dt ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -20,7 +23,7 @@ concrete NounGla of Noun = CatGla ** open ResGla, Prelude in {
|
|||||||
-- : Pron -> NP ;
|
-- : Pron -> NP ;
|
||||||
-- Assuming that lincat Pron = lincat NP
|
-- Assuming that lincat Pron = lincat NP
|
||||||
UsePron pron = emptyNP ** pron ** {
|
UsePron pron = emptyNP ** pron ** {
|
||||||
s = \\c => pron.s ! npc2cc c ;
|
s = pron.s ;
|
||||||
a = IsPron pron.a
|
a = IsPron pron.a
|
||||||
} ;
|
} ;
|
||||||
{-
|
{-
|
||||||
@@ -58,7 +61,7 @@ concrete NounGla of Noun = CatGla ** open ResGla, Prelude in {
|
|||||||
-}
|
-}
|
||||||
-- MassNP : CN -> NP ;
|
-- MassNP : CN -> NP ;
|
||||||
MassNP cn = emptyNP ** {
|
MassNP cn = emptyNP ** {
|
||||||
s = \\c => cn.s ! getNForm (DDef Sg Indefinite) c -- no article, singular indefinite forms, open for cases+mutations
|
s = \\c => cn.s ! c ! Indef ! Sg -- no article, singular indefinite forms, open for cases+mutations
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
@@ -132,16 +135,23 @@ concrete NounGla of Noun = CatGla ** open ResGla, Prelude in {
|
|||||||
DefArt = ResGla.defArt ;
|
DefArt = ResGla.defArt ;
|
||||||
|
|
||||||
-- : Quant
|
-- : Quant
|
||||||
IndefArt = mkQuant [] (QDef Indefinite) ;
|
IndefArt = {
|
||||||
|
s = \\_ => [] ;
|
||||||
|
sp = [] ;
|
||||||
|
qt = QDef Indef ;
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : Pron -> Quant -- my
|
-- : Pron -> Quant -- my
|
||||||
PossPron pron = mkQuant pron.poss (QPoss pron.a) ;
|
PossPron pron = {
|
||||||
|
s = \\_ => pron.poss ;
|
||||||
|
sp = pron.poss ;
|
||||||
|
qt = QPoss pron.a ;
|
||||||
|
} ;
|
||||||
|
|
||||||
--2 Common nouns
|
--2 Common nouns
|
||||||
|
|
||||||
-- : N -> CN
|
-- : N -> CN
|
||||||
UseN = useN ;
|
UseN n = n ;
|
||||||
|
|
||||||
{-
|
{-
|
||||||
-- : N2 -> CN ;
|
-- : N2 -> CN ;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -4,6 +4,7 @@ concrete PhraseGla of Phrase = CatGla ** open Prelude, ResGla in {
|
|||||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||||
|
|
||||||
UttS s = s ;
|
UttS s = s ;
|
||||||
|
|
||||||
{-
|
{-
|
||||||
UttQS qs = qs ;
|
UttQS qs = qs ;
|
||||||
UttIAdv iadv = iadv ;
|
UttIAdv iadv = iadv ;
|
||||||
@@ -16,8 +17,8 @@ concrete PhraseGla of Phrase = CatGla ** open Prelude, ResGla in {
|
|||||||
UttAP ap = { s = ap.s } ;
|
UttAP ap = { s = ap.s } ;
|
||||||
UttAdv adv = {s = } ;
|
UttAdv adv = {s = } ;
|
||||||
UttCN n = {s = } ;
|
UttCN n = {s = } ;
|
||||||
UttCard n = {s = } ;
|
UttCard n = {s = } ; -}
|
||||||
UttInterj i = i ; -}
|
UttInterj i = i ;
|
||||||
NoPConj = {s = []} ;
|
NoPConj = {s = []} ;
|
||||||
-- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ;
|
-- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
resource ResGla = open Prelude, Predef in {
|
resource ResGla = open Prelude, Predef in {
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- General notes
|
-- General notes
|
||||||
|
|
||||||
@@ -29,82 +30,65 @@ https://inariksit.github.io/gf/2018/08/28/gf-gotchas.html#my-naming-scheme-for-l
|
|||||||
|
|
||||||
param
|
param
|
||||||
Gender = Masc | Fem ;
|
Gender = Masc | Fem ;
|
||||||
CoreCase = Nom Mutation | Gen | Dat Mutation ;
|
Case = Nom Mutation | Dat Mutation | Gen ;
|
||||||
Case = CC CoreCase | Voc ;
|
|
||||||
-- NPCase = NPC CoreCase | NPVoc ;
|
|
||||||
Mutation = Lenited | NoMutation ;
|
Mutation = Lenited | NoMutation ;
|
||||||
Number = Sg
|
Number = Sg
|
||||||
| Pl
|
| Pl
|
||||||
;
|
;
|
||||||
Person = P1 | P2 | P3 ;
|
Person = P1 | P2 | P3 ;
|
||||||
Definiteness = Definite | Indefinite ; -- Some prepositions govern different case when definite vs. indefinite
|
Species = Indef | Def ; -- Some prepositions govern different case when definite vs. indefinite
|
||||||
|
|
||||||
oper
|
oper
|
||||||
NOM : CoreCase = Nom NoMutation ; -- shorthand
|
NOM : Case = Nom NoMutation ; -- shorthand
|
||||||
|
|
||||||
npc2cc : Case -> CoreCase = \npc -> case npc of {
|
|
||||||
CC c => c ;
|
|
||||||
_ => NOM
|
|
||||||
} ;
|
|
||||||
|
|
||||||
param
|
|
||||||
NForm =
|
|
||||||
Indef Number CoreCase
|
|
||||||
| Def Number Case
|
|
||||||
| Dual -- only after number 2, only for a handful of nouns. TODO: does it have different cases?
|
|
||||||
;
|
|
||||||
|
|
||||||
oper
|
oper
|
||||||
getNForm : DType -> Case -> NForm = \d,c ->
|
LinN : Type = {s: Case => Species => Number => Str; voc: Number => Str; g: Gender} ;
|
||||||
case <d,c> of {
|
|
||||||
<DDef n Indefinite,Voc> => Def n Voc ;
|
|
||||||
<DDef n Indefinite,CC c> => Indef n c ;
|
|
||||||
<DDef n Definite,c> => Def n c ;
|
|
||||||
<DPoss n _,Voc> => Indef n NOM ; -- as per Michal on Discord https://discord.com/channels/865093807343140874/865094084683366400/1409838154550087711 . TODO: Def or Indef nom ????
|
|
||||||
<DPoss n _,c> => Def n c -- ????????????????
|
|
||||||
} ;
|
|
||||||
|
|
||||||
LinN : Type = {
|
mk5N nom dat gen pl pal g =
|
||||||
base, -- tunnag fuil loch fear litir bròg
|
{ s = table {
|
||||||
dat, -- -"- bròig (1B)
|
Nom _ => table {
|
||||||
gen, -- tunnaige fala locha fir litreach ("de-palatalised") bròige
|
Indef => table {
|
||||||
pl, -- tunnagan lochan fir litrichean brògan
|
Sg => nom ;
|
||||||
-- pldat, -- Krasimir's and Katya's automatic extraction suggests there's a difference, but I don't see it
|
Pl => pl
|
||||||
-- add this form if we turn out to need it
|
} ;
|
||||||
-- TODO: for nouns that only use suffixes, should these just show theoretical forms?
|
Def => table {
|
||||||
lenited, -- thunnag fhuil loch fhear
|
Sg => nom ;
|
||||||
palatalised, -- tunnaig fuil loch fir
|
Pl => fm pl pal
|
||||||
lenited_palatalised, -- thunnaig fhuil loch fhir
|
}
|
||||||
lenited_plural
|
} ;
|
||||||
: Str ;
|
Dat _ => table {
|
||||||
g : Gender
|
Indef => table {
|
||||||
} ;
|
Sg => dat ;
|
||||||
|
Pl => pl
|
||||||
mk5N : (nom,gen,dat,pl : Str) -> Gender -> LinN = \brog,broige,broig,brogan,g -> {
|
} ;
|
||||||
base = brog ;
|
Def => table {
|
||||||
gen = broige ;
|
Sg => fm pal (lenite nom) ;
|
||||||
dat = broig ;
|
Pl => pl
|
||||||
pl = brogan ;
|
}
|
||||||
lenited_plural = lenite brogan ;
|
} ;
|
||||||
lenited = bhrog ;
|
Gen => table {
|
||||||
palatalised = broig ;
|
Indef => table {
|
||||||
lenited_palatalised = bhroig ;
|
Sg => gen ;
|
||||||
g = g
|
Pl => lenite nom
|
||||||
} where {
|
} ;
|
||||||
bhrog : Str = lenite brog ;
|
Def => table {
|
||||||
bhroig : Str = lenite broig } ;
|
Sg => fm pal (lenite pal) ;
|
||||||
|
Pl => nom
|
||||||
smartN = overload {
|
}
|
||||||
smartN : (nom,gen,pl : Str) -> Gender -> LinN = \loch,locha,lochan,g ->
|
}
|
||||||
mk5N loch locha loch lochan g ;
|
} ;
|
||||||
smartN : (base : Str) -> Gender -> LinN = \tunnag,g ->
|
voc = table {
|
||||||
let fm : Str -> Str -> Str = \fem,masc -> case g of {
|
Sg => fm (lenite nom) (lenite pal) ;
|
||||||
Fem => fem ; Masc => masc } ;
|
Pl => lenite nom+"a"
|
||||||
tunnaig : Str = palatalise tunnag ;
|
} ;
|
||||||
tunnaige : Str = fm (tunnaig + "e") tunnaig ;
|
g = g
|
||||||
tunnagan : Str = fm (tunnag + "an") tunnaig ;
|
}
|
||||||
in mk5N tunnag tunnaige tunnag tunnagan g
|
where {
|
||||||
} ;
|
fm : Str -> Str -> Str = \fem,masc -> case g of {
|
||||||
|
Fem => fem ;
|
||||||
|
Masc => masc
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
vowel : pattern Str = #("a"|"à"|"e"|"i"|"ì"|"o"|"u") ; -- more accents?
|
vowel : pattern Str = #("a"|"à"|"e"|"i"|"ì"|"o"|"u") ; -- more accents?
|
||||||
diphthong : pattern Str = #("ea"|"oi") ;
|
diphthong : pattern Str = #("ea"|"oi") ;
|
||||||
@@ -112,12 +96,8 @@ oper
|
|||||||
labial : pattern Str = #("b"|"f"|"m"|"p") ;
|
labial : pattern Str = #("b"|"f"|"m"|"p") ;
|
||||||
|
|
||||||
palatalise : Str -> Str = \lamh -> case lamh of {
|
palatalise : Str -> Str = \lamh -> case lamh of {
|
||||||
f@? + "ea" + r => f + "i" + r ; -- TODO is this irregular?
|
gr+"ea"+nn@("c"|"d"|"l"|"n"|"p"|"r"|"s"|"m"|"ch"|"dh"|"ll"|"mh"|"nn"|"sg") => gr+"i"+nn ;
|
||||||
boireann@(_ + (#vowel|#diphthong) + ? + _ + (#vowel|#diphthong) + ? + _)
|
boireann + a@#vowel + ch@("b"|"c"|"d"|"g"|"l"|"p"|"r"|"s"|"t"|"m"|"n"|"bh"|"ch"|"cs"|"dh"|"gh"|"ll"|"lm"|"lt"|"mh"|"nc"|"ng"|"nn"|"nt"|"nnd"|"rc"|"rd"|"rm"|"rn"|"rs"|"rt"|"sg"|"th"|"ths"|"rbh") => boireann + a + "i" + ch ;
|
||||||
+ a@#vowel + ch => boireann + a + "i" + ch ;
|
|
||||||
tunn@(_ + (#vowel|#diphthong) + ? + _)
|
|
||||||
+ a@#vowel + g => tunn + a + "i" + g ;
|
|
||||||
l + a@#vowel + mh => l + a + "i" + mh ;
|
|
||||||
_ => lamh } ;
|
_ => lamh } ;
|
||||||
|
|
||||||
lenite : Str -> Str = \tunnag -> case tunnag of {
|
lenite : Str -> Str = \tunnag -> case tunnag of {
|
||||||
@@ -127,88 +107,6 @@ oper
|
|||||||
_ => tunnag } ;
|
_ => tunnag } ;
|
||||||
|
|
||||||
|
|
||||||
-- For inflection paradigms, see http://www.grammaticalframework.org/doc/tutorial/gf-tutorial.html#toc56
|
|
||||||
mkNoun : (b,g,d,pl,l,p,lp,lpl : Str) -> Gender -> LinN = \b,gen,dat,pl,l,p,lp,lpl,g -> {
|
|
||||||
base = b ; -- tunnag fuil loch fear litir
|
|
||||||
gen = gen ; -- tunnaige fala locha fir litreach
|
|
||||||
dat = dat ; -- tunnaige fala locha fir litreach
|
|
||||||
pl = pl ; -- tunnagan lochan fir litrichean
|
|
||||||
lenited = l ; -- thunnag fhuil loch fhear litir ?
|
|
||||||
palatalised = p ; -- tunnaig fuil loch fir litir ?
|
|
||||||
lenited_palatalised = lp ; -- thunnaig fhuil loch fhir litir ?
|
|
||||||
lenited_plural = lpl ; -- thunnagan lochan fhir litrichean ?
|
|
||||||
g = g ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- TODO: no idea if this is even remotely correct
|
|
||||||
-- can always replace morphology with Katya's automated tool
|
|
||||||
useN : LinN -> LinCN = \n -> n ** {
|
|
||||||
s = table {
|
|
||||||
Indef Sg (Nom NoMutation) => n.base ;
|
|
||||||
Indef Sg (Nom Lenited) => n.lenited ;
|
|
||||||
Indef Sg Gen => n.gen ;
|
|
||||||
Indef Sg (Dat NoMutation) => n.dat ;
|
|
||||||
Indef Sg (Dat Lenited) => fm n.lenited_palatalised n.lenited ; ------- FIXME later
|
|
||||||
Def Sg (CC (Nom NoMutation)) => n.base ;
|
|
||||||
Def Sg (CC (Nom Lenited)) => n.lenited ;
|
|
||||||
Def Sg (CC Gen) => fm n.gen n.lenited_palatalised ;
|
|
||||||
Def Sg (CC (Dat NoMutation)) => fm n.palatalised n.lenited ;
|
|
||||||
Def Sg (CC (Dat Lenited)) => fm n.lenited_palatalised n.lenited ;
|
|
||||||
Def Sg Voc => fm n.lenited n.lenited_palatalised ;
|
|
||||||
Indef Pl (Nom NoMutation) => fm n.pl n.palatalised ;
|
|
||||||
Indef Pl (Nom Lenited) => fm n.lenited_plural n.lenited_palatalised ;
|
|
||||||
Indef Pl Gen => n.lenited ;
|
|
||||||
Indef Pl (Dat NoMutation) => fm n.pl n.palatalised ; -- TODO: is this overfitting based on the 5 nouns i know? probably!
|
|
||||||
Indef Pl (Dat Lenited) => fm n.lenited_plural n.lenited_palatalised ; -- TODO: see above
|
|
||||||
Def Pl (CC (Nom NoMutation)) => n.pl ;
|
|
||||||
Def Pl (CC (Nom Lenited)) => n.lenited_plural ;
|
|
||||||
Def Pl (CC Gen) => n.base ;
|
|
||||||
Def Pl (CC (Dat NoMutation)) => n.pl ;
|
|
||||||
Def Pl (CC (Dat Lenited)) => n.lenited_plural ;
|
|
||||||
Def Pl Voc => glue n.lenited "a" ;
|
|
||||||
Dual => fm n.palatalised n.base -- TODO: is this correct? only for 1-syllable feminine nouns?
|
|
||||||
}
|
|
||||||
} where {
|
|
||||||
fm : Str -> Str -> Str = \fem,masc -> case n.g of {
|
|
||||||
Fem => fem ;
|
|
||||||
Masc => masc
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
LinCN : Type = {
|
|
||||||
s : NForm =>
|
|
||||||
Str ;
|
|
||||||
g : Gender ;
|
|
||||||
-- ** postmod/premod/… : Str -- if needed? determiners can put stuff after head but it only comes at NP
|
|
||||||
} ;
|
|
||||||
|
|
||||||
linCN : LinCN -> Str = \cn -> cn.s ! Indef Sg NOM
|
|
||||||
-- ++ cn.postmod -- If there is another field, use here
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
-- some test nouns — TODO: do smart paradigms
|
|
||||||
tunnag_N : LinN = {
|
|
||||||
base,dat = "tunnag" ;
|
|
||||||
gen = "tunnaige" ;
|
|
||||||
pl = "tunnagan" ;
|
|
||||||
lenited_plural = "thunnagan" ;
|
|
||||||
lenited = "thunnag" ;
|
|
||||||
palatalised = "tunnaig" ;
|
|
||||||
lenited_palatalised = "thunnaig" ;
|
|
||||||
g = Fem ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
boireannach_N : LinN = {
|
|
||||||
base,dat = "boireannach" ;
|
|
||||||
pl,gen = "boireannaich" ;
|
|
||||||
lenited = "bhoireannach" ;
|
|
||||||
palatalised = "boireannaich" ;
|
|
||||||
lenited_palatalised,
|
|
||||||
lenited_plural = "bhoireannaich" ;
|
|
||||||
g = Masc ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
-- Proper noun
|
-- Proper noun
|
||||||
|
|
||||||
@@ -243,24 +141,12 @@ oper
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
LinPron : Type = {
|
LinPron : Type = {
|
||||||
s : CoreCase => Str ;
|
s : Case => Str ;
|
||||||
a : PronAgr ;
|
a : PronAgr ;
|
||||||
poss : Str ; -- if a case is needed, it comes from the Prep! TODO verify this (do we ever need a dative for poss pron without a prep present? some preps merge, others not, but the pronoun is present in all the preps. why this way—I counted on there being fewer pronouns than prepositions.)
|
poss : Str ; -- if a case is needed, it comes from the Prep! TODO verify this (do we ever need a dative for poss pron without a prep present? some preps merge, others not, but the pronoun is present in all the preps. why this way—I counted on there being fewer pronouns than prepositions.)
|
||||||
empty : Str ; -- to prevent metavariables
|
empty : Str ; -- to prevent metavariables
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- TODO: nicer API where you can give Person, Number, Gender etc.
|
|
||||||
-- not this weird unintuitive Agr param
|
|
||||||
mkPron : (subj,poss : Str) -> PronAgr -> LinPron = \subj,poss,agr -> {
|
|
||||||
s = table {
|
|
||||||
Nom _ => subj ;
|
|
||||||
_ => "gam" -- TODO fix this
|
|
||||||
} ;
|
|
||||||
poss = poss ;
|
|
||||||
a = agr ;
|
|
||||||
empty = []
|
|
||||||
} ;
|
|
||||||
|
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
-- NP
|
-- NP
|
||||||
|
|
||||||
@@ -286,11 +172,11 @@ oper
|
|||||||
a : Agr ; -- includes whether it's pron and whether it's definite. TODO: probably can make even leaner (wasn't a prio so far).
|
a : Agr ; -- includes whether it's pron and whether it's definite. TODO: probably can make even leaner (wasn't a prio so far).
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
linNP : LinNP -> Str = \np -> np.art ! CC NOM ++ np.s ! CC NOM ;
|
linNP : LinNP -> Str = \np -> np.art ! NOM ++ np.s ! NOM ;
|
||||||
|
|
||||||
emptyNP : LinNP = {
|
emptyNP : LinNP = {
|
||||||
s,art = \\_ => [] ;
|
s,art = \\_ => [] ;
|
||||||
a = NotPron (DDef Sg Indefinite) ; -- we assume pronouns are definite by default. also it just matters for PrepNP.
|
a = NotPron (DDef Sg Indef) ; -- we assume pronouns are definite by default. also it just matters for PrepNP.
|
||||||
empty = [] ;
|
empty = [] ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -298,9 +184,9 @@ oper
|
|||||||
-- Det, Quant, Card, Ord
|
-- Det, Quant, Card, Ord
|
||||||
|
|
||||||
param
|
param
|
||||||
QuantForm = QSg Gender CoreCase | QPl CoreCase ;
|
QuantForm = QSg Gender Case | QPl Case ;
|
||||||
QType = QDef Definiteness | QPoss PronAgr ;
|
QType = QDef Species | QPoss PronAgr ;
|
||||||
DType = DDef Number Definiteness | DPoss Number PronAgr ;
|
DType = DDef Number Species | DPoss Number PronAgr ;
|
||||||
|
|
||||||
-- The minimum forms that preposition merges with
|
-- The minimum forms that preposition merges with
|
||||||
PrepAgr = PrepBase | PrepDefiniteArticle Number | PrepObjectPron PronAgr | PrepPossPron PronAgr ;
|
PrepAgr = PrepBase | PrepDefiniteArticle Number | PrepObjectPron PronAgr | PrepPossPron PronAgr ;
|
||||||
@@ -314,16 +200,12 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
getQuantForm : Number -> Gender -> Case -> QuantForm = \n,g,c -> case <n,c> of {
|
getQuantForm : Number -> Gender -> Case -> QuantForm = \n,g,c -> case <n,c> of {
|
||||||
<Sg,CC c> => QSg g c ;
|
<Sg,c> => QSg g c ;
|
||||||
<Sg,_> => QSg g NOM ; --- ??????
|
<Pl,c> => QPl c
|
||||||
<Pl,CC c> => QPl c ;
|
|
||||||
<Pl,_> => QPl NOM --- ??????
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
getArt : LinQuant -> Number -> Gender -> Case -> Str = \quant,n,g,c -> case c of {
|
getArt : LinQuant -> Number -> Gender -> Case -> Str = \quant,n,g,c ->
|
||||||
Voc => "" ; -- TODO: add empty field to article to not get metavariables
|
quant.s ! getQuantForm n g c ;
|
||||||
_ => quant.s ! getQuantForm n g c
|
|
||||||
} ;
|
|
||||||
|
|
||||||
LinQuant : Type = {
|
LinQuant : Type = {
|
||||||
s -- quantifier in a context, e.g. 'this (cat) (is nice)'
|
s -- quantifier in a context, e.g. 'this (cat) (is nice)'
|
||||||
@@ -343,14 +225,7 @@ oper
|
|||||||
n : Number ;
|
n : Number ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Can you reuse your mkNoun? Do nouns and quantifiers inflect the same way?
|
mkDet : (seven, teen : Str) -> Species -> Number -> LinDet = \aon, deug, defi, num -> {
|
||||||
mkQuant : Str -> QType -> LinQuant = \this,qt -> {
|
|
||||||
s = \\_ => this ;
|
|
||||||
sp = this ;
|
|
||||||
qt = qt ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkDet : (seven, teen : Str) -> Definiteness -> Number -> LinDet = \aon, deug, defi, num -> {
|
|
||||||
s = \\_,_ => aon ;
|
s = \\_,_ => aon ;
|
||||||
s2 = \\_,_ => deug ;
|
s2 = \\_,_ => deug ;
|
||||||
sp = aon ;
|
sp = aon ;
|
||||||
@@ -390,7 +265,7 @@ oper
|
|||||||
QPl _ => NA
|
QPl _ => NA
|
||||||
} ;
|
} ;
|
||||||
sp = "an" ; --- meaningless for DefArt
|
sp = "an" ; --- meaningless for DefArt
|
||||||
qt = QDef Definite ;
|
qt = QDef Def ;
|
||||||
} ;
|
} ;
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Adpositions
|
-- Adpositions
|
||||||
@@ -416,14 +291,14 @@ param
|
|||||||
Agr = NotPron DType | IsPron PronAgr ;
|
Agr = NotPron DType | IsPron PronAgr ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
getDefi : Agr -> Definiteness = \a -> case a of {
|
getDefi : Agr -> Species = \a -> case a of {
|
||||||
NotPron (DDef n d) => d ;
|
NotPron (DDef n d) => d ;
|
||||||
_ => Definite
|
_ => Def
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
LinPrep : Type = {
|
LinPrep : Type = {
|
||||||
s : PrepAgr => Str ; -- bare: aig 'on', inflected: agam 'on me', agad 'on you', …
|
s : PrepAgr => Str ; -- bare: aig 'on', inflected: agam 'on me', agad 'on you', …
|
||||||
c2 : Definiteness => CoreCase ; -- most often dative
|
c2 : Species => Case ; -- most often dative
|
||||||
replacesObjPron : Bool ; -- NP has to keep track of if it comes from a Pron
|
replacesObjPron : Bool ; -- NP has to keep track of if it comes from a Pron
|
||||||
|
|
||||||
-- If your language has both pre- and postpositions, you need an inherent parameter in Prep to record which one a given Prep is.
|
-- If your language has both pre- and postpositions, you need an inherent parameter in Prep to record which one a given Prep is.
|
||||||
@@ -434,18 +309,18 @@ oper
|
|||||||
|
|
||||||
PrepForms : Type = {base, sg1, sg2, sg3M, sg3F, pl1, pl2, pl3 : Str} ;
|
PrepForms : Type = {base, sg1, sg2, sg3M, sg3F, pl1, pl2, pl3 : Str} ;
|
||||||
|
|
||||||
H, N, LENITION_DEBUG : Str ;
|
h, n, LENITION_DEBUG : Str ;
|
||||||
H = pre {#vowel => "h" ++ BIND ; _ => []} ;
|
h = pre {#vowel => "h" ++ BIND ; _ => []} ;
|
||||||
N = pre {#vowel => "n-" ++ BIND ; _ => []} ;
|
n = pre {#vowel => "n-" ++ BIND ; _ => []} ;
|
||||||
LENITION_DEBUG = "^L" ; -- Only for debugging purposes—replace with empty string for production
|
LENITION_DEBUG = "^L" ; -- Only for debugging purposes—replace with empty string for production
|
||||||
|
|
||||||
|
|
||||||
invarPrepForms : Str -> PrepForms = \str ->
|
invarPrepForms : Str -> PrepForms = \str ->
|
||||||
{base=str ; sg1=str++"mo" + LENITION_DEBUG; sg2=str++"do" + LENITION_DEBUG; sg3M=str++"a" + LENITION_DEBUG;
|
{base=str ; sg1=str++"mo" + LENITION_DEBUG; sg2=str++"do" + LENITION_DEBUG; sg3M=str++"a" + LENITION_DEBUG;
|
||||||
sg3F=str++"a"++H; pl1=str++"àr"++N; pl2=str++"ùr"++N; pl3=str++AN} ; -- AN is defined as an allomorph to def art, TODO does the possessive add t- before vowel?
|
sg3F=str++"a"++h; pl1=str++"àr"++n; pl2=str++"ùr"++n; pl3=str++AN} ; -- AN is defined as an allomorph to def art, TODO does the possessive add t- before vowel?
|
||||||
|
|
||||||
mkLinPrep : (replacesObjPron : Bool)
|
mkLinPrep : (replacesObjPron : Bool)
|
||||||
-> (indef,defi : CoreCase)
|
-> (indef,defi : Case)
|
||||||
-> (objForms, possForms : PrepForms)
|
-> (objForms, possForms : PrepForms)
|
||||||
-> LinPrep =
|
-> LinPrep =
|
||||||
\replaces,casIndef,casDef,objForms,possForms -> {
|
\replaces,casIndef,casDef,objForms,possForms -> {
|
||||||
@@ -485,13 +360,12 @@ oper
|
|||||||
mkPrep : (objForms, possForms : PrepForms) -> LinPrep = smartPrep ;
|
mkPrep : (objForms, possForms : PrepForms) -> LinPrep = smartPrep ;
|
||||||
mkPrep : (objForms, possForms : PrepForms) -> Mutation -> LinPrep =
|
mkPrep : (objForms, possForms : PrepForms) -> Mutation -> LinPrep =
|
||||||
\obj,poss,mutation -> mkLinPrep True (Dat mutation) (Dat mutation) obj poss ;
|
\obj,poss,mutation -> mkLinPrep True (Dat mutation) (Dat mutation) obj poss ;
|
||||||
mkPrep : (replacesObjPron : Bool) -> (indef,defi : CoreCase)
|
mkPrep : (replacesObjPron : Bool) -> (indef,defi : Case)
|
||||||
-> (objForms, possForms : PrepForms) -> LinPrep = mkLinPrep
|
-> (objForms, possForms : PrepForms) -> LinPrep = mkLinPrep
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
emptyPrep : LinPrep = {
|
emptyPrep : LinPrep = {
|
||||||
s = \\_ => [] ;
|
s = \\_ => [] ;
|
||||||
poss = \\_ => [] ;
|
|
||||||
c2 = \\_ => Dat Lenited ;
|
c2 = \\_ => Dat Lenited ;
|
||||||
replacesObjPron = False
|
replacesObjPron = False
|
||||||
} ;
|
} ;
|
||||||
@@ -499,7 +373,7 @@ oper
|
|||||||
aigPrep : LinPrep =
|
aigPrep : LinPrep =
|
||||||
mkPrep
|
mkPrep
|
||||||
{base="aig"; sg1="agam"; sg2="agad"; sg3M="aige"; sg3F="aice"; pl1="againn"; pl2="agaibh"; pl3="aca"}
|
{base="aig"; sg1="agam"; sg2="agad"; sg3M="aige"; sg3F="aice"; pl1="againn"; pl2="agaibh"; pl3="aca"}
|
||||||
{base="aig"; sg1="'gam" + LENITION_DEBUG; sg2="'gad" + LENITION_DEBUG; sg3M="'ga" + LENITION_DEBUG; sg3F="'ga"++H; pl1="'gar"++N; pl2="'gur"++N; pl3="'gan"}
|
{base="aig"; sg1="'gam" + LENITION_DEBUG; sg2="'gad" + LENITION_DEBUG; sg3M="'ga" + LENITION_DEBUG; sg3F="'ga"++h; pl1="'gar"++n; pl2="'gur"++n; pl3="'gan"}
|
||||||
NoMutation ;
|
NoMutation ;
|
||||||
|
|
||||||
airPrep : LinPrep =
|
airPrep : LinPrep =
|
||||||
@@ -511,7 +385,7 @@ oper
|
|||||||
annPrep : LinPrep =
|
annPrep : LinPrep =
|
||||||
mkPrep
|
mkPrep
|
||||||
{base="ann"; sg1="annam"; sg2="annad"; sg3M="ann"; sg3F="innte"; pl1="annainn"; pl2="annaibh"; pl3="annta"}
|
{base="ann"; sg1="annam"; sg2="annad"; sg3M="ann"; sg3F="innte"; pl1="annainn"; pl2="annaibh"; pl3="annta"}
|
||||||
{base="ann"; sg1="'nam" + LENITION_DEBUG; sg2="'nad" + LENITION_DEBUG; sg3M="'na" + LENITION_DEBUG; sg3F="'na"++H; pl1="'nar"++N; pl2="'nur"++N; pl3="'nan"}
|
{base="ann"; sg1="'nam" + LENITION_DEBUG; sg2="'nad" + LENITION_DEBUG; sg3M="'na" + LENITION_DEBUG; sg3F="'na"++h; pl1="'nar"++n; pl2="'nur"++n; pl3="'nan"}
|
||||||
NoMutation ;
|
NoMutation ;
|
||||||
|
|
||||||
àsPrep : LinPrep =
|
àsPrep : LinPrep =
|
||||||
@@ -523,14 +397,14 @@ oper
|
|||||||
bhoPrep : LinPrep =
|
bhoPrep : LinPrep =
|
||||||
mkPrep
|
mkPrep
|
||||||
{base="bho"; sg1="bhuam"; sg2="bhuat"; sg3M="bhuaithe"; sg3F="bhuaipe"; pl1="bhuainn"; pl2="buaibh"; pl3="bhuapa"}
|
{base="bho"; sg1="bhuam"; sg2="bhuat"; sg3M="bhuaithe"; sg3F="bhuaipe"; pl1="bhuainn"; pl2="buaibh"; pl3="bhuapa"}
|
||||||
{base="bho"; sg1="bhom" + LENITION_DEBUG; sg2="bhod" + LENITION_DEBUG; sg3M="bho a" + LENITION_DEBUG; sg3F="bho a"++H; pl1="bhor"++N; pl2="bhu"++N; pl3="bhon"}
|
{base="bho"; sg1="bhom" + LENITION_DEBUG; sg2="bhod" + LENITION_DEBUG; sg3M="bho a" + LENITION_DEBUG; sg3F="bho a"++h; pl1="bhor"++n; pl2="bhu"++n; pl3="bhon"}
|
||||||
Lenited ;
|
Lenited ;
|
||||||
{- dePrep : LinPrep = …-}
|
{- dePrep : LinPrep = …-}
|
||||||
|
|
||||||
doPrep : LinPrep =
|
doPrep : LinPrep =
|
||||||
mkPrep
|
mkPrep
|
||||||
{base="do"; sg1="dhomh"; sg2="dhut"; sg3M="dha"; sg3F="dhi"; pl1="dhuinn"; pl2="dhuibh"; pl3="dhiubh"}
|
{base="do"; sg1="dhomh"; sg2="dhut"; sg3M="dha"; sg3F="dhi"; pl1="dhuinn"; pl2="dhuibh"; pl3="dhiubh"}
|
||||||
{base="bho"; sg1="dom" + LENITION_DEBUG; sg2="dod" + LENITION_DEBUG; sg3M="dha" + LENITION_DEBUG; sg3F="dha"++H; pl1="dor"++N; pl2="dhur"++N; pl3="don"}
|
{base="bho"; sg1="dom" + LENITION_DEBUG; sg2="dod" + LENITION_DEBUG; sg3M="dha" + LENITION_DEBUG; sg3F="dha"++h; pl1="dor"++n; pl2="dhur"++n; pl3="don"}
|
||||||
Lenited ;
|
Lenited ;
|
||||||
|
|
||||||
{- eadarPrep : LinPrep = …-}
|
{- eadarPrep : LinPrep = …-}
|
||||||
@@ -541,7 +415,7 @@ oper
|
|||||||
(Dat NoMutation) {-governs dative when indefinite, no mutation-}
|
(Dat NoMutation) {-governs dative when indefinite, no mutation-}
|
||||||
Gen {-governs genitive when definite-}
|
Gen {-governs genitive when definite-}
|
||||||
{base="gu"; sg1="ugam"; sg2="ugad"; sg3M="uige"; sg3F="uice"; pl1="ugainn"; pl2="ugaibh"; pl3="uca"}
|
{base="gu"; sg1="ugam"; sg2="ugad"; sg3M="uige"; sg3F="uice"; pl1="ugainn"; pl2="ugaibh"; pl3="uca"}
|
||||||
{base="gu"; sg1="gum" + LENITION_DEBUG; sg2="gud" + LENITION_DEBUG; sg3M="gu a" + LENITION_DEBUG; sg3F="gu a"++H; pl1="gar"++N; pl2="gur"++N; pl3="gun"}
|
{base="gu"; sg1="gum" + LENITION_DEBUG; sg2="gud" + LENITION_DEBUG; sg3M="gu a" + LENITION_DEBUG; sg3F="gu a"++h; pl1="gar"++n; pl2="gur"++n; pl3="gun"}
|
||||||
;
|
;
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
@@ -549,68 +423,89 @@ oper
|
|||||||
-- Lamb p. 220 basic morphology, degree
|
-- Lamb p. 220 basic morphology, degree
|
||||||
-- Lamb p. 246: predicative adjectives
|
-- Lamb p. 246: predicative adjectives
|
||||||
|
|
||||||
LinA : Type = SS ;
|
param
|
||||||
|
AForm = ASg Case Gender | APl ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
LinA : Type = {s: AForm => Str; voc: Gender => Str; compar: Str} ; -- 686
|
||||||
|
oper mkAdj : (_,_,_,_,_,_,_,_,_,_ : Str) -> LinA =
|
||||||
|
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10 ->
|
||||||
|
{ s = table {
|
||||||
|
ASg (Nom _) Masc => f1 ;
|
||||||
|
ASg (Nom _) Fem => f2 ;
|
||||||
|
ASg (Dat _) Masc => f3 ;
|
||||||
|
ASg (Dat _) Fem => f4 ;
|
||||||
|
ASg Gen Masc => f5 ;
|
||||||
|
ASg Gen Fem => f6 ;
|
||||||
|
APl => f7
|
||||||
|
} ;
|
||||||
|
voc = table {
|
||||||
|
Masc => f8 ;
|
||||||
|
Fem => f9
|
||||||
|
} ;
|
||||||
|
compar = f10 ;
|
||||||
|
} ;
|
||||||
|
|
||||||
LinA2 : Type = LinA ;
|
LinA2 : Type = LinA ;
|
||||||
|
|
||||||
mkAdj : Str -> LinA = \str -> {s = str} ;
|
LinAP : Type = LinA ; -- ** {compar : Str} ;
|
||||||
|
|
||||||
AdjPhrase : Type = LinA ; -- ** {compar : Str} ;
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Verbs
|
-- Verbs
|
||||||
|
|
||||||
param
|
param
|
||||||
VAgr = VSg1 | VSg2 | VSg3 | VPl1 | VPl2 | VPl3 ;
|
VForm = Indep | Dep ;
|
||||||
VForm = VInf | VPres VAgr | VPast VAgr ; -- TODO
|
|
||||||
|
|
||||||
oper
|
oper
|
||||||
nagr2vagr : Agr -> VAgr = \a -> case a of {
|
LinV = {s: Str; conditional: Number => Str; imperative: Person => Number => Str; future, past : VForm => Str; noun, participle: Str} ;
|
||||||
NotPron (DDef Sg _) => VSg3 ;
|
|
||||||
NotPron (DDef Pl _) => VPl3 ;
|
|
||||||
|
|
||||||
-- this is the number of the possessee—number of possessor only matters for PrepNP!
|
|
||||||
NotPron (DPoss Sg _) => VSg3 ;
|
|
||||||
NotPron (DPoss Pl _) => VPl3 ;
|
|
||||||
|
|
||||||
-- this is subject pronoun, which agrees with verb
|
|
||||||
IsPron Sg1 => VSg1 ;
|
|
||||||
IsPron Sg2 => VSg2 ;
|
|
||||||
IsPron (Sg3 _) => VSg3 ;
|
|
||||||
IsPron Pl1 => VPl1 ;
|
|
||||||
IsPron Pl2 => VPl2 ;
|
|
||||||
IsPron Pl3 => VPl3
|
|
||||||
} ;
|
|
||||||
|
|
||||||
LinV : Type = {
|
|
||||||
s : VForm => Str
|
|
||||||
} ;
|
|
||||||
|
|
||||||
LinV2 : Type = LinV ** {
|
LinV2 : Type = LinV ** {
|
||||||
c2 : LinPrep ;
|
c2 : LinPrep ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkVerb : Str -> LinV = \str -> {
|
mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> LinV =
|
||||||
s = table {
|
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15 ->
|
||||||
_ => str
|
{ s = f1 ;
|
||||||
}
|
conditional = table {
|
||||||
} ;
|
Sg => f2 ;
|
||||||
|
Pl => f3
|
||||||
copula : LinV = {s = \\_ => "TODO: copula"} ; -- often useful
|
} ;
|
||||||
|
imperative = table {
|
||||||
|
P1 => table {
|
||||||
|
Sg => f4 ;
|
||||||
|
Pl => f5
|
||||||
|
} ;
|
||||||
|
P2 => table {
|
||||||
|
Sg => f6 ;
|
||||||
|
Pl => f7
|
||||||
|
} ;
|
||||||
|
P3 => table {
|
||||||
|
Sg => f8 ;
|
||||||
|
Pl => f9
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
future = table {
|
||||||
|
Indep => f10 ;
|
||||||
|
Dep => f11
|
||||||
|
} ;
|
||||||
|
past = table {
|
||||||
|
Indep => f12 ;
|
||||||
|
Dep => f13
|
||||||
|
} ;
|
||||||
|
noun = f14 ;
|
||||||
|
participle = f15
|
||||||
|
} ;
|
||||||
|
|
||||||
------------------
|
------------------
|
||||||
-- VP
|
-- VP
|
||||||
-- Lamb p. 229
|
-- Lamb p. 229
|
||||||
-- "tense, aspect, modality, voice, person and number. There are contrasts to be seen, as above, between inflected and periphrastic forms and, as a whole, periphrasis is more productive."
|
-- "tense, aspect, modality, voice, person and number. There are contrasts to be seen, as above, between inflected and periphrastic forms and, as a whole, periphrasis is more productive."
|
||||||
|
|
||||||
LinVP : Type = {
|
LinVP : Type = LinV ;
|
||||||
s : VForm => Str ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
LinVPSlash : Type = LinVP ** {
|
LinVPSlash : Type = LinVP ** {
|
||||||
c2 : LinPrep ;
|
c2 : LinPrep ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
linVP : LinVP -> Str = \vp -> vp.s ! VInf ;
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Cl, S
|
-- Cl, S
|
||||||
|
|
||||||
@@ -622,4 +517,46 @@ oper
|
|||||||
|
|
||||||
linCl : LinCl -> Str = \cl -> cl.subj ++ cl.pred ;
|
linCl : LinCl -> Str = \cl -> cl.subj ++ cl.pred ;
|
||||||
|
|
||||||
|
|
||||||
|
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> LinN =
|
||||||
|
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,g ->
|
||||||
|
{ s = table {
|
||||||
|
Nom _ => table {
|
||||||
|
Indef => table {
|
||||||
|
Sg => f1 ;
|
||||||
|
Pl => f2
|
||||||
|
} ;
|
||||||
|
Def => table {
|
||||||
|
Sg => f3 ;
|
||||||
|
Pl => f4
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
Dat _ => table {
|
||||||
|
Indef => table {
|
||||||
|
Sg => f5 ;
|
||||||
|
Pl => f6
|
||||||
|
} ;
|
||||||
|
Def => table {
|
||||||
|
Sg => f7 ;
|
||||||
|
Pl => f8
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
Gen => table {
|
||||||
|
Indef => table {
|
||||||
|
Sg => f9 ;
|
||||||
|
Pl => f10
|
||||||
|
} ;
|
||||||
|
Def => table {
|
||||||
|
Sg => f11 ;
|
||||||
|
Pl => f12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
voc = table {
|
||||||
|
Sg => f13 ;
|
||||||
|
Pl => f14
|
||||||
|
} ;
|
||||||
|
g = g
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ lin
|
|||||||
subj = linNP np ; -- article and CN are discontinuous in NP! linNP just picks nominative unmutated.
|
subj = linNP np ; -- article and CN are discontinuous in NP! linNP just picks nominative unmutated.
|
||||||
pred =
|
pred =
|
||||||
-- table {something with tense+polarity =>
|
-- table {something with tense+polarity =>
|
||||||
vp.s ! VPres (nagr2vagr np.a)
|
vp.s
|
||||||
-- TODO: all of the VP's tense and polarity should be open here!
|
-- TODO: all of the VP's tense and polarity should be open here!
|
||||||
-- PredVP only decides the subject.
|
-- PredVP only decides the subject.
|
||||||
-- }
|
-- }
|
||||||
|
|||||||
Reference in New Issue
Block a user