58 Commits

Author SHA1 Message Date
Inari Listenmaa
ba879527ab (Som) Add full forms of the pronoun into the s field in UsePron…
…The clitic forms used in VPs and Cls are syncategorematic, so those constructions did not break.
2026-04-22 17:20:09 +02:00
Krasimir Angelov
4ab63d2d66 Neutr -> Neuter 2026-04-22 15:15:35 +02:00
Krasimir Angelov
41e3b8280b added gender to nouns 2026-04-22 13:25:04 +02:00
Krasimir Angelov
4a3e30a1cd Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-21 20:28:15 +02:00
Krasimir Angelov
9458f96f0b remove duplicated definitions 2026-04-21 20:27:57 +02:00
Inari Listenmaa
922f664f74 imperative as linref for lexical verb categories 2026-04-20 09:12:27 +02:00
Krasimir Angelov
3943089d3d cosmetic changes in the tables 2026-04-20 08:17:18 +02:00
Krasimir Angelov
6a6788c24e Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-17 20:08:55 +02:00
Krasimir Angelov
e7e7f12ad8 added documentation 2026-04-17 20:08:42 +02:00
Abdirahman Ahmed
90d8897bf9 Fix AdjCN to include comparative NP (ComparA)
AdjCN currently ignores the 'compar' field from AP, causing the NP in
comparative constructions (ComparA) to be dropped.

Example:
- Expected: "guri ka weyn baabuur"
- Actual:   "guri ka weyn"

This change appends ap.compar in AdjCN, preserving the comparison NP.

A corresponding test has been added to src/somali/unittest/ap.gftest.
2026-04-17 13:07:26 +02:00
Krasimir Angelov
be0fb1f7c1 indefinite article and MassNP 2026-04-16 19:15:34 +02:00
Krasimir Angelov
7d73dd8195 added UseV 2026-04-16 17:38:53 +02:00
Krasimir Angelov
48ec088faa more syntax 2026-04-16 16:20:18 +02:00
Krasimir Angelov
8a84ca1a45 added QuantityNP 2026-04-16 08:50:21 +02:00
Krasimir Angelov
34f5e625e3 added QuantityNP 2026-04-16 08:43:22 +02:00
Krasimir Angelov
27c2d7cbb3 medial verbs 2026-04-15 07:47:42 +02:00
Krasimir Angelov
26abc63953 fix ordinals 2026-04-15 07:37:33 +02:00
Krasimir Angelov
15df5ed37e fix PossNP 2026-04-15 07:24:17 +02:00
Krasimir Angelov
43f19f283e fix AdVVP, AdVVPSlash 2026-04-15 06:45:39 +02:00
Krasimir Angelov
9b6b94ec1d fix lincat AP 2026-04-14 11:34:12 +02:00
Krasimir Angelov
8b462bdbfb added feminine pronouns 2026-04-14 09:30:18 +02:00
Krasimir Angelov
14c7db6427 нито -> ниту 2026-04-14 09:07:16 +02:00
Krasimir Angelov
2c613bfc83 added dummy ExtendMlt 2026-04-14 09:06:11 +02:00
Krasimir Angelov
8a8c1c6b42 added copula 2026-04-14 08:59:01 +02:00
Krasimir Angelov
76b27152f9 ResMkd->ResHye 2026-04-14 07:23:19 +02:00
Krasimir Angelov
36bc768f26 forgot Structural 2026-04-14 07:16:06 +02:00
Krasimir Angelov
b7275a2bac added conjuncts 2026-04-13 20:54:46 +02:00
Krasimir Angelov
7e8e6dbf34 added conjunctions 2026-04-13 20:46:06 +02:00
Krasimir Angelov
27ff3935c5 added mkDet 2026-04-13 19:34:44 +02:00
Krasimir Angelov
4cd3d3158e added pronouns 2026-04-13 16:27:30 +02:00
Krasimir Angelov
e3b27613fd elements of syntax for nouns phrases 2026-04-13 16:05:39 +02:00
Krasimir Angelov
5f6a8b2905 fix compilation 2026-04-13 11:04:31 +02:00
Krasimir Angelov
6203aee170 fix EmbedVP 2026-04-13 10:29:37 +02:00
Krasimir Angelov
ffb77daf31 fix UttVP 2026-04-13 10:17:17 +02:00
Krasimir Angelov
494c91f9dd whatSg_IP/whatPl_IP 2026-04-13 09:51:15 +02:00
Krasimir Angelov
6f6405b90e make it compile again 2026-04-13 09:35:08 +02:00
Krasimir Angelov
da0e273d3d improved several functions 2026-04-13 09:13:38 +02:00
Krasimir Angelov
263b668249 more fixes 2026-04-11 18:04:50 +02:00
Krasimir Angelov
019a347246 fixes 2026-04-11 17:21:09 +02:00
Krasimir Angelov
6aeda22ed6 fix imperatives 2026-04-11 16:28:55 +02:00
Krasimir Angelov
ae9b7d4d45 added pidgin rules 2026-04-11 15:33:05 +02:00
Krasimir Angelov
323e4b4cdf more structural words 2026-04-11 15:03:44 +02:00
Krasimir Angelov
e42c5f53e2 added this_Quant, that_Quant 2026-04-11 14:09:44 +02:00
Krasimir Angelov
fea01dd313 added questions and relative clauses 2026-04-11 12:01:59 +02:00
Krasimir Angelov
9e402cb608 prepare for numerals with countable forms 2026-04-11 08:58:08 +02:00
Krasimir Angelov
401ac1f954 added missing files 2026-04-11 08:45:52 +02:00
Krasimir Angelov
6a2cb9ec77 Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-10 19:58:56 +02:00
Krasimir Angelov
b339f7c2fc started with tenses 2026-04-10 19:58:11 +02:00
EkaterinaVoloshina
d6f3cae141 fixed names of fields 2026-04-10 15:57:46 +02:00
EkaterinaVoloshina
44acdbd350 fixed fields in armenian 2026-04-10 15:49:30 +02:00
EkaterinaVoloshina
f630f6ef29 Merge branch 'master' of https://github.com/GrammaticalFramework/gf-rgl 2026-04-10 15:14:39 +02:00
EkaterinaVoloshina
8808ce108b changed fields 2026-04-10 15:12:02 +02:00
Krasimir Angelov
1c3bb0f6eb added relative pronoun 2026-04-09 14:25:26 +02:00
Krasimir Angelov
5cc990d259 added CompoundN 2026-04-09 14:03:06 +02:00
Krasimir Angelov
621cfd8b43 support for medial verbs 2026-04-05 11:39:43 +02:00
Krasimir Angelov
deb9d40b7e placeholders for morphological functions 2026-04-04 11:18:04 +02:00
Krasimir Angelov
25f422f5ca Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-03 16:57:43 +02:00
Krasimir Angelov
f0abf5deff added compoundV 2026-04-03 16:55:51 +02:00
72 changed files with 3374 additions and 2278 deletions

View File

@@ -1,25 +1,61 @@
concrete CatSqi of Cat = CommonX ** open ParamX, Prelude, ResSqi in {
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat V, VA, VV, VS, VQ = Verb ;
lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat Prep = Compl ;
lincat Numeral = {s : Str} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat AP = {s: Species => Case => Gender => Number => Str} ;
lincat CN = Noun ;
lincat Num = {s : Str; n : Number} ;
lincat Quant = {s : Case => Gender => Number => Str; spec : Species} ;
lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
lincat NP = {s: Case => Str; a : Agr} ;
lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
concrete CatSqi of Cat = CommonX ** open ParamX,Prelude,ResSqi in {
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat V, VA, VV, VS, VQ = Verb ;
lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat Prep = Compl ;
lincat ACard = {s : Str} ;
lincat AP = {s : Species => Case => Gender => Number => Str} ;
lincat CN = Noun ;
lincat Card = {s : Str} ;
lincat Cl = {s : Str} ;
lincat ClSlash = {s : Str} ;
lincat Comp = {s : Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ;
lincat GN = {s : Str} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str} ;
lincat IP = {s : Str} ;
lincat IQuant = {s : Str} ;
lincat Imp = {s : Str} ;
lincat LN = {s : Str} ;
lincat N = Noun ;
lincat N2 = {s : Species => Case => Number => Str; g : Gender;
c2 : {s : Str}} ;
lincat N3 = {s : Species => Case => Number => Str; g : Gender;
c2 : {s : Str}; c3 : {s : Str}} ;
lincat NP = {s : Case => Str; a : Agr} ;
lincat Num = {s : Str; n : Number} ;
lincat Numeral = {s : Str} ;
lincat Ord = {s : Str} ;
lincat PN = {s : Str} ;
lincat Predet = {s : Str} ;
lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Case => Gender => Number => Str; spec : Species} ;
lincat RCl = {s : Str} ;
lincat RP = {s : Str} ;
lincat RS = {s : Str} ;
lincat S = {s : Str} ;
lincat SN = {s : Str} ;
lincat SSlash = {s : Str} ;
lincat Subj = {s : Str} ;
lincat VP = {indicative : Tense => Number => Person => Case => Str;
participle : Case => Str;
pres_optative : Number => Person => Case => Str;
perf_optative : Number => Person => Case => Str;
pres_admirative : Number => Person => Case => Str;
imperf_admirative : Number => Person => Case => Str} ;
lincat VPSlash = {indicative : Tense => Number => Person => Str;
imperative : Number => Str; participle : Str;
pres_optative : Number => Person => Str;
perf_optative : Number => Person => Str;
pres_admirative : Number => Person => Str;
imperf_admirative : Number => Person => Str} ;
}

View File

@@ -51,32 +51,32 @@ lin InflectionV = \x -> {
t="fl" ;
s1=heading1 "Folje" ;
s2=frameTable (
tr (intagAttr "th" "rowspan=\"24\"" "Indicative" ++ intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Pres ! Sg ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Pres ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Pres ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Pres ! Pl ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Pres ! Pl ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Pres ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Past" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Past ! Sg ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Past ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Past ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Past ! Pl ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Past ! Pl ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Past ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Aorist" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Aorist ! Sg ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Aorist ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Aorist ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Aorist ! Pl ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Aorist ! Pl ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Aorist ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Imperfect" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Imperfect ! Sg ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Imperfect ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Imperfect ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Imperfect ! Pl ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Imperfect ! Pl ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Imperfect ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Imperative" ++ th "Sg" ++ td (x.Imperative ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative ! Pl)) ++
tr (intagAttr "th" "rowspan=\"24\"" "Indicative" ++ intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Pres ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Pres ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Pres ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Pres ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Pres ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Pres ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Past" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Past ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Past ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Past ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Past ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Past ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Past ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Aorist" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Aorist ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Aorist ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Aorist ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Aorist ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Aorist ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Aorist ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Imperfect" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Imperfect ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Imperfect ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Imperfect ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Imperfect ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Imperfect ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Imperfect ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Imperative" ++ th "Sg" ++ td (x.imperative ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pl)) ++
tr (th "participle" ++ td (x.participle)) ++
tr (intagAttr "th" "rowspan=\"6\"" "pres_optative" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.pres_optative ! Sg ! P1)) ++
tr (th "P2" ++ td (x.pres_optative ! Sg ! P2)) ++

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
a = agrgP3 cn.g det.n
} ;
UsePron p = p ;
-- UsePron p = p ;
DetQuant quant num = {
s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ;
@@ -30,7 +30,6 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
} ;
UseN n = n ;
UseN2 n = n ;
AdjCN ap cn = {
s = \\spec,c,n => cn.s ! spec ! c ! n ++ ap.s ! spec ! c ! cn.g ! n ;

View File

@@ -104,10 +104,10 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Bool -> Adj =
param Tense = Pres | Past | Imperfect | Aorist ;
oper Verb = {Indicative: Tense => Number => Person => Str; Imperative: Number => Str; participle: Str; pres_optative: Number => Person => Str; perf_optative: Number => Person => Str; pres_admirative: Number => Person => Str; imperf_admirative: Number => Person => Str} ; -- 758
oper Verb = {indicative: Tense => Number => Person => Str; imperative: Number => Str; participle: Str; pres_optative: Number => Person => Str; perf_optative: Number => Person => Str; pres_admirative: Number => Person => Str; imperf_admirative: Number => Person => Str} ; -- 758
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43,f44,f45,f46,f47,f48,f49,f50,f51 ->
{ Indicative = table {
{ indicative = table {
Pres => table {
Sg => table {
P1 => f1 ;
@@ -157,7 +157,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Imperative = table {
imperative = table {
Sg => f25 ;
Pl => f26
} ;

View File

@@ -128,10 +128,8 @@ C1eC2aC3 = {C1 ="" ; C1C2="'"; C2C3 ="!"; C3="#"};
peC1aC2C3 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3=""};
penC1aC2C3e = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};-- 3
pteC1aC2C3u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3="&"};
pyeC1aC2C3 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pyeC1aC2C3u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3="&"};
--Passive Jus_Imperat mkV3gdl
@@ -343,7 +341,6 @@ leC1AC2aC3 = {C1 ="l" ; C1C2="!"; C2C3 ="'"; C3=""};
enC1AC2aC3 = { C1 = "(n" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3 = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3i = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="#"};
C1AC2aC3u = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="&"};
yC1AC2aC3 = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3=""};
tC1AC2aC3 = { C1 = "t" ; C1C2="!"; C2C3 ="'"; C3=""};
yC1AC2aC3u = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3="&"};
@@ -661,7 +658,7 @@ C1AC2n = { C1 = "" ; C1C2="!"; C2 ="n"};
C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"};
C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"};
C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2yz
@@ -701,7 +698,6 @@ C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
@@ -721,81 +717,12 @@ meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz
C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"};
--mkV2yz -- yz -- catch
--Perf --
C1AC2hu = {C1 ="" ; C1C2="!"; C2 ="h&"};
C1AC2n = { C1 = "" ; C1C2="!"; C2 ="n"};
C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"};
C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"};
C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2yz
eC1C2alehu = { C1 = "ä" ; C1C2=""; C2 ="!l'h&"};
enC1C2alen = { C1 = "än" ; C1C2=""; C2 ="!l'n"};
teC1C2yaleh = { C1 = "t" ; C1C2=""; C2 ="!l'h"};
teC1C2aleh = { C1 = "t" ; C1C2=""; C2 ="y!l'x"};
teC1C2alachehu = { C1 = "t" ; C1C2=""; C2 ="!l!ch&"};
yeC1C2al = { C1 = "y" ; C1C2=""; C2 ="!l"};
teC1C2alech = { C1 = "t" ; C1C2=""; C2 ="!l'c"};
yeC1C2alu = { C1 = "y" ; C1C2=""; C2 ="!l&"};
-- Cont -- mkV2yz
eC1C2 = { C1 = "ä" ; C1C2=""; C2 =""};
enC1C2 = { C1 = "än" ; C1C2=""; C2 =""};
teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};
--teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};3
teC1C2u = { C1 = "t" ; C1C2=""; C2 ="&"};
yeC1C2 = { C1 = "y" ; C1C2=""; C2 =""};
--teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};
yeC1C2u = { C1 = "y" ; C1C2=""; C2 ="&"};
--Jus_Imperat mkV2yz
leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2yz
C1C2ie = {C1 ="" ; C1C2=""; C2 ="%"};
C1C2en = { C1 = "" ; C1C2=""; C2 ="'n"};
C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
C1C2iealehu = {C1 ="" ; C1C2=""; C2 ="%y!l'h&"};
C1C2enal = { C1 = "" ; C1C2=""; C2 ="'n!l"};
C1C2ekal = { C1 = "" ; C1C2=""; C2 ="'k!l"};
C1C2eshal = { C1 = "" ; C1C2=""; C2 ="'x!l"};
C1C2achehual = { C1 = "" ; C1C2=""; C2 ="!cX7l"};
C1C2oal = { C1 = "" ; C1C2=""; C2 ="7l"};
C1C2alech = { C1 = "" ; C1C2=""; C2="!l'c"};
C1C2ewal = { C1 = "" ; C1C2=""; C2="'w!l"};
--Infinitve mkV2yz
meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz
C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"};
--nore -- nr -- live
--Perf --
C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
@@ -858,87 +785,12 @@ meC1oC2= {C1 ="m'" ; C1C2="/"; C2 =""};
C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"};
--nore -- nr -- live
--Perf --
C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
-- Imper -- mkV2nr
eC1oC2alehu = { C1 = "ä" ; C1C2="/"; C2 ="!l'h&"};
enC1oC2alen = { C1 = "än" ; C1C2="/"; C2 ="!l'n"};
teC1oC2yaleh = { C1 = "t" ; C1C2="/"; C2 ="!l'h"};
teC1oC2alesh = { C1 = "t" ; C1C2="/"; C2 ="y!l'x"};
teC1oC2alachehu = { C1 = "t" ; C1C2="/"; C2 ="!l!ch&"};
yeC1oC2al = { C1 = "y" ; C1C2="/"; C2 ="!l"};
teC1oC2alech = { C1 = "t" ; C1C2="/"; C2 ="!l'c"};
yeC1oC2alu = { C1 = "y" ; C1C2="/"; C2 ="!l&"};
-- Imper -- mkV2nr
eC1oC2 = { C1 = "ä" ; C1C2="/"; C2 =""};
enC1oC2 = { C1 = "än" ; C1C2="/"; C2 =""};
teC1oC2 = { C1 = "t" ; C1C2="/"; C2 =""};
teC1oC2i = { C1 = "t" ; C1C2="/"; C2 ="#"};
teC1oC2u = { C1 = "t" ; C1C2="/"; C2 ="&"};
yeC1oC2 = { C1 = "y" ; C1C2="/"; C2 =""};
--teC1oC2 = { C1 = "t" ; C1C2="/"; C2 ="!l'c"};
yeC1oC2u = { C1 = "y" ; C1C2="/"; C2 ="&"};
--Jus_Imperat mkV2nr
leC1uC2 = {C1 ="l" ; C1C2="&"; C2 =""};
enC1uC2 = { C1 = "än" ; C1C2="&"; C2 =""};
C1uC2 = { C1 = "" ; C1C2="&"; C2 =""};
C1uC2i = { C1 = "" ; C1C2="&"; C2 ="#"};
C1uC2u = { C1 = "" ; C1C2="&"; C2 ="&"};
yC1uC2 = { C1 = "y" ; C1C2="&"; C2 =""};
tC1uC2 = { C1 = "t" ; C1C2="&"; C2 =""};
yC1uC2u = { C1 = "y" ; C1C2="&"; C2 ="&"};
--Gerund mkV2nr
C1oC2ie = {C1 ="" ; C1C2="/"; C2 ="%"};
C1oC2en = { C1 = "" ; C1C2="/"; C2 ="'n"};
C1oC2ek = { C1 = "" ; C1C2="/"; C2 ="'k"};
C1oC2esh = { C1 = "" ; C1C2="/"; C2 ="'x"};
C1oC2achehu = { C1 = "" ; C1C2="/"; C2 ="!ch&"};
C1oC2o = { C1 = "" ; C1C2="/"; C2 ="/"};
C1oC2A = { C1 = "" ; C1C2="/"; C2="!"};
C1oC2ew = { C1 = "" ; C1C2="/"; C2="'w"};
--CompPer mkV2nr y!l'h& !l !l !l cX7l 7l l'c !l
C1oC2iealehu = {C1 ="" ; C1C2="/"; C2 ="%y!l'h& "};
C1oC2enal = { C1 = "" ; C1C2="/"; C2 ="'n!l"};
C1oC2ekal = { C1 = "" ; C1C2="/"; C2 ="'k!l"};
C1oC2eshal = { C1 = "" ; C1C2="/"; C2 ="'x!l"};
C1oC2achehual = { C1 = "" ; C1C2="/"; C2 ="!cX7l"};
C1oC2oal = { C1 = "" ; C1C2="/"; C2 ="7l"};
C1oC2Alech = { C1 = "" ; C1C2="/"; C2="!l'c"};
C1oC2ewal = { C1 = "" ; C1C2="/"; C2="'w!l"};
--Infinitve mkV2nr
meC1oC2= {C1 ="m'" ; C1C2="/"; C2 =""};
--Participle mkV2nr
C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"};
--mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
@@ -992,74 +844,6 @@ C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live
--mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
teC1aC2yaleh = { C1 = "t" ; C1C2="!"; C2 ="!l'h"};
teC1aC2alesh = { C1 = "t" ; C1C2="!"; C2 ="y!l'x"};
teC1aC2alachehu = { C1 = "t" ; C1C2="!"; C2 ="!l!ch&"};
yeC1aC2al = { C1 = "y" ; C1C2="!"; C2 ="!l"};
teC1aC2alech = { C1 = "t" ; C1C2="!"; C2 ="!l'c"};
yeC1aC2alu = { C1 = "y" ; C1C2="!"; C2 ="!l&"};
-- Cont -- mkV2wN
eC1aC2 = { C1 = "ä" ; C1C2="!"; C2 =""};
enC1aC2 = { C1 = "än" ; C1C2="!"; C2 =""};
teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
teC1aC2u = { C1 = "t" ; C1C2="!"; C2 ="&"};
yeC1aC2 = { C1 = "y" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
yeC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Jus_Imperat mkV2wN
--leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
--enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
--C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
--C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
--yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
--tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
--yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2wN
C1aC2cie = {C1 ="" ; C1C2="!"; C2 ="c%"};
C1aC2ten = { C1 = "" ; C1C2="!"; C2 ="t'n"};
C1aC2tek = { C1 = "" ; C1C2="!"; C2 ="t'k"};
C1aC2tesh = { C1 = "" ; C1C2="!"; C2 ="t'x"};
C1aC2tachehu = { C1 = "" ; C1C2="!"; C2 ="t!ch&"};
C1aC2to = { C1 = "" ; C1C2="!"; C2 ="t/"};
C1aC2ta = { C1 = "" ; C1C2="!"; C2="t!"};
C1aC2tew = { C1 = "" ; C1C2="!"; C2="t'w"};
--ComPer mkV2wN y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2ciealehu = {C1 ="" ; C1C2="!"; C2 ="c%y!l'h&"};
C1aC2tenal = { C1 = "" ; C1C2="!"; C2 ="t'n!l"};
C1aC2tekal = { C1 = "" ; C1C2="!"; C2 ="t'k!l"};
C1aC2teshal = { C1 = "" ; C1C2="!"; C2 ="t'x!l"};
C1aC2tachehual = { C1 = "" ; C1C2="!"; C2 ="t!cX7l"};
C1aC2toal = { C1 = "" ; C1C2="!"; C2 ="t7l"};
C1aC2talech = { C1 = "" ; C1C2="!"; C2="t!l'c"};
C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
--Infinitve mkV2wN
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live
----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
@@ -1109,63 +893,8 @@ tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
--seTe -- st -- give
--Perf --
C1eC2hu = {C1 ="" ; C1C2="'"; C2 ="'h&"};
C1eC2n = { C1 = "" ; C1C2="'"; C2 ="'n"};
C1eC2k = { C1 = "" ; C1C2="'"; C2 ="'k"};
C1eC2sh = { C1 = "" ; C1C2="'"; C2 ="'x"};
C1eC2achehu = { C1 = "" ; C1C2 ="'"; C2 ="'ch&"};
C1eC2a = { C1 = "" ; C1C2="'"; C2 ="'"};
C1eC2ach = { C1 = "" ; C1C2="'"; C2 ="'c"};
--C1eC2u = { C1 = "" ; C1C2="'"; C2 ="&"}; same as C1aC2u (bela)
-- Imper -- mkV2sT
--eC1eC2alehu = { C1 = "ä" ; C1C2="'"; C2 ="!l'h&"}; eC1aC2alehu
--enC1eC2alen = { C1 = "än" ; C1C2="'"; C2 ="!l'n"};enC1aC2alen
--teC1eC2yaleh = { C1 = "t" ; C1C2="'"; C2 ="!l'h"};teC1aC2yaleh
--teC1eC2aleh = { C1 = "t" ; C1C2="'"; C2 ="y!l'x"};teC1aC2aleh
--teC1eC2alachehu = { C1 = "t" ; C1C2="'"; C2 ="!l!ch&"};teC1aC2alachehu
--yeC1eC2al = { C1 = "y" ; C1C2="'"; C2 ="!l"};yeC1aC2al
--teC1eC2alech = { C1 = "t" ; C1C2="'"; C2 ="!l'c"};teC1aC2alech
--yeC1eC2alu = { C1 = "y" ; C1C2="'"; C2 ="!l&"};yeC1aC2alu
--Jus_Imperat mkV2sT
leC1eC2 = {C1 ="l" ; C1C2=""; C2 =""};
enC1eC2 = { C1 = "än" ; C1C2=""; C2 =""};
C1C2 = { C1 = "" ; C1C2=""; C2 =""};
C1eC2i = { C1 = "" ; C1C2=""; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2=""; C2 ="&"}; C1C2u
yC1eC2 = { C1 = "y" ; C1C2=""; C2 =""};
tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
--yC1eC2u = { C1 = "y" ; C1C2=""; C2 ="&"};yC1C2u
--Gerund mkV2sT
--C1eC2ie = {C1 ="" ; C1C2="'"; C2 ="c%"}; C1aC2cie
--C1eC2en = { C1 = "" ; C1C2="'"; C2 ="'n"};C1aC2ten
--C1eC2ek = { C1 = "" ; C1C2="'"; C2 ="'k"}; C1aC2tek
--C1eC2esh = { C1 = "" ; C1C2="'"; C2 ="'x"}; C1aC2tesh
--C1eC2achehu = { C1 = "" ; C1C2="'"; C2 ="!ch&"};C1aC2tachehu
--C1eC2o = { C1 = "" ; C1C2="'"; C2 ="/"};C1aC2to
--C1eC2A = { C1 = "" ; C1C2="'"; C2="!"};C1aC2ta
--C1eC2ew = { C1 = "" ; C1C2="'"; C2="'w"}; C1aC2tew
--Infinitve mkV2sT
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
---- Quadro_Radical
--Starting with type Tri-Radical Roots
-- Eg. dbdb - fight
-- qzqz - freeze
@@ -1238,152 +967,4 @@ meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
---- Quadro_Radical
--Starting with type Tri-Radical Roots
-- Eg. dbdb - fight
-- qzqz - freeze
-- wrwr - throw
-- tnfs - breath
--Perf --
C1aC2aC3aC4hu = {C1 ="" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "h&" };
C1aC2aC3aC4n = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "n" };
C1aC2aC3aC4k = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "k" };
C1aC2aC3aC4sh = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "x" };
C1aC2aC3aC4achehu = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "!ch&" };
C1aC2aC3aC4a = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'" };
C1aC2aC3aC4ech = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'c" };
C1aC2aC3aC4u = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "&" };
--Imper --mkV4dbdb
eC1aC2aC3C4alehu = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h&" };
enC1aC2aC3C4alen = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'n" };
teC1aC2aC3C4yaleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h" };
teC1aC2aC3C4aleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "y!l'x" };
teC1aC2aC3C4alachehu = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l!ch&" };
yeC1aC2aC3C4al = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l" };
teC1aC2aC3C4alech = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'c" };
yeC1aC2aC3C4alu = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l&" };
--Cont --mkV4dbdb
eC1aC2aC3C4 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
enC1aC2aC3C4 = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4i = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "#" };
teC1aC2aC3C4u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
yeC1aC2aC3C4 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
--teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
yeC1aC2aC3C4u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
--Jus_Imperat mkV4dbdb
leC1aC2C3C4 = {C1 ="l" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
enC1aC2C3C4 = { C1 = "än" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4 = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4i = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "#" };
C1aC2C3C4u = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
yC1aC2C3C4 = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
tC1aC2C3C4 = { C1 = "t" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
yC1aC2C3C4u = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
--Gerund mkV4dbdb
C1aC2C3C4ie = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%" };
C1aC2C3C4en = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n" };
C1aC2C3C4ek = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k" };
C1aC2C3C4esh = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x" };
C1aC2C3C4achehu = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!ch&" };
C1aC2C3C4o = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "/" };
C1aC2C3C4a = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!" };
C1aC2C3C4ew = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w" };
--CompPerf mkV4dbdb y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2C3C4iealehu = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%y!l'h&" };
C1aC2C3C4enal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n!l" };
C1aC2C3C4ekal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k!l" };
C1aC2C3C4eshal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x!l" };
C1aC2C3C4achehual = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!cX7l" };
C1aC2C3C4oal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "7l" };
C1aC2C3C4alech = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!l'c" };
C1aC2C3C4ewal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w!l" };
--Infinitve mkV4dbdb
meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
}
{-
resource PatternsAmh = {
flags coding=utf8 ;
oper
--perf
C1aC2aC3ku = {C1 ="" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኩ"};
C1aC2aC3n = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ን"};
C1aC2aC3k = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ክ"};
C1aC2aC3sh = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ሽ"};
C1aC2aC3achehu = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="አችሁ"};
C1aC2aC3e = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧ"};
C1aC2aC3ech = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧች"};
C1aC2aC3u = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኡ"};
--imper
eC1aC2C3alehu = { C1 = "እ" ; C1C2="ኧ"; C2C3 =""; C3="አለሁ"};
enC1aC2C3alen = { C1 = "እን" ; C1C2="ኧ"; C2C3 =""; C3="አለን"};
teC1aC2C3yaleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለህ"};
teC1aC2C3aleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="ያለሽ"};
teC1aC2C3alachehu = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አላችሁ"};
yeC1aC2C3al = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አል"};
teC1aC2C3alech = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለች"};
yeC1aC2C3alu = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አሉ"};
}
-}

View File

@@ -22,12 +22,9 @@ concrete PhraseAmh of Phrase = CatAmh ** open
UttIP ip = ip ; --- Acc also
UttVP vp = {s = vp.obj.s ++ vp.inf} ;
UttIAdv iadv = iadv ;
UttCN n = {s = n.s ! Sg ! Indef!Nom} ;
UttCard n = {s = n.s ! Masc!Sg!Indef!Nom} ;
UttImpSg pol imp = {s = pol.s ++ imp.s!pol.p!Masc!Sg};
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p! Masc! Pl} ; --- TO DO
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ; -- TO DO ---
UttQS qs = {s = qs.s } ; -- TO DO
{-
PConjConj conj = {s = conj.s2} ; ---

View File

@@ -1,4 +1,19 @@
concrete AdjectiveHye of Adjective = CatHye ** {
concrete AdjectiveHye of Adjective = CatHye ** open ResHye, Prelude in {
lin
PositA a = a ;
AdAP ada ap = {
s = \\sp,c,num => ada.s ++ ap.s ! sp ! c ! num;
isPre = ap.isPre
} ;
PositA a = {
s = \\sp,c,num =>
case <sp,c> of {
<Def,Nom> => a.def_nom ! num ;
<Def,Dat> => a.def_dat ! num ;
<Poss P1,_> => a.poss1 ! c ! num ;
<Poss P2,_> => a.poss2 ! c ! num ;
_ => a.s ! c ! num
} ;
isPre = True
} ;
}

View File

@@ -0,0 +1,6 @@
concrete AdverbHye of Adverb = CatHye ** open Prelude,ResHye in {
lin PrepNP p np = {s = case p.isPre of {
False => np.s ! p.c ++ p.s;
True => p.s ++ np.s ! p.c
}} ;
}

View File

@@ -1,16 +1,63 @@
concrete CatHye of Cat = CommonX ** open ResHye in {
lincat V = Verb ;
lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat CN = Noun ;
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat AP = Adj ;
lincat Prep = Compl ;
concrete CatHye of Cat = CommonX ** open Prelude,ResHye in {
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat ACard = {s : Str} ;
lincat AP = {s : Species => Case => Number => Str; isPre : Bool} ;
lincat CN = {s : Species => Case => Number => Str} ;
lincat Card = {s : Str} ;
lincat Cl = {s : Str;
conditional : Aspect => Number => Str;
converb : {imperfective : Str; futCon1 : Str;
futCon2 : Str; negative : Str;
perfective : Str; simultaneous : Str};
passive : Str; past : Person => Number => Str;
participle : PartType => Str;
subjunctive : Aspect => Number => Str} ;
lincat ClSlash = {s : Str} ;
lincat Comp = {s : Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : Str} ;
lincat Det = {s : Str; n : Number; sp : Species} ;
lincat Digits = {s : Str} ;
lincat GN = {s : Str} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str} ;
lincat IP = {s : Str} ;
lincat IQuant = {s : Str} ;
lincat Imp = {s : Str} ;
lincat LN = {s : Str} ;
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat NP = {s : Case => Str; a : Agr} ;
lincat Num = {s : Str; n : Number} ;
lincat Numeral = {s : Str} ;
lincat Ord = {s : Str} ;
lincat PN = {s : Str} ;
lincat Predet = {s : Str} ;
lincat Prep = Compl ** {isPre : Bool} ;
lincat Pron = {s : Str; empty : Str; a : Agr} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Str; sp : Species} ;
lincat RCl = {s : Str} ;
lincat RP = {s : Str} ;
lincat RS = {s : Str} ;
lincat S = {s : Str} ;
lincat SN = {s : Str} ;
lincat SSlash = {s : Str} ;
lincat Subj = {s : Str} ;
lincat V = Verb ;
lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat VP = {s : Str;
conditional : Aspect => Person => Number => Str;
converb : {imperfective : Str; futCon1 : Str; futCon2 : Str;
negative : Str; perfective : Str; simultaneous : Str};
imperative : Number => Str; passive : Str;
past : Person => Number => Str; participle : PartType => Str;
subjunctive : Aspect => Person => Number => Str} ;
lincat VPSlash = Verb ** {c2 : Compl} ;
}

View File

@@ -15,50 +15,50 @@ lin
paragraph (x.s) ++
heading1 "Converb" ++
frameTable (
tr (th "Imperfective" ++ td (x.Converb.Imperfective)) ++
tr (th "Simultaneous" ++ td (x.Converb.Simultaneous)) ++
tr (th "Perfective" ++ td (x.Converb.Perfective)) ++
tr (th "Futute I" ++ td (x.Converb.FutCon1)) ++
tr (th "Futute II" ++ td (x.Converb.FutCon2)) ++
tr (th "Connegative" ++ td (x.Converb.Negative))) ++
tr (th "Imperfective" ++ td (x.converb.imperfective)) ++
tr (th "Simultaneous" ++ td (x.converb.simultaneous)) ++
tr (th "Perfective" ++ td (x.converb.perfective)) ++
tr (th "Futute I" ++ td (x.converb.futCon1)) ++
tr (th "Futute II" ++ td (x.converb.futCon2)) ++
tr (th "Connegative" ++ td (x.converb.negative))) ++
heading1 "Passive" ++
paragraph x.Passive ++
paragraph x.passive ++
heading1 "Participle" ++
frameTable (
tr (th "Resultative" ++ td (x.Participle ! Resultative)) ++
tr (th "Subject" ++ td (x.Participle ! Subject))) ++
tr (th "Resultative" ++ td (x.participle ! Resultative)) ++
tr (th "Subject" ++ td (x.participle ! Subject))) ++
heading1 "Past" ++
frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "P1" ++ td (x.Past ! P1 ! Sg) ++ td (x.Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Past ! P2 ! Sg) ++ td (x.Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Past ! P3 ! Sg) ++ td (x.Past ! P3 ! Pl))) ++
tr (th "P1" ++ td (x.past ! P1 ! Sg) ++ td (x.past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.past ! P2 ! Sg) ++ td (x.past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.past ! P3 ! Sg) ++ td (x.past ! P3 ! Pl))) ++
heading1 "Subjunctive" ++
frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.Subjunctive ! Perfect ! P1 ! Sg) ++ td (x.Subjunctive ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Subjunctive ! Perfect ! P2 ! Sg) ++ td (x.Subjunctive ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Subjunctive ! Perfect ! P3 ! Sg) ++ td (x.Subjunctive ! Perfect ! P3 ! Pl)) ++
th "P1" ++ td (x.subjunctive ! Perfect ! P1 ! Sg) ++ td (x.subjunctive ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.subjunctive ! Perfect ! P2 ! Sg) ++ td (x.subjunctive ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.subjunctive ! Perfect ! P3 ! Sg) ++ td (x.subjunctive ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Non_Past" ++
th "P1" ++ td (x.Subjunctive ! Non_Past ! P1 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Subjunctive ! Non_Past ! P2 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Subjunctive ! Non_Past ! P3 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P3 ! Pl))) ++
th "P1" ++ td (x.subjunctive ! Non_Past ! P1 ! Sg) ++ td (x.subjunctive ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.subjunctive ! Non_Past ! P2 ! Sg) ++ td (x.subjunctive ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.subjunctive ! Non_Past ! P3 ! Sg) ++ td (x.subjunctive ! Non_Past ! P3 ! Pl))) ++
heading1 "Conditional" ++
frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.Conditional ! Perfect ! P1 ! Sg) ++ td (x.Conditional ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Conditional ! Perfect ! P2 ! Sg) ++ td (x.Conditional ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Conditional ! Perfect ! P3 ! Sg) ++ td (x.Conditional ! Perfect ! P3 ! Pl)) ++
th "P1" ++ td (x.conditional ! Perfect ! P1 ! Sg) ++ td (x.conditional ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.conditional ! Perfect ! P2 ! Sg) ++ td (x.conditional ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.conditional ! Perfect ! P3 ! Sg) ++ td (x.conditional ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Non_Past" ++
th "P1" ++ td (x.Conditional ! Non_Past ! P1 ! Sg) ++ td (x.Conditional ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Conditional ! Non_Past ! P2 ! Sg) ++ td (x.Conditional ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Conditional ! Non_Past ! P3 ! Sg) ++ td (x.Conditional ! Non_Past ! P3 ! Pl))) ++
th "P1" ++ td (x.conditional ! Non_Past ! P1 ! Sg) ++ td (x.conditional ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.conditional ! Non_Past ! P2 ! Sg) ++ td (x.conditional ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.conditional ! Non_Past ! P3 ! Sg) ++ td (x.conditional ! Non_Past ! P3 ! Pl))) ++
heading1 "Imperative" ++
frameTable (
tr (th "Sg" ++ th "Pl") ++
tr (td (x.Imperative_Jussive ! Sg) ++ td (x.Imperative_Jussive ! Pl))) ;
tr (td (x.imperative ! Sg) ++ td (x.imperative ! Pl))) ;
s3=[]
} ;
lin

View File

@@ -2,5 +2,9 @@ concrete GrammarHye of Grammar =
TenseX,
PhraseHye,
NounHye,
AdjectiveHye ** {
}
VerbHye,
AdjectiveHye,
AdverbHye,
SentenceHye,
StructuralHye ** {
}

View File

@@ -1,2 +1,5 @@
concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in {
}
lin apple_N = mkN001 "խնձոր" ;
lin man_N = mkN047 "տղամարդ" ;
lin woman_N = mkN034 "կին" ;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,35 @@
concrete NounHye of Noun = CatHye ** {
lin
UseN n = n ;
concrete NounHye of Noun = CatHye ** open ResHye in {
lin AdjCN ap cn = {
s = \\sp,c,n =>
case ap.isPre of {
True => ap.s ! Indef ! Nom ! Sg ++ cn.s ! sp ! c ! n;
False => cn.s ! sp ! c ! n ++ ap.s ! Indef ! Nom ! Sg
}
} ;
lin AdvCN cn adv = {
s = \\sp,c,num => adv.s ++ cn.s ! sp ! c ! num
} ;
lin DefArt = {s = []; sp = Def} ;
lin DetCN det cn = {s = \\c => det.s ++ cn.s ! det.sp ! c ! det.n;
a = {n=det.n; p=P3}} ;
lin DetQuant quant num = {s = quant.s ++ num.s; n = num.n; sp=quant.sp} ;
lin IndefArt = {s = "մի"; sp = Indef} ;
lin NumPl = {s = []; n = Pl} ;
lin NumSg = {s = []; n = Sg} ;
lin MassNP cn = {
s = \\c => cn.s ! Indef ! c ! Sg;
a = {n=Sg; p=P3}
} ;
lin PossPron pron = {s = pron.empty; sp = Poss pron.a.p} ;
lin UseN n = {
s = \\sp,c,num =>
case <sp,c> of {
<Def,Nom> => n.def_nom ! num ;
<Def,Dat> => n.def_dat ! num ;
<Poss P1,_> => n.poss1 ! c ! num ;
<Poss P2,_> => n.poss2 ! c ! num ;
_ => n.s ! c ! num
}
} ;
lin UsePron pron = {s = \\c => pron.s; a=pron.a} ;
}

View File

@@ -468,16 +468,19 @@ oper
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat; isPre=False} ;
singular : Number = Sg ;
plural : Number = Pl ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s; sp=Indef} ;
mkDet : Str -> Number -> Det = \s,n -> lin Det {s=s; n=n; sp=Indef} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
@@ -488,4 +491,10 @@ oper
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
mkPron : Str -> Number -> Person -> Pron = \s,n,p ->
lin Pron {
s = s ;
empty = [] ;
a = {n = n; p = p}
} ;
}

View File

@@ -1,16 +1,14 @@
resource ResHye = {
resource ResHye = ParamX ** {
param Aspect = Non_Past | Perfect ;
param Person = P1 | P3 | P2 ;
param Number = Sg | Pl ;
param Case = Nom | Dat | Ablat | Instr | Loc ;
param PartType = Resultative | Subject ;
oper Verb = {s: Str; Causative: Str; Conditional: Aspect => Person => Number => Str; Converb: {Imperfective: Str; FutCon1: Str; FutCon2: Str; Negative: Str; Perfective: Str; Simultaneous: Str}; Imperative_Jussive: Number => Str; Passive: Str; Past: Person => Number => Str; Participle: PartType => Str; Subjunctive: Aspect => Person => Number => Str} ; -- 898
oper Verb = {s: Str; causative: Str; conditional: Aspect => Person => Number => Str; converb: {imperfective: Str; futCon1: Str; futCon2: Str; negative: Str; perfective: Str; simultaneous: Str}; imperative: Number => Str; passive: Str; past: Person => Number => Str; participle: PartType => Str; subjunctive: Aspect => Person => Number => Str} ; -- 898
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43 ->
{ s = f1 ;
Causative = f2 ;
Conditional = table {
causative = f2 ;
conditional = table {
Perfect => table {
P1 => table {
Sg => f3 ;
@@ -40,19 +38,19 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Converb = { Imperfective = f15 ;
FutCon1 = f16 ;
FutCon2 = f17 ;
Negative = f18 ;
Perfective = f19 ;
Simultaneous = f20
converb = { imperfective = f15 ;
futCon1 = f16 ;
futCon2 = f17 ;
negative = f18 ;
perfective = f19 ;
simultaneous = f20
} ;
Imperative_Jussive = table {
imperative = table {
Sg => f21 ;
Pl => f22
} ;
Passive = f23 ;
Past = table {
passive = f23 ;
past = table {
P1 => table {
Sg => f24 ;
Pl => f25
@@ -66,11 +64,11 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
Pl => f29
}
} ;
Participle = table {
participle = table {
Resultative => f30 ;
Subject => f31
} ;
Subjunctive = table {
subjunctive = table {
Perfect => table {
P1 => table {
Sg => f32 ;
@@ -102,7 +100,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
} ;
param Species = Indef | Def | Poss Person ;
oper Agr = {n : Number; p : Person} ;
oper Noun = {s: Case => Number => Str; def_dat: Number => Str; def_nom: Number => Str; poss1: Case => Number => Str; poss2: Case => Number => Str} ; -- 4880
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34 ->

View File

@@ -0,0 +1,14 @@
concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in {
lin PredVP np vp = {s = np.s ! Nom ++ vp.s;
conditional = \\a,n => np.s ! Nom ++ vp.conditional ! a ! P3 ! n;
converb = {imperfective = np.s ! Nom ++ vp.converb.imperfective;
futCon1 = np.s ! Nom ++ vp.converb.futCon1;
futCon2 = np.s ! Nom ++ vp.converb.futCon2;
negative = np.s ! Nom ++ vp.converb.negative;
perfective = np.s ! Nom ++ vp.converb.perfective;
simultaneous = np.s ! Nom ++ vp.converb.simultaneous};
passive = np.s ! Nom ++ vp.passive;
past = \\_,n => np.s ! Nom ++ vp.past ! P3 ! n;
participle = \\p => np.s ! Nom ++ vp.participle ! p;
subjunctive = \\a,n => np.s ! Nom ++ vp.subjunctive ! a ! P3 ! n} ;
}

View File

@@ -0,0 +1,8 @@
concrete StructuralHye of Structural = CatHye ** open ResHye, ParadigmsHye in {
lin i_Pron = mkPron "ես" Sg P1 ;
lin youSg_Pron = mkPron "դու" Sg P2 ;
lin he_Pron, she_Pron, it_Pron = mkPron "նա" Sg P3 ;
lin we_Pron = mkPron "մեք" Pl P1 ;
lin youPl_Pron = mkPron "դուք" Pl P2 ;
lin they_Pron = mkPron "նոքա" Pl P3 ;
}

35
src/armenian/VerbHye.gf Normal file
View File

@@ -0,0 +1,35 @@
concrete VerbHye of Verb = CatHye ** open Prelude,ResHye in {
lin AdvVP vp adv = {s = adv.s ++ vp.s;
conditional = \\a,p,n => adv.s ++ vp.conditional ! a ! p ! n;
converb = {imperfective = adv.s ++ vp.converb.imperfective;
futCon1 = adv.s ++ vp.converb.futCon1;
futCon2 = adv.s ++ vp.converb.futCon2;
negative = adv.s ++ vp.converb.negative;
perfective = adv.s ++ vp.converb.perfective;
simultaneous = adv.s ++ vp.converb.simultaneous};
imperative = \\n => vp.imperative ! n ++ adv.s;
passive = adv.s ++ vp.passive;
past = \\p,n => adv.s ++ vp.past ! p ! n;
participle = \\p => adv.s ++ vp.participle ! p;
subjunctive = \\a,p,n => adv.s ++ vp.subjunctive ! a ! p ! n} ;
lin ComplSlash vp np = {s = vp.s ++ vp.c2.s ++ np.s ! vp.c2.c;
conditional = \\a,p,n => vp.conditional ! a ! p ! n
++ vp.c2.s ++ np.s ! vp.c2.c;
converb = {imperfective = vp.converb.imperfective
++ vp.c2.s ++ np.s ! vp.c2.c;
futCon1 = vp.converb.futCon1 ++ vp.c2.s ++ np.s ! vp.c2.c;
futCon2 = vp.converb.futCon2 ++ vp.c2.s ++ np.s ! vp.c2.c;
negative = vp.converb.negative ++ vp.c2.s ++ np.s ! vp.c2.c;
perfective = vp.converb.perfective
++ vp.c2.s ++ np.s ! vp.c2.c;
simultaneous = vp.converb.simultaneous
++ vp.c2.s ++ np.s ! vp.c2.c};
imperative = \\n => vp.imperative ! n ++ vp.c2.s ++ np.s ! Nom;
passive = vp.passive ++ vp.c2.s ++ np.s ! vp.c2.c;
past = \\p,n => vp.past ! p ! n ++ vp.c2.s ++ np.s ! vp.c2.c;
participle = \\p => vp.participle ! p ++ vp.c2.s ++ np.s ! vp.c2.c;
subjunctive = \\a,p,n => vp.subjunctive ! a ! p ! n
++ vp.c2.s ++ np.s ! vp.c2.c} ;
lin SlashV2a v = v ;
lin UseV v = v ;
}

View File

@@ -139,9 +139,6 @@ lin
SubjunctRelCN cn rs = RelCN cn rs ; -- no difference from indicative
lincat
X = {s : Str} ;
lin
UseComp_estar = UseComp ;
UseComp_ser = UseComp ;

View File

@@ -39,9 +39,9 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in {
DetQuant quant num = {
s = quant.s ! num.hasCard ! num.n ++ num.s ! quant.isDef ! Nom;
sp = \\g,hasAdj,c => case <num.hasCard,num.n> of {
<False,Sg> => quant.sp ! g ! hasAdj ! num.n ! c ++ num.s ! quant.isDef ! Nom ;
_ => quant.s ! True ! num.n ++ num.sp ! quant.isDef ! npcase2case c
sp = \\g,hasAdj,c => case num.hasCard of {
False => quant.sp ! g ! hasAdj ! num.n ! c ++ num.s ! quant.isDef ! Nom ;
_ => quant.s ! True ! num.n ++ num.sp ! quant.isDef ! npcase2case c
} ;
n = num.n ;
hasNum = num.hasCard

View File

@@ -10,7 +10,11 @@ lincat
lin
InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ;
s1="" ;
s1 = heading1 ("Noun" ++ case x.g of {
Neuter=> "(neuter)";
Masc => "(masc)";
Fem => "(fem)"
}) ;
s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Indef" ++ th "Def") ++
tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++
@@ -30,17 +34,17 @@ lin
t="a" ;
s1="" ;
s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neutr") ++
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neuter") ++
tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++
th "Nom" ++ td (x.s ! Masc ! Sg ! Nom) ++ td (x.s ! Fem ! Sg ! Nom) ++ td (x.s ! Neutr ! Sg ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Sg ! Acc) ++ td (x.s ! Fem ! Sg ! Acc) ++ td (x.s ! Neutr ! Sg ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Sg ! Dat) ++ td (x.s ! Fem ! Sg ! Dat) ++ td (x.s ! Neutr ! Sg ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Sg ! Gen) ++ td (x.s ! Fem ! Sg ! Gen) ++ td (x.s ! Neutr ! Sg ! Gen)) ++
th "Nom" ++ td (x.s ! Masc ! Sg ! Nom) ++ td (x.s ! Fem ! Sg ! Nom) ++ td (x.s ! Neuter ! Sg ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Sg ! Acc) ++ td (x.s ! Fem ! Sg ! Acc) ++ td (x.s ! Neuter ! Sg ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Sg ! Dat) ++ td (x.s ! Fem ! Sg ! Dat) ++ td (x.s ! Neuter ! Sg ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Sg ! Gen) ++ td (x.s ! Fem ! Sg ! Gen) ++ td (x.s ! Neuter ! Sg ! Gen)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Pl" ++
th "Nom" ++ td (x.s ! Masc ! Pl ! Nom) ++ td (x.s ! Fem ! Pl ! Nom) ++ td (x.s ! Neutr ! Pl ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Pl ! Acc) ++ td (x.s ! Fem ! Pl ! Acc) ++ td (x.s ! Neutr ! Pl ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Pl ! Dat) ++ td (x.s ! Fem ! Pl ! Dat) ++ td (x.s ! Neutr ! Pl ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Pl ! Gen) ++ td (x.s ! Fem ! Pl ! Gen) ++ td (x.s ! Neutr ! Pl ! Gen))) ;
th "Nom" ++ td (x.s ! Masc ! Pl ! Nom) ++ td (x.s ! Fem ! Pl ! Nom) ++ td (x.s ! Neuter ! Pl ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Pl ! Acc) ++ td (x.s ! Fem ! Pl ! Acc) ++ td (x.s ! Neuter ! Pl ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Pl ! Dat) ++ td (x.s ! Fem ! Pl ! Dat) ++ td (x.s ! Neuter ! Pl ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Pl ! Gen) ++ td (x.s ! Fem ! Pl ! Gen) ++ td (x.s ! Neuter ! Pl ! Gen))) ;
s3=[]
} ;
lin

File diff suppressed because it is too large Load Diff

View File

@@ -3,10 +3,10 @@ resource ResFao = {
param Species = Indef | Def ;
param Number = Sg | Pl ;
param Case = Nom | Acc | Dat | Gen ;
param Gender = Neutr | Fem | Masc ;
oper Noun = {s: Species => Number => Case => Str} ; -- 2135
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16 ->
param Gender = Masc | Fem | Neuter ;
oper Noun = {s: Species => Number => Case => Str; g : Gender} ; -- 2135
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,g ->
{ s = table {
Indef => table {
Sg => table {
@@ -36,7 +36,8 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
Gen => f16
}
}
}
} ;
g = g
} ;
@@ -72,7 +73,7 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
Gen => f16
}
} ;
Neutr => table {
Neuter=> table {
Sg => table {
Nom => f17 ;
Acc => f18 ;

View File

@@ -670,31 +670,6 @@ resource ResGre = ParamX ** open Prelude in {
g = g
} ;
mkNoun_anthropos : (s1,_ : Str) -> Gender -> Noun =
\anthropos, anthropon, g ->
let
anthrop = Predef.tk 2 anthropos ;
anthrOp = Predef.tk 2 anthropon ;
in {
s = table {
Sg => table {
Nom => anthropos ;
Gen|CPrep P_Dat => anthrOp + "ου" ;
Acc |CPrep P_se |CPrep PNul => anthrop + "ο";
Vocative => anthrop + "ε"
} ;
Pl => table {
Nom | Vocative=> anthrop + "οι" ;
Gen |CPrep P_Dat=> anthropon ;
Acc |CPrep P_se |CPrep PNul => anthrOp + "ους"
}
} ;
g = g
} ;
----------------Neuter nouns in -ς , with stress movement,syllabic augmentation, irregular (φως, γεγονός, ημίφως) --------------
mkNoun_fws: (s1,_ : Str) -> Gender -> Noun =
\fws, fwtos, g ->

View File

@@ -72,9 +72,7 @@ taC1C2eC3o = { C1 = "ת" ; C1C2=""; C2C3 =""; C3="ו"};
taC1C2aC3nah = { C1 = "ת" ; C1C2=""; C2C3 =""; C3="נה"};
yaC1C2aC3 = { C1 = "י" ; C1C2=""; C2C3 =""; C3=""};
taC1C2aC3 = { C1 = "ת" ; C1C2=""; C2C3 =""; C3=""};
yaC1C2aC3u = { C1 = "י" ; C1C2=""; C2C3 =""; C3="ו"};
taC1C2aC3nah = { C1 = "ת" ; C1C2=""; C2C3 =""; C3="נה"};
C1uC2aC3 = { C1 = "" ; C1C2="ו"; C2C3 =""; C3=""};

View File

@@ -1,13 +1,69 @@
concrete CatKaz of Cat = CommonX ** open ResKaz in {
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat V, VA, VV, VS, VQ = Verb ;
lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat A = {s : Str} ;
lincat A2 = A ** {c2 : Compl} ;
lincat Prep = Compl ;
concrete CatKaz of Cat = CommonX ** open Prelude,ResKaz in {
lincat A = {s : Str} ;
lincat A2 = A ** {c2 : Compl} ;
lincat ACard = {s : Str} ;
lincat AP = {s : Str} ;
lincat CN = {s : Case => Str} ;
lincat Card = {s : Str} ;
lincat Cl = {infinitive : Case => Str} ;
lincat ClSlash = {s : Str} ;
lincat Comp = {s : Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : Str} ;
lincat Det = {s : Str; n : Number} ;
lincat Digits = {s : Str} ;
lincat GN = {s : Str} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str} ;
lincat IP = {s : Str} ;
lincat IQuant = {s : Str} ;
lincat Imp = {s : Str} ;
lincat LN = {s : Str} ;
lincat N = {s : Case => Number => Str;
poss : Number => Person => Number => Str} ;
lincat N2 = {s : Case => Number => Str;
poss : Number => Person => Number => Str; c2 : {s : Str}} ;
lincat N3 = {s : Case => Number => Str;
poss : Number => Person => Number => Str; c2 : {s : Str};
c3 : {s : Str}} ;
lincat NP = {s : Case => Str} ;
lincat Num = {s : Str; n : Number} ;
lincat Numeral = {s : Str} ;
lincat Ord = {s : Str} ;
lincat PN = {s : Str} ;
lincat Predet = {s : Str} ;
lincat Prep = Compl ;
lincat Pron = {s : Str} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Str} ;
lincat RCl = {s : Str} ;
lincat RP = {s : Str} ;
lincat RS = {s : Str} ;
lincat S = {s : Str} ;
lincat SN = {s : Str} ;
lincat SSlash = {s : Str} ;
lincat Subj = {s : Str} ;
lincat V = Verb ;
lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat VP = {infinitive : Case => Str;
indicative : {fut : Case => Str;
pres : {progressive : Polarity => Case => Str;
noAspect : Polarity => Case => Str};
past : {perfect : Polarity => Case => Str;
progressive : Polarity => Case => Str;
noAspect : Polarity => Case => Str}};
subjunctive : Person => Case => Str} ;
lincat VPSlash = {infinitive : Str;
indicative : {fut : Str;
pres : {progressive : Polarity => Person => Number => Str;
noAspect : Polarity => Person => Number => Str};
past : {perfect : Polarity => Person => Number => Str;
progressive : Polarity => Person => Number => Str;
noAspect : Polarity => Person => Number => Str}};
imperative : Polarity => Formality => Number => Str;
subjunctive : Person => Number => Str} ;
}

View File

@@ -34,118 +34,118 @@ lin InflectionV, InflectionV2, InflectionV3, InflectionV2V, InflectionV2S,
InflectionVQ, InflectionVA = \x -> {
t="v" ;
s1="" ;
s2=heading2 "Infinitive" ++ paragraph (x.Infinitive) ++
-- tr (th "Indicative" ++ th "Fut" ++ td (x.Indicative.Fut)) ++
s2=heading2 "Infinitive" ++ paragraph (x.infinitive) ++
-- tr (th "Indicative" ++ th "Fut" ++ td (x.indicative.Fut)) ++
heading2 "Present"++
frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Neg ! P3 ! Pl))) ++
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Neg ! P3 ! Pl))) ++
heading2 "Present Progressive"++
frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Pos ! P1 ! Sg))++
tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Neg ! P3 ! Pl))) ++
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Pos ! P1 ! Sg))++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Neg ! P3 ! Pl))) ++
heading2 "Past" ++
frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Neg ! P3 ! Pl))) ++
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Neg ! P3 ! Pl))) ++
heading2 "Past Perfect" ++
frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Neg ! P3 ! Pl))) ++
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.perfect ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.perfect ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.perfect ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.perfect ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.perfect ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.perfect ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.perfect ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.perfect ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Neg ! P3 ! Pl))) ++
heading2 "Past Progressive" ++
frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Neg ! P3 ! Pl))) ++
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.progressive ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.progressive ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.progressive ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.progressive ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.progressive ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.progressive ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.progressive ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.progressive ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Neg ! P3 ! Pl))) ++
heading2 "Imperative" ++
frameTable (
tr (intagAttr "th" "rowspan=\"4\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "Informal" ++ th "Sg" ++ td (x.Imperative_Jussive ! Pos ! Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative_Jussive ! Pos ! Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.Imperative_Jussive ! Pos ! Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative_Jussive ! Pos ! Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "Informal" ++ th "Sg" ++ td (x.Imperative_Jussive ! Neg ! Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative_Jussive ! Neg ! Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.Imperative_Jussive ! Neg ! Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative_Jussive ! Neg ! Formal ! Pl))) ++
tr (intagAttr "th" "rowspan=\"4\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "Informal" ++ th "Sg" ++ td (x.imperative ! Pos ! Informal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pos ! Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.imperative ! Pos ! Formal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pos ! Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "Informal" ++ th "Sg" ++ td (x.imperative ! Neg ! Informal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Neg ! Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.imperative ! Neg ! Formal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Neg ! Formal ! Pl))) ++
heading2 "Subjunctive" ++
frameTable (
tr (intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Subjunctive ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Subjunctive ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Subjunctive ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Subjunctive ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Subjunctive ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Subjunctive ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Subjunctive ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Subjunctive ! P3 ! Pl))) ;
tr (intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.subjunctive ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.subjunctive ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.subjunctive ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.subjunctive ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P3 ! Pl))) ;
s3=[]
} ;

File diff suppressed because it is too large Load Diff

View File

@@ -81,12 +81,12 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str
param Polarity = Pos | Neg ;
oper Verb = {Infinitive: Str; Indicative: {Fut: Str; Pres: {Progressive: Polarity => Person => Number => Str; noAspect: Polarity => Person => Number => Str}; Past: {Perfect: Polarity => Person => Number => Str; Progressive: Polarity => Person => Number => Str; noAspect: Polarity => Person => Number => Str}}; Imperative_Jussive: Polarity => Formality => Number => Str; Subjunctive: Person => Number => Str} ; -- 113
oper Verb = {infinitive: Str; indicative: {fut: Str; pres: {progressive: Polarity => Person => Number => Str; noAspect: Polarity => Person => Number => Str}; past: {perfect: Polarity => Person => Number => Str; progressive: Polarity => Person => Number => Str; noAspect: Polarity => Person => Number => Str}}; imperative: Polarity => Formality => Number => Str; subjunctive: Person => Number => Str} ; -- 113
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43,f44,f45,f46,f47,f48,f49,f50,f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65,f66,f67,f68,f69,f70,f71,f72,f73,f74,f75,f76,f77,f78,f79,f80,f81,f82,f83,f84,f85,f86,f87,f88,f89,f90,f91,f92,f93,f94,f95,f96,f97,f98 ->
{ Infinitive = f1 ;
Indicative = { Fut = f2 ;
Pres = { Progressive = table {
{ infinitive = f1 ;
indicative = { fut = f2 ;
pres = { progressive = table {
Pos => table {
P1 => table {
Sg => f3 ;
@@ -163,7 +163,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Past = { Perfect = table {
past = { perfect = table {
Pos => table {
P1 => table {
Sg => f35 ;
@@ -201,7 +201,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Progressive = table {
progressive = table {
Pos => table {
P1 => table {
Sg => f51 ;
@@ -279,7 +279,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Imperative_Jussive = table {
imperative = table {
Pos => table {
Informal => table {
Sg => f83 ;
@@ -301,7 +301,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Subjunctive = table {
subjunctive = table {
P1 => table {
Sg => f91 ;
Pl => f92

View File

@@ -1,4 +1,23 @@
concrete AdjectiveMkd of Adjective = CatMkd ** open Prelude,ResMkd in {
lin AdAP a ap = {s = \\s,g => a.s ++ ap.s ! s ! g;
isPre = ap.isPre} ;
lin AdjOrd o = {s = o.s; isPre = False} ;
lin AdvAP ap adv = {
s = \\s,g => ap.s ! s ! g ++ adv.s;
isPre = False
} ;
lin CAdvAP c ap np = {s = \\s,g => c.s
++ ap.s ! s ! g ++ np.s ! RSubj;
isPre = ap.isPre} ;
lin ComparA a np = {s = \\s,g => "по" ++ BIND ++ a.s ! s ! g ++ "од" ++ np.s ! RPrep;
isPre = False} ;
lin ComplA2 a2 np = {s = \\s,g => a2.s ! s ! g ++ a2.c2.s ++ np.s ! RObj a2.c2.c;
isPre = False} ;
lin PositA a = a ** {isPre = True} ;
lin ReflA2 a2 = {s = \\s,g => a2.s ! s ! g; isPre = False} ;
lin SentAP ap sc = {s = \\s,g => ap.s ! s ! g ++ sc.s;
isPre = ap.isPre} ;
lin UseA2 a2 = {s = a2.s; isPre = True} ;
lin UseComparA a = {s = \\s,g => "по" ++ BIND ++ a.s ! s ! g; isPre = True} ;
}

View File

@@ -1,3 +1,12 @@
concrete AdverbMkd of Adverb = CatMkd ** open Prelude,ResMkd in {
lin AdAdv a a2 = {s = a.s ++ a2.s} ;
lin AdnCAdv c = {s = c.s} ;
lin ComparAdvAdj c a np = {s = c.s
++ a.s ! Indef ! np.a.g ++ np.s ! RSubj} ;
lin ComparAdvAdjS c a s = {s = c.s
++ a.s ! Indef ! GSg Masc ++ s.s} ;
lin PositAdAAdj a = {s = a.s ! Indef ! GSg Masc} ;
lin PositAdvAdj a = {s = a.s ! Indef ! GSg Masc} ;
lin PrepNP p np = {s = p.s ++ np.s ! RPrep} ;
lin SubjS s s2 = {s = s.s ++ s2.s} ;
}

View File

@@ -1,7 +1,8 @@
--# -path=.:../abstract:../common:../prelude:../api
concrete AllMkd of AllMkdAbs =
LangMkd
LangMkd,
ExtendMkd
** {
} ;

View File

@@ -1,7 +1,8 @@
--# -path=.:../abstract:../common:prelude
abstract AllMkdAbs =
Lang
Lang,
Extend
** {
} ;

View File

@@ -1,4 +1,8 @@
concrete CatMkd of Cat = CommonX ** open ResMkd, Prelude in {
concrete CatMkd of Cat = CommonX - [Temp,Tense] ** open ParamX, ResMkd, Prelude, Predef in {
lincat
Temp = {s : Str ; t : ResMkd.Tense ; a : Anteriority} ;
Tense = {s : Str ; t : ResMkd.Tense} ;
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
@@ -9,7 +13,7 @@ lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat Pron = Pron ;
lincat Pron = Pronoun ;
lincat Prep = Compl ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ;
@@ -17,33 +21,35 @@ lincat Digits = {s : Str; n : Number; tail : DTail} ;
linref N,N2,N3 = \n -> n.s ! Indef ! Sg ;
linref V, VA, VV, VS, VQ, V2, V2S, V2Q, V3, V2A, V2V =
\v -> v.present ! Imperfective ! Sg ! P3 ++
case v.isRefl of {
True => "се" ;
False => []
case v.vtype of {
VNormal => [] ;
VMedial Acc => "се" ;
VMedial Dat => "си"
} ;
linref A, A2 = \a -> a.s ! Indef ! GSg Masc ;
lincat AP = {s : Species => GenNum => Str; isPre : Bool} ;
lincat NP = {s : Role => Str; vocative: Str; g : GenNum; p : Person} ;
lincat Num = {s : Str; n : Number} ;
lincat Quant = {s : Str; sp : Species} ;
lincat Det = {s : Str; n : Number; sp : Species} ;
lincat NP = {s : Role => Str; vocative: Str; a : Agr} ;
lincat Num = {s : Str; n : NNumber} ;
lincat Quant = {s : GenNum => Str; sp : Species} ;
lincat Ord = {s : Species => GenNum => Str} ;
lincat Det, DAP = {s : Gender => Str; n : NNumber; sp : Species} ;
lincat VP = {present : Aspect => Number => Person => Str;
aorist : Number => Person => Str;
imperfect : Aspect => Number => Person => Str;
imperative : Aspect => Number => Str;
participle : {aorist : Aspect => GenNum => Str; perfect : Aspect => Str}} ;
lincat VPSlash = {present : Aspect => Number => Person => Str;
aorist : Number => Person => Str;
imperfect : Aspect => Number => Person => Str;
imperative : Aspect => Number => Str;
participle : {aorist : Aspect => GenNum => Str;
imperfect : GenNum => Str; perfect : Aspect => Str;
adjectival : Aspect => Str; adverbial : Str};
noun_from_verb : Str; isRefl : Bool; c2 : Compl} ;
lincat Cl = {present : Aspect => Str;
aorist : Str;
participle : {aorist : Aspect => Str; perfect : Aspect => Str}} ;
lincat VP = Verb ** {compl : Agr => Str} ;
lincat VPSlash = Verb ** {compl : Agr => Str; c2 : Compl} ;
lincat S,QS = {s : Str} ;
lincat RS = {s : GenNum => Str} ;
lincat Cl = {s : Order => ResMkd.Tense => Anteriority => Polarity => Str} ;
lincat QCl = {s : ResMkd.Tense => Anteriority => Polarity => Str} ;
lincat RCl = {s : GenNum => ResMkd.Tense => Anteriority => Polarity => Str} ;
lincat RP = {s : GenNum => Str} ;
lincat IP = {s : Str; g : GenNum} ;
lincat IQuant = {s : GenNum => Str} ;
lincat IDet = {s : Gender => Str; n : Number} ;
lincat Subj = {s : Str} ;
lincat Imp = {s : Polarity => GenNum => Str} ;
lincat Comp = {s : GenNum => Str} ;
lincat Conj = {s : Str; sep : Ints 3; n : Number} ;
}

View File

@@ -0,0 +1,104 @@
--# -coding=utf8
concrete ConjunctionMkd of Conjunction =
CatMkd ** open ResMkd, Coordination, Prelude, Predef in {
lin
ConjS conj ss = {
s = linCoord []!conj.sep ++ ss.s!conj.sep ++ conj.s ++ ss.s!4;
} ;
ConjAdv conj ss = {
s = linCoord []!conj.sep ++ ss.s!conj.sep ++ conj.s ++ ss.s!4;
} ;
ConjAdV conj ss = {
s = linCoord []!conj.sep ++ ss.s!conj.sep ++ conj.s ++ ss.s!4;
} ;
ConjIAdv conj ss = {
s = linCoord []!conj.sep ++ ss.s!conj.sep ++ conj.s ++ ss.s!4;
} ;
ConjNP conj ss = {
s = \\role => linCoord []!conj.sep ++ ss.s!role!conj.sep ++ conj.s ++ ss.s!role!4;
vocative = linCoord []!conj.sep ++ ss.vocative!conj.sep ++ conj.s ++ ss.vocative!4;
a = {g = conjGenNum (genNum Masc conj.n) ss.gn; p = ss.p}
} ;
ConjAP conj ss = {
s = \\sp,gn => linCoord []!conj.sep ++ ss.s!sp!gn!conj.sep ++ conj.s ++ ss.s!sp!gn!4;
isPre = ss.isPre
} ;
ConjRS conj ss = {
s = \\gn => linCoord []!conj.sep ++ ss.s!gn!conj.sep ++ conj.s ++ ss.s!gn!4;
} ;
ConjCN conj ss = {
s = \\sp,n => linCoord []!conj.sep ++ ss.s!sp!n!conj.sep ++ conj.s ++ ss.s!sp!n!4;
count_form = linCoord []!conj.sep ++ ss.count_form!conj.sep ++ conj.s ++ ss.s!Indef!Pl!4;
vocative = \\n => linCoord []!conj.sep ++ ss.vocative!n!conj.sep ++ conj.s ++ ss.vocative!n!4;
g = ss.g
} ;
-- These fun's are generated from the list cat's.
BaseS x y = {s = table {4 => y.s; _ => x.s}} ;
ConsS x xs = {s = table {4 => xs.s!4; t => x.s++linCoord bindComma!t++xs.s!t}} ;
BaseAdv x y = {s = table {4 => y.s; _ => x.s}} ;
ConsAdv x xs = {s = table {4 => xs.s!4; t => x.s++linCoord bindComma!t++xs.s!t}} ;
BaseAdV x y = {s = table {4 => y.s; _ => x.s}} ;
ConsAdV x xs = {s = table {4 => xs.s!4; t => x.s++linCoord bindComma!t++xs.s!t}} ;
BaseIAdv x y = {s = table {4 => y.s; _ => x.s}} ;
ConsIAdv x xs = {s = table {4 => xs.s!4; t => x.s++linCoord bindComma!t++xs.s!t}} ;
BaseNP x y =
{s = \\role=>table {4 => y.s!role; _ => x.s!role};
vocative = table {4 => y.vocative; _ => x.vocative};
gn = conjGenNum x.a.g y.a.g;
p = x.a.p} ;
ConsNP x xs =
{s = \\role=>table {4 => xs.s!role!4; t => x.s!role++linCoord bindComma!t++xs.s!role!t};
vocative = table {4 => xs.vocative!4; t => x.vocative++linCoord bindComma!t++xs.vocative!t};
gn = conjGenNum xs.gn x.a.g;
p = x.a.p} ;
BaseAP x y =
{s = \\sp,gn => table {4 => y.s!sp!gn; _ => x.s!sp!gn} ;
isPre = andB x.isPre y.isPre} ;
ConsAP x xs =
{s = \\sp,gn => table {4 => xs.s!sp!gn!4; t => x.s!sp!gn++linCoord bindComma!t++xs.s!sp!gn!t};
isPre = andB x.isPre xs.isPre} ;
BaseRS x y =
{s = \\gn=>table {4 => y.s!gn; _ => x.s!gn}} ;
ConsRS x xs =
{s = \\gn=>table {4 => xs.s!gn!4; t => x.s!gn++linCoord bindComma!t++xs.s!gn!t}} ;
BaseCN x y =
{s = \\sp,n=>table {4 => y.s!sp!n; _ => x.s!sp!n};
count_form = table {4 => y.count_form; t => x.count_form};
vocative = \\n=>table {4 => y.vocative!n; t => x.vocative!n};
g = x.g} ;
ConsCN x xs =
{s = \\sp,n=>table {4 => xs.s!sp!n!4; t => x.s!sp!n++linCoord bindComma!t++xs.s!sp!n!t};
count_form = table {4 => xs.count_form!4; t => x.count_form++linCoord bindComma!t++xs.count_form!t};
vocative = \\n=>table {4 => xs.vocative!n!4; t => x.vocative!n++linCoord bindComma!t++xs.vocative!n!t};
g = x.g} ;
lincat
[S] = {s : Ints 4 => Str} ;
[Adv] = {s : Ints 4 => Str} ;
[AdV] = {s : Ints 4 => Str} ;
[IAdv] = {s : Ints 4 => Str} ;
[NP] = {s : Role => Ints 4 => Str; vocative : Ints 4 => Str; gn : GenNum; p : Person} ;
[AP] = {s : Species => GenNum => Ints 4 => Str; isPre : Bool} ;
[RS] = {s : GenNum => Ints 4 => Str} ;
[CN] = {s : Species => Number => Ints 4 => Str ;
count_form : Ints 4 => Str ;
vocative : Number => Ints 4 => Str ;
g : Gender} ;
}

View File

@@ -121,7 +121,7 @@ lin
heading3 ("Партицип") ++
adjForms (v.participle.aorist ! Imperfective) ++
tag "br" ++
adjForms v.participle.imperfect ++
adjForms (v.participle.imperfect ! Imperfective) ++
heading2 ("Свършен вид") ++
heading3 ("Изявително наклонение") ++
heading4 ("Сегашно време") ++
@@ -134,6 +134,8 @@ lin
imperative (v.imperative ! Perfective) ++
heading3 ("Партицип") ++
adjForms (v.participle.aorist ! Perfective) ++
tag "br" ++
adjForms (v.participle.imperfect ! Perfective) ++
heading1 ("Именка") ++
v.noun_from_verb ;
s3= ""

View File

@@ -0,0 +1,38 @@
--# -path=.:../abstract:../common:prelude
concrete ExtendMkd of Extend = CatMkd ** open ResMkd, ParadigmsMkd, StructuralMkd in {
lin
CompoundN n1 n2 =
let comp : Species => Number => Str
= \\sp,n => case n1.relType of {
Pref => n1.rel ! sp ! genNum n2.g n ++ n2.s ! sp ! n ;
AdjMod => n1.rel ! sp ! genNum n2.g n ++ n2.s ! Indef ! n ;
AdvMod => n2.s ! sp ! n ++ n1.rel ! sp ! genNum n2.g n
} ;
voc : Number => Str
= \\n => case n1.relType of {
Pref => n1.rel ! Indef ! genNum n2.g n ++ n2.vocative ! n ;
AdjMod => n1.rel ! Indef ! genNum n2.g n ++ n2.vocative ! n ;
AdvMod => n2.vocative ! n ++ n1.rel ! Indef ! genNum n2.g n
}
in {
s = comp ;
count_form = comp ! Indef ! Pl ;
vocative = voc ;
rel = \\sp,n => "на" ++ comp ! sp ! Sg ; relType = AdvMod ;
g = n2.g
} ;
iFem_Pron = mkPron "јас" "мене" "ме" "мене" "ми" "мене" "мој" "мојот" "моја" "мојата" "мое" "моето" "мои" "моите" "ми" (GSg Fem) P1 ;
youFem_Pron = mkPron "ти" "тебе" "те" "тебе" "ти" "тебе" "твој" "твојот" "твоја" "твојата" "твое" "твоето" "твои" "твоите" "ти" (GSg Fem) P2 ;
weFem_Pron = we_Pron ;
youPlFem_Pron = youPl_Pron ;
theyFem_Pron = they_Pron ;
youPolFem_Pron = mkPron "вие" "вас" "ве" "вам" "ви" "вас" "ваш" "вашиот" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" "ви" (GSg Fem) P2 ;
youPolPl_Pron = youPol_Pron ;
youPolPlFem_Pron = youPol_Pron ;
lin TPastSimple = {s = []} ** {t = VPastSimple} ; --# notpresent
}

View File

@@ -1,2 +1,2 @@
concrete GrammarMkd of Grammar = VerbMkd,SentenceMkd,NounMkd,AdverbMkd,AdjectiveMkd,NumeralMkd,PhraseMkd,TextX,StructuralMkd,TenseX ** {
concrete GrammarMkd of Grammar = NamesMkd,VerbMkd,SentenceMkd,QuestionMkd,NounMkd,AdverbMkd,AdjectiveMkd,IdiomMkd,NumeralMkd,PhraseMkd,RelativeMkd,TextMkd,StructuralMkd,TenseMkd,ConjunctionMkd ** {
}

View File

@@ -0,0 +1,52 @@
concrete IdiomMkd of Idiom = CatMkd ** open Prelude,ResMkd in {
lin CleftAdv a s = {s = \\t,a2,p,o => a.s ++ s.s} ;
lin CleftNP np rs = {s = \\t,a,p,o => np.s ! RSubj
++ rs.s ! np.a.g} ;
lin ExistIP ip = {s = \\t,a,p => ip.s} ;
lin ExistIPAdv ip a = {s = \\t,a2,p => ip.s ++ a.s} ;
lin ExistNP np = {s = \\t,a,p,o => np.s ! RSubj} ;
lin ExistNPAdv np a = {s = \\t,a2,p,o => np.s ! RSubj ++ a.s} ;
lin GenericCl vp = {s = \\t,a,p,o => vp.present ! Imperfective ! Sg
! P1} ;
lin ImpP3 np vp = {s = np.s ! RSubj
++ vp.present ! Imperfective ! Sg ! np.a.p} ;
lin ImpPl1 vp = {s = vp.present ! Imperfective ! Sg ! P1} ;
lin ImpersCl vp = {s = \\t,a,p,o => vp.present ! Imperfective ! Sg
! P1} ;
lin ProgrVP vp = vp ** {
present = \\a,n,p => vp.present ! Imperfective ! n ! p ;
imperfect = \\a,n,p => vp.imperfect ! Imperfective ! n ! p ;
imperative = \\a,n => vp.imperative ! Imperfective ! n ;
participle = {aorist = \\a,gn => vp.participle.aorist ! Imperfective ! gn ;
perfect = \\a => vp.participle.perfect ! Imperfective ;
imperfect = \\a => vp.participle.imperfect ! Imperfective ;
adjectival = vp.participle.adjectival ;
adverbial = vp.participle.adverbial}
} ;
lin SelfAdVVP vp = {present = \\a,n,p => vp.present ! a ! n ! p;
aorist = \\n,p => vp.aorist ! n ! p;
imperfect = \\a,n,p => vp.imperfect ! a ! n ! p;
imperative = \\a,n => vp.imperative ! a ! n;
participle = {aorist = \\a,g => vp.participle.aorist ! a ! g;
imperfect = \\a,g => vp.participle.imperfect ! a ! g;
perfect = \\a => vp.participle.perfect ! a;
adjectival = \\a => vp.participle.adjectival ! a;
adverbial = vp.participle.adverbial};
noun_from_verb = vp.noun_from_verb; vtype = vp.vtype;
compl = \\v => vp.compl ! {g = GSg Masc; p = P1}} ;
lin SelfAdvVP vp = {present = \\a,n,p => vp.present ! a ! n ! p;
aorist = \\n,p => vp.aorist ! n ! p;
imperfect = \\a,n,p => vp.imperfect ! a ! n ! p;
imperative = \\a,n => vp.imperative ! a ! n;
participle = {aorist = \\a,g => vp.participle.aorist ! a ! g;
imperfect = \\a,g => vp.participle.imperfect ! a ! g;
perfect = \\a => vp.participle.perfect ! a;
adjectival = \\a => vp.participle.adjectival ! a;
adverbial = vp.participle.adverbial};
noun_from_verb = vp.noun_from_verb; vtype = vp.vtype;
compl = \\v => vp.compl ! {g = GSg Masc; p = P1}} ;
lin SelfNP np = {s = \\r => np.s ! r; vocative = np.vocative;
a = {g = np.a.g; p = np.a.p}} ;
}

View File

@@ -5,7 +5,14 @@ lin
airplane_N = mkN001 "авион" ;
apple_N = mkN012 "јаболко" ;
bad_A = mkA004 "лош" ;
good_A = mkA021 "добар" ;
close_V2 = mkV2 (dualV (mkV "затвара") (mkV "затвори")) ;
die_V = dualV (mkV002 "умира") (mkV021 "умре") ;
door_N = mkN008 "врата" ;
factory_N = mkN008 "фабрика" ;
fish_N = mkN "риба" ;
good_A = mkA021 "добар" ;
play_V = mkV001 "игра" ;
man_N = mkN001 "маж" ;
woman_N = mkN "жена" ;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,18 @@
concrete NamesMkd of Names = CatMkd ** open Prelude,ResMkd in {
lin AdjLN ap ln = {s = ap.s ! Indef ! GSg Masc ++ ln.s} ;
lin FemaleSurname sn = {s = \\r => sn.s; vocative = sn.s;
a = {g = GSg Masc; p = P1}} ;
lin FullName gn sn = {s = \\r => gn.s ++ sn.s;
vocative = gn.s ++ sn.s; a = {g = GSg Masc; p = P1}} ;
lin GivenName gn = {s = \\r => gn.s; vocative = gn.s;
a = {g = GSg Masc; p = P1}} ;
lin InLN ln = {s = ln.s} ;
lin MaleSurname sn = {s = \\r => sn.s; vocative = sn.s;
a = {g = GSg Masc; p = P1}} ;
lin PlSurname sn = {s = \\r => sn.s; vocative = sn.s;
a = {g = GSg Masc; p = P1}} ;
lin PlainLN ln = {s = \\r => ln.s; vocative = ln.s;
a = {g = GSg Masc; p = P1}} ;
lin UseLN ln = {s = \\r => ln.s; vocative = ln.s;
a = {g = GSg Masc; p = P1}} ;
}

View File

@@ -1,4 +1,5 @@
concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in {
lin AdNum a c = {s = a.s ++ c.s} ;
lin AdjCN ap cn = {
s = case ap.isPre of {
True => \\s,n => ap.s ! s
@@ -21,27 +22,133 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in {
} ++
cn.vocative ! n;
count_form = ap.s ! Indef ! GPl ++ cn.count_form; g = cn.g} ;
lin AdjDAP d ap = {
s = \\g => d.s ! g ++ ap.s ! Indef ! genNum g (nnum2num d.n) ;
n = d.n ;
sp = d.sp
} ;
lin AdvCN cn adv = {
s = \\s,n => cn.s ! s ! n ++ adv.s;
count_form = cn.count_form ++ adv.s;
vocative = \\n => cn.vocative ! n ++ adv.s;
g = cn.g
} ;
lin DefArt = {s = []; sp = Def Unspecified} ;
lin AdvNP np a = {s = \\r => np.s ! r ++ a.s;
vocative = np.vocative ++ a.s; a = np.a} ;
lin ApposCN cn np = {s = \\s,n => cn.s ! s ! n ++ np.s ! RSubj;
count_form = cn.count_form ++ np.s ! RSubj;
vocative = \\n => cn.vocative ! n ++ np.vocative; g = cn.g} ;
lin ComplN2 n2 np = {s = \\s,n => n2.s ! s ! n ++ n2.c2.s ++ np.s ! RObj n2.c2.c;
count_form = n2.count_form ++ n2.c2.s ++ np.s ! RObj n2.c2.c;
vocative = \\n => n2.vocative ! n ++ n2.c2.s ++ np.s ! RObj n2.c2.c;
g = n2.g} ;
lin ComplN3 n3 np = {s = \\s,n => n3.s ! s ! n ++ n3.c2.s ++ np.s ! RObj n3.c2.c;
count_form = n3.count_form ++ n3.c2.s ++ np.s ! RObj n3.c2.c;
vocative = \\n => n3.vocative ! n ++ n3.c2.s ++ np.s ! RObj n3.c2.c;
rel = \\s,g => n3.s ! s ! genNum2num g ++ n3.c2.s ++ np.s ! RObj n3.c2.c;
relType = AdvMod;
g = n3.g;
c2 = n3.c3} ;
lin CountNP d np = {s = \\r => d.s ! Masc ++ np.s ! r;
vocative = d.s ! Masc ++ np.vocative;
a = np.a} ;
lin DefArt = {s = \\_=>[]; sp = Def Unspecified} ;
lin DetCN det cn = {
s = \\r => det.s ++ cn.s ! det.sp ! det.n;
vocative = det.s ++ cn.vocative ! det.n;
g = case det.n of {
Sg => GSg cn.g;
Pl => GPl
} ;
p = P3;
s = \\r => case det.n of {
NNum n => det.s ! cn.g ++ cn.s ! det.sp ! n;
NCountable => det.s ! cn.g ++ cn.count_form
} ;
vocative = det.s ! cn.g ++ cn.vocative ! nnum2num det.n ;
a = {g = genNum cn.g (nnum2num det.n) ;
p = P3};
} ;
lin DetQuant det num = {s = det.s ++ num.s; n = num.n;
sp = det.sp} ;
lin IndefArt = {s = []; sp = Indef} ;
lin NumPl = {s = []; n = Pl} ;
lin NumSg = {s = []; n = Sg} ;
lin DetDAP d = d ;
lin DetNP d = {s = \\r => d.s ! Masc; vocative = d.s ! Masc;
a = {g = GSg Masc; p = P1}} ;
lin DetQuant q num = {s = \\g => q.s ! genNum g (nnum2num num.n) ++ num.s;
n = num.n;
sp = q.sp} ;
lin DetQuantOrd q n o = {
s = \\g => q.s ! GSg Masc ++ n.s ++ o.s ! q.sp ! genNum g (nnum2num n.n);
n = n.n;
sp = Indef
} ;
lin ExtAdvNP np a = {
s = \\r => np.s ! r ++ SOFT_BIND++"," ++ a.s;
vocative = np.vocative ++ SOFT_BIND++"," ++ a.s;
a = np.a
} ;
lin IndefArt = {s = \\_=>[]; sp = Indef} ;
lin MassNP cn = {s = \\r => cn.s ! Indef ! Sg;
vocative = cn.vocative ! Sg;
a = {g = GSg cn.g; p = P3}} ;
lin NumCard c = {s = c.s; n = NNum Sg} ;
lin NumDecimal d = {s = d.s} ;
lin NumDigits d = {s = d.s} ;
lin NumNumeral n = {s = n.s} ;
lin NumPl = {s = []; n = NNum Pl} ;
lin NumSg = {s = []; n = NNum Sg} ;
lin UseN s = s ;
lin UsePron p = p ** {vocative=p.s ! RSubj} ;
lin RelNP np rs = {
s = \\r => np.s ! r ++ rs.s ! np.a.g ;
vocative = np.vocative ++ rs.s ! np.a.g ;
a = np.a;
} ;
lin OrdDigits d = {s = \\s,gn => d.s} ;
lin OrdNumeral n = {s = \\s,gn => n.s} ;
lin OrdNumeralSuperl n a = {s = \\s,gn => n.s ++ "нај" ++ BIND ++ a.s ! s ! gn} ;
lin OrdSuperl a = {s = \\s,gn => "нај" ++ BIND ++ a.s ! s ! gn} ;
lin PPartNP np v2 = {s = \\r => np.s ! r
++ v2.present ! Imperfective ! Sg ! np.a.p;
vocative = np.vocative ++ v2.present ! Imperfective ! Sg ! np.a.p;
a = {g = np.a.g; p = np.a.p}} ;
lin PartNP cn np = {s = \\s,n => cn.s ! s ! n ++ np.s ! RSubj;
count_form = cn.count_form ++ np.s ! RSubj;
vocative = \\n => cn.vocative ! n ++ np.vocative; g = cn.g} ;
lin PossNP cn np = {
s = \\s,n => cn.s ! s ! n ++ "на" ++ np.s ! RObj Acc;
count_form = cn.count_form ++ "на" ++ np.s ! RObj Acc;
vocative = \\n => cn.vocative ! n ++ "на" ++ np.s ! RObj Acc;
g = cn.g
} ;
lin PossPron p = {s = p.poss ! Def Unspecified; sp = Indef} ;
lin PredetNP p np = {
s = \\r => p.s ++ np.s ! r;
vocative = p.s ++ np.vocative;
a = np.a
} ;
lin QuantityNP d mu =
let s = case mu.isPre of {
True => mu.s ++ d.s ;
False => d.s ++ mu.s
}
in { s = \\r => s;
vocative = s;
a = {g = GSg Masc; p = P3}
} ;
lin RelCN cn rs = {
s = \\sp,n => cn.s ! sp ! n ++ rs.s ! genNum cn.g n ;
count_form = cn.count_form ++ rs.s ! GPl ;
vocative = \\n => cn.vocative ! n ++ rs.s ! genNum cn.g n ;
g = cn.g;
} ;
lin SentCN cn sc = {s = \\s,n => cn.s ! s ! n ++ sc.s;
count_form = cn.count_form ++ sc.s;
vocative = \\n => cn.vocative ! n ++ sc.s; g = cn.g} ;
lin Use2N3 n3 = {s = \\s,n => n3.s ! s ! n;
count_form = n3.count_form; vocative = \\n => n3.vocative ! n;
rel = \\s,g => n3.rel ! s ! g; relType = n3.relType; g = n3.g;
c2 = {s = n3.c2.s; c = n3.c2.c}} ;
lin Use3N3 n3 = {s = \\s,n => n3.s ! s ! n;
count_form = n3.count_form; vocative = \\n => n3.vocative ! n;
rel = \\s,g => n3.rel ! s ! g; relType = n3.relType; g = n3.g;
c2 = {s = n3.c2.s; c = n3.c2.c}} ;
lin UseN2 n2 = n2 ;
lin UsePN pn = {
s = \\r => pn.s;
vocative = pn.s;
a = {g = GSg Masc; p = P3}
} ;
}

View File

@@ -1051,7 +1051,9 @@ mkV = overload {
mkV : Str -> Str -> Str -> V = reg3V -- present;Sg;P3 participle;adverbial participle;adjectival
} ;
reflV : V -> V = \v -> v ** {isRefl=True} ;
accusative : Case = Acc ;
dative : Case = Dat ;
medialV : V -> Case -> V = \v,c -> v ** {vtype=VMedial c} ;
dualV : V -> V -> V = \impf,perf -> lin V
{ present = table {
@@ -1071,7 +1073,10 @@ dualV : V -> V -> V = \impf,perf -> lin V
Imperfective => impf.participle.aorist ! Imperfective ;
Perfective => perf.participle.aorist ! Perfective
} ;
imperfect = impf.participle.imperfect ;
imperfect = table {
Imperfective => impf.participle.imperfect ! Imperfective ;
Perfective => perf.participle.imperfect ! Perfective
} ;
perfect = table {
Imperfective => impf.participle.perfect ! Imperfective ;
Perfective => perf.participle.perfect ! Perfective
@@ -1083,9 +1088,26 @@ dualV : V -> V -> V = \impf,perf -> lin V
adverbial = impf.participle.adverbial
} ;
noun_from_verb = impf.noun_from_verb ;
isRefl = impf.isRefl
vtype = impf.vtype
} ;
compoundV = overload {
compoundV : V -> Str -> V = \v,s -> lin V {
present = \\a,n,p => v.present ! a ! n ! p ++ s ;
aorist = \\n,p => v.aorist ! n ! p ++ s ;
imperfect = \\a,n,p => v.imperfect ! a ! n ! p ++ s ;
imperative = \\a,n => v.imperative ! a ! n ++ s ;
participle = { aorist = \\a,gn => v.participle.aorist ! a ! gn ++ s ;
imperfect = \\a,gn => v.participle.imperfect ! a ! gn ++ s ;
perfect = \\a => v.participle.perfect ! a ++ s ;
adjectival = \\a => v.participle.adjectival ! a ++ s ;
adverbial = v.participle.adverbial
} ;
noun_from_verb = v.noun_from_verb ++ s ;
vtype = v.vtype
}
} ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> lin V2 v ** {c2=noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 v ** {c2=p} ;
@@ -1102,13 +1124,13 @@ mkV2V = overload {
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> lin V2S v ** {c2,c3=noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p2,p3 -> lin V2S v ** {c2=p2; c3=p3} ;
mkV2S : V -> V2S = \v -> lin V2S v ** {c2=noPrep} ;
mkV2S : V -> Prep -> V2S = \v,p2 -> lin V2S v ** {c2=p2} ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> lin V2Q v ** {c2,c3=noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p2,p3 -> lin V2Q v ** {c2=p2; c3=p3} ;
mkV2Q : V -> V2Q = \v -> lin V2Q v ** {c2=noPrep} ;
mkV2Q : V -> Prep -> V2Q = \v,p2 -> lin V2Q v ** {c2=p2} ;
} ;
mkV2A = overload {
@@ -1139,7 +1161,70 @@ mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s} ;
noPrep : Prep = lin Prep {s=""} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
noPrep : Prep = lin Prep {s=""; c=Acc} ;
mkIP : Str -> GenNum -> IP = \s,g -> lin IP {s=s; g=g} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIQuant : Str -> Str -> Str -> Str -> IQuant = \m,f,n,pl ->
lin IQuant {
s=table {
GSg Masc => m;
GSg Fem => f;
GSg Neuter => n;
GPl => pl
}
} ;
mkIDet = overload {
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_=>s; n=Pl} ;
mkIDet : Str -> Str -> Str -> IDet = \m,f,n ->
lin IDet {
s=table {
Masc => m ;
Fem => f ;
Neuter => n
} ;
n=Sg;
} ;
} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre = False} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Str -> Str -> Str -> Quant = \m,f,n,pl ->
lin Quant {
s=table {
GSg Masc => m;
GSg Fem => f;
GSg Neuter => n;
GPl => pl
} ;
sp=Indef
} ;
mkDet = overload {
mkDet : Str -> Det = \s -> lin Det {s=\\_=>s; n=NNum Pl; sp=Indef} ;
mkDet : Str -> Str -> Str -> Det = \m,f,n ->
lin Det {
s=table {
Masc => m ;
Fem => f ;
Neuter => n
} ;
n=NNum Sg;
sp=Indef
} ;
} ;
mkConj : Str -> Number -> Conj =
\s,n -> lin Conj {s = s; sep = 3; n = n} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkACard : Str -> ACard = \s -> lin ACard {s=s} ;
}

View File

@@ -1,14 +1,21 @@
concrete PhraseMkd of Phrase = CatMkd ** open Prelude, ResMkd in {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttInterj i = i ;
NoPConj = {s = []} ;
NoVoc = {s = []} ;
VocNP np = {s = SOFT_BIND++"," ++ np.vocative} ;
lin NoPConj = {s : Str = []} ;
lin NoVoc = {s : Str = []} ;
lin PConjConj c = {s = c.s} ;
lin PhrUtt pconj utt voc = {s : Str = pconj.s ++ utt.s ++ voc.s} ;
lin UttAP ap = {s = ap.s ! Indef ! GSg Masc} ;
lin UttAdv a = {s = a.s} ;
lin UttCN cn = {s = cn.s ! Indef ! Sg} ;
lin UttCard c = {s = c.s} ;
lin UttIAdv i = {s = i.s} ;
lin UttIP ip = {s = ip.s} ;
lin UttImpPl p i = {s = p.s ++ i.s ! p.p ! GPl} ;
lin UttImpPol p i = {s = p.s ++ i.s ! p.p ! GPl} ;
lin UttImpSg p i = {s = p.s ++ i.s ! p.p ! GSg Masc} ;
lin UttInterj i = i ;
lin UttNP np = {s = np.s ! RSubj} ;
lin UttQS s = s ;
lin UttS s = s ;
lin UttVP vp = {s = "да" ++ vp.present ! Perfective ! Sg ! P3 ++ vp.compl ! {g=GSg Masc; p=P3}} ;
lin VocNP np = {s : Str = SOFT_BIND ++ "," ++ np.vocative} ;
}

View File

@@ -0,0 +1,22 @@
concrete QuestionMkd of Question = CatMkd ** open Prelude,ResMkd in {
lin AdvIAdv i a = {s = i.s ++ a.s} ;
lin AdvIP ip a = {s = ip.s ++ a.s; g = ip.g} ;
lin CompIAdv i = {s = i.s} ;
lin CompIP ip = {s = ip.s} ;
lin IdetCN idet cn = {
s = idet.s ! cn.g ++ cn.s ! Indef ! idet.n;
g = genNum cn.g idet.n
} ;
lin IdetIP idet = {s = idet.s ! Masc; g = genNum Masc idet.n} ;
lin IdetQuant i n = {
s = \\g => i.s ! GSg Masc ++ n.s;
n = Sg
} ;
lin PrepIP p ip = {s : Str = p.s ++ ip.s} ;
lincat QVP = {s : Str} ;
lin QuestCl cl = {s = cl.s ! Quest} ;
lin QuestIAdv i cl = {s = \\t,a,p => i.s ++ cl.s ! Main ! t ! a ! p} ;
lin QuestIComp i np = {s = \\t,a,p => i.s ++ np.s ! RSubj} ;
lin QuestSlash ip c = {s = \\t,a,p => ip.s ++ c.s} ;
lin QuestVP ip vp = {s = mkClause ip.s {g=ip.g; p=P3} vp ! Main} ;
}

View File

@@ -0,0 +1,15 @@
concrete RelativeMkd of Relative = CatMkd ** open Prelude,ResMkd in {
lin FunRP p np rp = {s = \\g => p.s ++ np.s ! RSubj ++ rp.s ! g} ;
lin IdRP = {s = table {
GSg Masc => "кој" ;
GSg Fem => "која" ;
GSg Neuter => "кое" ;
GPl => "кои"
}
} ;
lin RelCl cl = {s = \\g => cl.s ! Main} ;
lin RelSlash rp c = {s = \\g,t,a,p => rp.s ! g ++ c.s} ;
lin RelVP rp vp = {
s = \\gn => mkClause (rp.s ! gn) {g=gn; p=P3} vp ! Main
} ;
}

View File

@@ -1,12 +1,16 @@
resource ResMkd = ParamX [DTail,T1,T2,T3,inc] ** open Prelude in {
resource ResMkd = ParamX - [Tense] ** open Prelude, Predef in {
oper Compl = {s : Str} ;
oper Compl = {s : Str; c : Case} ;
param Species = Indef | Def Distance ;
param Distance = Unspecified | Distal | Proximal ;
param Number = Sg | Pl ;
param NRelType = Pref | AdjMod | AdvMod ;
NNumber =
NNum Number
| NCountable
;
param Gender = Masc | Fem | Neuter ;
oper Agr = {g : GenNum; p : Person} ;
oper Noun = {s: Species => Number => Str; count_form: Str; vocative: Number => Str; rel: Species => GenNum => Str; relType : NRelType; g: Gender} ; -- 24855
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,g ->
@@ -40,9 +44,18 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
param Aspect = Imperfective | Perfective ;
param Person = P1 | P3 | P2 ;
param GenNum = GSg Gender | GPl ;
oper Verb = {present: Aspect => Number => Person => Str; aorist: Number => Person => Str; imperfect: Aspect => Number => Person => Str; imperative: Aspect => Number => Str; participle: {aorist: Aspect => GenNum => Str; imperfect: GenNum => Str; perfect: Aspect => Str; adjectival: Aspect => Str; adverbial: Str}; noun_from_verb: Str; isRefl: Bool} ; -- 8174
param VType = VNormal | VMedial Case ;
Tense = VPresent
| VPastSimple --# notpresent
| VPastImperfect --# notpresent
| VFut --# notpresent
| VCond --# notpresent
;
Order = Main | Quest ;
oper Verb = {present: Aspect => Number => Person => Str; aorist: Number => Person => Str; imperfect: Aspect => Number => Person => Str; imperative: Aspect => Number => Str; participle: {aorist: Aspect => GenNum => Str; imperfect: Aspect => GenNum => Str; perfect: Aspect => Str; adjectival: Aspect => Str; adverbial: Str}; noun_from_verb: Str; vtype: VType} ; -- 8174
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32 ->
{ present = \\_ =>
@@ -95,7 +108,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ :
GSg Neuter => f23 ;
GPl => f24
} ;
imperfect = table {
imperfect = \\_ =>
table {
GSg Masc => f25 ;
GSg Fem => f26 ;
GSg Neuter => f27 ;
@@ -106,7 +120,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ :
adverbial = f31
} ;
noun_from_verb = f32 ;
isRefl = False
vtype = VNormal
} ;
@@ -153,12 +167,175 @@ oper mkAdv : Str -> Adv =
param Case = Acc | Dat ;
param Role = RSubj | RObj Case | RPrep ;
oper Pron = {s : Role => Str; clitic : Case => Str; g : GenNum; p : Person} ;
oper Pronoun = {
s : Role => Str;
clitic : Case => Str;
poss : Species => GenNum => Str ;
poss_clitic : Str ;
a : {g : GenNum; p : Person}
} ;
conjGenNum : GenNum -> GenNum -> GenNum = \a,b ->
case <a,b> of {
<GSg _,GSg g> => GSg g ;
_ => GPl
} ;
genNum : Gender -> Number -> GenNum = \g,n ->
case n of {
Sg => GSg g ;
Pl => GPl
} ;
nnum2num : NNumber -> Number = \n ->
case n of {
NNum n => n ;
NCountable => Pl
} ;
genNum2num : GenNum -> Number = \gn ->
case gn of {
GSg _ => Sg ;
GPl => Pl
} ;
auxBe = {
present : Number => Person => Str
= table {
Sg => table {
P1 => "сум" ;
P2 => "си" ;
P3 => "е"
} ;
Pl => table {
P1 => "сме" ;
P2 => "сте" ;
P3 => "се"
}
} ;
imperfect : Number => Person => Str
= table {
Sg => table {
P1 => "бев" ;
P2 => "беше" ;
P3 => "беше"
} ;
Pl => table {
P1 => "бевме" ;
P2 => "бевте" ;
P3 => "беа"
}
} ;
imperative : Number => Str =
table {
Sg => "биди" ;
Pl => "бидете"
} ;
participle = {
aorist : GenNum => Str
= table {
GSg Masc => "бил" ;
GSg Fem => "била" ;
GSg Neuter => "било" ;
GPl => "биле"
} ;
imperfect : GenNum => Str
= table {
GSg Masc => "бидел" ;
GSg Fem => "бидела" ;
GSg Neuter => "бидело" ;
GPl => "биделе"
}
}
} ;
auxHave = {
present : Number => Person => Str
= table {
Sg => table {
P1 => "имам" ;
P2 => "имаш" ;
P3 => "има"
} ;
Pl => table {
P1 => "имаме" ;
P2 => "имате" ;
P3 => "имаат"
}
} ;
imperfect : Number => Person => Str
= table {
Sg => table {
P1 => "имав" ;
P2 => "имаше" ;
P3 => "имаше"
} ;
Pl => table {
P1 => "имавме" ;
P2 => "имавте" ;
P3 => "имаа"
}
} ;
imperative : Number => Str =
table {
Sg => "имај" ;
Pl => "имајте"
} ;
participle = {
imperfect : GenNum => Str
= table {
GSg Masc => "имал" ;
GSg Fem => "имала" ;
GSg Neuter => "имало" ;
GPl => "имале"
}
}
} ;
mkClause : Str -> Agr -> Verb ** {compl : Agr => Str} -> Order => Tense => Anteriority => Polarity => Str
= \subj,agr,vp ->
let n = case agr.g of {
GSg _ => Sg ;
GPl => Pl
}
in \\o,t,a,p =>
case <t,a> of {
<VPresent,Simul> => subj ++ neg ++ se ++ vp.present ! Imperfective ! n ! agr.p ++ li ++ vp.compl ! agr ;
<VPresent,Anter> => case o of {
Main => subj ++ neg ++ auxBe.present ! n ! agr.p ++ se ++ vp.participle.imperfect ! Perfective ! agr.g ++ vp.compl ! agr ;
Quest => subj ++ neg ++ se ++ vp.participle.imperfect ! Perfective ! agr.g ++ li ++ auxBe.present ! n ! agr.p ++ vp.compl ! agr
} ;
<VPastSimple,Simul> => subj ++ neg ++ se ++ vp.aorist ! n ! agr.p ++ li ++ vp.compl ! agr ;
<VPastSimple,Anter> => subj ++ neg ++ se ++ auxBe.imperfect ! n ! agr.p ++ li ++ vp.participle.imperfect ! Perfective ! agr.g ++ vp.compl ! agr ;
<VPastImperfect,Simul> => subj ++ neg ++ se ++ vp.imperfect ! Perfective ! n ! agr.p ++ li ++ vp.compl ! agr ;
<VPastImperfect,Anter> => subj ++ neg ++ se ++ auxBe.imperfect ! n ! agr.p ++ li ++ vp.participle.imperfect ! Perfective ! agr.g ++ vp.compl ! agr ;
<VFut, Simul> => subj ++ fut.p1 ++ se ++ vp.present ! Perfective ! n ! agr.p ++ fut.p2 ++ vp.compl ! agr ;
<VFut, Anter> => subj ++ fut.p1 ++ se ++ auxHave.present ! n ! agr.p ++ fut.p2 ++ vp.participle.perfect ! Perfective ++ vp.compl ! agr ;
<VCond,Simul> => subj ++ neg ++ "би" ++ li ++ se ++ vp.participle.imperfect ! Perfective ! agr.g ++ vp.compl ! agr ;
<VCond,Anter> => subj ++ neg ++ "би" ++ li ++ auxHave.participle.imperfect ! agr.g ++ se ++ vp.participle.perfect ! Perfective ++ vp.compl ! agr
} where {
neg = case p of {
Pos => "" ;
Neg => "не"
} ;
fut = case <p,o> of {
<Pos,Main> => <"ке",[]> ;
<Neg,Main> => <"нема да",[]> ;
<Pos,Quest> => <"ке","ли"> ;
<Neg,Quest> => <"нема ли да",[]>
} ;
li = case o of {
Main => "" ;
Quest => "ли"
} ;
se = case vp.vtype of {
VNormal => "" ;
VMedial Acc => "се" ;
VMedial Dat => "си"
}
} ;
linCoord : Str -> Ints 4 => Str ;
linCoord comma = table {0 => "и"; 1=>"или"; 2=>"ниту"; 3=>comma; 4=>[]} ;
}

View File

@@ -1,13 +1,31 @@
concrete SentenceMkd of Sentence = CatMkd ** open Prelude,ResMkd in {
lin PredVP np vp =
let n = case np.g of {
GSg _ => Sg ;
GPl => Pl
}
in {present = \\a => np.s ! RSubj ++ vp.present ! a ! n ! np.p ;
aorist = np.s ! RSubj ++ vp.aorist ! n ! np.p ;
participle = {aorist = \\a => np.s ! RSubj ++ vp.participle.aorist ! a ! np.g;
perfect = \\a => np.s ! RSubj ++ vp.participle.perfect ! a}} ;
lin AdvImp a i = {s = \\p,gn => a.s ++ i.s ! p ! gn} ;
lin AdvS a s = {s = a.s ++ s.s} ;
lin AdvSlash c a = {s = c.s ++ a.s} ;
lin EmbedQS qs = {s = qs.s} ;
lin EmbedS s = {s = s.s} ;
lin EmbedVP vp = {s = "да" ++ vp.present ! Perfective ! Sg ! P3 ++ vp.compl ! {g=GSg Masc; p=P3}} ;
lin ExtAdvS a s = {s = a.s ++ s.s} ;
lin ImpVP vp = {
s = \\p,gn=>case p of {
Pos => vp.imperative ! Perfective ! genNum2num gn ;
Neg => "не" ++ vp.imperative ! Imperfective ! genNum2num gn
} ++
vp.compl ! {g=gn; p=P2}
} ;
lin PredSCVP sc vp = {s = \\t,a,p,o => sc.s
++ vp.present ! Imperfective ! Sg ! P1} ;
lin PredVP np vp = {s = mkClause (np.s ! RSubj) np.a vp} ;
lin RelS s rs = {s = s.s ++ rs.s ! GSg Masc} ;
lin SSubjS s s2 s3 = {s = s.s ++ s2.s ++ s3.s} ;
lin SlashPrep cl p = {s = cl.s ! Main ! VPresent ! Simul ! Pos
++ p.s} ;
lin SlashVP np v = {s = np.s ! RSubj
++ v.present ! Imperfective ! Sg ! np.a.p} ;
lin SlashVS np vs s = {s = np.s ! RSubj
++ vs.present ! Imperfective ! Sg ! np.a.p ++ s.s} ;
lin UseCl t p cl = {s = t.s ++ p.s ++ cl.s ! Main ! t.t ! t.a ! p.p} ;
lin UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ;
lin UseRCl t p cl = {s = \\gn => t.s ++ p.s ++ cl.s ! gn ! t.t ! t.a ! p.p} ;
lin UseSlash t p c = {s = t.s ++ p.s ++ c.s} ;
}

View File

@@ -1,13 +1,29 @@
concrete StructuralMkd of Structural = CatMkd ** open ResMkd,MorphoMkd in {
concrete StructuralMkd of Structural = CatMkd ** open ResMkd,MorphoMkd,ParadigmsMkd in {
lin i_Pron = mkPron "јас" "мене" "ме" "мене" "ми" "мене" "мој" "мојот" "моја" "мојата" "мое" "моето" "мои" "моите" "ми" (GSg Masc) P1 ;
lin youSg_Pron = mkPron "ти" "тебе" "те" "тебе" "ти" "тебе" "твој" "твојот" "твоја" "твојата" "твое" "твоето" "твои" "твоите" "ти" (GSg Masc) P2 ;
lin he_Pron = mkPron "тој" "него" "го" "нему" "му" "него" "негов" "неговиот" "негова" "неговата" "негово" "неговото" "негови" "неговите" "му" (GSg Masc) P3 ;
lin she_Pron = mkPron "таа" "неа" "ја" "нејзе" "ѝ" "неа" "нејзин" "нејзиниот" "нејзина" "нејзината" "нејзино" "нејзиното" "нејзини" "нејзините" "ѝ" (GSg Masc) P3 ;
lin it_Pron = mkPron "тоа" "него" "го" "нему" "му" "него" "негов" "неговиот" "негова" "неговата" "негово" "неговото" "негови" "неговите" "му" (GSg Masc) P3 ;
lin she_Pron = mkPron "таа" "неа" "ја" "нејзе" "ѝ" "неа" "нејзин" "нејзиниот" "нејзина" "нејзината" "нејзино" "нејзиното" "нејзини" "нејзините" "ѝ" (GSg Fem) P3 ;
lin it_Pron = mkPron "тоа" "него" "го" "нему" "му" "него" "негов" "неговиот" "негова" "неговата" "негово" "неговото" "негови" "неговите" "му" (GSg Neuter) P3 ;
lin we_Pron = mkPron "ние" "нас" "нѐ" "нам" "ни" "нас" "наш" "нашиот" "наша" "нашата" "наше" "нашето" "наши" "нашите" "ни" GPl P1 ;
lin youPl_Pron = mkPron "вие" "вас" "ве" "вам" "ви" "вас" "ваш" "вашиот" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" "ви" GPl P2 ;
lin youPol_Pron = mkPron "вие" "вас" "ве" "вам" "ви" "вас" "ваш" "вашиот" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" "ви" (GSg Masc) P2 ;
lin they_Pron = mkPron "тие" "нив" "ги" "ним" "им" "нив" "нивен" "нивниот" "нивна" "нивната" "нивно" "нивното" "нивни" "нивните" "им" GPl P3 ;
lin this_Quant = mkQuant "овој" "оваа" "ова" "овие" ;
lin that_Quant = mkQuant "тој" "таа" "тоа" "тие" ;
lin how_IAdv = mkIAdv "как" ;
lin how8many_IDet = mkIDet "колку" ;
lin how8much_IAdv = mkIAdv "колку" ;
lin whatSg_IP = mkIP "што" (GSg Masc) ;
lin whatPl_IP = mkIP "што" GPl ;
lin when_IAdv = mkIAdv "кога" ;
lin where_IAdv = mkIAdv "каде" ;
lin which_IQuant = mkIQuant "кој" "која" "кое" "кои" ;
lin whoSg_IP = mkIP "кој" (GSg Masc) ;
lin whoPl_IP = mkIP "кои" GPl ;
lin and_Conj = mkConj "и" Pl ;
lin or_Conj = mkConj "или" Sg ;
lin both7and_DConj = mkConj "и" Pl ** {sep=0} ;
lin either7or_DConj = mkConj "или" Sg ** {sep=1} ;
}

View File

@@ -0,0 +1,10 @@
concrete TenseMkd of Tense = CatMkd[Tense,Temp], TenseX - [Tense,Temp,TTAnt,TPres,TPast,TFut,TCond] ** open ResMkd in {
lin
TTAnt t a = {s = a.s ++ t.s ; a = a.a ; t = t.t} ;
TPres = {s = []} ** {t = VPresent} ;
TPast = {s = []} ** {t = VPastImperfect} ; --# notpresent
TFut = {s = []} ** {t = VFut} ; --# notpresent
TCond = {s = []} ** {t = VCond} ; --# notpresent
}

View File

@@ -0,0 +1,7 @@
concrete TextMkd of Text = open Prelude in {
lin
TEmpty = {s = []} ;
TFullStop x xs = {s = x.s ++ SOFT_BIND ++ "." ++ xs.s} ;
TQuestMark x xs = {s = x.s ++ SOFT_BIND ++ "?" ++ xs.s} ;
TExclMark x xs = {s = x.s ++ SOFT_BIND ++ "!" ++ xs.s} ;
}

View File

@@ -1,13 +1,132 @@
concrete VerbMkd of Verb = CatMkd ** open Prelude,ResMkd in {
lin ComplSlash vps np = {present = \\a,n,p => vps.present ! a ! n
! p
++ np.s ! RObj Acc ;
aorist = \\n,p => vps.aorist ! n ! p ++ np.s ! RObj Acc;
imperfect = \\a,n,p => vps.imperfect ! a ! n ! p ++ np.s ! RObj Acc;
imperative = \\a,n => vps.imperative ! a ! n ++ np.s ! RObj Acc;
participle = {aorist = \\a,gn => vps.participle.aorist ! a ! gn ++ np.s ! RObj Acc;
perfect = \\a => vps.participle.perfect ! a ++ np.s ! RObj Acc}} ;
lin SlashV2a v = v ;
lin AdVVP a vp = {present = \\a2,n,p => a.s
++ vp.present ! a2 ! n ! p;
aorist = \\n,p => a.s ++ vp.aorist ! n ! p;
imperfect = \\a2,n,p => a.s ++ vp.imperfect ! a2 ! n ! p;
imperative = \\a2,n => a.s ++ vp.imperative ! a2 ! n;
participle = {aorist = \\a2,g => a.s
++ vp.participle.aorist ! a2 ! g;
imperfect = \\a2,g => a.s ++ vp.participle.imperfect ! a2 ! g;
perfect = \\a2 => a.s ++ vp.participle.perfect ! a2;
adjectival = \\a2 => a.s ++ vp.participle.adjectival ! a2;
adverbial = a.s ++ vp.participle.adverbial};
noun_from_verb = a.s ++ vp.noun_from_verb;
vtype = vp.vtype;
compl = vp.compl} ;
lin AdVVPSlash a v = {present = \\a2,n,p => a.s
++ v.present ! a2 ! n ! p;
aorist = \\n,p => a.s ++ v.aorist ! n ! p;
imperfect = \\a2,n,p => a.s ++ v.imperfect ! a2 ! n ! p;
imperative = \\a2,n => a.s ++ v.imperative ! a2 ! n;
participle = {aorist = \\a2,g => a.s
++ v.participle.aorist ! a2 ! g;
imperfect = \\a2,g => a.s ++ v.participle.imperfect ! a2 ! g;
perfect = \\a2 => a.s ++ v.participle.perfect ! a2;
adjectival = \\a2 => a.s ++ v.participle.adjectival ! a2;
adverbial = a.s ++ v.participle.adverbial};
noun_from_verb = a.s ++ v.noun_from_verb;
vtype = v.vtype;
compl = v.compl;
c2 = v.c2} ;
lin AdvVP vp adv = vp ** {compl = \\a => vp.compl ! a ++ adv.s} ;
lin AdvVPSlash vps adv = vps ** {compl = \\a => vps.compl ! a ++ adv.s} ;
lin CompAP ap = {s = \\gn => ap.s ! Indef ! gn} ;
lin CompAdv a = {s = \\_ => a.s} ;
lin CompCN cn = {s = \\_ => cn.s ! Indef ! Sg} ;
lin CompNP np = {s = \\_ => np.s ! RSubj} ;
lin ComplSlash vp np = vp ** {compl = \\a => vp.compl ! a ++ vp.c2.s ++ np.s ! RObj vp.c2.c} ;
lin ComplVA va ap = va ** {compl = \\agr => ap.s ! Indef ! agr.g} ;
lin ComplVQ vq qs = vq ** {compl = \\_ => qs.s} ;
lin ComplVS vs s = vs ** {compl = \\_ => s.s} ;
lin ComplVV vv vp = vv ** {compl = \\agr => "да" ++ vp.present ! Perfective ! genNum2num agr.g ! agr.p ++ vp.compl ! agr} ;
lin ExtAdvVP vp a = vp ** {compl = \\agr => vp.compl ! agr ++ SOFT_BIND++"," ++ a.s} ;
lin Slash2V3 v3 np = {present = \\a,n,p => v3.present ! a ! n ! p
++ np.s ! RSubj;
aorist = \\n,p => v3.aorist ! n ! p ++ np.s ! RSubj;
imperfect = \\a,n,p => v3.imperfect ! a ! n ! p ++ np.s ! RSubj;
imperative = \\a,n => v3.imperative ! a ! n ++ np.s ! RSubj;
participle = {aorist = \\a,g => v3.participle.aorist ! a ! g
++ np.s ! RSubj;
imperfect = \\a,g => v3.participle.imperfect ! a ! g
++ np.s ! RSubj;
perfect = \\a => v3.participle.perfect ! a ++ np.s ! RSubj;
adjectival = \\a => v3.participle.adjectival ! a
++ np.s ! RSubj;
adverbial = v3.participle.adverbial ++ np.s ! RSubj};
noun_from_verb = v3.noun_from_verb ++ np.s ! RSubj;
vtype = v3.vtype;
compl = \\v => v3.present ! Imperfective ! Sg ! v.p
++ np.s ! RSubj;
c2 = {s = v3.c2.s ++ np.s ! RSubj; c = v3.c2.c}} ;
lin Slash3V3 v3 np = {present = \\a,n,p => v3.present ! a ! n ! p
++ np.s ! RSubj;
aorist = \\n,p => v3.aorist ! n ! p ++ np.s ! RSubj;
imperfect = \\a,n,p => v3.imperfect ! a ! n ! p ++ np.s ! RSubj;
imperative = \\a,n => v3.imperative ! a ! n ++ np.s ! RSubj;
participle = {aorist = \\a,g => v3.participle.aorist ! a ! g
++ np.s ! RSubj;
imperfect = \\a,g => v3.participle.imperfect ! a ! g
++ np.s ! RSubj;
perfect = \\a => v3.participle.perfect ! a ++ np.s ! RSubj;
adjectival = \\a => v3.participle.adjectival ! a
++ np.s ! RSubj;
adverbial = v3.participle.adverbial ++ np.s ! RSubj};
noun_from_verb = v3.noun_from_verb ++ np.s ! RSubj;
vtype = v3.vtype;
compl = \\v => v3.present ! Imperfective ! Sg ! v.p
++ np.s ! RSubj;
c2 = {s = v3.c2.s ++ np.s ! RSubj; c = v3.c2.c}} ;
lin SlashV2A v ap = v ** {compl = \\agr => ap.s ! Indef ! agr.g} ;
lin SlashV2Q v qs = v ** {compl = \\_ => qs.s} ;
lin SlashV2S v s = v ** {compl = \\_ => s.s} ;
lin SlashV2V v vp = v ** {compl = \\agr => "да" ++ vp.present ! Perfective ! genNum2num agr.g ! agr.p ++ vp.compl ! agr};
lin SlashV2a v = v ** {compl = \\_ => []} ;
lin UseComp comp = {
present = \\_=>auxBe.present ;
aorist = auxBe.imperfect ;
imperfect = \\_=>auxBe.imperfect ;
imperative = \\_=>auxBe.imperative ;
participle = {aorist = \\_=>auxBe.participle.aorist ;
imperfect = \\_=>auxBe.participle.imperfect ;
perfect = \\_=>nonExist ;
adjectival = \\_=>nonExist ;
adverbial = nonExist} ;
noun_from_verb = nonExist ;
compl = \\agr=>comp.s ! agr.g ;
vtype=VNormal
} ;
lin UseCopula = {
present = \\_=>auxBe.present ;
aorist = auxBe.imperfect ;
imperfect = \\_=>auxBe.imperfect ;
imperative = \\_=>auxBe.imperative ;
participle = {aorist = \\_=>auxBe.participle.aorist ;
imperfect = \\_=>auxBe.participle.imperfect ;
perfect = \\_=>nonExist ;
adjectival = \\_=>nonExist ;
adverbial = nonExist} ;
noun_from_verb = nonExist ;
compl = \\_=>[] ;
vtype=VNormal
} ;
lin UseV v = v ** {compl = \\_ => []} ;
lin VPSlashPrep vp p = {present = \\a,n,p2 => vp.present ! a ! n
! p2
++ p.s;
aorist = \\n,p2 => vp.aorist ! n ! p2 ++ p.s;
imperfect = \\a,n,p2 => vp.imperfect ! a ! n ! p2 ++ p.s;
imperative = \\a,n => vp.imperative ! a ! n ++ p.s;
participle = {aorist = \\a,g => vp.participle.aorist ! a ! g
++ p.s;
imperfect = \\a,g => vp.participle.imperfect ! a ! g ++ p.s;
perfect = \\a => vp.participle.perfect ! a ++ p.s;
adjectival = \\a => vp.participle.adjectival ! a ++ p.s;
adverbial = vp.participle.adverbial ++ p.s};
noun_from_verb = vp.noun_from_verb ++ p.s; vtype = vp.vtype;
compl = \\v => vp.compl ! {g = GSg Masc; p = P1} ++ p.s;
c2 = {s = vp.present ! Imperfective ! Sg ! P1 ++ p.s; c = p.c}} ;
}

View File

@@ -10,7 +10,7 @@ concrete AllMlt of AllMltAbs =
LangMlt,
DictMlt,
IrregMlt,
ExtraMlt
** {
ExtendMlt
** open ExtraMlt in {
} ;

View File

@@ -10,5 +10,5 @@ abstract AllMltAbs =
Lang,
DictMltAbs,
IrregMltAbs,
ExtraMltAbs
Extend
** {} ;

17
src/maltese/ExtendMlt.gf Normal file
View File

@@ -0,0 +1,17 @@
concrete ExtendMlt of Extend =
CatMlt ** ExtendFunctor - [
ComplDirectVS,
ComplDirectVQ,
iFem_Pron, youFem_Pron, weFem_Pron, youPlFem_Pron,
theyFem_Pron, youPolFem_Pron
]
with (Grammar = GrammarMlt) ** open ParadigmsMlt, MorphoMlt, ResMlt in {
lin iFem_Pron = mkPron "jien" "i" singular P1 feminine ; --- also JIENA
youFem_Pron = mkPron "int" "ek" singular P2 feminine ; --- also INTI
weFem_Pron = mkPron "aħna" "na" plural P1 feminine ;
youPlFem_Pron = mkPron "intom" "kom" plural P2 feminine ;
theyFem_Pron = mkPron "huma" "hom" plural P3 feminine ;
youPolFem_Pron = mkPron "int" "ek" singular P2 feminine ; --- also INTI
}

View File

@@ -310,6 +310,13 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude, Maybe in {
isDefn = np.isDefn ;
} ;
QuantityNP n m = { -- quessed
s = \\c => preOrPost m.isPre m.s (n.s ! NumNom) ;
a = agrP3 (numform2num n.n) Masc ;
isPron = False ;
isDefn = False ;
} ;
oper
-- Overwrite the s field in an NP
overwriteNPs : NounPhrase -> (NPCase => Str) -> NounPhrase = \np,tbl -> {

View File

@@ -742,10 +742,8 @@ met_CAdv = lin CAdv {s = " мэт" ; c2 = noPrep Nom} ;
meterhueue_CAdv = lin CAdv {s = " мэтэрхүү" ; c2 = noPrep Nom} ;
net_CAdv = lin CAdv {s = " нэт" ; c2 = noPrep Nom} ;
shig_CAdv = lin CAdv {s = " шиг" ; c2 = noPrep Nom} ;
shig_CAdv = lin CAdv {s = " шиг" ; c2 = noPrep Nom} ;
atlaa_Conj = mkConj "атлаа" ;
ba_Conj = mkConj "ба" ;
ba_Conj = mkConj "ба" ;
bas_Conj = mkConj "бас" ;
boegoeoed_Conj = mkConj "бөгөөд" ;
boegoeoetoel_Conj = mkConj "бөгөөтөл" ;

View File

@@ -86,7 +86,6 @@ oper
hlaar4 : Suffix = \\vt => "хл" + aa4!vt + "р" ;
haar4 : Suffix = \\vt => "х" + aa4!vt + "р" ;
tal4 : Suffix = \\vt => "т" + a4!vt + "л" ;
saar4 : Suffix = \\vt => "с" + aa4!vt + "р" ;
nguut2 : Suffix = table {MascA | MascO => "нгуут" ; FemE | FemOE => "нгүүт"} ;
ngaa4 : Suffix = \\vt => "нг" + aa4!vt ;
aad4 : Suffix = \\vt => aa4!vt + "д" ;

View File

@@ -16,10 +16,8 @@ oper 'إِرْهابِي_N' = wmkN { g = masc ; sg = "إِرْهابِي" } ;
oper 'عَاصِمَة_N' = wmkN { g = fem ; pl = "عَوَاصِم" ; root = "عصم" ; sg = "عَاصِمَة" } ;
oper 'رِعايَة_N' = wmkN { g = fem ; root = "رعي" ; sg = "رِعايَة" } ;
oper 'طِفْل_N' = wmkN { g = masc ; pl = "أَطْفَال" ; root = "طفل" ; sg = "طِفْل" } ;
oper 'طِفْل_N' = wmkN { g = masc ; pl = "أَطْفَال" ; root = "طفل" ; sg = "طِفْل" } ;
oper 'مَدِينَة_N' = wmkN { g = fem ; pl = "مُدُن" ; root = "مدن" ; sg = "مَدِينَة" } ;
oper 'دَوْلَة_N' = wmkN { g = fem ; pl = "دُوَل" ; sg = "دَوْلَة" } ;
oper 'دَوْلَة_N' = wmkN { g = fem ; pl = "دُوَل" ; sg = "دَوْلَة" } ;
oper 'ثَقَافَة_N' = wmkN { g = fem ; pl = "ثَقَافَات" ; root = "ثقف" ; sg = "ثَقَافَة" } ;
oper 'اِنْخِفَاض_N' = wmkN { g = masc ; pl = "اِنْخِفَاضَات" ; sg = "اِنْخِفَاض" } ;
oper 'تَوْزِيع_N' = wmkN { g = masc ; sg = "تَوْزِيع" } ;
@@ -65,15 +63,11 @@ oper 'فُنْدُق_N' = wmkN { g = masc ; pl = "فَنَادِق" ; sg = "فُ
oper 'فِهْرِس_N' = wmkN { g = masc ; pl = "فَهَارِس" ; sg = "فِهْرِس" } ;
oper 'تَضَخُّم_N' = wmkN { g = masc ; root = "ضخم" ; sg = "تَضَخُّم" } ;
oper 'مَوْضِع_N' = wmkN { g = masc ; pl = "مَوَاضِع" ; root = "وضع" ; sg = "مَوْضِع" } ;
oper 'رَئِيس_N' = wmkN { g = masc ; pl = "رُؤَسَاء" ; root = "رءس" ; sg = "رَئِيس" } ;
oper 'رَئِيس_N' = wmkN { g = masc ; pl = "رُؤَسَاء" ; root = "رءس" ; sg = "رَئِيس" } ;
oper 'مُنْتَج_N' = wmkN { g = masc ; pl = "مُنْتَجَات" ; sg = "مُنْتَج" } ;
oper 'مَلِكَة_N' = wmkN { g = fem ; pl = "مَلِكَات" ; sg = "مَلِكَة" } ;
oper 'مُعَدَّل_N' = wmkN { g = masc ; root = "عدل" ; sg = "مُعَدَّل" } ;
oper 'مُعَدَّل_N' = wmkN { g = masc ; root = "عدل" ; sg = "مُعَدَّل" } ;
oper 'مَاء_N' = wmkN { g = masc ; pl = "مِيَاه" ; root = "موه" ; sg = "مَاء" } ;
oper 'عَالَم_N' = wmkN { g = masc ; pl = "عَالَمُون" ; sg = "عَالَم" } ;
oper 'عَالَم_N' = wmkN { g = masc ; pl = "عَالَمُون" ; sg = "عَالَم" } ;
oper 'مَنْطِقَة_N' = wmkN { g = fem ; pl = "مَنْطِقَات" ; root = "نطق" ; sg = "مَنْطِقَة" } ;
oper 'كِتَاب_N' = wmkN { g = masc ; pl = "كُتُب" ; sg = "كِتَاب" } ;
oper 'عُمْلَة_N' = wmkN { g = fem ; pl = "عُمْلَات" ; root = "عمل" ; sg = "عُمْلَة" } ;
@@ -82,7 +76,6 @@ oper 'شَرْق_N' = wmkN { g = masc ; sg = "شَرْق" } ;
oper 'رَأْس_N' = wmkN { g = masc ; pl = "رُؤُوس" ; sg = "رَأْس" } ;
oper 'سُكّان_N' = wmkN { g = fem ; sg = "سُكّان" } ;
oper 'مَلَكِيَّة_N' = wmkN { g = fem ; pl = "مَلَكِيَّات" ; root = "ملك" ; sg = "مَلَكِيَّة" } ;
oper 'سُكّان_N' = wmkN { g = fem ; sg = "سُكّان" } ;
oper 'جُمْهُورِيَّة_N' = wmkN { g = fem ; pl = "جُمْهُورِيَّات" ; sg = "جُمْهُورِيَّة" } ;
oper 'رُوسِيَّة_N' = wmkN { g = fem ; pl = "رُوسِيَّات" ; sg = "رُوسِيَّة" } ;
oper 'جَنُوب_N' = wmkN { g = masc ; root = "جنب" ; sg = "جَنُوب" } ;
@@ -126,7 +119,6 @@ oper 'عَرَبِي_A' = wmkA { fem_pl = "عَرَبِيَّات" ; fem_sg = "
oper 'حُر_A' = wmkA { fem_pl = "حُرَّات" ; fem_sg = "حُرَّة" ; masc_pl = "أَحْرَار" ; masc_sg = "حُر" ; root = "حرر" } ;
oper 'هَجِين_A' = wmkA { fem_pl = "هَجَائِن" ; fem_sg = "هَجِين" ; masc_pl = "هِجَان" ; masc_sg = "هَجِين" ; root = "هجن" } ;
oper 'رَسْمِي_A' = wmkA { fem_pl = "رَسْمِيَّات" ; fem_sg = "رَسْمِيَّة" ; masc_pl = "رَسْمِيُّون" ; masc_sg = "رَسْمِي" } ;
oper 'رَسْمِي_A' = wmkA { fem_pl = "رَسْمِيَّات" ; fem_sg = "رَسْمِيَّة" ; masc_pl = "رَسْمِيُّون" ; masc_sg = "رَسْمِي" } ;
oper 'أُرْثُوذُكْسِيَّة_A' = wmkA { fem_sg = "nan" ; masc_sg = "nan" } ;
oper 'مُرَبَّع_A' = wmkA { fem_pl = "مُرَبَّعَات" ; fem_sg = "مُرَبَّعَة" ; masc_pl = "مُرَبَّعُون" ; masc_sg = "مُرَبَّع" } ;
oper 'مُسْلِم_A' = wmkA { fem_pl = "مُسْلِمَات" ; fem_sg = "مُسْلِمَة" ; masc_pl = "مُسْلِمُون" ; masc_sg = "مُسْلِم" ; root = "سلم" } ;

View File

@@ -107,8 +107,6 @@ concrete CatPol of Cat = CommonX - [CAdv] ** open ResPol, Prelude, (R = ParamX)
VP = VerbPhrase;
Comp = { s: GenNum => Str };
Ord = { s : AForm => Str };
A = Adj;
A2 = Adj ** { c : Complement };

View File

@@ -30,8 +30,6 @@ lin
}
};
UttImpPol = UttImpPl;
--UttAdv : Adv -> Utt ; -- here
UttAdv adv = {s= adv.s};
-- better but can be improved upon
UttVP vp = case <vp.isCompApStem,vp.containsAdv, vp.containsAdV,vp.containsComp, vp.containsComp2> of {

View File

@@ -393,8 +393,6 @@ oper
= \word, g, anim, zi, rel, p -> lin N2 (mkFun (noMinorCases (Z.makeNoun word g anim rel AdjType (Z.parseIndex zi))) p) ;
} ;
nullPrep : Prep = lin Prep {s=[] ; c=Gen ; neggen=False ; hasPrep=False} ;
mkN3 = overload {
mkN3 : N -> Prep -> Prep -> N3
= \n, p2, p3 -> lin N3 (mkFun2 n p2 p3) ;

View File

@@ -125,6 +125,7 @@ concrete CatSom of Cat = CommonX - [Adv,IAdv] ** open ResSom, Prelude in {
linref
-- Cl = linCl ;
V, VS, VQ, VA, VV, V2A, V2V, V2S, V2Q, V2, V3 = \v -> v.s ! VImp Sg Pos ;
VP = infVP ;
CN = linCN ;
Prep = \prep -> prep.s ! ZeroObj ++ prep.sii ++ prep.dhex ++ prep.hoostiisa ! Sg3 Masc ;

View File

@@ -0,0 +1,154 @@
concrete DocumentationSom of Documentation = CatSom ** open ResSom,Prelude,HTML in {
lincat Definition = {s : Str} ;
lincat Document = {s : Str} ;
lincat Inflection = {t : Str; s1 : Str; s2 : Str} ;
lincat Tag = {s : Str} ;
lin InflectionA, InflectionA2 = \adj -> {
t = "a";
s1 = heading1 "Adjective";
s2 = frameTable (tr (td "" ++ th "Sg" ++ th "Pl") ++
tr (th "Nom" ++ td (adj.s ! AF Sg Nom) ++ td (adj.s ! AF Pl Nom)) ++
tr (th "Abs" ++ td (adj.s ! AF Sg Abs) ++ td (adj.s ! AF Pl Abs)))
} ;
lin InflectionAdA, InflectionAdN, InflectionAdV = \adv -> {
t = "adv";
s1 = heading1 "Adverb";
s2 = paragraph adv.s
} ;
lin InflectionAdv adv = {t = "adv"; s1 = heading1 "Adverb";
s2 = frameTable (tr (th "sii" ++ td adv.sii)
++ tr (th "dhex" ++ td adv.dhex)
++ tr (th "berri" ++ td adv.berri)
++ tr (th "miscAdv" ++ td adv.miscAdv)
++ tr (th "np" ++ td adv.np.s))} ;
lin InflectionGN pn = {t = "pn"; s1 = heading1 "Name";
s2 = frameTable (tr (th "" ++ td pn.s))} ;
lin InflectionLN pn = {t = "pn"; s1 = heading1 "Name";
s2 = frameTable (tr (th "" ++ td pn.s))} ;
lin InflectionN,InflectionN2,InflectionN3 = \noun -> {
t = "n";
s1 = heading1 "Noun";
s2 = frameTable (tr (td "" ++ th "Sg" ++ th "Pl") ++
tr (th "Def" ++ td (noun.s ! Def Sg) ++ td (noun.s ! Def Pl)) ++
tr (th "Indef" ++ td (noun.s ! Indef Sg) ++ td (noun.s ! Indef Pl)) ++
tr (th "Nom" ++ td (noun.s ! NomSg) ++ td []) ++
tr (th "Numerative" ++ intagAttr "td" "colspan=2" (noun.s ! Numerative)))
} ;
lin InflectionPN pn = {t = "pn"; s1 = heading1 "Name";
s2 = frameTable (tr (th "" ++ td pn.s))} ;
lin InflectionPrep prep = {t = "prep"; s1 = heading1 "Preposition";
s2 = frameTable (tr (th "Sg1Obj" ++ td (prep.s ! Sg1Obj))
++ tr (th "Sg2Obj" ++ td (prep.s ! Sg2Obj))
++ tr (th "(Pl1Obj Excl)"
++ td (prep.s ! Pl1Obj Excl))
++ tr (th "(Pl1Obj Incl)"
++ td (prep.s ! Pl1Obj Incl))
++ tr (th "Pl2Obj"
++ td (prep.s ! Pl2Obj))
++ tr (th "ReflexiveObj"
++ td (prep.s
! ReflexiveObj))
++ tr (th "ZeroObj"
++ td (prep.s
! ZeroObj))
++ tr (th "berri"
++ td prep.berri)
++ tr (th "sii"
++ td prep.sii)
++ tr (th "dhex"
++ td prep.dhex)
++ tr (th "hoostiisa Sg1"
++ td (prep.hoostiisa
! Sg1))
++ tr (th "hoostiisa Sg2"
++ td (prep.hoostiisa
! Sg2))
++ tr (th "hoostiisa (Sg3 Masc)"
++ td (prep.hoostiisa
! Sg3 Masc))
++ tr (th "hoostiisa (Sg3 Fem)"
++ td (prep.hoostiisa
! Sg3 Fem))
++ tr (th "hoostiisa (Pl1 Excl)"
++ td (prep.hoostiisa
! Pl1 Excl))
++ tr (th "hoostiisa (Pl1 Incl)"
++ td (prep.hoostiisa
! Pl1 Incl))
++ tr (th "hoostiisa Pl2"
++ td (prep.hoostiisa
! Pl2))
++ tr (th "hoostiisa Pl3"
++ td (prep.hoostiisa
! Pl3))
++ tr (th "hoostiisa Impers"
++ td (prep.hoostiisa
! Impers)))} ;
lin InflectionSN pn = {t = "pn"; s1 = heading1 "Name";
s2 = frameTable (tr (th "" ++ td pn.s))} ;
lin InflectionV v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV2 v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV2A v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV2Q v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV2S v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV2V v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV3 v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionVA v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionVQ v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionVS v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionVV v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin MkDefinition t d = {s = "<p><b>Definition:</b>"
++ t.s ++ d.s ++ "</p>"} ;
lin MkDefinitionEx t d e = {s = "<p><b>Definition:</b>"
++ t.s ++ d.s ++ "<p><b>Example:</b>" ++ t.s ++ "</p>"} ;
lin MkDocument d i e = {s = i.s1 ++ i.s2} ;
lin MkTag i = {s = i.t} ;
lin NoDefinition t = t ;
oper inflectV : Verb -> Str = \v ->
heading2 "Infinitive" ++
paragraph (v.s ! VInf) ++
heading2 "Present" ++
heading3 "Simple" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "Sg1_Sg3Masc" ++ td (v.s ! VPres Simple Sg1_Sg3Masc Pos) ++ td (v.s ! VPres Simple Sg1_Sg3Masc Neg)) ++
tr (th "Sg2_Sg3Fem" ++ td (v.s ! VPres Simple Sg2_Sg3Fem Pos) ++ td (v.s ! VPres Simple Sg2_Sg3Fem Neg)) ++
tr (th "Pl1" ++ td (v.s ! VPres Simple Pl1_ Pos) ++ td (v.s ! VPres Simple Pl1_ Neg)) ++
tr (th "Pl2" ++ td (v.s ! VPres Simple Pl2_ Pos) ++ td (v.s ! VPres Simple Pl2_ Neg)) ++
tr (th "Pl3" ++ td (v.s ! VPres Simple Pl3_ Pos) ++ td (v.s ! VPres Simple Pl3_ Neg))) ++
heading3 "Progressive" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "Sg1_Sg3Masc" ++ td (v.s ! VPres Progressive Sg1_Sg3Masc Pos) ++ td (v.s ! VPres Progressive Sg1_Sg3Masc Neg)) ++
tr (th "Sg2_Sg3Fem" ++ td (v.s ! VPres Progressive Sg2_Sg3Fem Pos) ++ td (v.s ! VPres Progressive Sg2_Sg3Fem Neg)) ++
tr (th "Pl1" ++ td (v.s ! VPres Progressive Pl1_ Pos) ++ td (v.s ! VPres Progressive Pl1_ Neg)) ++
tr (th "Pl2" ++ td (v.s ! VPres Progressive Pl2_ Pos) ++ td (v.s ! VPres Progressive Pl2_ Neg)) ++
tr (th "Pl3" ++ td (v.s ! VPres Progressive Pl3_ Pos) ++ td (v.s ! VPres Progressive Pl3_ Neg))) ++
heading2 "Past" ++
heading3 "Simple" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "Sg1_Sg3Masc" ++ td (v.s ! VPast Simple Sg1_Sg3Masc) ++ intagAttr "td" "rowspan=5" (v.s ! VNegPast Simple)) ++
tr (th "Sg2_Sg3Fem" ++ td (v.s ! VPast Simple Sg2_Sg3Fem)) ++
tr (th "Pl1" ++ td (v.s ! VPast Simple Pl1_)) ++
tr (th "Pl2" ++ td (v.s ! VPast Simple Pl2_)) ++
tr (th "Pl3" ++ td (v.s ! VPast Simple Pl3_))) ++
heading3 "Progressive" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "Sg1_Sg3Masc" ++ td (v.s ! VPast Progressive Sg1_Sg3Masc) ++ intagAttr "td" "rowspan=5" (v.s ! VNegPast Progressive)) ++
tr (th "Sg2_Sg3Fem" ++ td (v.s ! VPast Progressive Sg2_Sg3Fem)) ++
tr (th "Pl1" ++ td (v.s ! VPast Progressive Pl1_)) ++
tr (th "Pl2" ++ td (v.s ! VPast Progressive Pl2_)) ++
tr (th "Pl3" ++ td (v.s ! VPast Progressive Pl3_))) ++
heading2 "Imperative" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "Sg" ++ td (v.s ! VImp Sg Pos) ++ td (v.s ! VImp Sg Neg)) ++
tr (th "Pl" ++ td (v.s ! VImp Pl Pos) ++ td (v.s ! VImp Pl Neg))) ++
heading2 "Relative" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "SgMasc" ++ td (v.s ! VRel SgMasc) ++ intagAttr "td" "rowspan=3" (v.s ! VRelNeg)) ++
tr (th "SgFem" ++ td (v.s ! VRel SgFem)) ++
tr (th "PlInv" ++ td (v.s ! VRel PlInv))) ++
heading2 "Negative Conditional" ++
frameTable (tr (th "SgMasc" ++ td (v.s ! VNegCond SgMasc)) ++
tr (th "SgFem" ++ td (v.s ! VNegCond SgFem)) ++
tr (th "PlInv" ++ td (v.s ! VNegCond PlInv))) ;
}

View File

@@ -1,4 +1,5 @@
concrete LangSom of Lang =
GrammarSom,
LexiconSom,
ConstructionSom ;
ConstructionSom,
DocumentationSom ;

View File

@@ -64,7 +64,10 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
} ;
-- : Pron -> NP ;
UsePron pron = pron ** {st = Definite} ;
UsePron pron = pron ** {
s = pron.sp ;
st = Definite
} ;
-- : Predet -> NP -> NP ; -- only the man
PredetNP predet np =
@@ -250,7 +253,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
mod = \\st,n,c =>
cn.mod ! st ! n ! Abs -- If there was something before, it is now in Abs
++ andConj st cn.modtype -- If the sentence is already modified, any new modifier needs to be introduced with conjunction
++ ap.s ! AF n c ;
++ ap.s ! AF n c ++ " " ++ ap.compar ;
modtype = AMod
} ;

View File

@@ -23,6 +23,18 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQ
LangSom: bisad BIND daasi bisad BIND dan waa ka weyn tahay
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant that_Quant NumSg) (UseN cat_N)) (UseComp (CompAP (ComparA big_A (DetCN (DetQuant this_Quant NumSg) (UseN cat_N)))))))) NoVoc
-- LangEng: house bigger than car
LangSom: guri ka weyn baabuur
Lang: PhrUtt NoPConj (UttCN (AdjCN (ComparA big_A (MassNP (UseN car_N))) (UseN house_N))) NoVoc
-- LangEng: house bigger than he
Lang> l PhrUtt NoPConj (UttCN (AdjCN (ComparA big_A (UsePron he_Pron)) (UseN house_N))) NoVoc
guri ka weyn isaga
-- LangEng: house bigger than I
Lang> l PhrUtt NoPConj (UttCN (AdjCN (ComparA big_A (UsePron i_Pron)) (UseN house_N))) NoVoc
guri ka weyn aniga
-- LangEng: that cat is biggest
LangSom: bisad BIND daasi waa ugu weyn tahay
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant that_Quant NumSg) (UseN cat_N)) (UseComp (CompAP (AdjOrd (OrdSuperl big_A))))))) NoVoc

View File

@@ -125,10 +125,4 @@ oper
comp = \\a => vps.comp ! a ++ (let agr = complAgr a in vps.s.s ! VPart agr.g agr.n) ++ agent ;
} ;
lin ExistsNP np =
mkClause [] True False np.a
(insertComplement (\\_ => (np.s ! Nom).ton)
(predV (mkV "existir"))) ;
} ;

View File

@@ -243,4 +243,9 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, ParamX,
a = np.a
} ;
QuantityNP n m = {
s = \\c => preOrPost m.isPre m.s (n.s ! NCard ! Sg ! Nom) ;
h = mkHar I_Har SVow ; -- guessed
a = agrP3 n.n
} ;
}