mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-09-22 02:06:03 -06:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e2a83040a | ||
|
|
1e6aa119fe | ||
|
|
93bc02834a | ||
|
|
0196d3006f | ||
|
|
9090a3cda3 | ||
|
|
891ae30eef | ||
|
|
5096396563 | ||
|
|
c25a1dab55 | ||
|
|
d9004e75a8 | ||
|
|
22559fe681 | ||
|
|
eb24170d3a | ||
|
|
d1503c00e8 | ||
|
|
bb5372b159 | ||
|
|
4bf10ff93a | ||
|
|
470f2cc796 | ||
|
|
96e9ee9994 | ||
|
|
1900362cad | ||
|
|
18328afff7 | ||
|
|
8124bafa41 | ||
|
|
73b5f4e21e | ||
|
|
186e465bac | ||
|
|
edf76df252 | ||
|
|
3b14d6c035 | ||
|
|
1d2e16e929 | ||
|
|
39cea8b9b6 | ||
|
|
0012630784 | ||
|
|
0f4dd88f9e | ||
|
|
f6576c4b36 | ||
|
|
231e689426 | ||
|
|
997a9adae3 | ||
|
|
dcc0f3f56c | ||
|
|
0a197ec126 | ||
|
|
c97cbb530c | ||
|
|
1ec6a98640 | ||
|
|
3d6fa9e55d | ||
|
|
ffc9231e95 | ||
|
|
aeebeb9a69 | ||
|
|
f3a5a70221 | ||
|
|
100ca57b71 | ||
|
|
684d468db7 | ||
|
|
924c5b3b7a | ||
|
|
5dce027e68 | ||
|
|
eccb04b1b9 | ||
|
|
a412e8d85e | ||
|
|
fda7e1595d | ||
|
|
e67f079167 | ||
|
|
5587c14083 | ||
|
|
c7ddbd2fc6 | ||
|
|
cdee869595 | ||
|
|
ae3dd0dcee | ||
|
|
664363c1c1 | ||
|
|
ef4f72a731 | ||
|
|
0c9e995cb2 | ||
|
|
34576e5ec5 | ||
|
|
ab9dfc6f1c | ||
|
|
aa89efcbf8 | ||
|
|
a97733d5dc | ||
|
|
5995be8940 | ||
|
|
4c23ca2116 | ||
|
|
a223b3803c | ||
|
|
66da1a49da | ||
|
|
d2b7bf2fb6 | ||
|
|
10d45593e4 | ||
|
|
621dc23f60 | ||
|
|
dcd262df05 | ||
|
|
c3f937c667 | ||
|
|
20cb49cd57 | ||
|
|
bd0506760e | ||
|
|
eae650960b | ||
|
|
34062e2ed2 | ||
|
|
827a0296c9 | ||
|
|
110266306d | ||
|
|
498acd0b86 | ||
|
|
d947e7e2e2 | ||
|
|
00790d98fa | ||
|
|
83cfc496a4 | ||
|
|
363219730e | ||
|
|
8c4cd58bd1 | ||
|
|
11f73acc28 | ||
|
|
344342012d | ||
|
|
a79202f667 | ||
|
|
8a82c2ca53 | ||
|
|
e866940d65 | ||
|
|
8f1b3eeece | ||
|
|
b14c0f8492 | ||
|
|
2e6a750c1a | ||
|
|
98128249bd | ||
|
|
1e581fbd10 | ||
|
|
f2ac424bfe | ||
|
|
e65469ffb2 | ||
|
|
8458a74e25 | ||
|
|
7156f488dd | ||
|
|
ff44b03344 | ||
|
|
4282523f2f | ||
|
|
d8208cba24 | ||
|
|
0a03e037f4 | ||
|
|
0201d62777 | ||
|
|
b8bb7f1d72 | ||
|
|
fe56b729b4 | ||
|
|
cab232a4f6 | ||
|
|
cdeaf5a271 | ||
|
|
60e38122d0 | ||
|
|
800e2b0dda | ||
|
|
84bdce7cc8 | ||
|
|
add5029b7a | ||
|
|
19ba581f0e | ||
|
|
a890a1aad5 | ||
|
|
26a1e55cbe | ||
|
|
992e670c10 | ||
|
|
eea95a6f76 | ||
|
|
f1facac1bf | ||
|
|
c5bb0dacb5 | ||
|
|
44ea945c8c | ||
|
|
9265270a0c | ||
|
|
86e2afcfc0 | ||
|
|
6115d44398 | ||
|
|
cf6a376272 | ||
|
|
3a8527689c | ||
|
|
416d37eee7 | ||
|
|
c4d578cac3 | ||
|
|
a7341d9be1 | ||
|
|
57ef377e6d | ||
|
|
3a133d035d | ||
|
|
912ddd521f | ||
|
|
945bc086f2 | ||
|
|
70806027c1 | ||
|
|
88a3759a9e | ||
|
|
1910010e70 | ||
|
|
0cd851aa10 | ||
|
|
2b07314680 | ||
|
|
a3e19ed673 | ||
|
|
b571d86b7c | ||
|
|
6064e69d8e | ||
|
|
510abc0364 | ||
|
|
331a07bd35 | ||
|
|
34ba4cf564 | ||
|
|
5a9ab2cbdf | ||
|
|
97b8cb72aa | ||
|
|
09087c1944 | ||
|
|
f497b4a63a | ||
|
|
56e97ebfff | ||
|
|
16c19eb4b0 | ||
|
|
35f5d9a68b | ||
|
|
0f78e35bed | ||
|
|
bff00560d5 | ||
|
|
4ab63d2d66 | ||
|
|
41e3b8280b | ||
|
|
4a3e30a1cd | ||
|
|
9458f96f0b | ||
|
|
ba922b5daa | ||
|
|
f261b2f45b | ||
|
|
939e96fb6c | ||
|
|
3da5f0d318 | ||
|
|
37d915c879 | ||
|
|
b69c3518a7 | ||
|
|
0896a77049 | ||
|
|
7225033a03 | ||
|
|
ed27aa97fc | ||
|
|
de3d59c7e8 | ||
|
|
03024d7b72 | ||
|
|
f6187834c4 | ||
|
|
842747b407 | ||
|
|
922f664f74 | ||
|
|
3943089d3d | ||
|
|
6a6788c24e | ||
|
|
e7e7f12ad8 | ||
|
|
90d8897bf9 | ||
|
|
be0fb1f7c1 | ||
|
|
7d73dd8195 | ||
|
|
48ec088faa | ||
|
|
8a84ca1a45 | ||
|
|
34f5e625e3 | ||
|
|
27c2d7cbb3 | ||
|
|
26abc63953 | ||
|
|
15df5ed37e | ||
|
|
43f19f283e | ||
|
|
9b6b94ec1d | ||
|
|
8b462bdbfb | ||
|
|
14c7db6427 | ||
|
|
2c613bfc83 | ||
|
|
8a8c1c6b42 | ||
|
|
76b27152f9 | ||
|
|
36bc768f26 | ||
|
|
b7275a2bac | ||
|
|
7e8e6dbf34 | ||
|
|
27ff3935c5 | ||
|
|
4cd3d3158e | ||
|
|
e3b27613fd | ||
|
|
5f6a8b2905 | ||
|
|
6203aee170 | ||
|
|
ffb77daf31 | ||
|
|
494c91f9dd | ||
|
|
6f6405b90e | ||
|
|
da0e273d3d | ||
|
|
263b668249 | ||
|
|
019a347246 | ||
|
|
6aeda22ed6 | ||
|
|
ae9b7d4d45 | ||
|
|
323e4b4cdf | ||
|
|
e42c5f53e2 | ||
|
|
fea01dd313 | ||
|
|
9e402cb608 | ||
|
|
401ac1f954 | ||
|
|
6a2cb9ec77 | ||
|
|
b339f7c2fc | ||
|
|
d6f3cae141 | ||
|
|
44acdbd350 | ||
|
|
f630f6ef29 | ||
|
|
8808ce108b | ||
|
|
1c3bb0f6eb | ||
|
|
5cc990d259 | ||
|
|
621cfd8b43 | ||
|
|
deb9d40b7e | ||
|
|
25f422f5ca | ||
|
|
f0abf5deff | ||
|
|
e825d92233 | ||
|
|
1e436d84a1 | ||
|
|
84e0e2c08f | ||
|
|
4c55592af4 | ||
|
|
28be4fb450 | ||
|
|
fe2dde5a2c | ||
|
|
2adce20f76 | ||
|
|
b8a0e7adfe | ||
|
|
e4cf12ee1a | ||
|
|
943f387a23 |
+2
-2
@@ -7,7 +7,7 @@ Bul,Bulgarian,bulgarian,,,y,,,,,y,n
|
||||
Cat,Catalan,catalan,Romance,,y,,,,y,y,n
|
||||
Cgg,Rukiga,rukiga,,,y,y,n,n,y,y,n
|
||||
Chi,Chinese (simplified),chinese,,,,,,,,y,y
|
||||
Cze,Czech,czech,,,,,,n,,y,n
|
||||
Cze,Czech,czech,,,,,,y,,y,n
|
||||
Dan,Danish,danish,Scand,,y,,,,,y,n
|
||||
Dut,Dutch,dutch,,,y,,,,,y,n
|
||||
Eng,English,english,,,y,,,,y,y,y
|
||||
@@ -55,7 +55,7 @@ Sco,Scots,scots,,,y,,,,,y,n
|
||||
Swa,Swahili,swahili,Bantu,,,y,n,n,n,n,n
|
||||
Swe,Swedish,swedish,Scand,,y,,,,y,y,y
|
||||
Tam,Tamil,tamil,n,n,n,n,n,n,n,n,n
|
||||
Tel,Telugu,telugu,,,y,n,n,n,,n,n
|
||||
Tel,Telugu,telugu,,,y,y,n,n,,n,n
|
||||
Tha,Thai,thai,,to_thai,,,,,,y,n
|
||||
Tur,Turkish,turkish,,,y,,,n,,n,n
|
||||
Ukr,Ukrainian,ukrainian,,,,y,n,n,n,y,n
|
||||
|
||||
|
@@ -35,6 +35,7 @@ fun
|
||||
InflectionAdA : AdA -> Inflection ;
|
||||
InflectionAdN : AdN -> Inflection ;
|
||||
InflectionPrep : Prep -> Inflection ;
|
||||
InflectionCl : Cl -> Inflection ;
|
||||
|
||||
fun
|
||||
NoDefinition : String -> Definition ;
|
||||
|
||||
@@ -49,6 +49,11 @@ concrete AdjectiveAfr of Adjective = CatAfr ** open ResAfr, Prelude in
|
||||
isPre = ap.isPre
|
||||
} ;
|
||||
|
||||
AdvAP ap adv = {
|
||||
s = \\a => ap.s ! a ++ adv.s ;
|
||||
isPre = False
|
||||
} ;
|
||||
|
||||
UseA2 a = {
|
||||
s = a.s ! Posit ;
|
||||
isPre = True
|
||||
|
||||
@@ -47,7 +47,7 @@ concrete CatAfr of Cat =
|
||||
NP = {s : NPCase => Str ; a : Agr ; isPron : Bool} ;
|
||||
Pron = Pronoun ;
|
||||
|
||||
Det = {s,sp : Gender => Str ; n : Number ; a : Adjf} ;
|
||||
Det,DAP = {s,sp : Gender => Str ; n : Number ; a : Adjf} ;
|
||||
Quant = {
|
||||
s : Bool => Number => Gender => Str ;
|
||||
sp : Number => Gender => Str ;
|
||||
@@ -56,6 +56,7 @@ concrete CatAfr of Cat =
|
||||
Predet = {s : Number => Gender => Str} ;
|
||||
Num = {s : Str ; n : Number ; isNum : Bool} ;
|
||||
Card = {s : Gender => Case => Str ; n : Number} ;
|
||||
ACard = {s : Str} ;
|
||||
Ord = {s : AForm => Str} ;
|
||||
|
||||
-- Numeral
|
||||
|
||||
@@ -19,6 +19,8 @@ concrete ConjunctionAfr of Conjunction =
|
||||
|
||||
ConjRS conj ss = conjunctDistrTable2 Gender Number conj ss ;
|
||||
|
||||
ConjCN conj ss = conjunctDistrTable2 Adjf NForm conj ss ** {g = Neutr} ;
|
||||
|
||||
-- These fun's are generated from the list cat's.
|
||||
|
||||
BaseS = twoTable Order ;
|
||||
@@ -31,6 +33,8 @@ concrete ConjunctionAfr of Conjunction =
|
||||
ConsAP xs x = consrTable AForm comma xs x ** {isPre = andB xs.isPre x.isPre} ;
|
||||
BaseRS x y = twoTable2 Gender Number x y ** {c = y.c} ;
|
||||
ConsRS xs x = consrTable2 Gender Number comma xs x ;
|
||||
BaseCN x y = twoTable2 Adjf NForm x y ;
|
||||
ConsCN xs x = consrTable2 Adjf NForm comma xs x ;
|
||||
|
||||
lincat
|
||||
[S] = {s1,s2 : Order => Str} ;
|
||||
@@ -38,5 +42,6 @@ concrete ConjunctionAfr of Conjunction =
|
||||
[NP] = {s1,s2 : NPCase => Str ; a : Agr} ;
|
||||
[AP] = {s1,s2 : AForm => Str ; isPre : Bool} ;
|
||||
[RS] = {s1,s2 : Gender => Number => Str} ;
|
||||
[CN] = {s1,s2 : Adjf => NForm => Str} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
--# -path=.:../abstract:../common
|
||||
|
||||
concrete ConstructionAfr of Construction = CatAfr **
|
||||
open GrammarAfr, ParadigmsAfr, Prelude in {
|
||||
|
||||
lin
|
||||
ready_VP = UseComp (CompAP (PositA (mkA "gereed"))) ;
|
||||
|
||||
has_age_VP card =
|
||||
UseComp (CompAP (AdAP (lin AdA (UttNP (DetCN (DetQuant IndefArt (NumCard card)) (UseN (mkN "jaar")))))
|
||||
(PositA (mkA "oud")))) ;
|
||||
|
||||
n_units_AP card cn a =
|
||||
AdAP (lin AdA (UttNP (DetCN (DetQuant IndefArt (NumCard card)) cn)))
|
||||
(PositA a) ;
|
||||
|
||||
n_units_of_NP card cn np =
|
||||
AdvNP (DetCN (DetQuant IndefArt (NumCard card)) cn)
|
||||
(PrepNP (mkPrep "van") np) ;
|
||||
|
||||
cup_of_CN np = AdvCN (UseN (mkN "koppie"))
|
||||
(PrepNP (mkPrep "van") np) ;
|
||||
|
||||
lincat
|
||||
Weekday = N ;
|
||||
Month = N ;
|
||||
Year = {s : Str} ;
|
||||
Monthday = {s : Str} ;
|
||||
|
||||
lin
|
||||
weekdayPunctualAdv w = PrepNP (mkPrep "op") (MassNP (UseN w)) ;
|
||||
weekdayHabitualAdv w = PrepNP (mkPrep "elke") (MassNP (UseN w)) ;
|
||||
yearAdv y = {s = "in" ++ y.s} ;
|
||||
intYear i = {s = i.s} ;
|
||||
|
||||
weekdayN w = w ;
|
||||
monthN m = m ;
|
||||
|
||||
monday_Weekday = mkN "Maandag" ;
|
||||
tuesday_Weekday = mkN "Dinsdag" ;
|
||||
wednesday_Weekday = mkN "Woensdag" ;
|
||||
thursday_Weekday = mkN "Donderdag" ;
|
||||
friday_Weekday = mkN "Vrydag" ;
|
||||
saturday_Weekday = mkN "Saterdag" ;
|
||||
sunday_Weekday = mkN "Sondag" ;
|
||||
|
||||
january_Month = mkN "Januarie" ;
|
||||
february_Month = mkN "Februarie" ;
|
||||
march_Month = mkN "Maart" ;
|
||||
april_Month = mkN "April" ;
|
||||
may_Month = mkN "Mei" ;
|
||||
june_Month = mkN "Junie" ;
|
||||
july_Month = mkN "Julie" ;
|
||||
august_Month = mkN "Augustus" ;
|
||||
september_Month = mkN "September" ;
|
||||
october_Month = mkN "Oktober" ;
|
||||
november_Month = mkN "November" ;
|
||||
december_Month = mkN "Desember" ;
|
||||
|
||||
}
|
||||
+160
-2
@@ -1,10 +1,155 @@
|
||||
concrete ExtendAfr of Extend =
|
||||
CatAfr ** ExtendFunctor - [PassVPSlash,PassAgentVPSlash]
|
||||
CatAfr ** ExtendFunctor - [
|
||||
VPS, BaseVPS, ConsVPS, MkVPS, ConjVPS, PredVPS,
|
||||
VPI, BaseVPI, ConsVPI, MkVPI, ConjVPI, ComplVPIVV,
|
||||
PassVPSlash, PassAgentVPSlash,
|
||||
PresPartAP, PastPartAP, PastPartAgentAP, ProgrVPSlash,
|
||||
RNP, RNPList, ReflRNP, ReflPron, ReflPoss, PredetRNP,
|
||||
AdvRNP, AdvRVP, AdvRAP, ReflA2RNP, PossPronRNP,
|
||||
ConjRNP, Base_rr_RNP, Base_nr_RNP, Base_rn_RNP,
|
||||
Cons_rr_RNP, Cons_nr_RNP,
|
||||
GenModNP, ComplBareVS, CompoundN, CompoundAP,
|
||||
GerundCN, GerundNP, GerundAdv, ByVP, InOrderToVP,
|
||||
ApposNP, UttVPShort, ComplSlashPartLast,
|
||||
PositAdVAdj,
|
||||
UseDAP, UseDAPMasc, UseDAPFem,
|
||||
BaseComp, ConsComp, ConjComp, BaseImp, ConsImp, ConjImp
|
||||
]
|
||||
with
|
||||
(Grammar = GrammarAfr) **
|
||||
|
||||
open
|
||||
ParadigmsAfr, ResAfr in {
|
||||
ParadigmsAfr, ResAfr, Coordination, Prelude in {
|
||||
|
||||
lincat
|
||||
VPS = {s : Order => Agr => Str} ;
|
||||
[VPS] = {s1,s2 : Order => Agr => Str} ;
|
||||
VPI = {s : Agr => Str} ;
|
||||
[VPI] = {s1,s2 : Agr => Str} ;
|
||||
|
||||
lin BaseVPS = twoTable2 Order Agr ;
|
||||
ConsVPS = consrTable2 Order Agr comma ;
|
||||
MkVPS tm pol vp = {
|
||||
s = \\o,a => (mkClause [] a vp).s ! tm.t ! tm.a ! pol.p ! o
|
||||
} ;
|
||||
ConjVPS conj vps = conjunctDistrTable2 Order Agr conj vps ;
|
||||
PredVPS np vps = {
|
||||
s = \\o => case o of {
|
||||
Main | Sub => np.s ! NPNom ++ vps.s ! o ! np.a ;
|
||||
Inv => vps.s ! Inv ! np.a ++ np.s ! NPNom
|
||||
}
|
||||
} ;
|
||||
|
||||
BaseVPI = twoTable Agr ;
|
||||
ConsVPI = consrTable Agr comma ;
|
||||
MkVPI vp = {s = \\a => infVPString vp a} ;
|
||||
ConjVPI conj vpis = conjunctDistrTable Agr conj vpis ;
|
||||
ComplVPIVV vv vpi = insertInf (vpi.s ! agrP3 Sg) (predVGen vv.isAux vv) ;
|
||||
|
||||
lincat
|
||||
RNP = {s : Agr => Str ; isPron : Bool} ;
|
||||
RNPList = {s1,s2 : Agr => Str} ;
|
||||
|
||||
lin ReflRNP vps rnp = insertObjNP rnp.isPron (\\a => appPrep vps.c2 (\\_ => rnp.s ! a)) vps ;
|
||||
ReflPron = {s = reflPron ; isPron = True} ;
|
||||
ReflPoss num cn = {
|
||||
s = \\a => reflPossDet a ++ num.s ++ cn.s ! Strong ! NF num.n Nom ;
|
||||
isPron = False
|
||||
} ;
|
||||
PredetRNP pred rnp = {
|
||||
s = \\a => pred.s ! a.n ! a.g ++ rnp.s ! a ;
|
||||
isPron = False
|
||||
} ;
|
||||
AdvRNP np prep rnp = {
|
||||
s = \\a => np.s ! NPAcc ++ prep.s ++ rnp.s ! a ;
|
||||
isPron = False
|
||||
} ;
|
||||
AdvRVP vp prep rnp = insertObj (\\a => prep.s ++ rnp.s ! a) vp ;
|
||||
AdvRAP ap prep rnp = {
|
||||
s = \\af => ap.s ! af ++ prep.s ++ rnp.s ! agrP3 Sg ;
|
||||
isPre = False
|
||||
} ;
|
||||
ReflA2RNP a rnp = {
|
||||
s = \\af => a.s ! Posit ! af ++ a.c2 ++ rnp.s ! agrP3 Sg ;
|
||||
isPre = False
|
||||
} ;
|
||||
PossPronRNP pron num cn rnp = heavyNP {
|
||||
s = \\c => pron.unstressed.poss ++ num.s ++ cn.s ! Strong ! NF num.n Nom ++
|
||||
"van" ++ rnp.s ! pron.a ;
|
||||
a = agrP3 num.n
|
||||
} ;
|
||||
ConjRNP conj rnps = conjunctDistrTable Agr conj rnps ** {isPron = False} ;
|
||||
Base_rr_RNP = twoTable Agr ;
|
||||
Base_nr_RNP np rnp = twoTable Agr {s = \\_ => np.s ! NPAcc} rnp ;
|
||||
Base_rn_RNP rnp np = twoTable Agr rnp {s = \\_ => np.s ! NPAcc} ;
|
||||
Cons_rr_RNP = consrTable Agr comma ;
|
||||
Cons_nr_RNP np rnps = consrTable Agr comma {s = \\_ => np.s ! NPAcc} rnps ;
|
||||
|
||||
lin GenModNP num np cn = heavyNP {
|
||||
s = \\c => np.s ! NPNom ++ "se" ++ cn.s ! Strong ! NF num.n Nom ;
|
||||
a = agrP3 num.n
|
||||
} ;
|
||||
ComplBareVS v s = insertExtrapos (s.s ! Sub) (predV v) ;
|
||||
|
||||
CompoundN n1 n2 = {
|
||||
s = \\f => n1.s ! NF Sg Nom ++ BIND ++ n2.s ! f ;
|
||||
g = n2.g
|
||||
} ;
|
||||
CompoundAP noun adj = {
|
||||
s = \\af => noun.s ! NF Sg Nom ++ BIND ++ adj.s ! Posit ! af ;
|
||||
isPre = True
|
||||
} ;
|
||||
|
||||
PresPartAP vp = {
|
||||
s = \\_ => "wat" ++ (mkClause [] (agrP3 Sg) vp).s ! Pres ! Simul ! Pos ! Sub ;
|
||||
isPre = False
|
||||
} ;
|
||||
PastPartAP vp = {
|
||||
s = \\_ => partVP vp (agrP3 Sg) ;
|
||||
isPre = True
|
||||
} ;
|
||||
PastPartAgentAP vp np = {
|
||||
s = \\_ => partVP vp (agrP3 Sg) ++ "door" ++ np.s ! NPAcc ;
|
||||
isPre = False
|
||||
} ;
|
||||
ProgrVPSlash vp = vp ;
|
||||
GerundCN vp = {
|
||||
s = \\_,_ => infVPString vp (agrP3 Sg) ;
|
||||
g = Neutr
|
||||
} ;
|
||||
GerundNP vp = heavyNP {
|
||||
s = \\_ => infVPString vp (agrP3 Sg) ;
|
||||
a = agrP3 Sg
|
||||
} ;
|
||||
GerundAdv vp = {s = "door" ++ infVPString vp (agrP3 Sg)} ;
|
||||
ByVP vp = {s = "door" ++ infVPString vp (agrP3 Sg)} ;
|
||||
InOrderToVP vp = {s = "om" ++ infVPString vp (agrP3 Sg)} ;
|
||||
|
||||
ApposNP np1 np2 = heavyNP {
|
||||
s = \\c => np1.s ! c ++ "," ++ np2.s ! c ;
|
||||
a = np1.a
|
||||
} ;
|
||||
PositAdVAdj a = {s = a.s ! Posit ! APred} ;
|
||||
UttVPShort vp = {s = vp.s.s ! VInf ++ vp.n2 ! agrP3 Sg ++ vp.a2} ;
|
||||
ComplSlashPartLast vps np = insertObjNP np.isPron
|
||||
(\\_ => np.s ! NPAcc ++ vps.c2) (vps ** {c2 = []}) ;
|
||||
|
||||
UseDAP dap = heavyNP {
|
||||
s = \\_ => dap.sp ! Neutr ;
|
||||
a = agrP3 dap.n
|
||||
} ;
|
||||
UseDAPMasc = UseDAP ;
|
||||
UseDAPFem = UseDAP ;
|
||||
|
||||
lincat [Comp] = {s1,s2 : Agr => Str} ;
|
||||
lin BaseComp = twoTable Agr ;
|
||||
ConsComp = consrTable Agr comma ;
|
||||
ConjComp = conjunctDistrTable Agr ;
|
||||
|
||||
lincat [Imp] = {s1,s2 : Polarity => ImpForm => Str} ;
|
||||
lin BaseImp = twoTable2 Polarity ImpForm ;
|
||||
ConsImp = consrTable2 Polarity ImpForm comma ;
|
||||
ConjImp = conjunctDistrTable2 Polarity ImpForm ;
|
||||
|
||||
-- KA: guessed from PassV2 in Afrikaans and the equivalents in Dutch
|
||||
lin PassVPSlash vps =
|
||||
@@ -12,4 +157,17 @@ lin PassVPSlash vps =
|
||||
PassAgentVPSlash vps np =
|
||||
insertAdv (appPrep "door" np.s) (insertInf (vps.s.s ! VPerf) (predV word_V)) ;
|
||||
|
||||
oper
|
||||
infVPString : ResAfr.VP -> Agr -> Str = \vp,a ->
|
||||
"om" ++ vp.n0 ! a ++ vp.n2 ! a ++ vp.a2 ++ "te" ++
|
||||
vp.s.s ! VInf ++ vp.inf.p1 ++ vp.ext ;
|
||||
|
||||
partVP : ResAfr.VP -> Agr -> Str = \vp,a ->
|
||||
vp.s.s ! VPerf ++ vp.n0 ! a ++ vp.n2 ! a ++ vp.a2 ++ vp.inf.p1 ++ vp.ext ;
|
||||
|
||||
reflPossDet : Agr -> Str = \a -> case <a.n,a.p> of {
|
||||
<Sg,P1> => "my" ; <Sg,P2> => "jou" ; <Sg,P3> => "sy" ;
|
||||
<Pl,P1> => "ons" ; <Pl,P2> => "julle" ; <Pl,P3> => "hulle"
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -20,6 +20,10 @@ concrete IdiomAfr of Idiom = CatAfr **
|
||||
(insertObj (\\_ => np.s ! NPNom)
|
||||
(predV zijn_V)) ;
|
||||
|
||||
ExistNPAdv np adv =
|
||||
mkClause "daar" (agrP3 np.a.n)
|
||||
(insertAdv adv.s (insertObj (\\_ => np.s ! NPNom) (predV zijn_V))) ;
|
||||
|
||||
ExistIP ip = {
|
||||
s = \\t,a,p =>
|
||||
let
|
||||
@@ -32,6 +36,24 @@ concrete IdiomAfr of Idiom = CatAfr **
|
||||
}
|
||||
} ;
|
||||
|
||||
ExistIPAdv ip adv = {
|
||||
s = \\t,a,p =>
|
||||
let cls = (mkClause "daar" (agrP3 ip.n)
|
||||
(insertAdv adv.s (predV zijn_V))).s ! t ! a ! p ;
|
||||
who = ip.s ! NPNom
|
||||
in table {
|
||||
QDir => who ++ cls ! Inv ;
|
||||
QIndir => who ++ cls ! Sub
|
||||
}
|
||||
} ;
|
||||
|
||||
SelfAdvVP vp = insertAdv (reflPron ! agrP3 Sg) vp ;
|
||||
SelfAdVVP vp = insertAdV (reflPron ! agrP3 Sg) vp ;
|
||||
SelfNP np = heavyNP {
|
||||
s = \\c => np.s ! c ++ reflPron ! np.a ;
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
ProgrVP vp = insertAdv ("aan" ++ "die" ++ useInfVP True vp) (predV zijn_V) ; --afr
|
||||
|
||||
ImpPl1 vp =
|
||||
|
||||
@@ -3,5 +3,6 @@
|
||||
concrete LangAfr of Lang =
|
||||
GrammarAfr,
|
||||
LexiconAfr
|
||||
,ConstructionAfr
|
||||
,DocumentationAfr --# notpresent
|
||||
;
|
||||
|
||||
@@ -39,6 +39,11 @@ concrete NounAfr of Noun = CatAfr ** open ResAfr, Prelude in {
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
ExtAdvNP np adv = heavyNP {
|
||||
s = \\c => np.s ! c ++ "," ++ adv.s ++ "," ;
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
DetQuantOrd quant num ord =
|
||||
let
|
||||
n = num.n ;
|
||||
@@ -173,6 +178,30 @@ concrete NounAfr of Noun = CatAfr ** open ResAfr, Prelude in {
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
PossNP cn np = {
|
||||
s = \\a,nc => cn.s ! a ! nc ++ "van" ++ np.s ! NPNom ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
PartNP cn np = {
|
||||
s = \\a,nc => cn.s ! a ! nc ++ "van" ++ np.s ! NPAcc ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
CountNP det np = heavyNP {
|
||||
s = \\c => det.s ! Neutr ++ "van" ++ np.s ! c ;
|
||||
a = agrP3 det.n
|
||||
} ;
|
||||
|
||||
DetDAP det = det ;
|
||||
|
||||
AdjDAP dap ap = {
|
||||
s = \\g => dap.s ! g ++ ap.s ! AAttr ;
|
||||
sp = \\g => dap.sp ! g ++ ap.s ! AAttr ;
|
||||
n = dap.n ;
|
||||
a = dap.a
|
||||
} ;
|
||||
|
||||
ApposCN cn np = let g = cn.g in {
|
||||
s = \\a,nc => cn.s ! a ! nc ++ np.s ! NPNom ;
|
||||
g = g ;
|
||||
|
||||
@@ -40,18 +40,49 @@ lin
|
||||
pot1plus d e = addAttr {s = \\g =>
|
||||
e.s ! DUnit ! invNum ++ BIND ++ e.en ++ BIND ++ d.s ! DTen ! g ; n = Pl} ;
|
||||
pot1as2 n = n ;
|
||||
pot21 = addAttr {s = cardOrd "honderd" "honderdste" ; n = Pl} ;
|
||||
pot2 d =
|
||||
addAttr {s = \\g => d.attr ++ cardOrd "honderd" "honderdste" ! g ; n = Pl} ;
|
||||
pot2plus d e =
|
||||
addAttr {s = \\g => d.attr ++ "honderd" ++ BIND ++ e.s ! g ; n = Pl} ;
|
||||
pot2as3 n = n ;
|
||||
pot31 = addAttr {s = cardOrd "duisend" "duisendste" ; n = Pl} ;
|
||||
pot3 n =
|
||||
addAttr {s = \\g => n.attr ++ cardOrd "duisend" "duisendste" ! g ; n = Pl} ;
|
||||
pot3plus n m =
|
||||
addAttr {s = \\g => n.attr ++ "duisend" ++ m.s ! g ; n = Pl} ;
|
||||
|
||||
pot3as4 n = n ;
|
||||
pot3decimal d = addAttr {s = d.s ; n = d.n} ;
|
||||
|
||||
pot41 = addAttr {s = cardOrd "een miljoen" "miljoenste" ; n = Pl} ;
|
||||
pot4 n = addAttr {
|
||||
s = \\g => n.s ! invNum ++ cardOrd "miljoen" "miljoenste" ! g ;
|
||||
n = Pl
|
||||
} ;
|
||||
pot4plus n m = addAttr {
|
||||
s = \\g => n.s ! invNum ++ "miljoen" ++ m.s ! g ;
|
||||
n = Pl
|
||||
} ;
|
||||
pot4as5 n = n ;
|
||||
pot4decimal d = addAttr {
|
||||
s = \\g => d.s ! invNum ++ cardOrd "miljoen" "miljoenste" ! g ;
|
||||
n = Pl
|
||||
} ;
|
||||
|
||||
pot51 = addAttr {s = cardOrd "een miljard" "miljardste" ; n = Pl} ;
|
||||
pot5 n = addAttr {
|
||||
s = \\g => n.s ! invNum ++ cardOrd "miljard" "miljardste" ! g ;
|
||||
n = Pl
|
||||
} ;
|
||||
pot5plus n m = addAttr {
|
||||
s = \\g => n.s ! invNum ++ "miljard" ++ m.s ! g ;
|
||||
n = Pl
|
||||
} ;
|
||||
pot5decimal d = addAttr {
|
||||
s = \\g => d.s ! invNum ++ cardOrd "miljard" "miljardste" ! g ;
|
||||
n = Pl
|
||||
} ;
|
||||
|
||||
lincat
|
||||
Dig = TDigit ;
|
||||
|
||||
@@ -275,6 +275,18 @@ oper
|
||||
|
||||
|
||||
|
||||
oper
|
||||
mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
|
||||
mkAdA : Str -> AdA = \s -> lin AdA {s=s} ;
|
||||
mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
|
||||
mkACard : Str -> ACard = \s -> lin ACard {s=s} ;
|
||||
mkCard : Str -> Number -> Card = \s,n -> lin Card {s=\\_,_=>s; n=n} ;
|
||||
mkConj : Str -> Number -> Conj = \s,n -> lin Conj {s1=[]; s2=s; n=n} ;
|
||||
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
|
||||
mkIDet : Str -> Number -> IDet = \s,n -> lin IDet {s=\\_=>s; n=n} ;
|
||||
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_,_=>s} ;
|
||||
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=[]} ;
|
||||
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
|
||||
|
||||
|
||||
----2 Definitions of paradigms
|
||||
|
||||
@@ -62,6 +62,16 @@ concrete SentenceAfr of Sentence = CatAfr ** open ResAfr, Prelude in {
|
||||
|
||||
AdvS a s = {s = \\o => a.s ++ s.s ! Inv} ;
|
||||
|
||||
ExtAdvS a s = {s = \\o => a.s ++ "," ++ s.s ! Inv} ;
|
||||
|
||||
SSubjS s1 subj s2 = {
|
||||
s = \\o => s1.s ! o ++ "," ++ subj.s ++ s2.s ! Sub
|
||||
} ;
|
||||
|
||||
AdvImp adv imp = {
|
||||
s = \\p,i => adv.s ++ imp.s ! p ! i
|
||||
} ;
|
||||
|
||||
RelS s r = {s = \\o => s.s ! o ++ "," ++ r.s ! Neutr ! Sg} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -78,8 +78,14 @@ concrete VerbAfr of Verb = CatAfr ** open Prelude, ResAfr in {
|
||||
CompAdv a = {s = \\_ => a.s} ;
|
||||
|
||||
AdvVP vp adv = insertAdv adv.s vp ;
|
||||
ExtAdvVP vp adv = insertAdv ("," ++ adv.s ++ ",") vp ;
|
||||
AdVVP adv vp = insertAdV adv.s vp ;
|
||||
|
||||
AdvVPSlash vp adv = vp ** {a2 = vp.a2 ++ adv.s} ;
|
||||
AdVVPSlash adv vp = vp ** {a1 = \\a => adv.s ++ vp.a1 ! a} ;
|
||||
|
||||
VPSlashPrep vp prep = vp ** {c2 = prep.s} ;
|
||||
|
||||
ReflVP vp = insertObj (\\a => appPrep vp.c2 (\\_ => reflPron ! a )) vp ;
|
||||
|
||||
PassV2 v = insertInf (v.s ! VPerf) (predV word_V) ;
|
||||
|
||||
@@ -1,11 +1,26 @@
|
||||
concrete AdjectiveSqi of Adjective = CatSqi ** open ResSqi, Prelude in {
|
||||
|
||||
oper
|
||||
adjForm : A -> Species => Case => Gender => Number => Str = \a -> \\sp,c,g,n =>
|
||||
case a.clit of {
|
||||
True => link_clitic ! sp ! c ! g ! n ++ a.s ! c ! g ! n ;
|
||||
False => a.s ! c ! g ! n
|
||||
} ;
|
||||
|
||||
lin
|
||||
PositA a = {
|
||||
s = \\spec,c,g,n => case a.clit of {
|
||||
True => link_clitic ! spec ! c ! g ! n ++ a.s ! c ! g ! n ;
|
||||
False => a.s ! c ! g ! n
|
||||
}
|
||||
} ;
|
||||
s = adjForm a
|
||||
} ;
|
||||
|
||||
ComparA a np = {s=\\sp,c,g,n=>"më" ++ adjForm a ! sp ! c ! g ! n ++ "se" ++ np.s ! Ablat} ;
|
||||
UseComparA a = {s=\\sp,c,g,n=>"më" ++ adjForm a ! sp ! c ! g ! n} ;
|
||||
ComplA2 a np = {s=\\sp,c,g,n=>adjForm (lin A a) ! sp ! c ! g ! n ++ a.c2.s ++ np.s ! a.c2.c} ;
|
||||
UseA2 a = PositA a ;
|
||||
ReflA2 a = {s=\\sp,c,g,n=>adjForm (lin A a) ! sp ! c ! g ! n ++ a.c2.s ++ "vetveten"} ;
|
||||
CAdvAP cadv ap np = {s=\\sp,c,g,n=>cadv.s ++ ap.s ! sp ! c ! g ! n ++ cadv.p ++ np.s ! Ablat} ;
|
||||
AdjOrd ord = {s=\\_,c,g,n=>ord.s ! c ! g ! n} ;
|
||||
SentAP ap sc = {s=\\sp,c,g,n=>ap.s ! sp ! c ! g ! n ++ "që" ++ sc.s} ;
|
||||
AdAP ada ap = {s=\\sp,c,g,n=>ada.s ++ ap.s ! sp ! c ! g ! n} ;
|
||||
AdvAP ap adv = {s=\\sp,c,g,n=>ap.s ! sp ! c ! g ! n ++ adv.s} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
concrete AdverbSqi of Adverb = CatSqi ** open Prelude, ResSqi in {
|
||||
lin
|
||||
PositAdvAdj a = {s=a.s ! Nom ! Masc ! Sg} ;
|
||||
PrepNP p np = {s=p.s ++ np.s ! p.c} ;
|
||||
ComparAdvAdj c a np = {s=c.s ++ a.s ! Nom ! Masc ! Sg ++ c.p ++ np.s ! Ablat} ;
|
||||
ComparAdvAdjS c a s = {s=c.s ++ a.s ! Nom ! Masc ! Sg ++ c.p ++ s.s} ;
|
||||
AdAdv a adv = {s=a.s ++ adv.s} ;
|
||||
PositAdAAdj a = {s=a.s ! Nom ! Masc ! Sg} ;
|
||||
SubjS subj s = {s=subj.s ++ s.s} ;
|
||||
AdnCAdv c = {s=c.s ++ c.p} ;
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
concrete AllSqi of AllSqiAbs =
|
||||
LangSqi
|
||||
LangSqi,
|
||||
ExtendSqi,
|
||||
IrregSqi
|
||||
**
|
||||
{} ;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
abstract AllSqiAbs =
|
||||
Lang
|
||||
Lang,
|
||||
Extend,
|
||||
IrregSqiAbs
|
||||
** {}
|
||||
|
||||
+82
-23
@@ -1,25 +1,84 @@
|
||||
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 ;
|
||||
linref A = \a -> case a.clit of {True=>"i"; False=>[]} ++ a.s ! Nom ! Masc ! Sg ;
|
||||
lincat A2 = Adj ** {c2 : Compl} ;
|
||||
linref A2 = \a -> case a.clit of {True=>"i"; False=>[]} ++ a.s ! Nom ! Masc ! Sg ++ a.c2.s ;
|
||||
lincat V, VA, VV, VS, VQ = Verb ;
|
||||
lincat V2 = Verb ** {c2 : Compl} ;
|
||||
lincat V2S, V2Q, 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 : ParamX.Tense => Anteriority => Polarity => Str} ;
|
||||
lincat ClSlash = {s : ParamX.Tense => Anteriority => Polarity => Str; c2 : Compl} ;
|
||||
lincat Comp = {s : Agr => Str} ;
|
||||
lincat Conj = {s : Str} ;
|
||||
lincat DAP = {s : Str; n : Number} ;
|
||||
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
|
||||
lincat Det = {
|
||||
s : Case => Gender => Str;
|
||||
post : Species => Case => Gender => Str;
|
||||
sp : Species;
|
||||
n : Number
|
||||
} ;
|
||||
lincat Digits = {s : Str; n : Number; tail : DTail} ;
|
||||
lincat GN = {s : Str} ;
|
||||
lincat IComp = {s : Str} ;
|
||||
lincat IDet = {s : Gender => Str; n : Number} ;
|
||||
lincat IP = {s : Str; a : Agr} ;
|
||||
lincat IQuant = {s : Gender => Str} ;
|
||||
lincat Imp = {s : Polarity => Number => Str} ;
|
||||
lincat LN = {s : Str} ;
|
||||
lincat N = Noun ;
|
||||
lincat N2 = {s : Species => Case => Number => Str; g : Gender;
|
||||
c2 : Compl} ;
|
||||
lincat N3 = {s : Species => Case => Number => Str; g : Gender;
|
||||
c2 : Compl; c3 : Compl} ;
|
||||
lincat NP = {s : Case => Str; a : Agr} ;
|
||||
lincat Num = {s : Str; n : Number} ;
|
||||
lincat Numeral = {s : Str} ;
|
||||
lincat Ord = {s : Case => Gender => Number => Str} ;
|
||||
lincat PN = {s : Str} ;
|
||||
lincat Predet = {s : Str} ;
|
||||
lincat Pron = {
|
||||
s: Case => Str;
|
||||
acc_clit, dat_clit : Str;
|
||||
poss : Case => Gender => Number => Str;
|
||||
a : Agr
|
||||
} ;
|
||||
lincat QCl = {s : ParamX.Tense => Anteriority => Polarity => Str} ;
|
||||
lincat QS = {s : Str} ;
|
||||
lincat Quant = {
|
||||
s : Case => Gender => Number => Str;
|
||||
sp : Species;
|
||||
isPoss : Bool
|
||||
} ;
|
||||
lincat RCl = {s : Agr => ParamX.Tense => Anteriority => Polarity => Str} ;
|
||||
lincat RP = {s : Case => GenNum => Str} ;
|
||||
lincat RS = {s : Agr => Str} ;
|
||||
lincat S = {s : Str} ;
|
||||
lincat SN = {s : Str} ;
|
||||
lincat SSlash = {s : Str; c2 : Compl} ;
|
||||
lincat Subj = {s : Str} ;
|
||||
lincat VP = {indicative : Tense => Number => Person => Gender => Case => Str;
|
||||
subjunctive : Number => Person => Gender => Case => Str;
|
||||
imperative : Number => Case => Str;
|
||||
participle : Agr => 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;
|
||||
vtype : VType} ;
|
||||
|
||||
lincat VPSlash = {indicative : Tense => Number => Person => Str;
|
||||
subjunctive : 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;
|
||||
vtype : VType;
|
||||
c2 : Compl} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
concrete ConjunctionSqi of Conjunction = CatSqi ** open ResSqi, Prelude, ParamX in {
|
||||
lincat
|
||||
[S] = {first,last : Str} ;
|
||||
[RS] = {first,last : Agr => Str} ;
|
||||
[Adv] = {first,last : Str} ;
|
||||
[AdV] = {first,last : Str} ;
|
||||
[IAdv] = {first,last : Str} ;
|
||||
[NP] = {first,last : Case => Str; a : Agr} ;
|
||||
[AP] = {first,last : Species=>Case=>Gender=>Number=>Str} ;
|
||||
[CN] = {first,last : Species=>Case=>Number=>Str; g:Gender} ;
|
||||
[DAP] = {first,last : Str; n:Number} ;
|
||||
lin
|
||||
BaseS x y={first=x.s;last=y.s}; ConsS x xs={first=x.s++","++xs.first;last=xs.last}; ConjS c xs={s=xs.first++c.s++xs.last};
|
||||
BaseAdv x y={first=x.s;last=y.s}; ConsAdv x xs={first=x.s++","++xs.first;last=xs.last}; ConjAdv c xs={s=xs.first++c.s++xs.last};
|
||||
BaseAdV x y={first=x.s;last=y.s}; ConsAdV x xs={first=x.s++","++xs.first;last=xs.last}; ConjAdV c xs={s=xs.first++c.s++xs.last};
|
||||
BaseIAdv x y={first=x.s;last=y.s}; ConsIAdv x xs={first=x.s++","++xs.first;last=xs.last}; ConjIAdv c xs={s=xs.first++c.s++xs.last};
|
||||
BaseNP x y={first=x.s;last=y.s;a={gn=GPl;p=P3}};
|
||||
ConsNP x xs={first=\\k=>x.s!k++","++xs.first!k;last=xs.last;a={gn=GPl;p=P3}};
|
||||
ConjNP c xs={s=\\k=>xs.first!k++c.s++xs.last!k;a=xs.a};
|
||||
BaseAP x y={first=x.s;last=y.s}; ConsAP x xs={first=\\sp,k,g,n=>x.s!sp!k!g!n++","++xs.first!sp!k!g!n;last=xs.last};
|
||||
ConjAP c xs={s=\\sp,k,g,n=>xs.first!sp!k!g!n++c.s++xs.last!sp!k!g!n};
|
||||
BaseRS x y={first=x.s;last=y.s}; ConsRS x xs={first=\\a=>x.s!a++","++xs.first!a;last=xs.last}; ConjRS c xs={s=\\a=>xs.first!a++c.s++xs.last!a};
|
||||
BaseCN x y={first=x.s;last=y.s;g=x.g}; ConsCN x xs={first=\\sp,k,n=>x.s!sp!k!n++","++xs.first!sp!k!n;last=xs.last;g=xs.g};
|
||||
ConjCN c xs={s=\\sp,k,n=>xs.first!sp!k!n++c.s++xs.last!sp!k!n;g=xs.g};
|
||||
BaseDAP x y={first=x.s;last=y.s;n=Pl}; ConsDAP x xs={first=x.s++","++xs.first;last=xs.last;n=Pl};
|
||||
ConjDet c xs={s=\\_,_=>xs.first++c.s++xs.last;post=\\_,_,_=>[];n=xs.n;sp=Def};
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
concrete ConstructionSqi of Construction = CatSqi **
|
||||
open Prelude, ParamX, ResSqi, ParadigmsSqi, GrammarSqi in {
|
||||
|
||||
lincat
|
||||
Timeunit = N ;
|
||||
Hour = {s:Str} ;
|
||||
Weekday = N ;
|
||||
Month = N ;
|
||||
Monthday = {s:Str} ;
|
||||
Year = {s:Str} ;
|
||||
Language = N ;
|
||||
|
||||
oper
|
||||
adjVP : A -> VP = \a -> UseComp (CompAP (PositA a)) ;
|
||||
appendVP : VP -> Str -> VP = \v,s -> v ** {
|
||||
indicative=\\t,n,p,g,c=>v.indicative!t!n!p!g!c++s;
|
||||
subjunctive=\\n,p,g,c=>v.subjunctive!n!p!g!c++s;
|
||||
imperative=\\n,c=>v.imperative!n!c++s;
|
||||
participle=\\a,c=>v.participle!a!c++s
|
||||
} ;
|
||||
hour : Str -> Hour = \s -> lin Hour {s=s} ;
|
||||
|
||||
lin
|
||||
hungry_VP=adjVP (mkA "uritur"); thirsty_VP=adjVP (mkA "etur");
|
||||
tired_VP=adjVP (mkA "lodhur"); scared_VP=adjVP (mkA "frikësuar");
|
||||
ill_VP=adjVP (mkA "sëmurë"); ready_VP=adjVP (mkA "gatshëm");
|
||||
has_age_VP c=appendVP (UseV (irregV "kam" "ke" "ka" "kemi" "keni" "kanë" "ki" "kini" "pasur")) (c.s++"vjeç");
|
||||
n_units_AP c unit a={s=\\sp,k,g,n=>c.s++unit.s!Indef!Nom!Pl++(PositA a).s!sp!k!g!n};
|
||||
n_units_of_NP c unit np={s=\\_=>c.s++unit.s!Indef!Nom!Pl++"nga"++np.s!Ablat;a={gn=GPl;p=P3}};
|
||||
n_unit_CN c unit cn={s=\\sp,k,n=>c.s++unit.s!Indef!Nom!Sg++cn.s!sp!k!n;g=cn.g};
|
||||
bottle_of_CN np={s=\\sp,k,n=>(mkN "shishe").s!sp!k!n++"me"++np.s!Acc;g=Fem};
|
||||
cup_of_CN np={s=\\sp,k,n=>(mkN "filxhan").s!sp!k!n++"me"++np.s!Acc;g=Masc};
|
||||
glass_of_CN np={s=\\sp,k,n=>(mkN "gotë").s!sp!k!n++"me"++np.s!Acc;g=Fem};
|
||||
|
||||
timeunitAdv c u={s="për"++c.s++u.s!Indef!Acc!Pl};
|
||||
timeunitRange a b u={s="nga"++a.s++"deri në"++b.s++u.s!Indef!Acc!Pl};
|
||||
oneHour=hour "1"; twoHour=hour "2"; threeHour=hour "3"; fourHour=hour "4";
|
||||
fiveHour=hour "5"; sixHour=hour "6"; sevenHour=hour "7"; eightHour=hour "8";
|
||||
nineHour=hour "9"; tenHour=hour "10"; elevenHour=hour "11"; twelveHour=hour "12";
|
||||
thirteenHour=hour "13"; fourteenHour=hour "14"; fifteenHour=hour "15"; sixteenHour=hour "16";
|
||||
seventeenHour=hour "17"; eighteenHour=hour "18"; nineteenHour=hour "19"; twentyHour=hour "20";
|
||||
twentyOneHour=hour "21"; twentyTwoHour=hour "22"; twentyThreeHour=hour "23"; twentyFourHour=hour "24";
|
||||
timeHour h={s="në orën"++h.s}; timeHourMinute h m={s="në orën"++h.s++SOFT_BIND++":"++SOFT_BIND++m.s};
|
||||
|
||||
weekdayPunctualAdv w={s="të"++w.s!Def!Acc!Sg};
|
||||
weekdayHabitualAdv w={s="të"++w.s!Def!Acc!Pl};
|
||||
weekdayLastAdv w={s="të"++w.s!Def!Acc!Sg++"e kaluar"};
|
||||
weekdayNextAdv w={s="të"++w.s!Def!Acc!Sg++"e ardhshme"};
|
||||
monthAdv m={s="në"++m.s!Indef!Acc!Sg}; yearAdv y={s="në"++y.s};
|
||||
dayMonthAdv d m={s="më"++d.s++m.s!Indef!Acc!Sg};
|
||||
monthYearAdv m y={s="në"++m.s!Indef!Acc!Sg++y.s};
|
||||
dayMonthYearAdv d m y={s="më"++d.s++m.s!Indef!Acc!Sg++y.s};
|
||||
intYear i={s=i.s}; intMonthday i={s=i.s};
|
||||
weekdayN w=w; monthN m=m;
|
||||
weekdayPN w=mkPN (w.s!Indef!Nom!Sg); monthPN m=mkPN (m.s!Indef!Nom!Sg);
|
||||
|
||||
second_Timeunit=mkN "sekondë"; minute_Timeunit=mkN "minutë"; hour_Timeunit=mkN "orë";
|
||||
day_Timeunit=mkN "ditë"; week_Timeunit=mkN "javë"; month_Timeunit=mkN "muaj"; year_Timeunit=mkN "vit";
|
||||
monday_Weekday=mkN "e hënë"; tuesday_Weekday=mkN "e martë"; wednesday_Weekday=mkN "e mërkurë";
|
||||
thursday_Weekday=mkN "e enjte"; friday_Weekday=mkN "e premte"; saturday_Weekday=mkN "e shtunë"; sunday_Weekday=mkN "e diel";
|
||||
january_Month=mkN "janar"; february_Month=mkN "shkurt"; march_Month=mkN "mars"; april_Month=mkN "prill";
|
||||
may_Month=mkN "maj"; june_Month=mkN "qershor"; july_Month=mkN "korrik"; august_Month=mkN "gusht";
|
||||
september_Month=mkN "shtator"; october_Month=mkN "tetor"; november_Month=mkN "nëntor"; december_Month=mkN "dhjetor";
|
||||
}
|
||||
@@ -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)) ++
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
concrete ExtendSqi of Extend = CatSqi **
|
||||
open Prelude, ParamX, ResSqi, GrammarSqi, (I=IrregSqi) in {
|
||||
|
||||
lincat
|
||||
RNP = {s : Agr => Case => Str; isPron : Bool} ;
|
||||
RNPList = {first,last : Agr => Case => Str} ;
|
||||
VPS = {s : Agr => Str} ;
|
||||
VPI = {s : Agr => Str} ;
|
||||
[VPS] = {first,last : Agr => Str} ;
|
||||
[VPI] = {first,last : Agr => Str} ;
|
||||
[Comp] = {first,last : Agr => Str} ;
|
||||
[Imp] = {first,last : Polarity => Number => Str} ;
|
||||
|
||||
oper
|
||||
baseVP : Verb -> VP = \v -> lin VP {
|
||||
indicative = \\t,n,p,_,_ => v.indicative ! t ! n ! p ;
|
||||
subjunctive = \\n,p,_,_ => subjunctiveForm v.vtype
|
||||
(v.indicative ! ResSqi.Pres ! Sg ! P1)
|
||||
(v.indicative ! ResSqi.Pres ! n ! p) n p ;
|
||||
imperative = \\n,_ => v.imperative ! n ;
|
||||
participle = \\_,_ => v.participle ;
|
||||
pres_optative = \\n,p,_ => v.pres_optative ! n ! p ;
|
||||
perf_optative = \\n,p,_ => v.perf_optative ! n ! p ;
|
||||
pres_admirative = \\n,p,_ => v.pres_admirative ! n ! p ;
|
||||
imperf_admirative = \\n,p,_ => v.imperf_admirative ! n ! p ;
|
||||
vtype = v.vtype
|
||||
} ;
|
||||
|
||||
extAddVP : VP -> (Agr => Str) -> VP = \v,x -> v ** {
|
||||
indicative = \\t,n,p,g,c => v.indicative ! t ! n ! p ! g ! c ++
|
||||
x ! {gn=genNum g n; p=p} ;
|
||||
subjunctive = \\n,p,g,c => v.subjunctive ! n ! p ! g ! c ++
|
||||
x ! {gn=genNum g n; p=p} ;
|
||||
imperative = \\n,c => v.imperative ! n ! c ++
|
||||
x ! {gn=case n of {Sg=>GSg Masc; Pl=>GPl}; p=P2} ;
|
||||
participle = \\a,c => v.participle ! a ! c ++ x ! a
|
||||
} ;
|
||||
|
||||
baseSlashVP : VPSlash -> VP = \v -> lin VP {
|
||||
indicative = \\t,n,p,_,_ => v.indicative ! t ! n ! p ;
|
||||
subjunctive = \\n,p,_,_ => v.subjunctive ! n ! p ;
|
||||
imperative = \\n,_ => v.imperative ! n ;
|
||||
participle = \\_,_ => v.participle ;
|
||||
pres_optative = \\n,p,_ => v.pres_optative ! n ! p ;
|
||||
perf_optative = \\n,p,_ => v.perf_optative ! n ! p ;
|
||||
pres_admirative = \\n,p,_ => v.pres_admirative ! n ! p ;
|
||||
imperf_admirative = \\n,p,_ => v.imperf_admirative ! n ! p ;
|
||||
vtype = v.vtype
|
||||
} ;
|
||||
|
||||
lin
|
||||
GenModNP n np cn = {
|
||||
s = \\c => cn.s ! Def ! c ! n.n ++
|
||||
link_clitic ! Def ! c ! cn.g ! n.n ++ np.s ! Ablat ;
|
||||
a = agrgP3 cn.g n.n
|
||||
} ;
|
||||
|
||||
EmptyRelSlash cl = {s=\\_,t,a,p=>"që"++cl.s!t!a!p++cl.c2.s} ;
|
||||
|
||||
ReflPron = {
|
||||
s = \\a,c => case <agrNumber a,c> of {
|
||||
<Sg,Acc> => "veten" ; <Pl,Acc> => "veten" ; _ => "vetes"
|
||||
} ;
|
||||
isPron = True
|
||||
} ;
|
||||
ReflPoss n cn = {s=\\_,c=>cn.s!Def!c!n.n; isPron=False} ;
|
||||
PredetRNP p r = r ** {s=\\a,c=>p.s++r.s!a!c} ;
|
||||
AdvRNP np p r = {s=\\a,c=>np.s!c++p.s++r.s!a!p.c; isPron=False} ;
|
||||
AdvRVP vp p r = extAddVP vp (\\a=>p.s++r.s!a!p.c) ;
|
||||
AdvRAP ap p r = {
|
||||
s=\\sp,c,g,n=>ap.s!sp!c!g!n++p.s++r.s!(agrgP3 g n)!p.c
|
||||
} ;
|
||||
PossPronRNP p n cn r = {
|
||||
s=\\c=>cn.s!Def!c!n.n++link_clitic!Def!c!cn.g!n.n++r.s!p.a!Ablat;
|
||||
a=agrgP3 cn.g n.n
|
||||
} ;
|
||||
|
||||
CompoundN a b = {
|
||||
s=\\sp,c,n=>(UseN b).s!sp!c!n++(UseN a).s!Indef!Ablat!Sg;
|
||||
g=b.g
|
||||
} ;
|
||||
CompoundAP n a = {
|
||||
s=\\sp,c,g,num=>(UseN n).s!Indef!Nom!Sg++(PositA a).s!sp!c!g!num
|
||||
} ;
|
||||
GerundCN vp = {s=\\_,_,_=>vp.participle!{gn=GSg Masc;p=P3}!Nom; g=Masc} ;
|
||||
GerundNP vp = {s=\\_=>vp.participle!{gn=GSg Masc;p=P3}!Nom; a={gn=GSg Masc;p=P3}} ;
|
||||
GerundAdv vp = {s="duke"++vp.participle!{gn=GSg Masc;p=P3}!Nom} ;
|
||||
WithoutVP vp = {s="pa"++vp.participle!{gn=GSg Masc;p=P3}!Nom} ;
|
||||
ByVP vp = {s="duke"++vp.participle!{gn=GSg Masc;p=P3}!Nom} ;
|
||||
ApposNP a b = a ** {s=\\c=>a.s!c++SOFT_BIND++","++b.s!c} ;
|
||||
PositAdVAdj a = {s=a.s!Nom!Masc!Sg} ;
|
||||
UttVPShort vp = {s=vp.imperative!Sg!Nom} ;
|
||||
ComplSlashPartLast sl np = ComplSlash sl np ;
|
||||
|
||||
PresPartAP vp = {s=\\_,_,_,_=>"duke"++vp.participle!{gn=GSg Masc;p=P3}!Nom} ;
|
||||
PastPartAP sl = {s=\\_,_,_,_=>sl.participle} ;
|
||||
PastPartAgentAP sl np = {
|
||||
s=\\_,_,_,_=>sl.participle++"nga"++np.s!Nom
|
||||
} ;
|
||||
PassVPSlash sl = extAddVP (baseVP I.jam_V) (\\_=>sl.participle) ;
|
||||
PassAgentVPSlash sl np =
|
||||
extAddVP (baseVP I.jam_V) (\\_=>sl.participle++"nga"++np.s!Nom) ;
|
||||
ProgrVPSlash sl = sl ;
|
||||
ComplBareVS v s = extAddVP (baseVP v) (\\_=>s.s) ;
|
||||
|
||||
MkVPS t p vp = {
|
||||
s=\\a=>(PredVP {s=\\_=>[];a=a} vp).s!t.t!t.a!p.p
|
||||
} ;
|
||||
BaseVPS x y = {first=x.s; last=y.s} ;
|
||||
ConsVPS x xs = {first=\\a=>x.s!a++","++xs.first!a; last=xs.last} ;
|
||||
ConjVPS c xs = {s=\\a=>xs.first!a++c.s++xs.last!a} ;
|
||||
PredVPS np v = {s=v.s!np.a} ;
|
||||
|
||||
MkVPI vp = {s=\\a=>"të"++vp.subjunctive ! agrNumber a ! a.p ! agrGender a ! Nom} ;
|
||||
BaseVPI x y = {first=x.s; last=y.s} ;
|
||||
ConsVPI x xs = {first=\\a=>x.s!a++","++xs.first!a; last=xs.last} ;
|
||||
ConjVPI c xs = {s=\\a=>xs.first!a++c.s++xs.last!a} ;
|
||||
ComplVPIVV v x = extAddVP (baseVP v) (\\a=>x.s!a) ;
|
||||
|
||||
BaseComp x y = {first=x.s; last=y.s} ;
|
||||
ConsComp x xs = {first=\\a=>x.s!a++","++xs.first!a; last=xs.last} ;
|
||||
ConjComp c xs = {s=\\a=>xs.first!a++c.s++xs.last!a} ;
|
||||
|
||||
BaseImp x y = {first=x.s; last=y.s} ;
|
||||
ConsImp x xs = {
|
||||
first=\\p,n=>x.s!p!n++","++xs.first!p!n;
|
||||
last=xs.last
|
||||
} ;
|
||||
ConjImp c xs = {s=\\p,n=>xs.first!p!n++c.s++xs.last!p!n} ;
|
||||
|
||||
UseDAP d = {s=\\_=>d.s; a=agrgP3 Masc d.n} ;
|
||||
UseDAPMasc = UseDAP ;
|
||||
UseDAPFem d = {s=\\_=>d.s; a=agrgP3 Fem d.n} ;
|
||||
TPastSimple = {s=[]; t=ParamX.Past} ;
|
||||
}
|
||||
@@ -1,8 +1,16 @@
|
||||
concrete GrammarSqi of Grammar =
|
||||
NounSqi,
|
||||
VerbSqi,
|
||||
AdjectiveSqi,
|
||||
AdverbSqi,
|
||||
SentenceSqi,
|
||||
QuestionSqi,
|
||||
RelativeSqi,
|
||||
ConjunctionSqi,
|
||||
NumeralSqi,
|
||||
PhraseSqi,
|
||||
IdiomSqi,
|
||||
NamesSqi,
|
||||
StructuralSqi
|
||||
** {
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
concrete IdiomSqi of Idiom = CatSqi ** open Prelude, ParamX, ResSqi in {
|
||||
lin
|
||||
ImpersCl vp = {s=\\t,a,p=>negation p++futureParticle t++vp.indicative!sqiTense t!Sg!P3!Masc!Nom} ;
|
||||
GenericCl vp = {s=\\t,a,p=>"njeriu"++negation p++futureParticle t++vp.indicative!sqiTense t!Sg!P3!Masc!Nom} ;
|
||||
CleftNP np rs = {s=\\_,_,_=>np.s!Nom++rs.s!np.a} ;
|
||||
CleftAdv adv s = {s=\\_,_,_=>adv.s++s.s} ;
|
||||
ExistNP np = {s=\\t,_,p=>negation p++case t of {ParamX.Past=>"pati";_=>"ka"}++np.s!Acc} ;
|
||||
ExistIP ip = {s=\\_,_,p=>negation p++"ka"++ip.s} ;
|
||||
ExistNPAdv np adv = {s=\\t,a,p=>(ExistNP np).s!t!a!p++adv.s} ;
|
||||
ExistIPAdv ip adv = {s=\\t,a,p=>(ExistIP ip).s!t!a!p++adv.s} ;
|
||||
ProgrVP vp = vp ;
|
||||
ImpPl1 vp = {s="le të"++vp.subjunctive!Pl!P1!Masc!Nom} ;
|
||||
ImpP3 np vp = {s="le"++np.s!Nom++"të"++vp.subjunctive!agrNumber np.a!np.a.p!agrGender np.a!Nom} ;
|
||||
SelfAdvVP vp = vp ** {
|
||||
indicative=\\t,n,p,g,c=>vp.indicative!t!n!p!g!c++"vetë";
|
||||
subjunctive=\\n,p,g,c=>vp.subjunctive!n!p!g!c++"vetë"
|
||||
} ;
|
||||
SelfAdVVP vp = vp ** {
|
||||
indicative=\\t,n,p,g,c=>"vetë"++vp.indicative!t!n!p!g!c;
|
||||
subjunctive=\\n,p,g,c=>"vetë"++vp.subjunctive!n!p!g!c
|
||||
} ;
|
||||
SelfNP np = np ** {s=\\c=>np.s!c++"vetë"} ;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
concrete IrregSqi of IrregSqiAbs = CatSqi ** open ParadigmsSqi in {
|
||||
|
||||
lin
|
||||
bej_V = irregV "bëj" "bën" "bën" "bëjmë" "bëni" "bëjnë" "bëj" "bëni" "bërë" ;
|
||||
bie_V = irregV "bie" "bie" "bie" "biem" "bini" "bien" "bjer" "bini" "rënë" ;
|
||||
dal_V = irregV "dal" "del" "del" "dalim" "dilni" "dalin" "dil" "dilni" "dalë" ;
|
||||
dua_V = irregV "dua" "do" "do" "duam" "doni" "duan" "duaj" "doni" "dashur" ;
|
||||
eci_V = irregV "eci" "ecën" "ecën" "ecim" "ecni" "ecin" "ec" "ecni" "ecur" ;
|
||||
ha_V = irregV "ha" "ha" "ha" "hamë" "hani" "hanë" "ha" "hani" "ngrënë" ;
|
||||
hyj_V = irregV "hyj" "hyn" "hyn" "hyjmë" "hyni" "hyjnë" "hyr" "hyni" "hyrë" ;
|
||||
iki_V = irregV "iki" "ikën" "ikën" "ikim" "ikni" "ikin" "ik" "ikni" "ikur" ;
|
||||
jam_V = irregV "jam" "je" "është" "jemi" "jeni" "janë" "ji" "jini" "qenë" ;
|
||||
jap_V = irregV "jap" "jep" "jep" "japim" "jepni" "japin" "jep" "jepni" "dhënë" ;
|
||||
kam_V = irregV "kam" "ke" "ka" "kemi" "keni" "kanë" "ki" "kini" "pasur" ;
|
||||
ngre_V = irregV "ngre" "ngre" "ngre" "ngremë" "ngrini" "ngrenë" "ngre" "ngrini" "ngritur" ;
|
||||
njoh_V = irregV "njoh" "njeh" "njeh" "njohim" "njihni" "njohin" "njih" "njihni" "njohur" ;
|
||||
pi_V = irregV "pi" "pi" "pi" "pimë" "pini" "pinë" "pi" "pini" "pirë" ;
|
||||
shoh_V = irregV "shoh" "sheh" "sheh" "shohim" "shihni" "shohin" "shih" "shihni" "parë" ;
|
||||
them_V = irregV "them" "thua" "thotë" "themi" "thoni" "thonë" "thuaj" "thoni" "thënë" ;
|
||||
urrej_V = irregV "urrej" "urren" "urren" "urrejmë" "urreni" "urrejnë" "urre" "urreni" "urryer" ;
|
||||
ve_V = irregV "vë" "vë" "vë" "vëmë" "vini" "vënë" "vër" "vini" "vënë" ;
|
||||
vij_V = irregV "vij" "vjen" "vjen" "vijmë" "vini" "vijnë" "eja" "ejani" "ardhur" ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
abstract IrregSqiAbs = Cat ** {
|
||||
|
||||
fun
|
||||
bej_V : V ;
|
||||
bie_V : V ;
|
||||
dal_V : V ;
|
||||
dua_V : V ;
|
||||
eci_V : V ;
|
||||
ha_V : V ;
|
||||
hyj_V : V ;
|
||||
iki_V : V ;
|
||||
jam_V : V ;
|
||||
jap_V : V ;
|
||||
kam_V : V ;
|
||||
ngre_V : V ;
|
||||
njoh_V : V ;
|
||||
pi_V : V ;
|
||||
shoh_V : V ;
|
||||
them_V : V ;
|
||||
urrej_V : V ;
|
||||
ve_V : V ;
|
||||
vij_V : V ;
|
||||
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
concrete LangSqi of Lang =
|
||||
GrammarSqi,
|
||||
LexiconSqi
|
||||
,ConstructionSqi
|
||||
,DocumentationSqi --# notpresent
|
||||
** {
|
||||
|
||||
|
||||
+8417
-8393
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
||||
concrete NamesSqi of Names = CatSqi ** open ResSqi in {
|
||||
lin
|
||||
GivenName n = {s=\\_=>n.s; a={gn=GSg Masc;p=P3}} ;
|
||||
MaleSurname n = {s=\\_=>n.s; a={gn=GSg Masc;p=P3}} ;
|
||||
FemaleSurname n = {s=\\_=>n.s; a={gn=GSg Fem;p=P3}} ;
|
||||
PlSurname n = {s=\\_=>n.s; a={gn=GPl;p=P3}} ;
|
||||
FullName n s = {s=\\_=>n.s++s.s; a={gn=GSg Masc;p=P3}} ;
|
||||
UseLN n = {s=\\_=>n.s; a={gn=GSg Masc;p=P3}} ;
|
||||
PlainLN n = {s=\\_=>n.s; a={gn=GSg Masc;p=P3}} ;
|
||||
InLN n = {s="në"++n.s} ;
|
||||
AdjLN a n = {s=n.s++a.s!Def!Nom!Masc!Sg} ;
|
||||
}
|
||||
+83
-11
@@ -1,39 +1,111 @@
|
||||
concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi, Prelude in {
|
||||
|
||||
lin
|
||||
DetCN det cn = {
|
||||
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.spec ! c ! det.n ;
|
||||
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.sp ! c ! det.n ++
|
||||
det.post ! det.sp ! c ! cn.g ;
|
||||
a = agrgP3 cn.g det.n
|
||||
} ;
|
||||
|
||||
UsePron p = p ;
|
||||
UsePron p = {s=p.s; a=p.a} ;
|
||||
UsePN p = {s=\\_=>p.s; a={gn=GSg Masc;p=P3}} ;
|
||||
PredetNP p np = np ** {s=\\c=>p.s ++ np.s ! c} ;
|
||||
AdvNP np adv = np ** {s=\\c=>np.s ! c ++ adv.s} ;
|
||||
ExtAdvNP np adv = np ** {s=\\c=>np.s ! c ++ SOFT_BIND ++ "," ++ adv.s} ;
|
||||
MassNP cn = {s=\\c=>cn.s ! Indef ! c ! Sg; a=agrgP3 cn.g Sg} ;
|
||||
|
||||
DetQuant quant num = {
|
||||
s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ;
|
||||
s = \\c,g => case quant.isPoss of {
|
||||
True => num.s;
|
||||
False => quant.s ! c ! g ! num.n ++ num.s
|
||||
} ;
|
||||
post = \\_,c,g => case quant.isPoss of {
|
||||
True => quant.s ! c ! g ! num.n;
|
||||
False => []
|
||||
} ;
|
||||
n = num.n ;
|
||||
spec = quant.spec
|
||||
sp = quant.sp
|
||||
} ;
|
||||
|
||||
DetQuantOrd quant num ord = {
|
||||
s = \\c,g => case quant.isPoss of {
|
||||
True => num.s;
|
||||
False => quant.s ! c ! g ! num.n ++ num.s
|
||||
} ;
|
||||
post = \\_,c,g => case quant.isPoss of {
|
||||
True => quant.s ! c ! g ! num.n ++ ord.s ! c ! g ! num.n;
|
||||
False => ord.s ! c ! g ! num.n
|
||||
} ;
|
||||
n=num.n; sp=quant.sp
|
||||
} ;
|
||||
|
||||
NumSg = {s = []; n = Sg} ;
|
||||
NumPl = {s = []; n = Pl} ;
|
||||
NumCard c = {s=c.s; n=Pl} ;
|
||||
NumNumeral n = n ;
|
||||
NumDecimal n = {s=n.s} ;
|
||||
AdNum a n = {s=a.s ++ n.s} ;
|
||||
|
||||
OrdNumeral n = {s=\\_,_,_=>n.s} ;
|
||||
OrdDigits n = {s=\\_,_,_=>n.s} ;
|
||||
OrdSuperl a = {s=\\c,g,n=>"më" ++
|
||||
case a.clit of {
|
||||
True => case <c,g,n> of {
|
||||
<Nom,Masc,Sg> => "i" ++ a.s ! c ! g ! n;
|
||||
<Nom,Fem,Sg> => "e" ++ a.s ! c ! g ! n;
|
||||
_ => "të" ++ a.s ! c ! g ! n
|
||||
};
|
||||
False => a.s ! c ! g ! n
|
||||
}} ;
|
||||
OrdNumeralSuperl n a = {s=\\c,g,num=>n.s ++ a.s ! c ! g ! num} ;
|
||||
|
||||
DefArt = {
|
||||
s = \\c,g,n => [] ;
|
||||
spec = Def
|
||||
sp = Def;
|
||||
isPoss = False
|
||||
} ;
|
||||
|
||||
IndefArt = {
|
||||
s = \\c,g => table Number ["një"; []] ;
|
||||
spec = Indef
|
||||
sp = Indef;
|
||||
isPoss = False
|
||||
} ;
|
||||
|
||||
UseN n = n ;
|
||||
UseN2 n = n ;
|
||||
|
||||
ComplN2 n np = {
|
||||
s=\\sp,c,num=>n.s ! sp ! c ! num ++ n.c2.s ++ np.s ! n.c2.c;
|
||||
g=n.g
|
||||
} ;
|
||||
ComplN3 n np = n ** {s=\\sp,c,num=>n.s ! sp ! c ! num ++ n.c2.s ++ np.s ! n.c2.c; c2=n.c3} ;
|
||||
Use2N3 n = n ** {c2=n.c2} ;
|
||||
Use3N3 n = n ** {c2=n.c3} ;
|
||||
RelCN cn rs = cn ** {s=\\sp,c,n=>cn.s ! sp ! c ! n ++ rs.s ! agrgP3 cn.g n} ;
|
||||
AdvCN cn adv = cn ** {s=\\sp,c,n=>cn.s ! sp ! c ! n ++ adv.s} ;
|
||||
SentCN cn sc = cn ** {s=\\sp,c,n=>cn.s ! sp ! c ! n ++ sc.s} ;
|
||||
ApposCN cn np = cn ** {s=\\sp,c,n=>cn.s ! sp ! c ! n ++ np.s ! c} ;
|
||||
PossNP cn np = cn ** {
|
||||
s=\\sp,c,n=>cn.s ! sp ! c ! n ++
|
||||
link_clitic ! sp ! c ! cn.g ! n ++ np.s ! Ablat
|
||||
} ;
|
||||
PartNP cn np = cn ** {s=\\sp,c,n=>cn.s ! sp ! c ! n ++ "me" ++ np.s ! Acc} ;
|
||||
CountNP det np = {s=\\c=>det.s ! c ! Masc ++ "nga" ++ np.s ! Ablat; a=agrgP3 Masc det.n} ;
|
||||
|
||||
PossPron p = {
|
||||
s=p.poss;
|
||||
sp=Def;
|
||||
isPoss=True
|
||||
} ;
|
||||
|
||||
DetDAP det = {
|
||||
s=det.s ! Nom ! Masc ++ det.post ! det.sp ! Nom ! Masc;
|
||||
n=det.n
|
||||
} ;
|
||||
AdjDAP dap ap = {s=dap.s ++ ap.s ! Indef ! Nom ! Masc ! dap.n; n=dap.n} ;
|
||||
QuantityNP dec mu = {s=\\_=>case mu.isPre of {True=>mu.s++dec.s; False=>dec.s++mu.s}; a=agrgP3 Masc Pl} ;
|
||||
|
||||
AdjCN ap cn = {
|
||||
s = \\spec,c,n => cn.s ! spec ! c ! n ++ ap.s ! spec ! c ! cn.g ! n ;
|
||||
s = \\sp,c,n => cn.s ! sp ! c ! n ++ ap.s ! sp ! c ! cn.g ! n ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@ lincat Sub10 = LinDigit ;
|
||||
lincat Sub100 = LinSub100 ;
|
||||
lincat Sub1000 = LinSub100 ;
|
||||
lincat Sub1000000 = { s : Str } ;
|
||||
lincat Sub1000000000 = {s : Str} ;
|
||||
lincat Sub1000000000000 = {s : Str} ;
|
||||
|
||||
oper mkNum : Str -> LinDigit = \tri ->
|
||||
{ s = table {unit => tri ; teen => tri + "mbë" + "dhjetë" ; ten => tri + "dhjetë" }};
|
||||
@@ -39,10 +41,23 @@ lin pot1 d = mkR (d.s ! ten) ;
|
||||
lin pot1plus d e = mkR ((d.s ! ten) ++ "e" ++ (e.s ! unit)) ;
|
||||
lin pot1as2 n = n ;
|
||||
lin pot2 d = mkR (bind (d.s ! unit) "qind") ;
|
||||
lin pot21 = mkR "njëqind" ;
|
||||
lin pot2plus d e = mkR ((bind (d.s ! unit) "qind") ++ "e" ++ e.s) ;
|
||||
lin pot2as3 n = {s = n.s };
|
||||
lin pot3 n = {s = n.s ++ "mijë" } ;
|
||||
lin pot3plus n m = {s = n.s ++ "mijë" ++ m.s} ;
|
||||
lin pot31 = {s="një mijë"} ;
|
||||
lin pot3as4 n=n ;
|
||||
lin pot3decimal n={s=n.s++"mijë"} ;
|
||||
lin pot41={s="një milion"} ;
|
||||
lin pot4 n={s=n.s++"milionë"} ;
|
||||
lin pot4plus n m={s=n.s++"milionë"++m.s} ;
|
||||
lin pot4decimal n={s=n.s++"milionë"} ;
|
||||
lin pot4as5 n=n ;
|
||||
lin pot51={s="një miliard"} ;
|
||||
lin pot5 n={s=n.s++"miliardë"} ;
|
||||
lin pot5plus n m={s=n.s++"miliardë"++m.s} ;
|
||||
lin pot5decimal n={s=n.s++"miliardë"} ;
|
||||
|
||||
|
||||
lincat Dig = {s : Str; n : Number} ;
|
||||
|
||||
@@ -4,6 +4,11 @@ oper
|
||||
singular : Number = Sg ;
|
||||
plural : Number = Pl ;
|
||||
|
||||
nominative : Case = Nom ;
|
||||
accusative : Case = Acc ;
|
||||
dative : Case = Dat ;
|
||||
ablative : Case = Ablat ;
|
||||
|
||||
oper
|
||||
regN : Str -> N -- s;Indef;Nom;Sg
|
||||
= \form -> case form of {
|
||||
@@ -1199,6 +1204,39 @@ oper
|
||||
_ => regV form1
|
||||
} ;
|
||||
|
||||
irregV : (p1sg,p2sg,p3sg,p1pl,p2pl,p3pl,impSg,impPl,part : Str) -> V =
|
||||
\p1sg,p2sg,p3sg,p1pl,p2pl,p3pl,impSg,impPl,part -> lin V {
|
||||
indicative = table {
|
||||
Pres => table {
|
||||
Sg => table {P1 => p1sg ; P2 => p2sg ; P3 => p3sg} ;
|
||||
Pl => table {P1 => p1pl ; P2 => p2pl ; P3 => p3pl}
|
||||
} ;
|
||||
_ => table {
|
||||
Sg => table {P1 => p1sg ; P2 => p2sg ; P3 => p3sg} ;
|
||||
Pl => table {P1 => p1pl ; P2 => p2pl ; P3 => p3pl}
|
||||
}
|
||||
} ;
|
||||
imperative = table {Sg => impSg ; Pl => impPl} ;
|
||||
participle = part ;
|
||||
pres_optative = \\n,p => case <n,p> of {
|
||||
<Sg,P1>=>p1sg; <Sg,P2>=>p2sg; <Sg,P3>=>p3sg;
|
||||
<Pl,P1>=>p1pl; <Pl,P2>=>p2pl; <Pl,P3>=>p3pl
|
||||
} ;
|
||||
perf_optative = \\n,p => case <n,p> of {
|
||||
<Sg,P1>=>p1sg; <Sg,P2>=>p2sg; <Sg,P3>=>p3sg;
|
||||
<Pl,P1>=>p1pl; <Pl,P2>=>p2pl; <Pl,P3>=>p3pl
|
||||
} ;
|
||||
pres_admirative = \\n,p => case <n,p> of {
|
||||
<Sg,P1>=>p1sg; <Sg,P2>=>p2sg; <Sg,P3>=>p3sg;
|
||||
<Pl,P1>=>p1pl; <Pl,P2>=>p2pl; <Pl,P3>=>p3pl
|
||||
} ;
|
||||
imperf_admirative = \\n,p => case <n,p> of {
|
||||
<Sg,P1>=>p1sg; <Sg,P2>=>p2sg; <Sg,P3>=>p3sg;
|
||||
<Pl,P1>=>p1pl; <Pl,P2>=>p2pl; <Pl,P3>=>p3pl
|
||||
} ;
|
||||
vtype = VNormal
|
||||
} ;
|
||||
|
||||
mkN = overload {
|
||||
mkN : Str -> N = regN; -- s;Indef;Nom;Sg
|
||||
mkN : Str -> Str -> N = reg2N -- s;Indef;Nom;Sg s;Indef;Nom;Pl
|
||||
@@ -1231,6 +1269,19 @@ mkV = overload {
|
||||
mkV : Str -> Str -> V = reg2V -- Indicative;Pres;Sg;P1 participle
|
||||
} ;
|
||||
|
||||
compoundV : V -> Str -> V = \v,adv -> lin V {
|
||||
indicative = \\t,n,p => v.indicative ! t ! n ! p ++ adv ;
|
||||
imperative = \\n => v.imperative ! n ++ adv ;
|
||||
participle = v.participle ++ adv ;
|
||||
pres_optative = \\n,p => v.pres_optative ! n ! p ++ adv ;
|
||||
perf_optative = \\n,p => v.perf_optative ! n ! p ++ adv ;
|
||||
pres_admirative = \\n,p => v.pres_admirative ! n ! p ++ adv ;
|
||||
imperf_admirative = \\n,p => v.imperf_admirative ! n ! p ++ adv ;
|
||||
vtype = v.vtype
|
||||
} ;
|
||||
|
||||
reflV : V -> V = \v -> v ** {vtype=VRefl} ;
|
||||
|
||||
mkV2 = overload {
|
||||
mkV2 : V -> V2 = \v -> lin V2 v ** {c2=noPrep} ;
|
||||
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 v ** {c2=p} ;
|
||||
@@ -1273,9 +1324,9 @@ mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
|
||||
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
|
||||
|
||||
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} ;
|
||||
mkIP : Str -> IP = \s -> lin IP {s=s; a={gn=GSg Masc; p=P3}} ;
|
||||
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_=>s} ;
|
||||
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_=>s; n=Sg} ;
|
||||
|
||||
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
|
||||
|
||||
@@ -1283,7 +1334,13 @@ mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
|
||||
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
||||
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
|
||||
|
||||
oper mkQuant : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Quant =
|
||||
mkQuant = overload {
|
||||
mkQuant : Str -> Quant = \s -> lin Quant {
|
||||
s = \\_,_,_ => s ;
|
||||
sp = Indef ;
|
||||
isPoss = False
|
||||
} ;
|
||||
mkQuant : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Quant =
|
||||
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16 -> lin Quant
|
||||
{ s = table {
|
||||
Nom => table {
|
||||
@@ -1327,10 +1384,19 @@ oper mkQuant : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Quant =
|
||||
}
|
||||
}
|
||||
} ;
|
||||
spec = Indef
|
||||
} ;
|
||||
sp = Indef ;
|
||||
isPoss = False
|
||||
}
|
||||
} ;
|
||||
|
||||
oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
|
||||
mkDet = overload {
|
||||
mkDet : Str -> Number -> Det = \s,n -> lin Det {
|
||||
s = \\_,_ => s ;
|
||||
post = \\_,_,_ => [] ;
|
||||
sp = Indef ;
|
||||
n = n
|
||||
} ;
|
||||
mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
|
||||
\f1,f2,f3,f4,f5,f6,f7,f8,n -> lin Det
|
||||
{ s = table {
|
||||
Nom => table {
|
||||
@@ -1350,18 +1416,23 @@ oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
|
||||
Fem => f8
|
||||
}
|
||||
} ;
|
||||
spec = Indef ;
|
||||
post = \\_,_,_ => [] ;
|
||||
sp = Indef ;
|
||||
n = n
|
||||
} ;
|
||||
}
|
||||
} ;
|
||||
|
||||
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
|
||||
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
|
||||
|
||||
mkPron : (nom,acc,dat,ablat,acc_clit,dat_clit : Str) -> GenNum -> Person -> Pron =
|
||||
\nom,acc,dat,ablat,acc_clit,dat_clit,gn,p -> lin Pron
|
||||
mkPron : (nom,acc,dat,ablat,acc_clit,dat_clit : Str) ->
|
||||
(Case => Gender => Number => Str) ->
|
||||
GenNum -> Person -> Pron =
|
||||
\nom,acc,dat,ablat,acc_clit,dat_clit,poss,gn,p -> lin Pron
|
||||
{s = table Case [nom; acc; dat; ablat];
|
||||
acc_clit = acc_clit;
|
||||
dat_clit = dat_clit;
|
||||
poss = poss;
|
||||
a = {gn=gn; p=p}
|
||||
} ;
|
||||
|
||||
@@ -1369,7 +1440,10 @@ mkCard : Str -> Card = \s -> lin Card {s=s} ;
|
||||
mkACard : Str -> ACard = \s -> lin ACard {s=s} ;
|
||||
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
|
||||
|
||||
mkPrep : Str -> Prep = \s -> lin Prep {s=s} ;
|
||||
noPrep : Prep = lin Prep {s=""} ;
|
||||
mkPrep : Str -> Case -> Prep = \s,c -> lin Prep {
|
||||
s=s;
|
||||
c=c
|
||||
} ;
|
||||
noPrep : Prep = lin Prep {s=""; c=Acc} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -4,11 +4,24 @@ concrete PhraseSqi of Phrase = CatSqi ** open Prelude, ResSqi in {
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
|
||||
UttS s = s ;
|
||||
UttQS s = s ;
|
||||
UttImpSg p i = {s=i.s ! p.p ! Sg} ;
|
||||
UttImpPl p i = {s=i.s ! p.p ! Pl} ;
|
||||
UttImpPol p i = {s=i.s ! p.p ! Pl} ;
|
||||
UttIP ip = {s=ip.s} ;
|
||||
UttIAdv a = a ;
|
||||
UttNP np = {s = np.s ! Nom} ;
|
||||
UttAdv a = a ;
|
||||
UttVP vp = {s="të" ++ vp.subjunctive ! Sg ! P3 ! Masc ! Nom} ;
|
||||
UttCN cn = {s=cn.s ! Indef ! Nom ! Sg} ;
|
||||
UttCard c = c ;
|
||||
UttAP ap = {s=ap.s ! Indef ! Nom ! Masc ! Sg} ;
|
||||
UttInterj i = i ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
PConjConj c = c ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
VocNP np = {s=SOFT_BIND ++ "," ++ np.s ! Nom} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
concrete QuestionSqi of Question = CatSqi ** open Prelude, ParamX, ResSqi, (I=IrregSqi) in {
|
||||
lincat QVP = {s : Str} ;
|
||||
lin
|
||||
QuestCl cl = cl ;
|
||||
QuestVP ip vp = {s=\\t,a,p=>ip.s++negation p++futureParticle t++vp.indicative!sqiTense t!agrNumber ip.a!ip.a.p!agrGender ip.a!Nom} ;
|
||||
QuestSlash ip cl = {s=\\t,a,p=>ip.s++cl.s!t!a!p++cl.c2.s} ;
|
||||
QuestIAdv i cl = {s=\\t,a,p=>i.s++cl.s!t!a!p} ;
|
||||
QuestIComp i np = {s=\\_,_,_=>i.s++(lin Verb I.jam_V).indicative!ResSqi.Pres!agrNumber np.a!np.a.p++np.s!Nom} ;
|
||||
IdetCN d cn = {s=d.s!cn.g++cn.s!Indef!Nom!d.n; a=agrgP3 cn.g d.n} ;
|
||||
IdetIP d = {s=d.s!Masc; a=agrgP3 Masc d.n} ;
|
||||
AdvIP ip a = ip ** {s=ip.s++a.s} ;
|
||||
IdetQuant q n = {s=\\g=>q.s!g++n.s; n=n.n} ;
|
||||
PrepIP p ip = {s=p.s++ip.s} ;
|
||||
AdvIAdv i a = {s=i.s++a.s} ;
|
||||
CompIAdv i = i ;
|
||||
CompIP ip = {s=ip.s} ;
|
||||
ComplSlashIP sl ip = {s=sl.indicative!ResSqi.Pres!Sg!P3++sl.c2.s++ip.s} ;
|
||||
AdvQVP vp i = {s=vp.indicative!ResSqi.Pres!Sg!P3!Masc!Nom++i.s} ;
|
||||
AddAdvQVP q i = {s=q.s++i.s} ;
|
||||
QuestQVP ip q = {s=\\_,_,_=>ip.s++q.s} ;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
concrete RelativeSqi of Relative = CatSqi ** open ParamX, ResSqi in {
|
||||
lin
|
||||
RelCl cl = {s=\\_,t,a,p=>"që"++cl.s!t!a!p} ;
|
||||
RelVP rp vp = {s=\\agr,t,a,p=>rp.s!Nom!agr.gn++negation p++futureParticle t++vp.indicative!sqiTense t!agrNumber agr!agr.p!agrGender agr!Nom} ;
|
||||
RelSlash rp cl = {s=\\agr,t,a,p=>rp.s!cl.c2.c!agr.gn++cl.s!t!a!p++cl.c2.s} ;
|
||||
IdRP = {s=\\_,_=>"që"} ;
|
||||
FunRP prep np rp = {s=\\c,g=>prep.s++np.s!prep.c++rp.s!c!g} ;
|
||||
}
|
||||
+64
-5
@@ -1,6 +1,6 @@
|
||||
resource ResSqi = ParamX-[Tense,Past,Pres] ** open Prelude in {
|
||||
|
||||
oper Compl = {s : Str} ;
|
||||
oper Compl = {s : Str; c : Case} ;
|
||||
|
||||
param Species = Indef | Def ;
|
||||
param Case = Nom | Acc | Dat | Ablat ;
|
||||
@@ -9,6 +9,16 @@ param Gender = Masc | Fem ;
|
||||
param GenNum = GSg Gender | GPl ;
|
||||
oper Agr = {gn : GenNum; p : Person} ;
|
||||
|
||||
oper agrNumber : Agr -> Number = \a -> case a.gn of {
|
||||
GSg _ => Sg ;
|
||||
GPl => Pl
|
||||
} ;
|
||||
|
||||
oper agrGender : Agr -> Gender = \a -> case a.gn of {
|
||||
GSg g => g ;
|
||||
GPl => Masc
|
||||
} ;
|
||||
|
||||
oper Noun = {s: Species => Case => Number => Str; g: Gender} ; -- 3978
|
||||
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
|
||||
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,g ->
|
||||
@@ -104,10 +114,11 @@ 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
|
||||
param VType = VNormal | VRefl | VJ ;
|
||||
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; vtype : VType} ; -- 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 +168,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
|
||||
}
|
||||
}
|
||||
} ;
|
||||
Imperative = table {
|
||||
imperative = table {
|
||||
Sg => f25 ;
|
||||
Pl => f26
|
||||
} ;
|
||||
@@ -209,7 +220,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
|
||||
P2 => f50 ;
|
||||
P3 => f51
|
||||
}
|
||||
}
|
||||
} ;
|
||||
vtype = VNormal
|
||||
} ;
|
||||
|
||||
oper link_clitic : Species => Case => Gender => Number => Str =
|
||||
@@ -258,4 +270,51 @@ oper genNum : Gender -> Number -> GenNum = \g,n ->
|
||||
agrgP3 : Gender -> Number -> Agr =
|
||||
\g,n -> {gn=genNum g n; p=P3} ;
|
||||
|
||||
oper sqiTense : ParamX.Tense -> Tense = \t -> case t of {
|
||||
ParamX.Pres => Pres ;
|
||||
ParamX.Past => Aorist ;
|
||||
ParamX.Fut => Pres ;
|
||||
ParamX.Cond => Imperfect
|
||||
} ;
|
||||
|
||||
oper negation : Polarity -> Str = \p -> case p of {
|
||||
Pos => [] ;
|
||||
Neg => "nuk"
|
||||
} ;
|
||||
|
||||
oper futureParticle : ParamX.Tense -> Str = \t -> case t of {
|
||||
ParamX.Fut => "do" ++ "të" ;
|
||||
ParamX.Cond => "do" ++ "të" ;
|
||||
_ => []
|
||||
} ;
|
||||
|
||||
oper subjunctiveForm : VType -> Str -> Str -> Number -> Person -> Str =
|
||||
\vt,citation,fallback,n,p -> case vt of {
|
||||
VJ => case <n,p> of {
|
||||
<Sg,P1> => citation ;
|
||||
<Sg,P3> => citation ++ BIND ++ "ë" ;
|
||||
_ => fallback
|
||||
} ;
|
||||
_ => fallback
|
||||
} ;
|
||||
|
||||
oper haveAux : ParamX.Tense => Number => Person => Str = table {
|
||||
ParamX.Pres => table {
|
||||
Sg => table {P1 => "kam"; P2 => "ke"; P3 => "ka"};
|
||||
Pl => table {P1 => "kemi"; P2 => "keni"; P3 => "kanë"}
|
||||
} ;
|
||||
ParamX.Past => table {
|
||||
Sg => table {P1 => "kisha"; P2 => "kishe"; P3 => "kishte"};
|
||||
Pl => table {P1 => "kishim"; P2 => "kishit"; P3 => "kishin"}
|
||||
} ;
|
||||
ParamX.Fut => table {
|
||||
Sg => table {P1 => "do të kem"; P2 => "do të kesh"; P3 => "do të ketë"};
|
||||
Pl => table {P1 => "do të kemi"; P2 => "do të keni"; P3 => "do të kenë"}
|
||||
} ;
|
||||
ParamX.Cond => table {
|
||||
Sg => table {P1 => "do të kisha"; P2 => "do të kishe"; P3 => "do të kishte"};
|
||||
Pl => table {P1 => "do të kishim"; P2 => "do të kishit"; P3 => "do të kishin"}
|
||||
}
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
concrete SentenceSqi of Sentence = CatSqi ** open Prelude, ParamX, ResSqi in {
|
||||
|
||||
oper
|
||||
mkClause : Str -> Agr -> VP -> ParamX.Tense -> Anteriority -> Polarity -> Str =
|
||||
\subj,a,vp,t,ant,pol -> case <ant,t> of {
|
||||
<Simul,ParamX.Past> => subj ++ negation pol ++
|
||||
haveAux ! ParamX.Pres ! agrNumber a ! a.p ++ vp.participle ! a ! Nom ;
|
||||
<Simul,_> => subj ++ negation pol ++ futureParticle t ++
|
||||
vp.indicative ! sqiTense t ! agrNumber a ! a.p ! agrGender a ! Nom ;
|
||||
<Anter,_> => subj ++ negation pol ++ haveAux ! t ! agrNumber a ! a.p ++
|
||||
vp.participle ! a ! Nom
|
||||
} ;
|
||||
|
||||
lin
|
||||
PredVP np vp = {s = \\t,a,p => mkClause (np.s ! Nom) np.a vp t a p} ;
|
||||
PredSCVP sc vp = {s = \\t,a,p => mkClause sc.s {gn=GSg Masc; p=P3} vp t a p} ;
|
||||
|
||||
SlashVP np sl = {
|
||||
s = \\t,a,p => np.s ! Nom ++ negation p ++ futureParticle t ++
|
||||
sl.indicative ! sqiTense t ! agrNumber np.a ! np.a.p ;
|
||||
c2 = sl.c2
|
||||
} ;
|
||||
AdvSlash cl adv = cl ** {s = \\t,a,p => cl.s ! t ! a ! p ++ adv.s} ;
|
||||
SlashPrep cl prep = {s = cl.s; c2 = prep} ;
|
||||
SlashVS np vs ss = {
|
||||
s = \\t,a,p => np.s ! Nom ++ negation p ++ vs.indicative ! sqiTense t ! agrNumber np.a ! np.a.p ++ "që" ++ ss.s ;
|
||||
c2 = {s=[]; c=Acc}
|
||||
} ;
|
||||
|
||||
ImpVP vp = {s = \\pol,n => case pol of {Pos => []; Neg => "mos"} ++ vp.imperative ! n ! Nom} ;
|
||||
AdvImp adv imp = {s = \\p,n => adv.s ++ imp.s ! p ! n} ;
|
||||
|
||||
EmbedS s = {s = "që" ++ s.s} ;
|
||||
EmbedQS q = {s = q.s} ;
|
||||
EmbedVP vp = {s = "të" ++ vp.subjunctive ! Sg ! P3 ! Masc ! Nom} ;
|
||||
|
||||
UseCl t p cl = {s = cl.s ! t.t ! t.a ! p.p} ;
|
||||
UseQCl t p cl = {s = cl.s ! t.t ! t.a ! p.p} ;
|
||||
UseRCl t p cl = {s = \\a => cl.s ! a ! t.t ! t.a ! p.p} ;
|
||||
UseSlash t p cl = {s = cl.s ! t.t ! t.a ! p.p; c2=cl.c2} ;
|
||||
|
||||
AdvS adv s = {s = adv.s ++ s.s} ;
|
||||
ExtAdvS adv s = {s = adv.s ++ SOFT_BIND ++ "," ++ s.s} ;
|
||||
SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
|
||||
RelS s rs = {s = s.s ++ SOFT_BIND ++ "," ++ rs.s ! {gn=GSg Masc;p=P3}} ;
|
||||
}
|
||||
@@ -1,13 +1,56 @@
|
||||
concrete StructuralSqi of Structural = CatSqi ** open ResSqi, ParadigmsSqi in {
|
||||
|
||||
lin i_Pron = mkPron "unë" "mua" "mua" "meje" "më" "më" (GSg Masc) P1 ;
|
||||
lin youSg_Pron = mkPron "ti" "ty" "ty" "teje" "të" "të" (GSg Masc) P2 ;
|
||||
lin he_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i" (GSg Masc) P3 ;
|
||||
lin she_Pron = mkPron "ajo" "atë" "asaj" "asaj" "e" "i" (GSg Fem) P3 ;
|
||||
lin it_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i" (GSg Masc) P3 ;
|
||||
lin we_Pron = mkPron "ne" "ne" "neve" "nesh" "na" "na" GPl P1 ;
|
||||
lin youPl_Pron = mkPron "ju" "ju" "juve" "jush" "ju" "ju" GPl P2 ;
|
||||
lin they_Pron = mkPron "ata" "ata" "atyre" "atyre" "i" "u" GPl P3 ;
|
||||
lin i_Pron = mkPron "unë" "mua" "mua" "meje" "më" "më"
|
||||
(\\c,g,n => case <c,g,n> of {
|
||||
<Nom,Masc,Sg> => "im";
|
||||
<_ ,Masc,Sg> => "tim";
|
||||
<Nom,Fem, Sg> => "ime";
|
||||
<Acc,Fem, Sg> => "time";
|
||||
<_ ,Fem, Sg> => "sime";
|
||||
<_ ,Masc,Pl> => link_clitic!Def!c!g!n++"mi";
|
||||
<_ ,Fem, Pl> => link_clitic!Def!c!g!n++"mia"
|
||||
})
|
||||
(GSg Masc) P1 ;
|
||||
lin youSg_Pron = mkPron "ti" "ty" "ty" "teje" "të" "të"
|
||||
(\\c,g,n => case <c,g,n> of {
|
||||
<Nom,Masc,Sg> => "yt";
|
||||
<_ ,Masc,Sg> => "tënd";
|
||||
<Nom,Fem, Sg> => "jote";
|
||||
<Acc,Fem, Sg> => "tënde";
|
||||
<_ ,Fem, Sg> => "sate";
|
||||
<_ ,Masc,Pl> => link_clitic!Def!c!g!n++"tu";
|
||||
<_ ,Fem, Pl> => link_clitic!Def!c!g!n++"tua"
|
||||
})
|
||||
(GSg Masc) P2 ;
|
||||
lin he_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i"
|
||||
(\\c,g,n => link_clitic!Def!c!g!n++"tij")
|
||||
(GSg Masc) P3 ;
|
||||
lin she_Pron = mkPron "ajo" "atë" "asaj" "asaj" "e" "i"
|
||||
(\\c,g,n => link_clitic!Def!c!g!n++"saj")
|
||||
(GSg Fem) P3 ;
|
||||
lin it_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i"
|
||||
(\\c,g,n => link_clitic!Def!c!g!n++"tij")
|
||||
(GSg Masc) P3 ;
|
||||
lin we_Pron = mkPron "ne" "ne" "neve" "nesh" "na" "na"
|
||||
(\\c,g,n => case <c,g,n> of {
|
||||
<Nom,Masc,Sg> => "ynë";
|
||||
<_ ,Masc,Sg> => "tonë";
|
||||
<Nom,Fem, Sg> => "jonë";
|
||||
<Acc,Fem, Sg> => "tonë";
|
||||
<_ ,Fem, Sg> => "sonë";
|
||||
<_ ,Masc,Pl> => "tanë";
|
||||
<_ ,Fem ,Pl> => "tona"
|
||||
})
|
||||
GPl P1 ;
|
||||
lin youPl_Pron = mkPron "ju" "ju" "juve" "jush" "ju" "ju"
|
||||
(\\c,g,n => case <c,n> of {
|
||||
<Nom,Sg> => "juaj";
|
||||
_ => "tuaj"
|
||||
})
|
||||
GPl P2 ;
|
||||
lin they_Pron = mkPron "ata" "ata" "atyre" "atyre" "i" "u"
|
||||
(\\c,g,n => link_clitic!Def!c!g!n++"tyre")
|
||||
GPl P3 ;
|
||||
lin this_Quant = mkQuant "ky" "këta" "kjo" "këto"
|
||||
"këtë" "këtyre" "këtë" "këtyre"
|
||||
"këtij" "këtyre" "kësaj" "këtyre"
|
||||
@@ -16,4 +59,107 @@ lin that_Quant = mkQuant "ai" "ata" "ajo" "ato"
|
||||
"atë" "ata" "atë" "ato"
|
||||
"atij" "atyre" "asaj" "atyre"
|
||||
"atij" "atyre" "asaj" "atyre" ;
|
||||
|
||||
lin
|
||||
youPol_Pron = youPl_Pron ;
|
||||
|
||||
and_Conj = mkConj "dhe" ;
|
||||
or_Conj = mkConj "ose" ;
|
||||
if_then_Conj = mkConj "nëse" ;
|
||||
|
||||
above_Prep = mkPrep "mbi" accusative ;
|
||||
after_Prep = mkPrep "pas" ablative ;
|
||||
before_Prep = mkPrep "para" ablative ;
|
||||
behind_Prep = mkPrep "prapa" ablative ;
|
||||
between_Prep = mkPrep "midis" ablative ;
|
||||
by8agent_Prep = mkPrep "nga" nominative ;
|
||||
by8means_Prep = mkPrep "me" accusative ;
|
||||
during_Prep = mkPrep "gjatë" ablative ;
|
||||
except_Prep = mkPrep "përveç" ablative ;
|
||||
for_Prep = mkPrep "për" accusative ;
|
||||
from_Prep = mkPrep "nga" nominative ;
|
||||
in8front_Prep = mkPrep "përpara" accusative ;
|
||||
in_Prep = mkPrep "në" accusative ;
|
||||
on_Prep = mkPrep "mbi" accusative ;
|
||||
part_Prep = mkPrep "nga" nominative ;
|
||||
possess_Prep = mkPrep "i" accusative ;
|
||||
through_Prep = mkPrep "përmes" accusative ;
|
||||
to_Prep = mkPrep "te" accusative ;
|
||||
under_Prep = mkPrep "nën" accusative ;
|
||||
with_Prep = mkPrep "me" accusative ;
|
||||
without_Prep = mkPrep "pa" accusative ;
|
||||
|
||||
although_Subj = mkSubj "megjithëse" ;
|
||||
because_Subj = mkSubj "sepse" ;
|
||||
if_Subj = mkSubj "nëse" ;
|
||||
that_Subj = mkSubj "që" ;
|
||||
when_Subj = mkSubj "kur" ;
|
||||
|
||||
always_AdV = mkAdV "gjithmonë" ;
|
||||
almost_AdA = mkAdA "pothuajse" ;
|
||||
so_AdA = mkAdA "kaq" ;
|
||||
too_AdA = mkAdA "tepër" ;
|
||||
very_AdA = mkAdA "shumë" ;
|
||||
almost_AdN = mkAdN "pothuajse" ;
|
||||
at_least_AdN = mkAdN "të paktën" ;
|
||||
at_most_AdN = mkAdN "më së shumti" ;
|
||||
more_CAdv = {s="më";p="se"} ;
|
||||
less_CAdv = {s="më pak";p="se"} ;
|
||||
as_CAdv = {s="po aq";p="sa"} ;
|
||||
|
||||
here_Adv = mkAdv "këtu" ;
|
||||
there_Adv = mkAdv "atje" ;
|
||||
everywhere_Adv = mkAdv "kudo" ;
|
||||
somewhere_Adv = mkAdv "diku" ;
|
||||
here7from_Adv = mkAdv "nga këtu" ;
|
||||
here7to_Adv = mkAdv "deri këtu" ;
|
||||
there7from_Adv = mkAdv "nga atje" ;
|
||||
there7to_Adv = mkAdv "deri atje" ;
|
||||
quite_Adv = mkAdv "mjaft" ;
|
||||
|
||||
how_IAdv = mkIAdv "si" ;
|
||||
how8much_IAdv = mkIAdv "sa" ;
|
||||
when_IAdv = mkIAdv "kur" ;
|
||||
where_IAdv = mkIAdv "ku" ;
|
||||
why_IAdv = mkIAdv "pse" ;
|
||||
which_IQuant = {s=table {Masc=>"cili";Fem=>"cila"}} ;
|
||||
how8many_IDet = {s=\\_=>"sa";n=Pl} ;
|
||||
whatSg_IP = {s="çfarë";a={gn=GSg Masc;p=P3}} ;
|
||||
whatPl_IP = {s="çfarë";a={gn=GPl;p=P3}} ;
|
||||
whoSg_IP = {s="kush";a={gn=GSg Masc;p=P3}} ;
|
||||
whoPl_IP = {s="cilët";a={gn=GPl;p=P3}} ;
|
||||
|
||||
all_Predet = {s="të gjithë"} ;
|
||||
most_Predet = {s="shumica e"} ;
|
||||
not_Predet = {s="jo"} ;
|
||||
only_Predet = {s="vetëm"} ;
|
||||
|
||||
every_Det = {s=\\_,_=>"çdo";post=\\_,_,_=>[];sp=Indef;n=Sg} ;
|
||||
few_Det = {s=\\_,_=>"pak";post=\\_,_,_=>[];sp=Indef;n=Pl} ;
|
||||
many_Det = {s=\\_,_=>"shumë";post=\\_,_,_=>[];sp=Indef;n=Pl} ;
|
||||
much_Det = {s=\\_,_=>"shumë";post=\\_,_,_=>[];sp=Indef;n=Sg} ;
|
||||
someSg_Det = {s=\\_,_=>"një";post=\\_,_,_=>[];sp=Indef;n=Sg} ;
|
||||
somePl_Det = {s=\\_,_=>"disa";post=\\_,_,_=>[];sp=Indef;n=Pl} ;
|
||||
no_Quant = mkQuant "asnjë" ;
|
||||
|
||||
everybody_NP = {s=\\_=>"të gjithë";a={gn=GPl;p=P3}} ;
|
||||
everything_NP = {s=\\_=>"gjithçka";a={gn=GSg Masc;p=P3}} ;
|
||||
nobody_NP = {s=\\_=>"askush";a={gn=GSg Masc;p=P3}} ;
|
||||
nothing_NP = {s=\\_=>"asgjë";a={gn=GSg Masc;p=P3}} ;
|
||||
somebody_NP = {s=\\_=>"dikush";a={gn=GSg Masc;p=P3}} ;
|
||||
something_NP = {s=\\_=>"diçka";a={gn=GSg Masc;p=P3}} ;
|
||||
|
||||
can_VV = mkVV (mkV "mund") ;
|
||||
can8know_VV = mkVV (irregV "di" "di" "di" "dimë" "dini" "dinë" "di" "dini" "ditur") ;
|
||||
must_VV = mkVV (mkV "duhet") ;
|
||||
want_VV = mkVV (irregV "dua" "do" "do" "duam" "doni" "duan" "duaj" "doni" "dashur") ;
|
||||
have_V2 = mkV2 (irregV "kam" "ke" "ka" "kemi" "keni" "kanë" "ki" "kini" "pasur") ;
|
||||
|
||||
but_PConj = {s="por"} ;
|
||||
otherwise_PConj = {s="përndryshe"} ;
|
||||
therefore_PConj = {s="prandaj"} ;
|
||||
please_Voc = {s="ju lutem"} ;
|
||||
yes_Utt = {s="po"} ;
|
||||
no_Utt = {s="jo"} ;
|
||||
language_title_Utt = {s="shqip"} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
concrete VerbSqi of Verb = CatSqi ** open Prelude, ParamX, ResSqi, (I=IrregSqi) in {
|
||||
|
||||
oper
|
||||
verbVP : Verb -> VP = \v -> lin VP {
|
||||
indicative = \\t,n,p,_,_ => v.indicative ! t ! n ! p ;
|
||||
subjunctive = \\n,p,_,_ => subjunctiveForm v.vtype
|
||||
(v.indicative ! ResSqi.Pres ! Sg ! P1)
|
||||
(v.indicative ! ResSqi.Pres ! n ! p) n p ;
|
||||
imperative = \\n,_ => v.imperative ! n ;
|
||||
participle = \\_,c => v.participle ;
|
||||
pres_optative = \\n,p,c => v.pres_optative ! n ! p ;
|
||||
perf_optative = \\n,p,c => v.perf_optative ! n ! p ;
|
||||
pres_admirative = \\n,p,c => v.pres_admirative ! n ! p ;
|
||||
imperf_admirative = \\n,p,c => v.imperf_admirative ! n ! p ;
|
||||
vtype = v.vtype
|
||||
} ;
|
||||
|
||||
addVP : VP -> (Agr => Case => Str) -> VP = \vp,x -> vp ** {
|
||||
indicative = \\t,n,p,g,c => vp.indicative ! t ! n ! p ! g ! c ++
|
||||
x ! {gn=genNum g n; p=p} ! c ;
|
||||
subjunctive = \\n,p,g,c => vp.subjunctive ! n ! p ! g ! c ++
|
||||
x ! {gn=genNum g n; p=p} ! c ;
|
||||
imperative = \\n,c => vp.imperative ! n ! c ++
|
||||
x ! {gn=genNum Masc n; p=P2} ! c ;
|
||||
participle = \\a,c => vp.participle ! a ! c ++ x ! a ! c ;
|
||||
pres_optative = \\n,p,c => vp.pres_optative ! n ! p ! c ++
|
||||
x ! {gn=genNum Masc n; p=p} ! c ;
|
||||
perf_optative = \\n,p,c => vp.perf_optative ! n ! p ! c ++
|
||||
x ! {gn=genNum Masc n; p=p} ! c ;
|
||||
pres_admirative = \\n,p,c => vp.pres_admirative ! n ! p ! c ++
|
||||
x ! {gn=genNum Masc n; p=p} ! c ;
|
||||
imperf_admirative = \\n,p,c => vp.imperf_admirative ! n ! p ! c ++
|
||||
x ! {gn=genNum Masc n; p=p} ! c
|
||||
} ;
|
||||
|
||||
slashVP : Verb -> Compl -> VPSlash = \v,c -> lin VPSlash {
|
||||
indicative=\\t,n,p=>v.indicative!t!n!p;
|
||||
subjunctive=\\n,p=>subjunctiveForm v.vtype
|
||||
(v.indicative!ResSqi.Pres!Sg!P1)
|
||||
(v.indicative!ResSqi.Pres!n!p) n p;
|
||||
imperative=\\n=>v.imperative!n;
|
||||
participle=v.participle;
|
||||
pres_optative=v.pres_optative;
|
||||
perf_optative=v.perf_optative;
|
||||
pres_admirative=v.pres_admirative;
|
||||
imperf_admirative=v.imperf_admirative;
|
||||
c2=c;
|
||||
vtype=v.vtype
|
||||
} ;
|
||||
|
||||
addSlash : VPSlash -> Str -> VPSlash = \sl,x -> sl ** {
|
||||
indicative = \\t,n,p => sl.indicative ! t ! n ! p ++ x ;
|
||||
subjunctive = \\n,p => sl.subjunctive ! n ! p ++ x ;
|
||||
imperative = \\n => sl.imperative ! n ++ x ;
|
||||
participle = sl.participle ++ x ;
|
||||
pres_optative = \\n,p => sl.pres_optative ! n ! p ++ x ;
|
||||
perf_optative = \\n,p => sl.perf_optative ! n ! p ++ x ;
|
||||
pres_admirative = \\n,p => sl.pres_admirative ! n ! p ++ x ;
|
||||
imperf_admirative = \\n,p => sl.imperf_admirative ! n ! p ++ x
|
||||
} ;
|
||||
|
||||
slashToVP : VPSlash -> VP = \v -> lin VP {
|
||||
indicative = \\t,n,p,g,c => v.indicative ! t ! n ! p ;
|
||||
subjunctive = \\n,p,_,_ => v.subjunctive ! n ! p ;
|
||||
imperative = \\n,c => v.imperative ! n ;
|
||||
participle = \\_,c => v.participle ;
|
||||
pres_optative = \\n,p,c => v.pres_optative ! n ! p ;
|
||||
perf_optative = \\n,p,c => v.perf_optative ! n ! p ;
|
||||
pres_admirative = \\n,p,c => v.pres_admirative ! n ! p ;
|
||||
imperf_admirative = \\n,p,c => v.imperf_admirative ! n ! p ;
|
||||
vtype = v.vtype
|
||||
} ;
|
||||
|
||||
lin
|
||||
UseV v = verbVP v ;
|
||||
SlashV2a v = slashVP v v.c2 ;
|
||||
|
||||
ComplSlash v np = addVP (slashToVP v) (\\_,_ => v.c2.s ++ np.s ! v.c2.c) ;
|
||||
|
||||
ComplVS v s = addVP (verbVP v) (\\_,_ => "që" ++ s.s) ;
|
||||
ComplVQ v q = addVP (verbVP v) (\\_,_ => q.s) ;
|
||||
ComplVA v ap = addVP (verbVP v) (\\a,c =>
|
||||
ap.s ! Indef ! c ! agrGender a ! agrNumber a) ;
|
||||
ComplVV v vp = addVP (verbVP v) (\\a,_ =>
|
||||
"të" ++ vp.subjunctive ! agrNumber a ! a.p ! agrGender a ! Nom) ;
|
||||
|
||||
Slash2V3 v np = addSlash (slashVP (lin Verb v) v.c3)
|
||||
(v.c2.s ++ np.s ! v.c2.c) ;
|
||||
Slash3V3 v np = addSlash (slashVP (lin Verb v) v.c2)
|
||||
(v.c3.s ++ np.s ! v.c3.c) ;
|
||||
SlashV2S v s = addSlash (slashVP (lin Verb v) v.c2) ("që" ++ s.s) ;
|
||||
SlashV2Q v q = addSlash (slashVP (lin Verb v) v.c2) q.s ;
|
||||
SlashV2A v ap = addSlash (slashVP (lin Verb v) v.c2)
|
||||
(ap.s ! Indef ! Nom ! Masc ! Sg) ;
|
||||
SlashV2V v vp = addSlash (slashVP (lin Verb v) v.c2)
|
||||
("të" ++ vp.subjunctive ! Sg ! P3 ! Masc ! Nom) ;
|
||||
SlashVV v sl = sl ** {
|
||||
indicative = \\t,n,p => v.indicative ! t ! n ! p ++ "të" ++ sl.subjunctive ! Sg ! P3 ;
|
||||
subjunctive = \\n,p => subjunctiveForm v.vtype
|
||||
(v.indicative!ResSqi.Pres!Sg!P1)
|
||||
(v.indicative!ResSqi.Pres!n!p) n p ++ "të" ++ sl.subjunctive ! Sg ! P3
|
||||
} ;
|
||||
SlashV2VNP v np sl = sl ** {
|
||||
indicative = \\t,n,p => v.indicative ! t ! n ! p ++ v.c2.s ++ np.s ! v.c2.c ++ "të" ++ sl.subjunctive ! Sg ! P3 ;
|
||||
subjunctive = \\n,p => subjunctiveForm v.vtype
|
||||
(v.indicative!ResSqi.Pres!Sg!P1)
|
||||
(v.indicative!ResSqi.Pres!n!p) n p ++ v.c2.s ++ np.s ! v.c2.c ++ "të" ++ sl.subjunctive ! Sg ! P3
|
||||
} ;
|
||||
|
||||
ReflVP sl = addVP (slashToVP sl) (\\_,_ => "veten") ;
|
||||
UseComp comp = addVP (verbVP (lin Verb I.jam_V)) (\\a,_ => comp.s ! a) ;
|
||||
UseCopula = verbVP (lin Verb I.jam_V) ;
|
||||
PassV2 v = addVP (verbVP (lin Verb I.jam_V)) (\\_,_ => v.participle) ;
|
||||
|
||||
AdvVP vp adv = addVP vp (\\_,_ => adv.s) ;
|
||||
ExtAdvVP vp adv = addVP vp (\\_,_ => SOFT_BIND ++ "," ++ adv.s) ;
|
||||
AdVVP adv vp = vp ** {
|
||||
indicative = \\t,n,p,g,c => adv.s ++ vp.indicative ! t ! n ! p ! g ! c ;
|
||||
subjunctive = \\n,p,g,c => adv.s ++ vp.subjunctive ! n ! p ! g ! c ;
|
||||
imperative = \\n,c => adv.s ++ vp.imperative ! n ! c
|
||||
} ;
|
||||
AdvVPSlash sl adv = sl ** {
|
||||
indicative = \\t,n,p => sl.indicative ! t ! n ! p ++ adv.s ;
|
||||
subjunctive = \\n,p => sl.subjunctive ! n ! p ++ adv.s ;
|
||||
imperative = \\n => sl.imperative ! n ++ adv.s ;
|
||||
participle = sl.participle ++ adv.s
|
||||
} ;
|
||||
AdVVPSlash adv sl = sl ** {
|
||||
indicative = \\t,n,p => adv.s ++ sl.indicative ! t ! n ! p ;
|
||||
subjunctive = \\n,p => adv.s ++ sl.subjunctive ! n ! p ;
|
||||
imperative = \\n => adv.s ++ sl.imperative ! n
|
||||
} ;
|
||||
VPSlashPrep vp prep = lin VPSlash {
|
||||
indicative = \\t,n,p => vp.indicative ! t ! n ! p ! Masc ! Nom ;
|
||||
subjunctive = \\n,p => vp.subjunctive ! n ! p ! Masc ! Nom ;
|
||||
imperative = \\n => vp.imperative ! n ! Nom ;
|
||||
participle = vp.participle ! {gn=GSg Masc;p=P3} ! Nom ;
|
||||
pres_optative = \\n,p => vp.pres_optative ! n ! p ! Nom ;
|
||||
perf_optative = \\n,p => vp.perf_optative ! n ! p ! Nom ;
|
||||
pres_admirative = \\n,p => vp.pres_admirative ! n ! p ! Nom ;
|
||||
imperf_admirative = \\n,p => vp.imperf_admirative ! n ! p ! Nom ;
|
||||
vtype = vp.vtype ;
|
||||
c2 = prep
|
||||
} ;
|
||||
|
||||
CompAP ap = {s = \\a => ap.s ! Indef ! Nom ! agrGender a ! agrNumber a} ;
|
||||
CompNP np = {s = \\_ => np.s ! Nom} ;
|
||||
CompAdv adv = {s = \\_ => adv.s} ;
|
||||
CompCN cn = {s = \\_ => cn.s ! Indef ! Nom ! Sg} ;
|
||||
}
|
||||
@@ -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="&"};
|
||||
@@ -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="አሉ"};
|
||||
|
||||
|
||||
}
|
||||
-}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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} ; ---
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
--# -path=.:../afrikaans:../common:../abstract:../prelude
|
||||
|
||||
resource TryAfr = SyntaxAfr, LexiconAfr, ParadigmsAfr - [mkAdv,mkOrd] ;
|
||||
resource TryAfr = SyntaxAfr, LexiconAfr, ParadigmsAfr - [mkAdv,mkAdN,mkCard,mkOrd,mkIAdv,mkIDet] ;
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
--# -path=.:../maltese:../common:../abstract:../prelude
|
||||
|
||||
resource TryMlt = SyntaxMlt, LexiconMlt, ParadigmsMlt - [mkAdN, mkAdv,mkOrd,mkQuant] **
|
||||
resource TryMlt = SyntaxMlt, LexiconMlt, ParadigmsMlt - [mkAdN, mkAdv,mkCard,mkDet,mkIAdv,mkIDet,mkOrd,mkPConj,mkQuant,mkVoc] **
|
||||
open (P = ParadigmsMlt) in {
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ concrete AdverbAra of Adverb = CatAra ** open ResAra, Prelude in {
|
||||
lin
|
||||
|
||||
PositAdvAdj a = {s = a.s ! APosit Masc Sg Indef Acc} ;
|
||||
PositAdAAdj a = {s = a.s ! APosit Masc Sg Indef Acc} ;
|
||||
-- ComparAdvAdj cadv a np = {
|
||||
-- s = cadv.s ++ a.s ! AAdv ++ "مِنْ" ++ np.s ! Gen
|
||||
-- } ;
|
||||
|
||||
@@ -17,6 +17,16 @@ lincat
|
||||
|
||||
lin
|
||||
|
||||
ready_VP = mkVP (mascA "مُسْتَعِدّ") ;
|
||||
|
||||
has_age_VP card = mkVP (mkNP card (mkN "سَنَة" "سَنَوَات" fem nohum)) ;
|
||||
|
||||
cup_of_CN np = mkCN (mkN "كُوب" "أَكْوَاب" masc nohum)
|
||||
(SyntaxAra.mkAdv possess_Prep np) ;
|
||||
|
||||
n_units_of_NP card cn np =
|
||||
mkNP card (mkCN cn (SyntaxAra.mkAdv possess_Prep np)) ;
|
||||
|
||||
timeunitAdv n time =
|
||||
let n_card : Card = n ;
|
||||
n_hours_NP : NP = mkNP n_card time ;
|
||||
|
||||
+119
-4
@@ -4,16 +4,23 @@ concrete ExtendAra of Extend =
|
||||
CatAra ** ExtendFunctor - [
|
||||
GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem,
|
||||
EmptyRelSlash, PredAPVP,
|
||||
ComplDirectVS, ComplDirectVQ, -- because of Utt
|
||||
ComplDirectVS, ComplDirectVQ, UttAdV, -- because of Utt
|
||||
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS,
|
||||
VPI, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
|
||||
BaseComp, ConsComp, ConjComp,
|
||||
BaseImp, ConsImp, ConjImp,
|
||||
EmbedSSlash, AdjAsNP, GerundNP,
|
||||
PassVPSlash, ---- bogus implementation, see below
|
||||
PassAgentVPSlash, PresPartAP, PastPartAP, PastPartAgentAP, ProgrVPSlash,
|
||||
ReflPron, ReflPoss, AdvRNP, AdvRVP, AdvRAP, PossPronRNP,
|
||||
CompoundAP, GerundCN, GerundAdv, ByVP, PositAdVAdj,
|
||||
CompoundN, UseDAP, UseDAPMasc, UseDAPFem
|
||||
]
|
||||
with (Grammar=GrammarAra)
|
||||
** open
|
||||
|
||||
ResAra,
|
||||
(P=ParamX),
|
||||
Prelude,
|
||||
ParadigmsAra,
|
||||
RelativeAra,
|
||||
@@ -31,6 +38,8 @@ lin
|
||||
-- : NP -> NP -> NP
|
||||
ApposNP np1 np2 = np2 ** {s = \\c => np1.s ! c ++ np2.s ! c} ;
|
||||
|
||||
UttAdV adv = {s = \\_ => adv.s} ;
|
||||
|
||||
-- : AP -> IComp ; -- "how old"
|
||||
ICompAP ap = {s = \\gn => "كَمْ" ++ ap.s ! NoHum ! gn.g ! gn.n ! Indef ! Acc} ;
|
||||
|
||||
@@ -69,6 +78,10 @@ lin
|
||||
lincat
|
||||
VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity
|
||||
[VPS] = {s1,s2 : PerGenNum => Str} ;
|
||||
VPI = {s : Str} ;
|
||||
[VPI] = {s1,s2 : Str} ;
|
||||
[Comp] = {s1,s2 : AAgr => ResAra.Case => Str} ;
|
||||
[Imp] = {s1,s2 : P.Polarity => ResAra.Gender => ResAra.Number => Str} ;
|
||||
lin
|
||||
-- : Temp -> Pol -> VP -> VPS ; -- hasn't slept
|
||||
MkVPS t p vp = {
|
||||
@@ -93,11 +106,70 @@ lin
|
||||
s = \\_ => np.s ! Nom ++ vps.s ! np.a.pgn -- first quick version with order always Nominal.
|
||||
} ; -- if necessary, change VPS into {s : PerGenNum => Order => {before,after : Str}}
|
||||
|
||||
MkVPI vp = {s = uttVP VPGer vp ! Masc} ;
|
||||
BaseVPI x y = {s1 = x.s ; s2 = y.s} ;
|
||||
ConsVPI x xs = {s1 = x.s ++ SOFT_BIND ++ "," ++ xs.s1 ; s2 = xs.s2} ;
|
||||
ConjVPI conj xs = {s = xs.s1 ++ conj.s2 ++ xs.s2} ;
|
||||
ComplVPIVV vv vpi = insertStr (vv.s2 ++ vpi.s) (predV vv) ;
|
||||
|
||||
BaseComp x y = {
|
||||
s1 = \\agr,cas => x.s ! agr ! cas ++ x.obj.s ;
|
||||
s2 = \\agr,cas => y.s ! agr ! cas ++ y.obj.s
|
||||
} ;
|
||||
ConsComp x xs = {
|
||||
s1 = \\agr,cas => x.s ! agr ! cas ++ x.obj.s ++ SOFT_BIND ++ "," ++ xs.s1 ! agr ! cas ;
|
||||
s2 = xs.s2
|
||||
} ;
|
||||
ConjComp conj xs = {
|
||||
s = \\agr,cas => xs.s1 ! agr ! cas ++ conj.s2 ++ xs.s2 ! agr ! cas ;
|
||||
obj = emptyObj ;
|
||||
isNP = False
|
||||
} ;
|
||||
|
||||
BaseImp x y = {s1 = x.s ; s2 = y.s} ;
|
||||
ConsImp x xs = {
|
||||
s1 = \\p,g,n => x.s ! p ! g ! n ++ SOFT_BIND ++ "," ++ xs.s1 ! p ! g ! n ;
|
||||
s2 = xs.s2
|
||||
} ;
|
||||
ConjImp conj xs = {
|
||||
s = \\p,g,n => xs.s1 ! p ! g ! n ++ conj.s2 ++ xs.s2 ! p ! g ! n
|
||||
} ;
|
||||
|
||||
|
||||
-- AR 24-02-08
|
||||
PassVPSlash vpslash = vpslash ** {s = \\pgn, vpf => vpslash.s ! pgn ! vpf} ;
|
||||
---- vpf does not have passive forms left,
|
||||
---- so this function is not possible with the current lincat of VP and VPSlash
|
||||
PassVPSlash vpslash = vpslash ** {
|
||||
s = \\pgn,vpf => case vpf of {
|
||||
VPPerf => vpslash.s ! pgn ! VPPassPerf ;
|
||||
VPImpf m => vpslash.s ! pgn ! VPPassImpf m ;
|
||||
_ => vpslash.s ! pgn ! vpf
|
||||
} ;
|
||||
obj = emptyObj ;
|
||||
c2 = accPrep ;
|
||||
agrObj = \\_ => []
|
||||
} ;
|
||||
|
||||
PassAgentVPSlash vpslash agent =
|
||||
insertStr ("مِنْ قِبَلِ" ++ agent.s ! Gen) (PassVPSlash vpslash) ;
|
||||
|
||||
PresPartAP vp = {
|
||||
s = \\h,g,n,_,_ => presentRelative ! h ! g ! n
|
||||
++ vp.s ! Per3 g n ! VPImpf Ind
|
||||
++ vp.obj.s ++ vp.pred.s ! {g = g ; n = n} ! Acc ++ vp.s2
|
||||
} ;
|
||||
|
||||
PastPartAP vpslash = {
|
||||
s = \\_,_,_,_,_ =>
|
||||
vpslash.s ! Per3 Masc ResAra.Sg ! VPPPart
|
||||
++ vpslash.obj.s ++ vpslash.s2
|
||||
} ;
|
||||
|
||||
PastPartAgentAP vpslash agent =
|
||||
let ap = PastPartAP vpslash in ap ** {
|
||||
s = \\h,g,n,d,c => ap.s ! h ! g ! n ! d ! c
|
||||
++ "مِنْ قِبَلِ" ++ agent.s ! Gen
|
||||
} ;
|
||||
|
||||
ProgrVPSlash vpslash = vpslash ;
|
||||
|
||||
---- very unsure about this as well
|
||||
CompoundN a b = b ** {
|
||||
@@ -132,4 +204,47 @@ lin UseDAPFem dap = case dap.isEmpty of {
|
||||
} ;
|
||||
False => emptyNP ** {s = dap.s ! NoHum ! Fem} } ;
|
||||
|
||||
lin ReflPoss num cn =
|
||||
DetCN (DetQuant (PossPron he_Pron) num) cn ;
|
||||
|
||||
ReflPron = lin NP (indeclNP "نَفْسِهِ" ResAra.Sg) ;
|
||||
|
||||
AdvRNP np prep rnp = AdvNP np (PrepNP prep rnp) ;
|
||||
AdvRVP vp prep rnp = AdvVP vp (PrepNP prep rnp) ;
|
||||
AdvRAP ap prep rnp = AdvAP ap (PrepNP prep rnp) ;
|
||||
|
||||
PossPronRNP pron num cn rnp =
|
||||
DetCN (DetQuant (PossPron pron) num)
|
||||
(PossNP cn rnp) ;
|
||||
|
||||
GerundCN vp = useN {
|
||||
s = \\_,_,_ => uttVP VPGer vp ! Masc ;
|
||||
s2 = emptyNTable ;
|
||||
g = Masc ;
|
||||
h = NoHum ;
|
||||
isDual = False
|
||||
} ;
|
||||
GerundAdv vp = {s = uttVP VPGer vp ! Masc} ;
|
||||
ByVP vp = {s = "بِـ" ++ uttVP VPGer vp ! Masc} ;
|
||||
|
||||
CompoundAP n a =
|
||||
let ap = Grammar.PositA a in ap ** {
|
||||
s = \\h,g,num,d,c => ap.s ! h ! g ! num ! d ! c
|
||||
++ n.s ! ResAra.Sg ! Const ! Gen
|
||||
} ;
|
||||
|
||||
PositAdVAdj a = {s = a.s ! APosit Masc ResAra.Sg Indef Acc} ;
|
||||
|
||||
oper presentRelative : ResAra.Species => ResAra.Gender => ResAra.Number => Str = table {
|
||||
NoHum => \\_,_ => "الَّتِي" ;
|
||||
Hum => table {
|
||||
Masc => table {
|
||||
ResAra.Sg => "الَّذِي" ; Dl => "اللَّذَانِ" ; ResAra.Pl => "الَّذِينَ"
|
||||
} ;
|
||||
Fem => table {
|
||||
ResAra.Sg => "الَّتِي" ; Dl => "اللَّتَانِ" ; ResAra.Pl => "اللَّاتِي"
|
||||
}
|
||||
}
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
+10
-2
@@ -44,9 +44,17 @@ concrete IdiomAra of Idiom = CatAra ** open
|
||||
|
||||
-- ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
|
||||
|
||||
-- ProgrVP : VP -> VP ; -- be sleeping
|
||||
-- Arabic normally expresses the unmarked progressive with the
|
||||
-- imperfect, so no extra auxiliary is required here.
|
||||
ProgrVP vp = vp ;
|
||||
|
||||
-- ImpPl1 : VP -> Utt ; -- let's go
|
||||
-- The first-person plural jussive prefixed by لِ is the usual
|
||||
-- hortative construction: لِنَذْهَبْ "let us go".
|
||||
ImpPl1 vp = {s = \\_ => "لِ" ++ BIND
|
||||
++ vp.s ! Per1 Plur ! VPImpf Jus
|
||||
++ vp.obj.s
|
||||
++ vp.pred.s ! {g = Masc ; n = Pl} ! Acc
|
||||
++ vp.s2} ;
|
||||
|
||||
-- ImpP3 : NP -> VP -> Utt ; -- let John walk
|
||||
|
||||
|
||||
@@ -11,6 +11,12 @@ lin FullName gn sn = emptyNP ** {
|
||||
|
||||
lin UseLN ln = ln ;
|
||||
|
||||
lin AdjLN ap ln = ln ** {
|
||||
s = \\c => ln.s ! c
|
||||
++ ap.s ! NoHum ! (pgn2gn ln.a.pgn).g
|
||||
! (pgn2gn ln.a.pgn).n ! Def ! c
|
||||
} ;
|
||||
|
||||
lin PlainLN ln = ln ;
|
||||
|
||||
lin InLN n = A.PrepNP S.in_Prep n ; ---- TODO: alternative prepositions
|
||||
|
||||
@@ -75,6 +75,24 @@ lin
|
||||
};
|
||||
-}
|
||||
|
||||
PartNP cn np = cn ** {
|
||||
np = \\c => cn.np ! c ++ "مِنْ" ++ np.s ! Gen ;
|
||||
isHeavy = True
|
||||
} ;
|
||||
|
||||
CountNP det np = emptyNP ** {
|
||||
s = \\c => det.s ! NoHum ! Masc ! c ++ "مِنْ" ++ np.s ! Gen ;
|
||||
a = {pgn = agrP3 NoHum Masc (sizeToNumber det.n) ; isPron = False} ;
|
||||
isHeavy = True
|
||||
} ;
|
||||
|
||||
AdjDAP dap ap = dap ** {
|
||||
s = \\h,g,c => dap.s ! h ! g ! c
|
||||
++ ap.s ! h ! g ! (sizeToNumber dap.n) ! dap.d ! c
|
||||
} ;
|
||||
|
||||
ExtAdvNP np adv = AdvNP np adv ;
|
||||
|
||||
AdvNP np adv = np ** {
|
||||
s = \\c => np.s ! c ++ adv.s ;
|
||||
isHeavy = True ;
|
||||
|
||||
@@ -105,6 +105,46 @@ lincat
|
||||
-- s = \\c => n.s ! NCard ++ "تهُْسَند" ++ m.s ! c ; n = Pl} ;
|
||||
|
||||
lin pot3as4 n = n ;
|
||||
|
||||
-- Arabic treats the scale nouns as ordinary masculine count nouns: the
|
||||
-- numeral therefore has feminine polarity with 3--10 (ثلاثة ملايين), while
|
||||
-- one million is conventionally written without an overt "one".
|
||||
lin pot41 = {
|
||||
s = \\co,_,d,c => case co of {
|
||||
NCard => defArt d c "مِلْيُون" ;
|
||||
NOrd => defArt d c "مِلْيُونِيّ"
|
||||
} ;
|
||||
n = One
|
||||
} ;
|
||||
|
||||
lin pot4 m = {
|
||||
s = \\co,_,d,c => case m.n of {
|
||||
One => defArt d c "مِلْيُون" ;
|
||||
Two => m.s ! co ! Fem ! d ! c ++ "مِلْيُون" ;
|
||||
ThreeTen => m.s ! co ! Fem ! d ! c ++ "مَلَايِين" ;
|
||||
_ => m.s ! co ! Fem ! d ! c ++ "مِلْيُون"
|
||||
} ;
|
||||
n = m.n
|
||||
} ;
|
||||
|
||||
lin pot51 = {
|
||||
s = \\co,_,d,c => case co of {
|
||||
NCard => defArt d c "مِلْيَار" ;
|
||||
NOrd => defArt d c "مِلْيَارِيّ"
|
||||
} ;
|
||||
n = One
|
||||
} ;
|
||||
|
||||
lin pot5 m = {
|
||||
s = \\co,_,d,c => case m.n of {
|
||||
One => defArt d c "مِلْيَار" ;
|
||||
Two => m.s ! co ! Fem ! d ! c ++ "مِلْيَار" ;
|
||||
ThreeTen => m.s ! co ! Fem ! d ! c ++ "مِلْيَارَات" ;
|
||||
_ => m.s ! co ! Fem ! d ! c ++ "مِلْيَار"
|
||||
} ;
|
||||
n = m.n
|
||||
} ;
|
||||
|
||||
lin pot4as5 n = n ;
|
||||
|
||||
-- numerals as sequences of digits
|
||||
|
||||
@@ -907,10 +907,6 @@ param VerbForm =
|
||||
FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVII | FormVIII | FormX | FormXI ;
|
||||
|
||||
|
||||
|
||||
-- paradigms for Wiktionary extraction
|
||||
---- TODO: better usage of information in Wiktionary
|
||||
|
||||
oper
|
||||
wmkN = overload {
|
||||
wmkN : {sg, pl : Str ; g : Gender} -> N
|
||||
@@ -1001,4 +997,11 @@ oper
|
||||
= \r -> variants {} ; ---- mkV r.imperfect ; -- expects cls I
|
||||
} ;
|
||||
|
||||
invarCard : Str -> Size -> NumOrdCard = \s,n -> {
|
||||
s = \\_,_,_ => s ; n = n ; isNum = False
|
||||
} ;
|
||||
invarQuant : Str -> State -> Quant = \s,d -> lin Quant baseQuant ** {
|
||||
s = \\_,_,_,_ => s ; d = d
|
||||
} ;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -22,6 +22,8 @@ concrete PhraseAra of Phrase = CatAra ** open
|
||||
UttS s = {s = \\_ => s.s ! Verbal} ;
|
||||
UttAdv,
|
||||
UttIAdv = \s -> {s = \\_ => s.s} ; ---- OK? AR
|
||||
|
||||
VocNP np = {s = "يَا" ++ np.s ! Nom} ;
|
||||
--
|
||||
NoPConj = {s = []} ;
|
||||
-- PConjConj conj = conj ;
|
||||
|
||||
@@ -465,8 +465,11 @@ oper
|
||||
|
||||
param
|
||||
VPForm = VPPerf
|
||||
| VPPassPerf
|
||||
| VPImpf Mood
|
||||
| VPPassImpf Mood
|
||||
| VPImp
|
||||
| VPPPart
|
||||
| VPGer ;
|
||||
|
||||
VType = -- indicates if there is a predicate (xabar):
|
||||
@@ -500,8 +503,11 @@ oper
|
||||
let gn = pgn2gn pgn in
|
||||
case vf of {
|
||||
VPPerf => v.s ! VPerf Act pgn ;
|
||||
VPPassPerf => v.s ! VPerf Pas pgn ;
|
||||
VPImpf m => v.s ! VImpf m Act pgn ;
|
||||
VPPassImpf m => v.s ! VImpf m Pas pgn ;
|
||||
VPImp => v.s ! VImp gn.g gn.n ;
|
||||
VPPPart => v.s ! VPPart ;
|
||||
VPGer => v.s ! Masdar
|
||||
};
|
||||
sc = noPrep ;
|
||||
@@ -515,8 +521,8 @@ oper
|
||||
let actVP = predV v in actVP ** {
|
||||
s = \\pgn,vf =>
|
||||
case vf of {
|
||||
VPPerf => v.s ! VPerf Pas pgn ;
|
||||
VPImpf m => v.s ! VImpf m Pas pgn ;
|
||||
VPPerf => actVP.s ! pgn ! VPPassPerf ;
|
||||
VPImpf m => actVP.s ! pgn ! VPPassImpf m ;
|
||||
_ => actVP.s ! pgn ! vf
|
||||
}
|
||||
};
|
||||
|
||||
@@ -15,6 +15,8 @@ concrete SentenceAra of Sentence = CatAra ** open
|
||||
|
||||
PredVP = predVP ;
|
||||
|
||||
PredSCVP sc vp = predVP (indeclNP sc.s ResAra.Sg) vp ;
|
||||
|
||||
ImpVP vp = {
|
||||
s = \\p,g,n =>
|
||||
case p of {
|
||||
@@ -37,8 +39,15 @@ concrete SentenceAra of Sentence = CatAra ** open
|
||||
SlashVP = predVPSlash ;
|
||||
AdvSlash slash adv = slash ** { s2 = slash.s2 ++ adv.s } ;
|
||||
|
||||
AdvImp adv imp = {s = \\p,g,n => adv.s ++ imp.s ! p ! g ! n} ;
|
||||
|
||||
-- : Cl -> Prep -> ClSlash
|
||||
-- SlashPrep cl prep = TODO
|
||||
SlashPrep cl prep = (predV copula) ** {
|
||||
s = \\_,_ => cl.s ! Pres ! Pos ! Verbal ;
|
||||
c2 = prep ;
|
||||
agrObj = \\_ => [] ;
|
||||
subj = np2subj emptyNP
|
||||
} ;
|
||||
|
||||
-- SlashVS np vs sslash = TODO
|
||||
|
||||
@@ -72,4 +81,8 @@ concrete SentenceAra of Sentence = CatAra ** open
|
||||
|
||||
AdvS adv s = s ** {s = \\o => adv.s ++ s.s ! o} ;
|
||||
ExtAdvS adv s = s ** {s = \\o => adv.s ++ s.s ! o} ;
|
||||
|
||||
SSubjS s1 subj s2 = {
|
||||
s = \\o => s1.s ! o ++ SOFT_BIND ++ "," ++ subj.s ++ s2.s ! subj.o
|
||||
} ;
|
||||
}
|
||||
|
||||
@@ -43,6 +43,10 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
|
||||
} ;
|
||||
|
||||
SlashV2a = slashV2 ;
|
||||
|
||||
-- The adjective is a secondary predicate of the missing object.
|
||||
-- Keeping it in `pred` lets ComplSlash supply the agreement features.
|
||||
SlashV2A v ap = slashV2 v ** {pred = CompAP ap} ;
|
||||
Slash2V3 v np = insertObj np (slashV2 v) ** {c2 = v.c3 ; agrObj = \\_ => []};
|
||||
|
||||
Slash3V3 v np =
|
||||
@@ -108,6 +112,10 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
|
||||
AdVVP adv = insertStr adv.s ;
|
||||
AdVVPSlash adv vps = vps ** insertStr adv.s vps ;
|
||||
|
||||
AdvVPSlash vps adv = vps ** insertStr adv.s vps ;
|
||||
|
||||
ExtAdvVP vp adv = insertStr adv.s vp ;
|
||||
|
||||
-- : VPSlash -> VP ; -- love himself
|
||||
ReflVP vps = vps ** {
|
||||
s = \\pgn,vf => vps.s ! pgn ! vf
|
||||
|
||||
@@ -1,4 +1,35 @@
|
||||
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
|
||||
} ;
|
||||
UseA2 a = PositA a ;
|
||||
ComplA2 a np = {
|
||||
s = \\sp,c,n => (case a.c2.isPre of {
|
||||
True => a.c2.s ++ np.s ! a.c2.c;
|
||||
False => np.s ! a.c2.c ++ a.c2.s
|
||||
}) ++ a.s ! c ! n;
|
||||
isPre = False
|
||||
} ;
|
||||
AdvAP ap adv = {s = \\sp,c,n => ap.s ! sp ! c ! n ++ adv.s; isPre = ap.isPre} ;
|
||||
SentAP ap sc = {s = \\sp,c,n => ap.s ! sp ! c ! n ++ sc.s; isPre = ap.isPre} ;
|
||||
ComparA a np = {
|
||||
s = \\sp,c,n => a.s ! c ! n ++ "քան" ++ np.s ! Nom; isPre = False
|
||||
} ;
|
||||
UseComparA a = {
|
||||
s = \\sp,c,n => "ավելի" ++ (a.s ! c ! n); isPre = True
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
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
|
||||
}} ;
|
||||
lin PositAdvAdj a = {s = a.s ! Instr ! Sg} ;
|
||||
lin PositAdAAdj a = {s = a.s ! Instr ! Sg} ;
|
||||
lin AdAdv ada adv = {s = ada.s ++ adv.s} ;
|
||||
lin SubjS subj s = {s = subj.s ++ s.s} ;
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
concrete AllHye of AllHyeAbs =
|
||||
LangHye
|
||||
LangHye,
|
||||
ExtendHye
|
||||
**
|
||||
{} ;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
abstract AllHyeAbs =
|
||||
Lang
|
||||
Lang,
|
||||
Extend
|
||||
** {}
|
||||
+63
-15
@@ -1,16 +1,64 @@
|
||||
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;
|
||||
negative : Tense => 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 : CardOrd => Str; n : Number; hasDot : Bool} ;
|
||||
lincat Det = {s : Str; n : Number; sp : Species} ;
|
||||
lincat Digits = {s : CardOrd => 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 = 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 : CardOrd => Str; n : Number} ;
|
||||
lincat Ord = {s : Str} ;
|
||||
lincat PN = {s : Str} ;
|
||||
lincat Predet = {s : Str} ;
|
||||
lincat Prep = Compl ;
|
||||
lincat Pron = {s : Case => 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} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
concrete ConjunctionHye of Conjunction = CatHye ** open Prelude, ResHye in {
|
||||
lincat
|
||||
[S] = {s1,s2 : Str} ; [RS] = {s1,s2 : Str} ; [Adv] = {s1,s2 : Str} ;
|
||||
[AdV] = {s1,s2 : Str} ; [NP] = {s1,s2 : Str} ; [AP] = {s1,s2 : Str} ;
|
||||
[IAdv] = {s1,s2 : Str} ; [CN] = {s1,s2 : Str} ; [DAP] = {s1,s2 : Str} ;
|
||||
lin
|
||||
BaseS x y = {s1=x.s;s2=y.s}; ConsS x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2}; ConjS c xs = {s=xs.s1 ++ c.s ++ xs.s2};
|
||||
BaseRS x y = {s1=x.s;s2=y.s}; ConsRS x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2}; ConjRS c xs = {s=xs.s1 ++ c.s ++ xs.s2};
|
||||
BaseAdv x y = {s1=x.s;s2=y.s}; ConsAdv x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2}; ConjAdv c xs = {s=xs.s1 ++ c.s ++ xs.s2};
|
||||
BaseAdV x y = {s1=x.s;s2=y.s}; ConsAdV x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2}; ConjAdV c xs = {s=xs.s1 ++ c.s ++ xs.s2};
|
||||
BaseIAdv x y = {s1=x.s;s2=y.s}; ConsIAdv x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2}; ConjIAdv c xs = {s=xs.s1 ++ c.s ++ xs.s2};
|
||||
BaseNP x y = {s1=x.s ! Nom;s2=y.s ! Nom}; ConsNP x xs = {s1=x.s ! Nom;s2=xs.s1 ++ "," ++ xs.s2};
|
||||
ConjNP c xs = {s=\\_ => xs.s1 ++ c.s ++ xs.s2; a={n=Pl;p=P3}};
|
||||
BaseAP x y = {s1=x.s ! Indef ! Nom ! Sg;s2=y.s ! Indef ! Nom ! Sg};
|
||||
ConsAP x xs = {s1=x.s ! Indef ! Nom ! Sg;s2=xs.s1 ++ "," ++ xs.s2};
|
||||
ConjAP c xs = {s=\\_,_,_ => xs.s1 ++ c.s ++ xs.s2;isPre=True};
|
||||
BaseCN x y = {s1=x.s ! Indef ! Nom ! Sg;s2=y.s ! Indef ! Nom ! Sg};
|
||||
ConsCN x xs = {s1=x.s ! Indef ! Nom ! Sg;s2=xs.s1 ++ "," ++ xs.s2};
|
||||
ConjCN c xs = {s=\\_,_,_ => xs.s1 ++ c.s ++ xs.s2};
|
||||
BaseDAP x y = {s1=x.s;s2=y.s}; ConsDAP x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2};
|
||||
ConjDet c xs = {s=xs.s1 ++ c.s ++ xs.s2;n=Pl;sp=Indef};
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
concrete ConstructionHye of Construction = CatHye ** open ResHye, ParadigmsHye, Prelude in {
|
||||
lincat Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s:Str} ;
|
||||
oper
|
||||
stateVP : Str -> VP = \s -> lin VP (invarVerb s) ;
|
||||
constCN : Str -> CN = \s -> lin CN {s=\\_,_,_=>s} ;
|
||||
lin
|
||||
hungry_VP=stateVP "սոված";thirsty_VP=stateVP "ծարավ";tired_VP=stateVP "հոգնած";
|
||||
scared_VP=stateVP "վախեցած";ill_VP=stateVP "հիվանդ";ready_VP=stateVP "պատրաստ";
|
||||
has_age_VP c=stateVP (c.s++"տարեկան");
|
||||
have_name_Cl np name=lin Cl {s=np.s!Nom++name.s!Nom;negative=table {_=>np.s!Nom++"չի"++name.s!Nom};conditional=\\_,_=>np.s!Nom++name.s!Nom;
|
||||
converb={imperfective=np.s!Nom++name.s!Nom;futCon1=np.s!Nom++name.s!Nom;futCon2=np.s!Nom++name.s!Nom;
|
||||
negative=np.s!Nom++name.s!Nom;perfective=np.s!Nom++name.s!Nom;simultaneous=np.s!Nom++name.s!Nom};
|
||||
passive=np.s!Nom++name.s!Nom;past=\\_,_=>np.s!Nom++name.s!Nom;participle=\\_=>np.s!Nom++name.s!Nom;
|
||||
subjunctive=\\_,_=>np.s!Nom++name.s!Nom};
|
||||
married_Cl x y=have_name_Cl x y;
|
||||
what_name_QCl np={s="ինչ է"++np.s!Nom++"անունը"};how_old_QCl np={s=np.s!Nom++"քանի տարեկան է"};
|
||||
how_far_QCl np={s=np.s!Nom++"որքան հեռու է"};weather_adjCl ap=have_name_Cl {s=\\_=>[];a={n=Sg;p=P3}} {s=\\_=>ap.s!Indef!Nom!Sg;a={n=Sg;p=P3}};
|
||||
is_right_VP=stateVP "ճիշտ";is_wrong_VP=stateVP "սխալ";
|
||||
n_units_AP card cn a={s=\\sp,c,n=>card.s++cn.s!Indef!Nom!Pl++a.s!c!n;isPre=True};
|
||||
n_units_of_NP card cn np={s=\\c=>card.s++cn.s!Indef!Nom!Pl++np.s!c;a=np.a};
|
||||
n_unit_CN card unit cn={s=\\sp,c,n=>card.s++unit.s!Indef!Nom!Sg++cn.s!sp!c!n};
|
||||
bottle_of_CN np=constCN ("շիշ"++np.s!Dat);cup_of_CN np=constCN ("բաժակ"++np.s!Dat);
|
||||
glass_of_CN np=constCN ("բաժակ"++np.s!Dat);
|
||||
few_X_short_of_Y np x y={s=np.s!Dat++x.s!Indef!Nom!Pl++y.s!Indef!Nom!Sg++"չի բավականացնում"};
|
||||
timeunitAdv c u={s=c.s++u.s};timeunitRange a b u={s=a.s++b.s++u.s};
|
||||
timeHour h={s="ժամը"++h.s};timeHourMinute h m={s="ժամը"++h.s++m.s};
|
||||
weekdayPunctualAdv d={s=d.s};weekdayHabitualAdv d={s="ամեն"++d.s};weekdayLastAdv d={s="անցյալ"++d.s};
|
||||
weekdayNextAdv d={s="հաջորդ"++d.s};monthAdv m={s=m.s};yearAdv y={s=y.s++"թվականին"};
|
||||
dayMonthAdv d m={s=d.s++m.s};monthYearAdv m y={s=m.s++y.s};dayMonthYearAdv d m y={s=d.s++m.s++y.s};
|
||||
intYear i={s=i.s};intMonthday i={s=i.s};InLanguage l={s=l.s++"երեն"};
|
||||
weekdayN d=lin N (invarNoun d.s);monthN m=lin N (invarNoun m.s);weekdayPN d={s=d.s};monthPN m={s=m.s};
|
||||
languageNP l={s=\\_=>l.s;a={n=Sg;p=P3}};languageCN l=constCN l.s;
|
||||
oneHour={s="մեկ"};twoHour={s="երկու"};threeHour={s="երեք"};fourHour={s="չորս"};fiveHour={s="հինգ"};
|
||||
sixHour={s="վեց"};sevenHour={s="յոթ"};eightHour={s="ութ"};nineHour={s="ինը"};tenHour={s="տասը"};
|
||||
elevenHour={s="տասնմեկ"};twelveHour={s="տասներկու"};
|
||||
thirteenHour={s="տասներեք"};fourteenHour={s="տասնչորս"};fifteenHour={s="տասնհինգ"};
|
||||
sixteenHour={s="տասնվեց"};seventeenHour={s="տասնյոթ"};eighteenHour={s="տասնութ"};
|
||||
nineteenHour={s="տասնինը"};twentyHour={s="քսան"};twentyOneHour={s="քսանմեկ"};
|
||||
twentyTwoHour={s="քսաներկու"};twentyThreeHour={s="քսաներեք"};twentyFourHour={s="քսանչորս"};
|
||||
second_Timeunit={s="վայրկյան"};minute_Timeunit={s="րոպե"};hour_Timeunit={s="ժամ"};day_Timeunit={s="օր"};
|
||||
week_Timeunit={s="շաբաթ"};month_Timeunit={s="ամիս"};year_Timeunit={s="տարի"};
|
||||
monday_Weekday={s="երկուշաբթի"};tuesday_Weekday={s="երեքշաբթի"};wednesday_Weekday={s="չորեքշաբթի"};
|
||||
thursday_Weekday={s="հինգշաբթի"};friday_Weekday={s="ուրբաթ"};saturday_Weekday={s="շաբաթ"};sunday_Weekday={s="կիրակի"};
|
||||
january_Month={s="հունվար"};february_Month={s="փետրվար"};march_Month={s="մարտ"};april_Month={s="ապրիլ"};
|
||||
may_Month={s="մայիս"};june_Month={s="հունիս"};july_Month={s="հուլիս"};august_Month={s="օգոստոս"};
|
||||
september_Month={s="սեպտեմբեր"};october_Month={s="հոկտեմբեր"};november_Month={s="նոյեմբեր"};december_Month={s="դեկտեմբեր"};
|
||||
afrikaans_Language={s="աֆրիկաանս"};amharic_Language={s="ամհարերեն"};arabic_Language={s="արաբերեն"};
|
||||
bulgarian_Language={s="բուլղարերեն"};catalan_Language={s="կատալաներեն"};chinese_Language={s="չինարեն"};
|
||||
danish_Language={s="դանիերեն"};dutch_Language={s="հոլանդերեն"};english_Language={s="անգլերեն"};
|
||||
estonian_Language={s="էստոներեն"};finnish_Language={s="ֆիններեն"};french_Language={s="ֆրանսերեն"};
|
||||
german_Language={s="գերմաներեն"};greek_Language={s="հունարեն"};hebrew_Language={s="եբրայերեն"};
|
||||
hindi_Language={s="հինդի"};italian_Language={s="իտալերեն"};japanese_Language={s="ճապոներեն"};
|
||||
latin_Language={s="լատիներեն"};latvian_Language={s="լատվիերեն"};maltese_Language={s="մալթերեն"};
|
||||
nepali_Language={s="նեպալերեն"};norwegian_Language={s="նորվեգերեն"};persian_Language={s="պարսկերեն"};
|
||||
polish_Language={s="լեհերեն"};punjabi_Language={s="փենջաբերեն"};romanian_Language={s="ռումիներեն"};
|
||||
russian_Language={s="ռուսերեն"};sindhi_Language={s="սինդհի"};spanish_Language={s="իսպաներեն"};
|
||||
swahili_Language={s="սուահիլի"};swedish_Language={s="շվեդերեն"};thai_Language={s="թայերեն"};
|
||||
turkish_Language={s="թուրքերեն"};urdu_Language={s="ուրդու"};
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
--# -path=.:../abstract:../common:prelude
|
||||
|
||||
concrete ExtendHye of Extend =
|
||||
CatHye ** ExtendFunctor - [
|
||||
VPS, ListVPS, VPI, ListVPI,
|
||||
ListComp, ListImp,
|
||||
RNP, RNPList,
|
||||
GenModNP, EmptyRelSlash,
|
||||
MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, SQuestVPS, QuestVPS, RelVPS,
|
||||
ExistS, ExistNPQS, ExistIPQS,
|
||||
MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
|
||||
PresPartAP, EmbedPresPart, PastPartAP, PastPartAgentAP,
|
||||
PassVPSlash, PassAgentVPSlash, ProgrVPSlash, ComplBareVS,
|
||||
ReflPron, ReflPoss, PredetRNP, AdvRNP, AdvRVP, AdvRAP, PossPronRNP,
|
||||
Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, ConjRNP,
|
||||
CompoundN, CompoundAP, GerundCN, GerundNP, GerundAdv, ByVP, ApposNP,
|
||||
PositAdVAdj, UttVPShort, ComplSlashPartLast,
|
||||
UseDAPMasc, UseDAPFem, UseDAP,
|
||||
DetNPMasc, DetNPFem, PredAPVP, SubjRelNP,
|
||||
BaseComp, ConsComp, ConjComp, BaseImp, ConsImp, ConjImp,
|
||||
TPastSimple
|
||||
] with (Grammar = GrammarHye) **
|
||||
open Prelude, ResHye, ParadigmsHye, (R = ParamX) in {
|
||||
|
||||
lincat
|
||||
VPS = {s : Str} ; [VPS] = {s1,s2 : Str} ;
|
||||
VPI = {s : Str} ; [VPI] = {s1,s2 : Str} ;
|
||||
[Comp] = {s1,s2 : Str} ; [Imp] = {s1,s2 : Str} ;
|
||||
RNP = {s : Case => Str} ; RNPList = {s : Case => Str} ;
|
||||
|
||||
oper
|
||||
extToVP : Verb -> VP = \v -> lin VP {s=v.s;conditional=v.conditional;converb=v.converb;
|
||||
imperative=v.imperative;passive=v.passive;past=v.past;participle=v.participle;
|
||||
subjunctive=v.subjunctive} ;
|
||||
extAddVP : VP -> Str -> VP = \v,x -> lin VP {s=v.s ++ x;
|
||||
conditional=\\a,p,n=>v.conditional!a!p!n ++ x;
|
||||
converb={imperfective=v.converb.imperfective++x;futCon1=v.converb.futCon1++x;
|
||||
futCon2=v.converb.futCon2++x;negative=v.converb.negative++x;
|
||||
perfective=v.converb.perfective++x;simultaneous=v.converb.simultaneous++x};
|
||||
imperative=\\n=>v.imperative!n++x;passive=v.passive++x;
|
||||
past=\\p,n=>v.past!p!n++x;participle=\\p=>v.participle!p++x;
|
||||
subjunctive=\\a,p,n=>v.subjunctive!a!p!n++x} ;
|
||||
refl : RNP = lin RNP {s=\\_=>"իրեն"} ;
|
||||
|
||||
lin
|
||||
GenModNP num np cn = {s=\\c=>np.s!Dat ++ cn.s!Indef!c!num.n;a={n=num.n;p=P3}} ;
|
||||
EmptyRelSlash slash = {s="որը" ++ slash.s} ;
|
||||
|
||||
MkVPS temp pol vp = {s=pol.s ++ vp.s} ;
|
||||
BaseVPS x y = {s1=x.s;s2=y.s} ;
|
||||
ConsVPS x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
|
||||
ConjVPS c xs = {s=xs.s1++c.s++xs.s2} ;
|
||||
PredVPS np vps = {s=np.s!Nom++vps.s} ;
|
||||
SQuestVPS np vps = {s=np.s!Nom++vps.s++"՞"} ;
|
||||
QuestVPS ip vps = {s=ip.s++vps.s++"՞"} ;
|
||||
RelVPS rp vps = {s=rp.s++vps.s} ;
|
||||
ExistS t p np = {s=np.s!Nom++"կա"} ;
|
||||
ExistNPQS t p np = {s=np.s!Nom++"կա՞"} ;
|
||||
ExistIPQS t p ip = {s=ip.s++"կա՞"} ;
|
||||
|
||||
MkVPI vp = {s=vp.s} ;
|
||||
BaseVPI x y = {s1=x.s;s2=y.s} ;
|
||||
ConsVPI x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
|
||||
ConjVPI c xs = {s=xs.s1++c.s++xs.s2} ;
|
||||
ComplVPIVV vv vpi = extAddVP (extToVP vv) vpi.s ;
|
||||
|
||||
PresPartAP vp = {s=\\_,_,_=>vp.participle!Subject;isPre=True} ;
|
||||
EmbedPresPart vp = {s=vp.participle!Subject} ;
|
||||
PastPartAP slash = {s=\\_,_,_=>slash.participle!Resultative;isPre=True} ;
|
||||
PastPartAgentAP slash np = {s=\\_,_,_=>slash.participle!Resultative++np.s!Instr;isPre=True} ;
|
||||
PassVPSlash slash = extAddVP (extToVP (mkV "լինել")) (slash.participle!Resultative) ;
|
||||
PassAgentVPSlash slash np = extAddVP (extToVP (mkV "լինել")) (slash.participle!Resultative++np.s!Instr) ;
|
||||
ProgrVPSlash slash = slash ;
|
||||
ComplBareVS vs s = extAddVP (extToVP vs) s.s ;
|
||||
|
||||
ReflPron = refl ;
|
||||
ReflPoss num cn = {s=\\c=>"իր"++cn.s!Indef!c!num.n} ;
|
||||
PredetRNP pred r = {s=\\c=>pred.s++r.s!c} ;
|
||||
AdvRNP np prep r = {s=\\c=>np.s!c++prep.s++r.s!prep.c} ;
|
||||
AdvRVP vp prep r = extAddVP vp (prep.s++r.s!prep.c) ;
|
||||
AdvRAP ap prep r = {s=\\sp,c,n=>ap.s!sp!c!n++prep.s++r.s!prep.c;isPre=ap.isPre} ;
|
||||
PossPronRNP pron num cn r = {s=\\c=>pron.empty++cn.s!Indef!c!num.n++r.s!Dat;a={n=num.n;p=P3}} ;
|
||||
Base_rr_RNP x y = {s=\\c=>x.s!c++y.s!c} ;
|
||||
Base_nr_RNP x y = {s=\\c=>x.s!c++y.s!c} ;
|
||||
Base_rn_RNP x y = {s=\\c=>x.s!c++y.s!c} ;
|
||||
Cons_rr_RNP x xs = {s=\\c=>x.s!c++xs.s!c} ;
|
||||
Cons_nr_RNP x xs = {s=\\c=>x.s!c++xs.s!c} ;
|
||||
ConjRNP conj xs = {s=\\c=>conj.s++xs.s!c} ;
|
||||
|
||||
CompoundN n1 n2 = lin N {s=\\c,n=>n1.s!Nom!Sg++n2.s!c!n;def_dat=\\n=>n1.s!Nom!Sg++n2.def_dat!n;
|
||||
def_nom=\\n=>n1.s!Nom!Sg++n2.def_nom!n;poss1=\\c,n=>n1.s!Nom!Sg++n2.poss1!c!n;poss2=\\c,n=>n1.s!Nom!Sg++n2.poss2!c!n} ;
|
||||
CompoundAP n a = {s=\\sp,c,num=>n.s!Nom!Sg++a.s!c!num;isPre=True} ;
|
||||
GerundCN vp = {s=\\_,_,_=>vp.s} ;
|
||||
GerundNP vp = {s=\\_=>vp.s;a={n=Sg;p=P3}} ;
|
||||
GerundAdv vp = {s=vp.s} ;
|
||||
ByVP vp = {s=vp.s} ;
|
||||
ApposNP np app = {s=\\c=>np.s!c++","++app.s!Nom;a=np.a} ;
|
||||
PositAdVAdj a = {s=a.s!Instr!Sg} ;
|
||||
UttVPShort vp = {s=vp.s} ;
|
||||
ComplSlashPartLast slash np = extAddVP (extToVP slash) (slash.c2.s++np.s!slash.c2.c) ;
|
||||
UseDAPMasc dap = {s=\\_=>dap.s;a={n=Sg;p=P3}} ;
|
||||
UseDAPFem dap = {s=\\_=>dap.s;a={n=Sg;p=P3}} ;
|
||||
UseDAP dap = {s=\\_=>dap.s;a={n=Sg;p=P3}} ;
|
||||
DetNPMasc = variants {} ;
|
||||
DetNPFem = variants {} ;
|
||||
PredAPVP = variants {} ;
|
||||
SubjRelNP = variants {} ;
|
||||
|
||||
BaseComp x y = {s1=x.s;s2=y.s} ;
|
||||
ConsComp x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
|
||||
ConjComp c xs = {s=xs.s1++c.s++xs.s2} ;
|
||||
BaseImp x y = {s1=x.s;s2=y.s} ;
|
||||
ConsImp x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
|
||||
ConjImp c xs = {s=xs.s1++c.s++xs.s2} ;
|
||||
TPastSimple = {s=[];t=R.Past} ;
|
||||
}
|
||||
@@ -1,2 +1,16 @@
|
||||
concrete GrammarHye of Grammar = TenseX ** {
|
||||
concrete GrammarHye of Grammar =
|
||||
NounHye,
|
||||
VerbHye,
|
||||
AdjectiveHye,
|
||||
AdverbHye,
|
||||
NumeralHye,
|
||||
SentenceHye,
|
||||
QuestionHye,
|
||||
RelativeHye,
|
||||
ConjunctionHye,
|
||||
PhraseHye,
|
||||
StructuralHye,
|
||||
IdiomHye,
|
||||
TenseX,
|
||||
NamesHye ** {
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
concrete IdiomHye of Idiom = CatHye ** open ResHye in {
|
||||
oper
|
||||
bareCl : Str -> Cl = \s -> lin Cl {
|
||||
s=s; negative=table {_ => "չ" ++ s}; conditional=\\_,_ => s;
|
||||
converb={imperfective=s;futCon1=s;futCon2=s;negative=s;perfective=s;simultaneous=s};
|
||||
passive=s;past=\\_,_ => s;participle=\\_ => s;subjunctive=\\_,_ => s
|
||||
} ;
|
||||
lin
|
||||
ImpersCl vp = bareCl vp.s ;
|
||||
GenericCl vp = bareCl ("մարդ" ++ vp.s) ;
|
||||
CleftNP np rs = bareCl (np.s ! Nom ++ rs.s) ;
|
||||
CleftAdv adv s = bareCl (adv.s ++ s.s) ;
|
||||
ExistNP np = bareCl (np.s ! Nom ++ "կա") ;
|
||||
ExistIP ip = {s=ip.s ++ "կա՞"} ;
|
||||
ExistNPAdv np adv = bareCl (adv.s ++ np.s ! Nom ++ "կա") ;
|
||||
ExistIPAdv ip adv = {s=adv.s ++ ip.s ++ "կա՞"} ;
|
||||
ProgrVP vp = vp ;
|
||||
ImpPl1 vp = {s="եկեք" ++ vp.s} ;
|
||||
ImpP3 np vp = {s="թող" ++ np.s ! Nom ++ vp.s} ;
|
||||
SelfAdvVP vp = vp ; SelfAdVVP vp = vp ; SelfNP np = np ;
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
concrete LangHye of Lang =
|
||||
GrammarHye,
|
||||
LexiconHye
|
||||
,ConstructionHye
|
||||
,DocumentationHye --# notpresent
|
||||
** {
|
||||
|
||||
|
||||
@@ -1,2 +1,5 @@
|
||||
concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in {
|
||||
lin apple_N = mkN001 "խնձոր" ;
|
||||
lin man_N = mkN047 "տղամարդ" ;
|
||||
lin woman_N = mkN034 "կին" ;
|
||||
}
|
||||
+1371
-1411
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
||||
concrete NamesHye of Names = CatHye ** open Prelude, ResHye in {
|
||||
lin
|
||||
GivenName n = {s=\\_=>n.s;a={n=Sg;p=P3}} ;
|
||||
MaleSurname n = {s=\\_=>n.s;a={n=Sg;p=P3}} ;
|
||||
FemaleSurname n = {s=\\_=>n.s;a={n=Sg;p=P3}} ;
|
||||
PlSurname n = {s=\\_=>n.s;a={n=Pl;p=P3}} ;
|
||||
FullName n s = {s=\\_=>n.s++s.s;a={n=Sg;p=P3}} ;
|
||||
UseLN n = {s=\\_=>n.s;a={n=Sg;p=P3}} ;
|
||||
PlainLN n = {s=\\_=>n.s;a={n=Sg;p=P3}} ;
|
||||
InLN n = {s=n.s++BIND++"-ում"} ;
|
||||
AdjLN a n = {s=a.s!Indef!Nom!Sg++n.s} ;
|
||||
}
|
||||
+87
-3
@@ -1,4 +1,88 @@
|
||||
concrete NounHye of Noun = CatHye ** {
|
||||
lin
|
||||
UseN n = n ;
|
||||
concrete NounHye of Noun = CatHye ** open Prelude, 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 AdvNP np adv = {s = \\c => np.s ! c ++ adv.s; a = np.a} ;
|
||||
lin ExtAdvNP np adv = {s = \\c => np.s ! c ++ "," ++ adv.s; a = np.a} ;
|
||||
lin PredetNP pred np = {s = \\c => pred.s ++ np.s ! c; a = np.a} ;
|
||||
lin UsePN pn = {s = \\_ => pn.s; a = {n = Sg; p = P3}} ;
|
||||
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 DetQuantOrd quant num ord = {
|
||||
s = quant.s ++ num.s ++ ord.s; n = num.n; sp = quant.sp
|
||||
} ;
|
||||
lin IndefArt = {s = []; sp = Indef} ;
|
||||
lin NumPl = {s = []; n = Pl} ;
|
||||
lin NumSg = {s = []; n = Sg} ;
|
||||
lin NumCard card = {s = card.s; n = Pl} ;
|
||||
lin NumDigits digits = {s = digits.s ! NCard} ;
|
||||
lin NumDecimal decimal = {s = decimal.s ! NCard} ;
|
||||
lin NumNumeral numeral = {s = numeral.s ! NCard} ;
|
||||
lin AdNum adn card = {s = adn.s ++ card.s} ;
|
||||
lin OrdDigits digits = {s = digits.s ! NOrd} ;
|
||||
lin OrdNumeral numeral = {s = numeral.s ! NOrd} ;
|
||||
lin OrdSuperl a = {s = "ամենա" ++ a.s ! Nom ! Sg} ;
|
||||
lin OrdNumeralSuperl numeral a = {s = numeral.s ! NOrd ++ "ամենա" ++ a.s ! Nom ! Sg} ;
|
||||
lin MassNP cn = {
|
||||
s = \\c => cn.s ! Indef ! c ! Sg;
|
||||
a = {n=Sg; p=P3}
|
||||
} ;
|
||||
lin ComplN2 n np = {
|
||||
s = \\sp,c,num => (case n.c2.isPre of {
|
||||
True => n.c2.s ++ np.s ! n.c2.c;
|
||||
False => np.s ! n.c2.c ++ n.c2.s
|
||||
}) ++
|
||||
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 ComplN3 n np = n ** {c2 = n.c3} ;
|
||||
lin Use2N3 n = lin N2 {s=n.s;def_dat=n.def_dat;def_nom=n.def_nom;
|
||||
poss1=n.poss1;poss2=n.poss2;c2=n.c2} ;
|
||||
lin Use3N3 n = lin N2 {s=n.s;def_dat=n.def_dat;def_nom=n.def_nom;
|
||||
poss1=n.poss1;poss2=n.poss2;c2=n.c3} ;
|
||||
lin PossNP cn np = {
|
||||
s = \\sp,c,num => np.s ! Dat ++ cn.s ! sp ! c ! num
|
||||
} ;
|
||||
lin PartNP cn np = {
|
||||
s = \\sp,c,num => cn.s ! sp ! c ! num ++ np.s ! Ablat
|
||||
} ;
|
||||
lin SentCN cn sc = {s = \\sp,c,n => cn.s ! sp ! c ! n ++ sc.s} ;
|
||||
lin ApposCN cn np = {s = \\sp,c,n => cn.s ! sp ! c ! n ++ np.s ! Nom} ;
|
||||
lin RelCN cn rs = {s = \\sp,c,n => cn.s ! sp ! c ! n ++ rs.s} ;
|
||||
lin CountNP det np = {s = \\c => det.s ++ np.s ! c; a = {n=det.n;p=P3}} ;
|
||||
lin DetDAP det = {s = det.s} ;
|
||||
lin AdjDAP dap ap = {s = dap.s ++ ap.s ! Indef ! Nom ! Sg} ;
|
||||
lin QuantityNP decimal mu = {
|
||||
s = \\_ => case mu.isPre of {
|
||||
True => mu.s ++ decimal.s ! NCard;
|
||||
False => decimal.s ! NCard ++ mu.s
|
||||
};
|
||||
a = {n=Pl;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 = pron.s; a=pron.a} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete NumeralHye of Numeral = CatHye [Numeral,Digits,Decimal] **
|
||||
open Prelude, ResHye in {
|
||||
|
||||
flags coding = utf8 ;
|
||||
|
||||
param DForm = Unit | Teen | Ten ;
|
||||
|
||||
lincat
|
||||
Digit = {s : DForm => CardOrd => Str; compoundOrd : DForm => Str} ;
|
||||
Sub10 = {s : DForm => CardOrd => Str; compoundOrd : DForm => Str; n : Number} ;
|
||||
Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = LinNum ;
|
||||
|
||||
lin
|
||||
num n = {s = n.s; n = n.n} ;
|
||||
|
||||
n2 = mkDigit "երկու" "տասներկու" "քսան" "երկրորդ" ;
|
||||
n3 = mkDigit "երեք" "տասներեք" "երեսուն" "երրորդ" ;
|
||||
n4 = mkDigit "չորս" "տասնչորս" "քառասուն" "չորրորդ" ;
|
||||
n5 = mkDigit "հինգ" "տասնհինգ" "հիսուն" "հինգերորդ" ;
|
||||
n6 = mkDigit "վեց" "տասնվեց" "վաթսուն" "վեցերորդ" ;
|
||||
n7 = mkDigit "յոթ" "տասնյոթ" "յոթանասուն" "յոթերորդ" ;
|
||||
n8 = mkDigit "ութ" "տասնութ" "ութսուն" "ութերորդ" ;
|
||||
n9 = mkDigit "ինը" "տասնինը" "իննսուն" "իններորդ" ;
|
||||
|
||||
pot01 = mkDigit "մեկ" "տասնմեկ" "տասը" "առաջին" ** {
|
||||
compoundOrd = table {
|
||||
Unit => "մեկերորդ" ;
|
||||
Teen => "տասնմեկերորդ" ;
|
||||
Ten => "տասներորդ"
|
||||
} ;
|
||||
n = Sg
|
||||
} ;
|
||||
pot0 d = d ** {n = Pl} ;
|
||||
|
||||
pot110 = mkNum "տասը" "տասներորդ" Pl ** {attr = "տաս"} ;
|
||||
pot111 = regNum "տասնմեկ" Pl ;
|
||||
pot1to19 d = {
|
||||
s = d.s ! Teen ;
|
||||
compoundOrd = d.compoundOrd ! Teen ;
|
||||
attr = d.s ! Teen ! NCard ;
|
||||
n = Pl
|
||||
} ;
|
||||
pot0as1 n = {
|
||||
s = n.s ! Unit ;
|
||||
compoundOrd = n.compoundOrd ! Unit ;
|
||||
attr = n.s ! Unit ! NCard ;
|
||||
n = n.n
|
||||
} ;
|
||||
pot1 d = {
|
||||
s = d.s ! Ten ;
|
||||
compoundOrd = d.compoundOrd ! Ten ;
|
||||
attr = d.s ! Ten ! NCard ;
|
||||
n = Pl
|
||||
} ;
|
||||
pot1plus d e = regNum
|
||||
(d.s ! Ten ! NCard ++ BIND ++ e.s ! Unit ! NCard) Pl ;
|
||||
pot1as2 n = n ;
|
||||
|
||||
pot21 = mkNum "հարյուր" "հարյուրերորդ" Pl ;
|
||||
pot2 d = scaleNum (d.s ! Unit ! NCard) "հարյուր" Pl ;
|
||||
pot2plus d e = plusNum
|
||||
(d.s ! Unit ! NCard ++ "հարյուր") e Pl ;
|
||||
pot2as3 n = n ;
|
||||
|
||||
pot31 = mkNum "հազար" "հազարերորդ" Pl ;
|
||||
pot3 n = scaleNum n.attr "հազար" Pl ;
|
||||
pot3plus n m = plusNum (n.attr ++ "հազար") m Pl ;
|
||||
pot3as4 n = n ;
|
||||
pot3decimal n = decimalScale n "հազար" ;
|
||||
|
||||
pot41 = mkNum "միլիոն" "միլիոներորդ" Pl ;
|
||||
pot4 n = scaleNum n.attr "միլիոն" Pl ;
|
||||
pot4plus n m = plusNum (n.attr ++ "միլիոն") m Pl ;
|
||||
pot4as5 n = n ;
|
||||
pot4decimal n = decimalScale n "միլիոն" ;
|
||||
|
||||
pot51 = mkNum "միլիարդ" "միլիարդերորդ" Pl ;
|
||||
pot5 n = scaleNum n.attr "միլիարդ" Pl ;
|
||||
pot5plus n m = plusNum (n.attr ++ "միլիարդ") m Pl ;
|
||||
pot5decimal n = decimalScale n "միլիարդ" ;
|
||||
|
||||
lincat Dig = {s : CardOrd => Str; n : Number} ;
|
||||
|
||||
lin
|
||||
IDig d = d ** {tail = T1} ;
|
||||
IIDig d ds = {
|
||||
s = table {
|
||||
NCard => glue (d.s ! NCard) (ds.s ! NCard) ;
|
||||
NOrd => glue (glue (d.s ! NCard) (ds.s ! NCard)) "-րդ"
|
||||
} ;
|
||||
n = Pl ;
|
||||
tail = inc ds.tail
|
||||
} ;
|
||||
|
||||
D_0 = mkDig "0" ;
|
||||
D_1 = mkDig1 ;
|
||||
D_2 = mkDig "2" ;
|
||||
D_3 = mkDig "3" ;
|
||||
D_4 = mkDig "4" ;
|
||||
D_5 = mkDig "5" ;
|
||||
D_6 = mkDig "6" ;
|
||||
D_7 = mkDig "7" ;
|
||||
D_8 = mkDig "8" ;
|
||||
D_9 = mkDig "9" ;
|
||||
|
||||
PosDecimal d = d ** {hasDot = False} ;
|
||||
NegDecimal d = {
|
||||
s = \\o => "-" ++ BIND ++ d.s ! o ;
|
||||
n = Pl ;
|
||||
hasDot = False
|
||||
} ;
|
||||
IFrac d i = {
|
||||
s = \\o => d.s ! NCard ++
|
||||
if_then_Str d.hasDot BIND (BIND ++ "." ++ BIND) ++
|
||||
i.s ! o ;
|
||||
n = Pl ;
|
||||
hasDot = True
|
||||
} ;
|
||||
|
||||
oper
|
||||
LinNum : Type = {
|
||||
s : CardOrd => Str ;
|
||||
compoundOrd : Str ;
|
||||
attr : Str ;
|
||||
n : Number
|
||||
} ;
|
||||
|
||||
mkNum : Str -> Str -> Number -> LinNum = \card,ord,n -> {
|
||||
s = table {NCard => card; NOrd => ord} ;
|
||||
compoundOrd = ord ;
|
||||
attr = card ;
|
||||
n = n
|
||||
} ;
|
||||
|
||||
regNum : Str -> Number -> LinNum = \card,n ->
|
||||
mkNum card (glue card "երորդ") n ;
|
||||
|
||||
mkDigit : Str -> Str -> Str -> Str ->
|
||||
{s : DForm => CardOrd => Str; compoundOrd : DForm => Str} =
|
||||
\unit,teen,ten,unitOrd -> {
|
||||
s = table {
|
||||
Unit => table {NCard => unit; NOrd => unitOrd} ;
|
||||
Teen => table {NCard => teen; NOrd => glue teen "երորդ"} ;
|
||||
Ten => table {NCard => ten; NOrd => glue ten "երորդ"}
|
||||
} ;
|
||||
compoundOrd = table {
|
||||
Unit => unitOrd ;
|
||||
Teen => glue teen "երորդ" ;
|
||||
Ten => glue ten "երորդ"
|
||||
}
|
||||
} ;
|
||||
|
||||
scaleNum : Str -> Str -> Number -> LinNum = \prefix,scale,n ->
|
||||
mkNum (prefix ++ scale) (prefix ++ glue scale "երորդ") n ;
|
||||
|
||||
plusNum : Str -> LinNum -> Number -> LinNum = \prefix,last,n -> {
|
||||
s = table {
|
||||
NCard => prefix ++ last.s ! NCard ;
|
||||
NOrd => prefix ++ last.compoundOrd
|
||||
} ;
|
||||
compoundOrd = prefix ++ last.compoundOrd ;
|
||||
attr = prefix ++ last.s ! NCard ;
|
||||
n = n
|
||||
} ;
|
||||
|
||||
decimalScale : Decimal -> Str -> LinNum = \decimal,scale ->
|
||||
mkNum (decimal.s ! NCard ++ scale)
|
||||
(decimal.s ! NCard ++ glue scale "երորդ") Pl ;
|
||||
|
||||
mkDig : Str -> {s : CardOrd => Str; n : Number} = \d -> {
|
||||
s = table {NCard => d; NOrd => glue d "-րդ"} ;
|
||||
n = Pl
|
||||
} ;
|
||||
|
||||
mkDig1 : {s : CardOrd => Str; n : Number} = {
|
||||
s = table {NCard => "1"; NOrd => "1-ին"} ;
|
||||
n = Sg
|
||||
} ;
|
||||
}
|
||||
@@ -23,7 +23,7 @@ oper
|
||||
_ + "չալ" => mkV002 form;
|
||||
_ + "նալ" => mkV004 form;
|
||||
_ + "ել" => mkV001 form;
|
||||
_ => error "Cannot find an inflection rule"
|
||||
_ => lin V (invarVerb form)
|
||||
} ;
|
||||
|
||||
reg2V : Str -> Str -> V -- s Imperative_Jussive;Pl
|
||||
@@ -212,7 +212,7 @@ oper
|
||||
_ + "ի" => mkN003 form;
|
||||
_ + "ե" => mkN006 form;
|
||||
_ + "է" => mkN006 form;
|
||||
_ => error "Cannot find an inflection rule"
|
||||
_ => mkN007 form
|
||||
} ;
|
||||
|
||||
reg2N : Str -> Str -> N -- s;Nom;Sg s;Dat;Sg
|
||||
@@ -313,7 +313,7 @@ oper
|
||||
_ + "ղմ" => mkA005 form;
|
||||
_ + "տք" => mkA005 form;
|
||||
_ + "իղ" => mkA006 form;
|
||||
_ + "նչ" => mkA008 form;
|
||||
_ + "ունչ"=>mkA008 form;
|
||||
_ + "ոխ" => mkA005 form;
|
||||
_ + "ղխ" => mkA005 form;
|
||||
_ + "ղթ" => mkA005 form;
|
||||
@@ -368,7 +368,7 @@ oper
|
||||
_ + "ի" => mkA002 form;
|
||||
_ + "ա" => mkA004 form;
|
||||
_ + "ո" => mkA004 form;
|
||||
_ => error "Cannot find an inflection rule"
|
||||
_ => mkA001 form
|
||||
} ;
|
||||
|
||||
reg2A : Str -> Str -> A -- s;Nom;Sg s;Nom;Pl
|
||||
@@ -440,6 +440,14 @@ oper
|
||||
mkN : Str -> Str -> N = reg2N -- s;Nom;Sg s;Dat;Sg
|
||||
} ;
|
||||
|
||||
compoundN : A -> N -> N = \a,n -> lin N {
|
||||
s = \\c,num => a.s ! Nom ! Sg ++ n.s ! c ! num ;
|
||||
def_dat = \\num => a.s ! Dat ! num ++ n.def_dat ! num ;
|
||||
def_nom = \\num => a.s ! Nom ! Sg ++ n.def_nom ! num ;
|
||||
poss1 = \\c,num => a.s ! Nom ! Sg ++ n.poss1 ! c ! num ;
|
||||
poss2 = \\c,num => a.s ! Nom ! Sg ++ n.poss2 ! c ! num
|
||||
} ;
|
||||
|
||||
mkN2 = overload {
|
||||
mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = noPrep}) ;
|
||||
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
|
||||
@@ -468,16 +476,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 +499,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}
|
||||
} ;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,21 @@
|
||||
concrete PhraseHye of Phrase = CatHye ** {
|
||||
concrete PhraseHye of Phrase = CatHye ** open ResHye in {
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
|
||||
UttS s = s ;
|
||||
UttInterj i = i ;
|
||||
UttNP np = {s = np.s ! Nom} ;
|
||||
UttAdv adv = adv ;
|
||||
UttCN cn = {s = cn.s ! Indef ! Nom ! Sg} ;
|
||||
UttCard card = card ;
|
||||
UttIAdv adv = adv ;
|
||||
UttIP ip = ip ;
|
||||
UttQS qs = qs ;
|
||||
UttImpSg pol imp = {s = case pol.p of {Pos => imp.s; Neg => "մի" ++ imp.s}} ;
|
||||
UttImpPl pol imp = {s = case pol.p of {Pos => imp.s; Neg => "մի" ++ imp.s}} ;
|
||||
UttImpPol pol imp = {s = case pol.p of {Pos => imp.s; Neg => "մի" ++ imp.s}} ;
|
||||
VocNP np = {s = np.s ! Nom} ;
|
||||
PConjConj conj = conj ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
concrete QuestionHye of Question = CatHye ** open ResHye in {
|
||||
lincat QVP = {s : Str} ;
|
||||
lin
|
||||
QuestCl cl = {s = cl.s ++ "՞"} ;
|
||||
QuestVP ip vp = {s = ip.s ++ vp.s ++ "՞"} ;
|
||||
QuestSlash ip slash = {s = ip.s ++ slash.s ++ "՞"} ;
|
||||
QuestIAdv adv cl = {s = adv.s ++ cl.s ++ "՞"} ;
|
||||
QuestIComp comp np = {s = comp.s ++ np.s ! Nom ++ "՞"} ;
|
||||
IdetCN det cn = {s = det.s ++ cn.s ! Indef ! Nom ! Sg} ;
|
||||
IdetIP det = {s = det.s} ;
|
||||
AdvIP ip adv = {s = ip.s ++ adv.s} ;
|
||||
IdetQuant quant num = {s = quant.s ++ num.s} ;
|
||||
PrepIP prep ip = {s = case prep.isPre of {True=>prep.s++ip.s;False=>ip.s++prep.s}} ;
|
||||
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
|
||||
CompIAdv adv = adv ;
|
||||
CompIP ip = ip ;
|
||||
ComplSlashIP slash ip = {s = slash.s ++ ip.s} ;
|
||||
AdvQVP vp adv = {s = vp.s ++ adv.s} ;
|
||||
AddAdvQVP qvp adv = {s = qvp.s ++ adv.s} ;
|
||||
QuestQVP ip qvp = {s = ip.s ++ qvp.s ++ "՞"} ;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
concrete RelativeHye of Relative = CatHye ** open ResHye in {
|
||||
lin
|
||||
RelCl cl = {s = "որը" ++ cl.s} ;
|
||||
RelVP rp vp = {s = rp.s ++ vp.s} ;
|
||||
RelSlash rp slash = {s = rp.s ++ slash.s} ;
|
||||
IdRP = {s = "որը"} ;
|
||||
FunRP prep np rp = {s = case prep.isPre of {
|
||||
True=>prep.s++np.s!prep.c++rp.s;
|
||||
False=>np.s!prep.c++prep.s++rp.s
|
||||
}} ;
|
||||
}
|
||||
+34
-20
@@ -1,16 +1,24 @@
|
||||
resource ResHye = {
|
||||
resource ResHye = ParamX ** open Prelude in {
|
||||
|
||||
param CardOrd = NCard | NOrd ;
|
||||
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 invarVerb : Str -> Verb = \s -> {
|
||||
s=s; causative=s;
|
||||
conditional=table {_ => table {_ => table {_ => s}}};
|
||||
converb={imperfective=s;futCon1=s;futCon2=s;negative=s;perfective=s;simultaneous=s};
|
||||
imperative=table {_ => s}; passive=s;
|
||||
past=table {_ => table {_ => s}};
|
||||
participle=table {_ => s};
|
||||
subjunctive=table {_ => table {_ => table {_ => s}}}
|
||||
} ;
|
||||
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 +48,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 +74,11 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
|
||||
Pl => f29
|
||||
}
|
||||
} ;
|
||||
Participle = table {
|
||||
participle = table {
|
||||
Resultative => f30 ;
|
||||
Subject => f31
|
||||
} ;
|
||||
Subjunctive = table {
|
||||
subjunctive = table {
|
||||
Perfect => table {
|
||||
P1 => table {
|
||||
Sg => f32 ;
|
||||
@@ -102,8 +110,14 @@ 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 invarNoun : Str -> Noun = \s -> {
|
||||
s=table {_ => table {_ => s}};
|
||||
def_dat=table {_ => s}; def_nom=table {_ => s};
|
||||
poss1=table {_ => table {_ => s}}; poss2=table {_ => table {_ => s}}
|
||||
} ;
|
||||
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 ->
|
||||
{ s = table {
|
||||
@@ -263,7 +277,7 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
|
||||
} ;
|
||||
|
||||
|
||||
oper Compl = {s : Str; c : Case} ;
|
||||
oper noPrep : Compl = {s=""; c=Dat} ;
|
||||
oper Compl = {s : Str; c : Case; isPre : Bool} ;
|
||||
oper noPrep : Compl = {s=""; c=Nom; isPre=False} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in {
|
||||
oper negAux : Agr -> Str = \a -> case <a.p,a.n> of {
|
||||
<P1,Sg> => "չեմ"; <P2,Sg> => "չես"; <P3,Sg> => "չի";
|
||||
<P1,Pl> => "չենք"; <P2,Pl> => "չեք"; <P3,Pl> => "չեն"
|
||||
} ;
|
||||
lin PredVP np vp = {s = np.s ! Nom ++ vp.converb.imperfective ++
|
||||
case <np.a.p,np.a.n> of {
|
||||
<P1,Sg> => "եմ"; <P2,Sg> => "ես"; <P3,Sg> => "է";
|
||||
<P1,Pl> => "ենք"; <P2,Pl> => "եք"; <P3,Pl> => "են"
|
||||
};
|
||||
negative = table {
|
||||
Pres => np.s ! Nom ++ negAux np.a ++ vp.converb.imperfective;
|
||||
Past => np.s ! Nom ++ "չ" ++ BIND ++ vp.past ! np.a.p ! np.a.n;
|
||||
Fut => np.s ! Nom ++ negAux np.a ++ vp.converb.futCon1;
|
||||
Cond => np.s ! Nom ++ "չ" ++ BIND ++ vp.conditional ! Non_Past ! np.a.p ! np.a.n
|
||||
};
|
||||
conditional = \\a,_ => np.s ! Nom ++ vp.conditional ! a ! np.a.p ! np.a.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 = \\_,_ => np.s ! Nom ++ vp.past ! np.a.p ! np.a.n;
|
||||
participle = \\p => np.s ! Nom ++ vp.participle ! p;
|
||||
subjunctive = \\a,_ => np.s ! Nom ++ vp.subjunctive ! a ! np.a.p ! np.a.n} ;
|
||||
lin PredSCVP sc vp = {s = sc.s ++ vp.s;
|
||||
negative=table {_ => sc.s ++ "չ" ++ BIND ++ vp.s};
|
||||
conditional=\\a,n => sc.s ++ vp.conditional ! a ! P3 ! n;
|
||||
converb={imperfective=sc.s ++ vp.converb.imperfective; futCon1=sc.s ++ vp.converb.futCon1;
|
||||
futCon2=sc.s ++ vp.converb.futCon2; negative=sc.s ++ vp.converb.negative;
|
||||
perfective=sc.s ++ vp.converb.perfective; simultaneous=sc.s ++ vp.converb.simultaneous};
|
||||
passive=sc.s ++ vp.passive; past=\\p,n => sc.s ++ vp.past ! p ! n;
|
||||
participle=\\p => sc.s ++ vp.participle ! p;
|
||||
subjunctive=\\a,n => sc.s ++ vp.subjunctive ! a ! P3 ! n} ;
|
||||
lin UseCl temp pol cl = {s = case pol.p of {
|
||||
Neg => cl.negative ! temp.t;
|
||||
Pos => case <temp.t,temp.a> of {
|
||||
<Pres,Simul> => cl.s;
|
||||
<Pres,Anter> => cl.converb.perfective;
|
||||
<Past,Simul> => cl.past ! P3 ! Sg;
|
||||
<Past,Anter> => cl.converb.perfective;
|
||||
<Fut,Simul> => cl.conditional ! Non_Past ! Sg;
|
||||
<Fut,Anter> => cl.conditional ! Perfect ! Sg;
|
||||
<Cond,Simul> => cl.conditional ! Non_Past ! Sg;
|
||||
<Cond,Anter> => cl.conditional ! Perfect ! Sg
|
||||
}
|
||||
}} ;
|
||||
lin UseQCl temp pol qcl = {s = case pol.p of {Pos => qcl.s; Neg => "չ" ++ qcl.s}} ;
|
||||
lin UseRCl temp pol rcl = {s = case pol.p of {Pos => rcl.s; Neg => "չ" ++ rcl.s}} ;
|
||||
lin UseSlash temp pol slash = {s = case pol.p of {Pos => slash.s; Neg => "չ" ++ slash.s}} ;
|
||||
lin AdvS adv s = {s = adv.s ++ s.s} ;
|
||||
lin ExtAdvS adv s = {s = adv.s ++ "," ++ s.s} ;
|
||||
lin SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
|
||||
lin RelS s rs = {s = s.s ++ "," ++ rs.s} ;
|
||||
lin ImpVP vp = {s = vp.imperative ! Sg} ;
|
||||
lin AdvImp adv imp = {s = adv.s ++ imp.s} ;
|
||||
lin EmbedS s = s ;
|
||||
lin EmbedQS qs = qs ;
|
||||
lin SlashVP np vp = {s = np.s ! Nom ++ vp.s} ;
|
||||
lin AdvSlash slash adv = {s = slash.s ++ adv.s} ;
|
||||
lin SlashPrep cl prep = {s = cl.s ++ prep.s} ;
|
||||
lin SlashVS np vs slash = {s = np.s ! Nom ++ vs.s ++ slash.s} ;
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
concrete StructuralHye of Structural = CatHye ** open Prelude, ResHye, ParadigmsHye in {
|
||||
oper
|
||||
postPrep : Str -> Case -> Prep = \s,c -> lin Prep {s=s;c=c;isPre=False} ;
|
||||
simpleNP : Str -> Number -> Person -> NP = \s,n,p -> lin NP {s=\\_ => s;a={n=n;p=p}} ;
|
||||
casePron : (nom,dat,ablat,instr,loc,poss : Str) -> Number -> Person -> Pron =
|
||||
\nom,dat,ablat,instr,loc,poss,n,p -> lin Pron {
|
||||
s=table {Nom=>nom;Dat=>dat;Ablat=>ablat;Instr=>instr;Loc=>loc};
|
||||
empty=poss;a={n=n;p=p}
|
||||
} ;
|
||||
lin i_Pron = casePron "ես" "ինձ" "ինձնից" "ինձնով" "ինձ մոտ" "իմ" Sg P1 ;
|
||||
lin youSg_Pron = casePron "դու" "քեզ" "քեզնից" "քեզնով" "քեզ մոտ" "քո" Sg P2 ;
|
||||
lin he_Pron, she_Pron, it_Pron = casePron "նա" "նրան" "նրանից" "նրանով" "նրա մոտ" "նրա" Sg P3 ;
|
||||
lin we_Pron = casePron "մենք" "մեզ" "մեզնից" "մեզնով" "մեզ մոտ" "մեր" Pl P1 ;
|
||||
lin youPl_Pron = casePron "դուք" "ձեզ" "ձեզնից" "ձեզնով" "ձեզ մոտ" "ձեր" Pl P2 ;
|
||||
lin youPol_Pron = casePron "Դուք" "Ձեզ" "Ձեզնից" "Ձեզնով" "Ձեզ մոտ" "Ձեր" Pl P2 ;
|
||||
lin they_Pron = casePron "նրանք" "նրանց" "նրանցից" "նրանցով" "նրանց մոտ" "նրանց" Pl P3 ;
|
||||
lin and_Conj = mkConj "և" ;
|
||||
lin or_Conj = mkConj "կամ" ;
|
||||
lin both7and_DConj = mkConj "և՛" ;
|
||||
lin either7or_DConj = mkConj "կամ" ;
|
||||
lin if_then_Conj = mkConj "ապա" ;
|
||||
lin but_PConj = mkPConj "բայց" ;
|
||||
lin therefore_PConj = mkPConj "հետևաբար" ;
|
||||
lin otherwise_PConj = mkPConj "այլապես" ;
|
||||
lin in_Prep = postPrep [] Loc ;
|
||||
lin on_Prep = postPrep "վրա" Dat ;
|
||||
lin to_Prep = postPrep [] Dat ;
|
||||
lin from_Prep = postPrep [] Ablat ;
|
||||
lin with_Prep = postPrep [] Instr ;
|
||||
lin without_Prep = postPrep "առանց" Dat ;
|
||||
lin for_Prep = postPrep "համար" Dat ;
|
||||
lin during_Prep = postPrep "ընթացքում" Dat ;
|
||||
lin after_Prep = postPrep "հետո" Ablat ;
|
||||
lin before_Prep = postPrep "առաջ" Ablat ;
|
||||
lin under_Prep = postPrep "տակ" Dat ;
|
||||
lin above_Prep = postPrep "վերևում" Dat ;
|
||||
lin behind_Prep = postPrep "հետևում" Dat ;
|
||||
lin between_Prep = postPrep "միջև" Dat ;
|
||||
lin through_Prep = postPrep "միջով" Dat ;
|
||||
lin by8agent_Prep = postPrep "կողմից" Dat ;
|
||||
lin by8means_Prep = postPrep [] Instr ;
|
||||
lin possess_Prep = postPrep [] Dat ;
|
||||
lin part_Prep = postPrep [] Ablat ;
|
||||
lin except_Prep = postPrep "բացի" Ablat ;
|
||||
lin this_Quant = mkQuant "այս" ;
|
||||
lin that_Quant = mkQuant "այդ" ;
|
||||
lin no_Quant = mkQuant "ոչ մի" ;
|
||||
lin every_Det = mkDet "ամեն" Sg ;
|
||||
lin few_Det = mkDet "քիչ" Pl ;
|
||||
lin many_Det = mkDet "շատ" Pl ;
|
||||
lin much_Det = mkDet "շատ" Sg ;
|
||||
lin someSg_Det = mkDet "որոշ" Sg ;
|
||||
lin somePl_Det = mkDet "որոշ" Pl ;
|
||||
lin all_Predet = mkPredet "բոլոր" ;
|
||||
lin only_Predet = mkPredet "միայն" ;
|
||||
lin most_Predet = mkPredet "մեծ մասը" ;
|
||||
lin not_Predet = mkPredet "ոչ" ;
|
||||
lin very_AdA = mkAdA "շատ" ;
|
||||
lin too_AdA = mkAdA "չափազանց" ;
|
||||
lin almost_AdA = mkAdA "գրեթե" ;
|
||||
lin almost_AdN = mkAdN "գրեթե" ;
|
||||
lin at_least_AdN = mkAdN "առնվազն" ;
|
||||
lin at_most_AdN = mkAdN "առավելագույնը" ;
|
||||
lin here_Adv = mkAdv "այստեղ" ;
|
||||
lin there_Adv = mkAdv "այնտեղ" ;
|
||||
lin everywhere_Adv = mkAdv "ամենուր" ;
|
||||
lin somewhere_Adv = mkAdv "ինչ-որ տեղ" ;
|
||||
lin always_AdV = mkAdV "միշտ" ;
|
||||
lin quite_Adv = mkAdv "բավականին" ;
|
||||
lin when_Subj = mkSubj "երբ" ;
|
||||
lin if_Subj = mkSubj "եթե" ;
|
||||
lin because_Subj = mkSubj "որովհետև" ;
|
||||
lin although_Subj = mkSubj "թեև" ;
|
||||
lin that_Subj = mkSubj "որ" ;
|
||||
lin whatSg_IP = mkIP "ինչ" ;
|
||||
lin whatPl_IP = mkIP "ինչեր" ;
|
||||
lin whoSg_IP = mkIP "ով" ;
|
||||
lin whoPl_IP = mkIP "ովքեր" ;
|
||||
lin which_IQuant = mkIQuant "որ" ;
|
||||
lin how_IAdv = mkIAdv "ինչպես" ;
|
||||
lin when_IAdv = mkIAdv "երբ" ;
|
||||
lin where_IAdv = mkIAdv "որտեղ" ;
|
||||
lin why_IAdv = mkIAdv "ինչու" ;
|
||||
lin how8many_IDet = mkIDet "քանի" ;
|
||||
lin how8much_IAdv = mkIAdv "որքան" ;
|
||||
lin as_CAdv = mkCAdv "այնքան" ;
|
||||
lin more_CAdv = mkCAdv "ավելի" ;
|
||||
lin less_CAdv = mkCAdv "պակաս" ;
|
||||
lin can_VV, can8know_VV = mkVV (mkV "կարողանալ") ;
|
||||
lin must_VV = mkVV (mkV "պարտավորվել") ;
|
||||
lin want_VV = mkVV (mkV "ցանկանալ") ;
|
||||
lin have_V2 = mkV2 (mkV "ունենալ") ;
|
||||
lin everybody_NP = simpleNP "բոլորը" Pl P3 ;
|
||||
lin everything_NP = simpleNP "ամեն ինչ" Sg P3 ;
|
||||
lin somebody_NP = simpleNP "ինչ-որ մեկը" Sg P3 ;
|
||||
lin something_NP = simpleNP "ինչ-որ բան" Sg P3 ;
|
||||
lin nobody_NP = simpleNP "ոչ ոք" Sg P3 ;
|
||||
lin nothing_NP = simpleNP "ոչինչ" Sg P3 ;
|
||||
lin please_Voc = mkVoc "խնդրում եմ" ;
|
||||
lin yes_Utt = {s="այո"} ;
|
||||
lin no_Utt = {s="ոչ"} ;
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
concrete VerbHye of Verb = CatHye ** open Prelude, ResHye, ParadigmsHye in {
|
||||
oper
|
||||
compl : Compl -> NP -> Str = \c,np -> case c.isPre of {
|
||||
True => c.s ++ np.s ! c.c;
|
||||
False => np.s ! c.c ++ c.s
|
||||
} ;
|
||||
toVP : Verb -> VP = \v -> lin VP {
|
||||
s=v.s; conditional=v.conditional; converb=v.converb; imperative=v.imperative;
|
||||
passive=v.passive; past=v.past; participle=v.participle; subjunctive=v.subjunctive
|
||||
} ;
|
||||
appendVP : VP -> Str -> VP = \v,x -> lin VP {
|
||||
s=v.s ++ x;
|
||||
conditional=\\a,p,n => v.conditional ! a ! p ! n ++ x;
|
||||
converb={imperfective=v.converb.imperfective ++ x; futCon1=v.converb.futCon1 ++ x;
|
||||
futCon2=v.converb.futCon2 ++ x; negative=v.converb.negative ++ x;
|
||||
perfective=v.converb.perfective ++ x; simultaneous=v.converb.simultaneous ++ x};
|
||||
imperative=\\n => v.imperative ! n ++ x; passive=v.passive ++ x;
|
||||
past=\\p,n => v.past ! p ! n ++ x;
|
||||
participle=\\p => v.participle ! p ++ x;
|
||||
subjunctive=\\a,p,n => v.subjunctive ! a ! p ! n ++ x
|
||||
} ;
|
||||
prependVP : Str -> VP -> VP = \x,v -> lin VP {
|
||||
s=x ++ v.s;
|
||||
conditional=\\a,p,n => x ++ v.conditional ! a ! p ! n;
|
||||
converb={imperfective=x ++ v.converb.imperfective; futCon1=x ++ v.converb.futCon1;
|
||||
futCon2=x ++ v.converb.futCon2; negative=x ++ v.converb.negative;
|
||||
perfective=x ++ v.converb.perfective; simultaneous=x ++ v.converb.simultaneous};
|
||||
imperative=\\n => x ++ v.imperative ! n; passive=x ++ v.passive;
|
||||
past=\\p,n => x ++ v.past ! p ! n;
|
||||
participle=\\p => x ++ v.participle ! p;
|
||||
subjunctive=\\a,p,n => x ++ v.subjunctive ! a ! p ! n
|
||||
} ;
|
||||
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 = compl vp.c2 np ++ vp.s;
|
||||
conditional = \\a,p,n => compl vp.c2 np
|
||||
++ vp.conditional ! a ! p ! n;
|
||||
converb = {imperfective = compl vp.c2 np
|
||||
++ vp.converb.imperfective;
|
||||
futCon1 = compl vp.c2 np ++ vp.converb.futCon1;
|
||||
futCon2 = compl vp.c2 np ++ vp.converb.futCon2;
|
||||
negative = compl vp.c2 np ++ vp.converb.negative;
|
||||
perfective = compl vp.c2 np
|
||||
++ vp.converb.perfective;
|
||||
simultaneous = compl vp.c2 np
|
||||
++ vp.converb.simultaneous};
|
||||
imperative = \\n => compl vp.c2 np ++ vp.imperative ! n;
|
||||
passive = compl vp.c2 np ++ vp.passive;
|
||||
past = \\p,n => compl vp.c2 np ++ vp.past ! p ! n;
|
||||
participle = \\p => compl vp.c2 np ++ vp.participle ! p;
|
||||
subjunctive = \\a,p,n => compl vp.c2 np
|
||||
++ vp.subjunctive ! a ! p ! n} ;
|
||||
lin SlashV2a v = v ;
|
||||
lin UseV v = v ;
|
||||
lin ComplVS v s = appendVP (toVP v) s.s ;
|
||||
lin ComplVQ v qs = appendVP (toVP v) qs.s ;
|
||||
lin ComplVA v ap = appendVP (toVP v) (ap.s ! Indef ! Nom ! Sg) ;
|
||||
lin Slash2V3 v np = lin VPSlash (v ** {
|
||||
s = compl v.c2 np ++ v.s; c2 = v.c3
|
||||
}) ;
|
||||
lin Slash3V3 v np = lin VPSlash (v ** {
|
||||
s = compl v.c3 np ++ v.s; c2 = v.c2
|
||||
}) ;
|
||||
lin SlashV2S v s = lin VPSlash (v ** {s = v.s ++ s.s; c2=v.c2}) ;
|
||||
lin SlashV2Q v qs = lin VPSlash (v ** {s = v.s ++ qs.s; c2=v.c2}) ;
|
||||
lin SlashV2A v ap = lin VPSlash (v ** {
|
||||
s = v.s ++ ap.s ! Indef ! Nom ! Sg; c2=v.c2
|
||||
}) ;
|
||||
lin UseComp comp = prependVP comp.s (toVP (mkV "լինել")) ;
|
||||
lin UseCopula = toVP (mkV "լինել") ;
|
||||
lin ExtAdvVP vp adv = appendVP vp ("," ++ adv.s) ;
|
||||
lin AdVVP adv vp = prependVP adv.s vp ;
|
||||
lin AdvVPSlash vp adv = lin VPSlash (vp ** {s = vp.s ++ adv.s}) ;
|
||||
lin AdVVPSlash adv vp = lin VPSlash (vp ** {s = adv.s ++ vp.s}) ;
|
||||
lin VPSlashPrep vp prep = lin VPSlash (vp ** {causative=vp.s;c2=prep}) ;
|
||||
lin CompAP ap = {s = ap.s ! Indef ! Nom ! Sg} ;
|
||||
lin CompNP np = {s = np.s ! Nom} ;
|
||||
lin CompAdv adv = adv ;
|
||||
lin CompCN cn = {s = cn.s ! Indef ! Nom ! Sg} ;
|
||||
}
|
||||
@@ -1,4 +1,14 @@
|
||||
concrete AdjectiveBel of Adjective = CatBel ** {
|
||||
concrete AdjectiveBel of Adjective = CatBel ** open ResBel in {
|
||||
lin
|
||||
PositA a = a ;
|
||||
ComparA a np = {s = \\c,gn => "больш" ++ a.s ! c ! gn ++ "за" ++ np.s ! Acc} ;
|
||||
ComplA2 a np = {s = \\c,gn => a.s ! c ! gn ++ prepNP a.c2 np} ;
|
||||
ReflA2 a = {s = \\c,gn => a.s ! c ! gn ++ "да сябе"} ;
|
||||
UseA2 a = a ;
|
||||
UseComparA a = {s = \\c,gn => "больш" ++ a.s ! c ! gn} ;
|
||||
CAdvAP cadv ap np = {s = \\c,gn => cadv.s ++ ap.s ! c ! gn ++ cadv.p ++ np.s ! Nom} ;
|
||||
AdjOrd ord = ord ;
|
||||
SentAP ap sc = {s = \\c,gn => ap.s ! c ! gn ++ sc.s} ;
|
||||
AdAP ada ap = {s = \\c,gn => ada.s ++ ap.s ! c ! gn} ;
|
||||
AdvAP ap adv = {s = \\c,gn => ap.s ! c ! gn ++ adv.s} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
concrete AdverbBel of Adverb = CatBel ** open ResBel in {
|
||||
|
||||
lin
|
||||
PositAdvAdj a = {s = a.s ! Nom ! GSg Neuter} ;
|
||||
PrepNP prep np = {s = prepNP prep np} ;
|
||||
ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Nom ! GSg Neuter ++ cadv.p ++ np.s ! Nom} ;
|
||||
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Nom ! GSg Neuter ++ cadv.p ++ s.s} ;
|
||||
AdAdv ada adv = {s = ada.s ++ adv.s} ;
|
||||
PositAdAAdj a = {s = a.s ! Nom ! GSg Neuter} ;
|
||||
SubjS subj s = {s = subj.s ++ s.s} ;
|
||||
AdnCAdv cadv = {s = cadv.s} ;
|
||||
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
concrete AllBel of AllBelAbs =
|
||||
LangBel
|
||||
LangBel,
|
||||
ExtendBel
|
||||
**
|
||||
{} ;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
abstract AllBelAbs =
|
||||
Lang
|
||||
Lang,
|
||||
Extend
|
||||
** {}
|
||||
+63
-16
@@ -1,21 +1,68 @@
|
||||
concrete CatBel of Cat = CommonX ** open ResBel in {
|
||||
concrete CatBel of Cat = CommonX ** open ResBel, (R = ParamX) in {
|
||||
|
||||
lincat N = Noun ;
|
||||
lincat N2 = Noun ** {c2 : Compl} ;
|
||||
lincat N3 = Noun ** {c2,c3 : Compl} ;
|
||||
lincat V = V ;
|
||||
lincat VV,VS,VQ,VA = V ;
|
||||
lincat V2 = V ** {c2 : Compl} ;
|
||||
lincat V3,V2A,V2S,V2Q,V2V = V ** {c2,c3 : Compl} ;
|
||||
lincat A = A ;
|
||||
lincat A2 = A ** {c2 : Compl} ;
|
||||
lincat Prep = Compl ;
|
||||
lincat CN = CommonNoun ;
|
||||
lincat AP = AdjPhrase ;
|
||||
lincat S = {s : Str} ;
|
||||
lincat
|
||||
S = {s : Str} ;
|
||||
QS = {s : Str} ;
|
||||
RS = {s : Str} ;
|
||||
Cl = {s : R.Tense => R.Polarity => Str} ;
|
||||
ClSlash = {s : R.Tense => R.Polarity => Str; c : Compl} ;
|
||||
SSlash = {s : Str; c : Compl} ;
|
||||
Imp = {s : R.Polarity => Number => Str} ;
|
||||
|
||||
lincat LN,SN,GN,PN = {s : Str} ;
|
||||
QCl = {s : R.Tense => R.Polarity => Str} ;
|
||||
IP = NPhrase ;
|
||||
IComp = {s : Str} ;
|
||||
IDet = {s : Case => Gender => Str; n : Number} ;
|
||||
IQuant = {s : Case => Gender => Number => Str} ;
|
||||
|
||||
linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
|
||||
RCl = {s : R.Tense => R.Polarity => Str} ;
|
||||
RP = {s : Str} ;
|
||||
|
||||
VP = VPhrase ;
|
||||
Comp = {s : Agr => Str} ;
|
||||
VPSlash = VSlash ;
|
||||
|
||||
N = Noun ;
|
||||
N2 = Noun ** {c2 : Compl} ;
|
||||
N3 = Noun ** {c2,c3 : Compl} ;
|
||||
CN = CommonNoun ;
|
||||
NP = NPhrase ;
|
||||
Pron = {s: Case => Str; a: Agr} ;
|
||||
Det = {s : Case => Gender => Str; n : Number} ;
|
||||
Predet = {s : Case => Gender => Number => Str} ;
|
||||
Quant = {s : Case => Gender => Number => Str} ;
|
||||
Num = {s : Case => Gender => Str; n : Number} ;
|
||||
Card = {s : Str; n : Number} ;
|
||||
ACard = {s : Str; n : Number} ;
|
||||
Ord = Adj ;
|
||||
DAP = {s : Case => Gender => Str; n : Number} ;
|
||||
|
||||
Numeral = {s : Str} ;
|
||||
Digits = {s : Str} ;
|
||||
Decimal = {s : Str} ;
|
||||
|
||||
Conj = {s : Str; n : Number} ;
|
||||
Subj = {s : Str} ;
|
||||
Prep = Compl ;
|
||||
|
||||
V = Verb ;
|
||||
VV,VS,VQ,VA = Verb ;
|
||||
V2 = Verb ** {c2 : Compl} ;
|
||||
V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
|
||||
A = Adj ;
|
||||
A2 = Adj ** {c2 : Compl} ;
|
||||
AP = AdjPhrase ;
|
||||
|
||||
LN = {s : Case => Str; g : Gender; n : Number} ;
|
||||
PN = {s : Case => Str; g : Gender; n : Number} ;
|
||||
GN = {s : Str; g : Gender} ;
|
||||
SN = {s : Str} ;
|
||||
|
||||
linref
|
||||
V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
|
||||
N,N2,N3 = \n -> n.s ! Nom ! Sg ;
|
||||
A,A2,AP,Ord = \a -> a.s ! Nom ! GSg Masc ;
|
||||
NP,IP = \np -> np.s ! Nom ;
|
||||
S,QS,RS = \s -> s.s ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
concrete ConjunctionBel of Conjunction = CatBel ** open ResBel in {
|
||||
|
||||
lin
|
||||
ConjS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
|
||||
ConjRS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
|
||||
ConjAP conj xs = {s = \\c,gn => xs.s1 ! c ! gn ++ conj.s ++ xs.s2 ! c ! gn} ;
|
||||
ConjNP conj xs = {
|
||||
s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ;
|
||||
a = {g=Masc; n=conj.n; p=P3}
|
||||
} ;
|
||||
ConjAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
|
||||
ConjAdV conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
|
||||
ConjIAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
|
||||
ConjCN conj xs = {
|
||||
s = \\c,n => xs.s1 ! c ! n ++ conj.s ++ xs.s2 ! c ! n ;
|
||||
voc = xs.voc ;
|
||||
g = xs.g
|
||||
} ;
|
||||
ConjDet conj xs = {
|
||||
s = \\c,g => xs.s1 ! c ! g ++ conj.s ++ xs.s2 ! c ! g ;
|
||||
n = conj.n
|
||||
} ;
|
||||
|
||||
BaseS x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsS x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
|
||||
BaseRS x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsRS x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
|
||||
BaseAdv x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsAdv x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
|
||||
BaseAdV x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsAdV x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
|
||||
BaseIAdv x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsIAdv x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
|
||||
BaseNP x y = {
|
||||
s1 = x.s ;
|
||||
s2 = y.s
|
||||
} ;
|
||||
ConsNP x xs = {
|
||||
s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c ;
|
||||
s2 = xs.s2
|
||||
} ;
|
||||
BaseAP x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsAP x xs = {s1 = \\c,gn => x.s ! c ! gn ++ "," ++ xs.s1 ! c ! gn; s2 = xs.s2} ;
|
||||
BaseCN x y = {s1 = x.s; s2 = y.s; voc = x.voc ++ "," ++ y.voc; g = x.g} ;
|
||||
ConsCN x xs = {s1 = \\c,n => x.s ! c ! n ++ "," ++ xs.s1 ! c ! n; s2 = xs.s2; voc = x.voc ++ "," ++ xs.voc; g = xs.g} ;
|
||||
BaseDAP x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsDAP x xs = {s1 = \\c,g => x.s ! c ! g ++ "," ++ xs.s1 ! c ! g; s2 = xs.s2} ;
|
||||
|
||||
lincat
|
||||
[S] = {s1,s2 : Str} ;
|
||||
[RS] = {s1,s2 : Str} ;
|
||||
[Adv] = {s1,s2 : Str} ;
|
||||
[AdV] = {s1,s2 : Str} ;
|
||||
[IAdv] = {s1,s2 : Str} ;
|
||||
[NP] = {s1,s2 : Case => Str} ;
|
||||
[AP] = {s1,s2 : Case => GenNum => Str} ;
|
||||
[CN] = {s1,s2 : Case => Number => Str; voc : Str; g : Gender} ;
|
||||
[DAP] = {s1,s2 : Case => Gender => Str} ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
concrete ConstructionBel of Construction = CatBel ** open ResBel, ParadigmsBel, (R = ParamX) in {
|
||||
|
||||
lincat
|
||||
Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s : Str} ;
|
||||
|
||||
oper
|
||||
adjVP : Adj -> VPhrase = \a -> {
|
||||
s = \\t,p,agr => copula t p agr ++ a.s ! Nom ! genNum agr.g agr.n ;
|
||||
inf = "быць" ++ a.s ! Nom ! GSg Masc ;
|
||||
imp = \\p,_ => neg p ++ "будзь" ++ a.s ! Nom ! GSg Masc
|
||||
} ;
|
||||
|
||||
lin
|
||||
hungry_VP = adjVP (mkA "галодны") ;
|
||||
thirsty_VP = adjVP (mkA "спрагнены") ;
|
||||
tired_VP = adjVP (mkA "стомлены") ;
|
||||
scared_VP = adjVP (mkA "спалоханы") ;
|
||||
ill_VP = adjVP (mkA "хворы") ;
|
||||
ready_VP = adjVP (mkA "гатовы") ;
|
||||
has_age_VP card = {
|
||||
s = \\t,p,a => copula t p a ++ card.s ++ "гадоў" ;
|
||||
inf = card.s ++ "гадоў" ;
|
||||
imp = \\p,_ => neg p ++ card.s ++ "гадоў"
|
||||
} ;
|
||||
|
||||
have_name_Cl np name = {s = \\t,p => np.s ! Gen ++ "імя" ++ name.s ! Nom} ;
|
||||
married_Cl np spouse = {s = \\t,p => np.s ! Nom ++ copula t p np.a ++ "жанаты" ++ "з" ++ spouse.s ! Instr} ;
|
||||
what_name_QCl np = {s = \\t,p => "як" ++ "завуць" ++ np.s ! Acc} ;
|
||||
how_old_QCl np = {s = \\t,p => "колькі гадоў" ++ np.s ! Dat} ;
|
||||
how_far_QCl np = {s = \\t,p => "як далёка" ++ np.s ! Nom} ;
|
||||
|
||||
weather_adjCl ap = {s = \\t,p => copula t p defaultAgr ++ ap.s ! Nom ! GSg Neuter} ;
|
||||
is_right_VP = adjVP (mkA "правы") ;
|
||||
is_wrong_VP = adjVP (mkA "няправы") ;
|
||||
|
||||
n_units_AP card cn a = {s = \\c,gn => card.s ++ cn.s ! Gen ! Pl ++ a.s ! c ! gn} ;
|
||||
n_units_of_NP card cn np = mkSimpleNP (card.s ++ cn.s ! Gen ! Pl ++ np.s ! Gen) Neuter Sg P3 ;
|
||||
n_unit_CN card unit cn = nounFromStr (card.s ++ unit.s ! Nom ! Pl ++ cn.s ! Nom ! Sg) cn.g ;
|
||||
|
||||
bottle_of_CN np = nounFromStr ("бутэлька" ++ np.s ! Gen) Fem ;
|
||||
cup_of_CN np = nounFromStr ("кубак" ++ np.s ! Gen) Masc ;
|
||||
glass_of_CN np = nounFromStr ("шклянка" ++ np.s ! Gen) Fem ;
|
||||
few_X_short_of_Y np x y = {s = np.s ! Nom ++ "бракуе" ++ x.s ! Gen ! Pl ++ "да" ++ y.s ! Gen ! Sg} ;
|
||||
|
||||
timeunitAdv card unit = {s = card.s ++ unit.s} ;
|
||||
timeunitRange c1 c2 unit = {s = c1.s ++ "да" ++ c2.s ++ unit.s} ;
|
||||
oneHour = {s = "1"} ; twoHour = {s = "2"} ; threeHour = {s = "3"} ; fourHour = {s = "4"} ;
|
||||
fiveHour = {s = "5"} ; sixHour = {s = "6"} ; sevenHour = {s = "7"} ; eightHour = {s = "8"} ;
|
||||
nineHour = {s = "9"} ; tenHour = {s = "10"} ; elevenHour = {s = "11"} ; twelveHour = {s = "12"} ;
|
||||
thirteenHour = {s = "13"} ; fourteenHour = {s = "14"} ; fifteenHour = {s = "15"} ; sixteenHour = {s = "16"} ;
|
||||
seventeenHour = {s = "17"} ; eighteenHour = {s = "18"} ; nineteenHour = {s = "19"} ; twentyHour = {s = "20"} ;
|
||||
twentyOneHour = {s = "21"} ; twentyTwoHour = {s = "22"} ; twentyThreeHour = {s = "23"} ; twentyFourHour = {s = "24"} ;
|
||||
timeHour h = {s = "а" ++ h.s} ;
|
||||
timeHourMinute h m = {s = "а" ++ h.s ++ ":" ++ m.s} ;
|
||||
|
||||
weekdayPunctualAdv d = {s = "у" ++ d.s} ;
|
||||
weekdayHabitualAdv d = {s = "па" ++ d.s} ;
|
||||
weekdayLastAdv d = {s = "мінулай" ++ d.s} ;
|
||||
weekdayNextAdv d = {s = "наступнай" ++ d.s} ;
|
||||
monthAdv m = {s = "у" ++ m.s} ;
|
||||
yearAdv y = {s = "у" ++ y.s} ;
|
||||
dayMonthAdv d m = {s = d.s ++ m.s} ;
|
||||
monthYearAdv m y = {s = m.s ++ y.s} ;
|
||||
dayMonthYearAdv d m y = {s = d.s ++ m.s ++ y.s} ;
|
||||
intYear i = {s = i.s} ;
|
||||
intMonthday i = {s = i.s} ;
|
||||
|
||||
InLanguage l = {s = "па-" ++ l.s} ;
|
||||
weekdayN d = nounFromStr d.s Masc ;
|
||||
monthN m = nounFromStr m.s Masc ;
|
||||
weekdayPN d = mkPN d.s ;
|
||||
monthPN m = mkPN m.s ;
|
||||
languageNP l = mkSimpleNP l.s Neuter Sg P3 ;
|
||||
languageCN l = nounFromStr l.s Neuter ;
|
||||
|
||||
second_Timeunit = {s = "секунд"} ;
|
||||
minute_Timeunit = {s = "хвілін"} ;
|
||||
hour_Timeunit = {s = "гадзін"} ;
|
||||
day_Timeunit = {s = "дзён"} ;
|
||||
week_Timeunit = {s = "тыдняў"} ;
|
||||
month_Timeunit = {s = "месяцаў"} ;
|
||||
year_Timeunit = {s = "гадоў"} ;
|
||||
|
||||
monday_Weekday = {s = "панядзелак"} ;
|
||||
tuesday_Weekday = {s = "аўторак"} ;
|
||||
wednesday_Weekday = {s = "серада"} ;
|
||||
thursday_Weekday = {s = "чацвер"} ;
|
||||
friday_Weekday = {s = "пятніца"} ;
|
||||
saturday_Weekday = {s = "субота"} ;
|
||||
sunday_Weekday = {s = "нядзеля"} ;
|
||||
|
||||
january_Month = {s = "студзень"} ;
|
||||
february_Month = {s = "люты"} ;
|
||||
march_Month = {s = "сакавік"} ;
|
||||
april_Month = {s = "красавік"} ;
|
||||
may_Month = {s = "май"} ;
|
||||
june_Month = {s = "чэрвень"} ;
|
||||
july_Month = {s = "ліпень"} ;
|
||||
august_Month = {s = "жнівень"} ;
|
||||
september_Month = {s = "верасень"} ;
|
||||
october_Month = {s = "кастрычнік"} ;
|
||||
november_Month = {s = "лістапад"} ;
|
||||
december_Month = {s = "снежань"} ;
|
||||
|
||||
afrikaans_Language = {s = "афрыкаанс"} ;
|
||||
amharic_Language = {s = "амхарску"} ;
|
||||
arabic_Language = {s = "арабску"} ;
|
||||
bulgarian_Language = {s = "балгарску"} ;
|
||||
catalan_Language = {s = "каталанску"} ;
|
||||
chinese_Language = {s = "кітайску"} ;
|
||||
danish_Language = {s = "дацку"} ;
|
||||
dutch_Language = {s = "нідэрландску"} ;
|
||||
english_Language = {s = "англійску"} ;
|
||||
estonian_Language = {s = "эстонску"} ;
|
||||
finnish_Language = {s = "фінску"} ;
|
||||
french_Language = {s = "французску"} ;
|
||||
german_Language = {s = "нямецку"} ;
|
||||
greek_Language = {s = "грэцку"} ;
|
||||
hebrew_Language = {s = "іўрыце"} ;
|
||||
hindi_Language = {s = "хіндзі"} ;
|
||||
japanese_Language = {s = "японску"} ;
|
||||
italian_Language = {s = "італьянску"} ;
|
||||
latin_Language = {s = "лацінску"} ;
|
||||
latvian_Language = {s = "латышску"} ;
|
||||
maltese_Language = {s = "мальтыйску"} ;
|
||||
nepali_Language = {s = "непальску"} ;
|
||||
norwegian_Language = {s = "нарвежску"} ;
|
||||
persian_Language = {s = "персідску"} ;
|
||||
polish_Language = {s = "польску"} ;
|
||||
punjabi_Language = {s = "панджабі"} ;
|
||||
romanian_Language = {s = "румынску"} ;
|
||||
russian_Language = {s = "руску"} ;
|
||||
sindhi_Language = {s = "сіндхі"} ;
|
||||
spanish_Language = {s = "іспанску"} ;
|
||||
swahili_Language = {s = "суахілі"} ;
|
||||
swedish_Language = {s = "шведску"} ;
|
||||
thai_Language = {s = "тайску"} ;
|
||||
turkish_Language = {s = "турэцку"} ;
|
||||
urdu_Language = {s = "урду"} ;
|
||||
|
||||
}
|
||||
@@ -29,12 +29,12 @@ lin
|
||||
paragraph (x.infinitive) ++
|
||||
heading1 "Present" ++
|
||||
frameTable (
|
||||
tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P1 ! Sg)) ++
|
||||
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P1 ! Pl)) ++
|
||||
tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P2 ! Sg)) ++
|
||||
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P2 ! Pl)) ++
|
||||
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P3 ! Sg)) ++
|
||||
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P3 ! Pl))) ++
|
||||
tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P1 ! Sg)) ++
|
||||
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P1 ! Pl)) ++
|
||||
tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P2 ! Sg)) ++
|
||||
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P2 ! Pl)) ++
|
||||
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P3 ! Sg)) ++
|
||||
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P3 ! Pl))) ++
|
||||
heading1 "Imperative" ++
|
||||
frameTable (
|
||||
tr (th "Sg" ++ td (x.imperative ! Sg)) ++
|
||||
|
||||
@@ -0,0 +1,244 @@
|
||||
--# -path=.:../abstract:../common:prelude
|
||||
concrete ExtendBel of Extend = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
|
||||
|
||||
lincat
|
||||
VPS = {s : Agr => Str} ;
|
||||
[VPS] = {s1,s2 : Agr => Str} ;
|
||||
VPI = {s : Str} ;
|
||||
[VPI] = {s1,s2 : Str} ;
|
||||
VPS2 = {s : Agr => Str; c : Compl; post : Str} ;
|
||||
[VPS2] = {s1,s2 : Agr => Str; c : Compl; post : Str} ;
|
||||
VPI2 = {s : Str; c : Compl; post : Str} ;
|
||||
[VPI2] = {s1,s2 : Str; c : Compl; post : Str} ;
|
||||
[Comp] = {s1,s2 : Agr => Str} ;
|
||||
[Imp] = {s1,s2 : R.Polarity => Number => Str} ;
|
||||
RNP = {s : Case => Str} ;
|
||||
RNPList = {s1,s2 : Case => Str} ;
|
||||
X = {s : Str} ;
|
||||
|
||||
lin
|
||||
iFem_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Fem Sg P1 ;
|
||||
youFem_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Fem Sg P2 ;
|
||||
weFem_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Fem Pl P1 ;
|
||||
youPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
|
||||
theyFem_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Fem Pl P3 ;
|
||||
theyNeutr_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Neuter Pl P3 ;
|
||||
youPolFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
|
||||
youPolPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
|
||||
youPolPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
|
||||
|
||||
GenNP np = {s = \\_,_,_ => np.s ! Gen} ;
|
||||
GenIP ip = {s = \\_,_,_ => ip.s ! Gen} ;
|
||||
GenRP num cn = {s = cn.s ! Gen ! num.n ++ "якога"} ;
|
||||
GenModNP num np cn = {
|
||||
s = \\c => np.s ! Gen ++ cn.s ! c ! num.n ;
|
||||
a = {g=cn.g; n=num.n; p=P3}
|
||||
} ;
|
||||
GenModIP num ip cn = {
|
||||
s = \\c => ip.s ! Gen ++ cn.s ! c ! num.n ;
|
||||
a = {g=cn.g; n=num.n; p=P3}
|
||||
} ;
|
||||
|
||||
CompBareCN cn = {s = \\a => cn.s ! Nom ! a.n} ;
|
||||
PiedPipingQuestSlash ip cl = {s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p} ;
|
||||
PiedPipingRelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
|
||||
StrandQuestSlash ip cl = {s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p} ;
|
||||
StrandRelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
|
||||
EmptyRelSlash cl = {s = \\t,p => "што" ++ cl.s ! t ! p} ;
|
||||
|
||||
MkVPS temp pol vp = {s = \\a => vp.s ! temp.t ! pol.p ! a} ;
|
||||
ConjVPS conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a} ;
|
||||
PredVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
|
||||
SQuestVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
|
||||
QuestVPS ip vps = {s = ip.s ! Nom ++ vps.s ! ip.a} ;
|
||||
RelVPS rp vps = {s = rp.s ++ vps.s ! defaultAgr} ;
|
||||
BaseVPS x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsVPS x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2} ;
|
||||
|
||||
ExistS temp pol np = {s = copula temp.t pol.p np.a ++ np.s ! Nom} ;
|
||||
ExistNPQS temp pol np = {s = copula temp.t pol.p np.a ++ np.s ! Nom} ;
|
||||
ExistIPQS temp pol ip = {s = copula temp.t pol.p ip.a ++ ip.s ! Nom} ;
|
||||
|
||||
MkVPI vp = {s = vp.inf} ;
|
||||
ConjVPI conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
|
||||
ComplVPIVV vv vpi = {
|
||||
s = \\t,p,a => finiteVerb vv t p a ++ vpi.s ;
|
||||
inf = vv.infinitive ++ vpi.s ;
|
||||
imp = \\p,n => neg p ++ vv.imperative ! n ++ vpi.s
|
||||
} ;
|
||||
BaseVPI x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsVPI x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
|
||||
|
||||
MkVPS2 temp pol vp = {s = \\a => vp.s ! temp.t ! pol.p ! a; c = vp.c; post = vp.post} ;
|
||||
ConjVPS2 conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a; c = xs.c; post = xs.post} ;
|
||||
ComplVPS2 vps np = {s = \\a => vps.s ! a ++ prepNP vps.c np ++ vps.post} ;
|
||||
ReflVPS2 vps rnp = {s = \\a => vps.s ! a ++ rnp.s ! vps.c.c ++ vps.post} ;
|
||||
BaseVPS2 x y = {s1 = x.s; s2 = y.s; c = x.c; post = x.post ++ y.post} ;
|
||||
ConsVPS2 x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2; c = xs.c; post = x.post ++ xs.post} ;
|
||||
|
||||
MkVPI2 vp = {s = vp.inf; c = vp.c; post = vp.post} ;
|
||||
ConjVPI2 conj xs = {s = xs.s1 ++ conj.s ++ xs.s2; c = xs.c; post = xs.post} ;
|
||||
ComplVPI2 vpi np = {s = vpi.s ++ prepNP vpi.c np ++ vpi.post} ;
|
||||
BaseVPI2 x y = {s1 = x.s; s2 = y.s; c = x.c; post = x.post ++ y.post} ;
|
||||
ConsVPI2 x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2; c = xs.c; post = x.post ++ xs.post} ;
|
||||
|
||||
ConjComp conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a} ;
|
||||
BaseComp x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsComp x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2} ;
|
||||
ConjImp conj xs = {s = \\p,n => xs.s1 ! p ! n ++ conj.s ++ xs.s2 ! p ! n} ;
|
||||
BaseImp x y = {s1 = x.s; s2 = y.s} ;
|
||||
ConsImp x xs = {s1 = \\p,n => x.s ! p ! n ++ "," ++ xs.s1 ! p ! n; s2 = xs.s2} ;
|
||||
|
||||
ProDrop pron = pron ;
|
||||
ICompAP ap = {s = ap.s ! Nom ! GSg Masc} ;
|
||||
IAdvAdv adv = {s = adv.s} ;
|
||||
CompIQuant iq = {s = iq.s ! Nom ! Masc ! Sg} ;
|
||||
PrepCN prep cn = {s = prep.s ++ cn.s ! prep.c ! Sg} ;
|
||||
|
||||
FocusObj np ss = {s = np.s ! Acc ++ ss.s} ;
|
||||
FocusAdv adv s = {s = adv.s ++ s.s} ;
|
||||
FocusAdV adv s = {s = adv.s ++ s.s} ;
|
||||
FocusAP ap np = {s = ap.s ! Nom ! genNum np.a.g np.a.n ++ np.s ! Nom} ;
|
||||
|
||||
PresPartAP vp = adjFromStr vp.inf ;
|
||||
EmbedPresPart vp = {s = vp.inf} ;
|
||||
PastPartAP vp = adjFromStr vp.inf ;
|
||||
PastPartAgentAP vp np = adjFromStr (vp.inf ++ prepNP (mkPrep "кім" instrumental) np) ;
|
||||
PassVPSlash vp = {
|
||||
s = \\t,p,a => copula t p a ++ vp.inf ;
|
||||
inf = "быць" ++ vp.inf ;
|
||||
imp = \\p,_ => neg p ++ "будзь" ++ vp.inf
|
||||
} ;
|
||||
PassAgentVPSlash vp np = addAdvVP (PassVPSlash vp) (prepNP (mkPrep "кім" instrumental) np) ;
|
||||
NominalizeVPSlashNP vp np = mkSimpleNP (vp.inf ++ prepNP vp.c np) Neuter Sg P3 ;
|
||||
ProgrVPSlash vp = vp ;
|
||||
A2VPSlash a = {
|
||||
s = \\t,p,agr => copula t p agr ++ a.s ! Nom ! genNum agr.g agr.n ;
|
||||
inf = a.s ! Nom ! GSg Masc ;
|
||||
c = a.c2 ;
|
||||
imp = \\p,_ => neg p ++ a.s ! Nom ! GSg Masc ;
|
||||
post = []
|
||||
} ;
|
||||
N2VPSlash n = {
|
||||
s = \\t,p,agr => copula t p agr ++ n.s ! Nom ! agr.n ;
|
||||
inf = n.s ! Nom ! Sg ;
|
||||
c = n.c2 ;
|
||||
imp = \\p,_ => neg p ++ n.s ! Nom ! Sg ;
|
||||
post = []
|
||||
} ;
|
||||
ExistsNP np = {s = \\t,p => copula t p np.a ++ np.s ! Nom} ;
|
||||
ExistCN cn = {s = \\t,p => copula t p {g=cn.g; n=Sg; p=P3} ++ cn.s ! Nom ! Sg} ;
|
||||
ExistMassCN cn = ExistCN cn ;
|
||||
ExistPluralCN cn = {s = \\t,p => copula t p {g=cn.g; n=Pl; p=P3} ++ cn.s ! Nom ! Pl} ;
|
||||
AdvIsNP adv np = {s = \\t,p => adv.s ++ copula t p np.a ++ np.s ! Nom} ;
|
||||
AdvIsNPAP adv np ap = {s = \\t,p => adv.s ++ copula t p np.a ++ np.s ! Nom ++ ap.s ! Nom ! genNum np.a.g np.a.n} ;
|
||||
PurposeVP vp = {s = "каб" ++ vp.inf} ;
|
||||
ComplBareVS vs s = {
|
||||
s = \\t,p,a => finiteVerb vs t p a ++ s.s ;
|
||||
inf = vs.infinitive ++ s.s ;
|
||||
imp = \\p,n => neg p ++ vs.imperative ! n ++ s.s
|
||||
} ;
|
||||
SlashBareV2S v s = {
|
||||
s = \\t,p,a => finiteVerb v t p a ;
|
||||
inf = v.infinitive ++ s.s ;
|
||||
c = v.c2 ;
|
||||
imp = \\p,n => neg p ++ v.imperative ! n ;
|
||||
post = s.s
|
||||
} ;
|
||||
ComplDirectVS vs utt = {
|
||||
s = \\t,p,a => finiteVerb vs t p a ++ utt.s ;
|
||||
inf = vs.infinitive ++ utt.s ;
|
||||
imp = \\p,n => neg p ++ vs.imperative ! n ++ utt.s
|
||||
} ;
|
||||
ComplDirectVQ vq utt = {
|
||||
s = \\t,p,a => finiteVerb vq t p a ++ utt.s ;
|
||||
inf = vq.infinitive ++ utt.s ;
|
||||
imp = \\p,n => neg p ++ vq.imperative ! n ++ utt.s
|
||||
} ;
|
||||
FrontComplDirectVS np vs utt = {s = \\t,p => utt.s ++ np.s ! Nom ++ finiteVerb vs t p np.a} ;
|
||||
FrontComplDirectVQ np vq utt = {s = \\t,p => utt.s ++ np.s ! Nom ++ finiteVerb vq t p np.a} ;
|
||||
PredAPVP ap vp = {s = \\t,p => copula t p defaultAgr ++ ap.s ! Nom ! GSg Neuter ++ vp.inf} ;
|
||||
AdjAsCN ap = nounFromStr (ap.s ! Nom ! GSg Masc) Masc ;
|
||||
AdjAsNP ap = mkSimpleNP (ap.s ! Nom ! GSg Masc) Masc Sg P3 ;
|
||||
PredIAdvVP iadv vp = {s = \\t,p => iadv.s ++ vp.inf} ;
|
||||
EmbedSSlash ss = {s = ss.s} ;
|
||||
|
||||
ReflRNP vp rnp = {
|
||||
s = \\t,p,a => vp.s ! t ! p ! a ++ rnp.s ! vp.c.c ++ vp.post ;
|
||||
inf = vp.inf ++ rnp.s ! vp.c.c ;
|
||||
imp = \\p,n => vp.imp ! p ! n ++ rnp.s ! vp.c.c ++ vp.post
|
||||
} ;
|
||||
ReflPron = {s = caseTable "сябе"} ;
|
||||
ReflPoss num cn = {s = \\c => "свой" ++ cn.s ! c ! num.n} ;
|
||||
PredetRNP pred rnp = {s = \\c => pred.s ! c ! Masc ! Sg ++ rnp.s ! c} ;
|
||||
AdvRNP np prep rnp = {s = \\c => np.s ! c ++ prep.s ++ rnp.s ! prep.c} ;
|
||||
AdvRVP vp prep rnp = addAdvVP vp (prep.s ++ rnp.s ! prep.c) ;
|
||||
AdvRAP ap prep rnp = {s = \\c,gn => ap.s ! c ! gn ++ prep.s ++ rnp.s ! prep.c} ;
|
||||
ReflA2RNP a rnp = {s = \\c,gn => a.s ! c ! gn ++ a.c2.s ++ rnp.s ! a.c2.c} ;
|
||||
PossPronRNP pron num cn rnp = {
|
||||
s = \\c => pron.s ! Gen ++ cn.s ! c ! num.n ++ rnp.s ! Gen ;
|
||||
a = {g=cn.g; n=num.n; p=P3}
|
||||
} ;
|
||||
ConjRNP conj xs = {s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c} ;
|
||||
Base_rr_RNP x y = {s1 = x.s; s2 = y.s} ;
|
||||
Base_nr_RNP x y = {s1 = x.s; s2 = y.s} ;
|
||||
Base_rn_RNP x y = {s1 = x.s; s2 = y.s} ;
|
||||
Cons_rr_RNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c; s2 = xs.s2} ;
|
||||
Cons_nr_RNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c; s2 = xs.s2} ;
|
||||
ReflPossPron = mkQuant "свой" ;
|
||||
ComplGenVV vv ant pol vp = {
|
||||
s = \\t,p,a => finiteVerb vv t p a ++ neg pol.p ++ vp.inf ;
|
||||
inf = vv.infinitive ++ neg pol.p ++ vp.inf ;
|
||||
imp = \\p,n => neg p ++ vv.imperative ! n ++ neg pol.p ++ vp.inf
|
||||
} ;
|
||||
CompoundN n1 n2 = {
|
||||
s = \\c,n => n1.s ! Nom ! Sg ++ n2.s ! c ! n ;
|
||||
voc = n1.voc ++ n2.voc ;
|
||||
g = n2.g
|
||||
} ;
|
||||
CompoundAP n a = {s = \\c,gn => n.s ! Nom ! Sg ++ a.s ! c ! gn} ;
|
||||
GerundCN vp = nounFromStr vp.inf Neuter ;
|
||||
GerundNP vp = mkSimpleNP vp.inf Neuter Sg P3 ;
|
||||
GerundAdv vp = {s = vp.inf} ;
|
||||
WithoutVP vp = {s = "без" ++ vp.inf} ;
|
||||
ByVP vp = {s = "праз" ++ vp.inf} ;
|
||||
InOrderToVP vp = {s = "каб" ++ vp.inf} ;
|
||||
ApposNP np app = {s = \\c => np.s ! c ++ app.s ! Nom; a = np.a} ;
|
||||
AdAdV ada adv = {s = ada.s ++ adv.s} ;
|
||||
UttAdV adv = {s = adv.s} ;
|
||||
PositAdVAdj a = {s = a.s ! Nom ! GSg Neuter} ;
|
||||
CompS s = {s = \\_ => s.s} ;
|
||||
CompQS qs = {s = \\_ => qs.s} ;
|
||||
CompVP ant pol vp = {s = \\_ => neg pol.p ++ vp.inf} ;
|
||||
UncontractedNeg = {s = []; p = R.Neg} ;
|
||||
UttVPShort vp = {s = vp.inf} ;
|
||||
ComplSlashPartLast vp np = {
|
||||
s = \\t,p,a => vp.s ! t ! p ! a ++ prepNP vp.c np ++ vp.post ;
|
||||
inf = vp.inf ++ prepNP vp.c np ;
|
||||
imp = \\p,n => vp.imp ! p ! n ++ prepNP vp.c np ++ vp.post
|
||||
} ;
|
||||
DetNPMasc det = {s = \\c => det.s ! c ! Masc; a = {g=Masc; n=det.n; p=P3}} ;
|
||||
DetNPFem det = {s = \\c => det.s ! c ! Fem; a = {g=Fem; n=det.n; p=P3}} ;
|
||||
UseComp_estar comp = UseComp_ser comp ;
|
||||
UseComp_ser comp = {
|
||||
s = \\t,p,a => copula t p a ++ comp.s ! a ;
|
||||
inf = "быць" ++ comp.s ! defaultAgr ;
|
||||
imp = \\p,_ => neg p ++ "будзь" ++ comp.s ! defaultAgr
|
||||
} ;
|
||||
SubjRelNP np rs = {s = \\c => np.s ! c ++ rs.s; a = np.a} ;
|
||||
UttAccNP np = {s = np.s ! Acc} ;
|
||||
UttDatNP np = {s = np.s ! Dat} ;
|
||||
UttAccIP ip = {s = ip.s ! Acc} ;
|
||||
UttDatIP ip = {s = ip.s ! Dat} ;
|
||||
UseDAP dap = {s = \\c => dap.s ! c ! Masc; a = {g=Neuter; n=dap.n; p=P3}} ;
|
||||
UseDAPMasc dap = {s = \\c => dap.s ! c ! Masc; a = {g=Masc; n=dap.n; p=P3}} ;
|
||||
UseDAPFem dap = {s = \\c => dap.s ! c ! Fem; a = {g=Fem; n=dap.n; p=P3}} ;
|
||||
CardCNCard card cn = {s = card.s ++ cn.s ! Gen ! Pl; n = Pl} ;
|
||||
TPastSimple = {s = []; t = R.Past} ;
|
||||
SubjunctRelCN cn rs = {
|
||||
s = \\c,n => cn.s ! c ! n ++ rs.s ;
|
||||
voc = cn.voc ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
}
|
||||
@@ -2,5 +2,15 @@ concrete GrammarBel of Grammar =
|
||||
TenseX,
|
||||
PhraseBel,
|
||||
NounBel,
|
||||
AdjectiveBel ** {
|
||||
AdjectiveBel,
|
||||
AdverbBel,
|
||||
VerbBel,
|
||||
SentenceBel,
|
||||
QuestionBel,
|
||||
RelativeBel,
|
||||
ConjunctionBel,
|
||||
NumeralBel,
|
||||
NamesBel,
|
||||
StructuralBel,
|
||||
IdiomBel ** {
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
concrete IdiomBel of Idiom = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
|
||||
|
||||
lin
|
||||
ImpersCl vp = {s = \\t,p => vp.s ! t ! p ! defaultAgr} ;
|
||||
GenericCl vp = {s = \\t,p => "нехта" ++ vp.s ! t ! p ! defaultAgr} ;
|
||||
CleftNP np rs = {s = \\_,_ => "гэта" ++ np.s ! Nom ++ rs.s} ;
|
||||
CleftAdv adv s = {s = \\_,_ => "гэта" ++ adv.s ++ s.s} ;
|
||||
|
||||
ExistNP np = {s = \\t,p => copula t p np.a ++ np.s ! Nom} ;
|
||||
ExistIP ip = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom} ;
|
||||
ExistNPAdv np adv = {s = \\t,p => copula t p np.a ++ np.s ! Nom ++ adv.s} ;
|
||||
ExistIPAdv ip adv = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom ++ adv.s} ;
|
||||
|
||||
ProgrVP vp = vp ;
|
||||
ImpPl1 vp = {s = "давайце" ++ vp.inf} ;
|
||||
ImpP3 np vp = {s = "няхай" ++ np.s ! Nom ++ vp.s ! R.Pres ! R.Pos ! np.a} ;
|
||||
|
||||
SelfAdvVP vp = addAdvVP vp "сам" ;
|
||||
SelfAdVVP vp = addAdVVP "сам" vp ;
|
||||
SelfNP np = {s = \\c => np.s ! c ++ "сам"; a = np.a} ;
|
||||
|
||||
}
|
||||
@@ -1,10 +1,12 @@
|
||||
--# -path=.:../abstract
|
||||
concrete LangBel of Lang =
|
||||
GrammarBel,
|
||||
LexiconBel
|
||||
LexiconBel,
|
||||
ConstructionBel
|
||||
,DocumentationBel --# notpresent
|
||||
** {
|
||||
|
||||
|
||||
flags startcat = Phr ;
|
||||
|
||||
}
|
||||
+744
-744
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,19 @@
|
||||
concrete NamesBel of Names = CatBel ** open ResBel, ParadigmsBel in {
|
||||
|
||||
lin
|
||||
GivenName gn = mkSimpleNP gn.s gn.g Sg P3 ;
|
||||
MaleSurname sn = mkSimpleNP sn.s Masc Sg P3 ;
|
||||
FemaleSurname sn = mkSimpleNP sn.s Fem Sg P3 ;
|
||||
PlSurname sn = mkSimpleNP sn.s Masc Pl P3 ;
|
||||
FullName gn sn = mkSimpleNP (gn.s ++ sn.s) gn.g Sg P3 ;
|
||||
|
||||
UseLN ln = {s = ln.s; a = {g=ln.g; n=ln.n; p=P3}} ;
|
||||
PlainLN ln = {s = ln.s; a = {g=ln.g; n=ln.n; p=P3}} ;
|
||||
InLN ln = {s = "у" ++ ln.s ! Loc} ;
|
||||
AdjLN ap ln = {
|
||||
s = \\c => ap.s ! c ! genNum ln.g ln.n ++ ln.s ! c ;
|
||||
g = ln.g ;
|
||||
n = ln.n
|
||||
} ;
|
||||
|
||||
}
|
||||
+123
-1
@@ -1,4 +1,126 @@
|
||||
concrete NounBel of Noun = CatBel ** {
|
||||
concrete NounBel of Noun = CatBel ** open ResBel, Prelude in {
|
||||
lin
|
||||
UseN n = n ;
|
||||
|
||||
DetCN det cn = {
|
||||
s = \\c => det.s ! c ! cn.g ++ cn.s ! c ! det.n ;
|
||||
a = {g=cn.g; n=det.n; p=P3}
|
||||
} ;
|
||||
UsePN pn = {
|
||||
s = pn.s ;
|
||||
a = {g=pn.g; n=pn.n; p=P3}
|
||||
} ;
|
||||
UsePron p = p ;
|
||||
|
||||
PredetNP pred np = {
|
||||
s = \\c => pred.s ! c ! np.a.g ! np.a.n ++ np.s ! c ;
|
||||
a = np.a
|
||||
} ;
|
||||
PPartNP np v = {
|
||||
s = \\c => np.s ! c ++ v.participle ! np.a.g ! np.a.n ;
|
||||
a = np.a
|
||||
} ;
|
||||
AdvNP np adv = {
|
||||
s = \\c => np.s ! c ++ adv.s ;
|
||||
a = np.a
|
||||
} ;
|
||||
ExtAdvNP np adv = {
|
||||
s = \\c => np.s ! c ++ adv.s ;
|
||||
a = np.a
|
||||
} ;
|
||||
RelNP np rs = {
|
||||
s = \\c => np.s ! c ++ rs.s ;
|
||||
a = np.a
|
||||
} ;
|
||||
DetNP det = {
|
||||
s = \\c => det.s ! c ! Masc ;
|
||||
a = {g=Masc; n=det.n; p=P3}
|
||||
} ;
|
||||
|
||||
DetQuant q n = {
|
||||
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ;
|
||||
n = n.n
|
||||
} ;
|
||||
DetQuantOrd q n o = {
|
||||
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ++ o.s ! c ! genNum g n.n ;
|
||||
n = n.n
|
||||
} ;
|
||||
NumSg = {s = \\_,_ => []; n = Sg} ;
|
||||
NumPl = {s = \\_,_ => []; n = Pl} ;
|
||||
NumCard card = {s = \\_,_ => card.s; n = card.n} ;
|
||||
NumDigits digits = {s = digits.s; n = Pl} ;
|
||||
NumDecimal dec = {s = dec.s; n = Pl} ;
|
||||
NumNumeral numeral = {s = numeral.s; n = Pl} ;
|
||||
AdNum adn card = {s = adn.s ++ card.s; n = card.n} ;
|
||||
|
||||
OrdDigits d = adjFromStr d.s ;
|
||||
OrdNumeral n = adjFromStr n.s ;
|
||||
OrdSuperl a = {s = \\c,gn => "най" ++ a.s ! c ! gn} ;
|
||||
OrdNumeralSuperl n a = {s = \\c,gn => n.s ++ a.s ! c ! gn} ;
|
||||
|
||||
IndefArt = {s = \\_,_,_ => []} ;
|
||||
DefArt = {s = \\_,_,_ => []} ;
|
||||
MassNP cn = {
|
||||
s = \\c => cn.s ! c ! Sg ;
|
||||
a = {g=cn.g; n=Sg; p=P3}
|
||||
} ;
|
||||
PossPron p = {s = \\_,_,_ => p.s ! Gen} ;
|
||||
|
||||
ComplN2 n np = {
|
||||
s = \\c,num => n.s ! c ! num ++ prepNP n.c2 np ;
|
||||
voc = n.voc ;
|
||||
g = n.g
|
||||
} ;
|
||||
ComplN3 n np = n ** {c2 = n.c3} ;
|
||||
UseN2 n = n ;
|
||||
Use2N3 n = n ** {c2 = n.c2} ;
|
||||
Use3N3 n = n ** {c2 = n.c3} ;
|
||||
|
||||
AdjCN ap cn = {
|
||||
s = \\c,num => ap.s ! c ! genNum cn.g num ++ cn.s ! c ! num ;
|
||||
voc = cn.voc ;
|
||||
g = cn.g
|
||||
} ;
|
||||
RelCN cn rs = {
|
||||
s = \\c,num => cn.s ! c ! num ++ rs.s ;
|
||||
voc = cn.voc ;
|
||||
g = cn.g
|
||||
} ;
|
||||
AdvCN cn adv = {
|
||||
s = \\c,num => cn.s ! c ! num ++ adv.s ;
|
||||
voc = cn.voc ;
|
||||
g = cn.g
|
||||
} ;
|
||||
SentCN cn sc = {
|
||||
s = \\c,num => cn.s ! c ! num ++ sc.s ;
|
||||
voc = cn.voc ;
|
||||
g = cn.g
|
||||
} ;
|
||||
ApposCN cn np = {
|
||||
s = \\c,num => cn.s ! c ! num ++ np.s ! Nom ;
|
||||
voc = cn.voc ;
|
||||
g = cn.g
|
||||
} ;
|
||||
PossNP cn np = {
|
||||
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
|
||||
voc = cn.voc ;
|
||||
g = cn.g
|
||||
} ;
|
||||
PartNP cn np = {
|
||||
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
|
||||
voc = cn.voc ;
|
||||
g = cn.g
|
||||
} ;
|
||||
CountNP det np = {
|
||||
s = \\c => det.s ! c ! Masc ++ "з" ++ np.s ! Gen ;
|
||||
a = {g=Masc; n=det.n; p=P3}
|
||||
} ;
|
||||
|
||||
AdjDAP dap ap = {
|
||||
s = \\c,g => dap.s ! c ! g ++ ap.s ! c ! genNum g dap.n ;
|
||||
n = dap.n
|
||||
} ;
|
||||
DetDAP det = det ;
|
||||
|
||||
QuantityNP dec mu = mkSimpleNP (dec.s ++ mu.s) Neuter Sg P3 ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
concrete NumeralBel of Numeral = CatBel ** {
|
||||
|
||||
lincat
|
||||
Digit, Sub10, Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = {s : Str} ;
|
||||
Dig = {s : Str} ;
|
||||
|
||||
lin
|
||||
num n = n ;
|
||||
|
||||
n2 = {s = "2"} ;
|
||||
n3 = {s = "3"} ;
|
||||
n4 = {s = "4"} ;
|
||||
n5 = {s = "5"} ;
|
||||
n6 = {s = "6"} ;
|
||||
n7 = {s = "7"} ;
|
||||
n8 = {s = "8"} ;
|
||||
n9 = {s = "9"} ;
|
||||
|
||||
pot01 = {s = "1"} ;
|
||||
pot0 d = d ;
|
||||
pot0as1 n = n ;
|
||||
pot110 = {s = "10"} ;
|
||||
pot111 = {s = "11"} ;
|
||||
pot1to19 d = {s = "1" ++ d.s} ;
|
||||
pot1 d = {s = d.s ++ "0"} ;
|
||||
pot1plus d n = {s = d.s ++ n.s} ;
|
||||
pot1as2 n = n ;
|
||||
pot21 = {s = "100"} ;
|
||||
pot2 n = {s = n.s ++ "00"} ;
|
||||
pot2plus n m = {s = n.s ++ "00" ++ m.s} ;
|
||||
pot2as3 n = n ;
|
||||
pot31 = {s = "1000"} ;
|
||||
pot3 n = {s = n.s ++ "000"} ;
|
||||
pot3plus n m = {s = n.s ++ "000" ++ m.s} ;
|
||||
pot3as4 n = n ;
|
||||
pot3decimal d = {s = d.s ++ "тысяч"} ;
|
||||
pot41 = {s = "1000000"} ;
|
||||
pot4 n = {s = n.s ++ "000000"} ;
|
||||
pot4plus n m = {s = n.s ++ "000000" ++ m.s} ;
|
||||
pot4as5 n = n ;
|
||||
pot4decimal d = {s = d.s ++ "мільёна"} ;
|
||||
pot51 = {s = "1000000000"} ;
|
||||
pot5 n = {s = n.s ++ "000000000"} ;
|
||||
pot5plus n m = {s = n.s ++ "000000000" ++ m.s} ;
|
||||
pot5decimal d = {s = d.s ++ "мільярда"} ;
|
||||
|
||||
IDig d = d ;
|
||||
IIDig d ds = {s = d.s ++ ds.s} ;
|
||||
|
||||
D_0 = {s = "0"} ;
|
||||
D_1 = {s = "1"} ;
|
||||
D_2 = {s = "2"} ;
|
||||
D_3 = {s = "3"} ;
|
||||
D_4 = {s = "4"} ;
|
||||
D_5 = {s = "5"} ;
|
||||
D_6 = {s = "6"} ;
|
||||
D_7 = {s = "7"} ;
|
||||
D_8 = {s = "8"} ;
|
||||
D_9 = {s = "9"} ;
|
||||
|
||||
PosDecimal d = d ;
|
||||
NegDecimal d = {s = "-" ++ d.s} ;
|
||||
IFrac d dig = {s = d.s ++ "." ++ dig.s} ;
|
||||
|
||||
}
|
||||
@@ -636,6 +636,42 @@ oper
|
||||
_ => regN form1
|
||||
} ;
|
||||
|
||||
compoundN = overload {
|
||||
compoundN : A -> N -> N = \a,n -> lin N {
|
||||
s = \\c,num => a.s ! c ! genNum n.g num ++ n.s ! c ! num ;
|
||||
voc = a.s ! Nom ! genNum n.g Sg ++ n.voc ;
|
||||
g = n.g
|
||||
} ;
|
||||
compoundN : N -> A -> N = \n,a -> lin N {
|
||||
s = \\c,num => n.s ! c ! num ++ a.s ! c ! genNum n.g num ;
|
||||
voc = n.voc ++ a.s ! Nom ! genNum n.g Sg ;
|
||||
g = n.g
|
||||
} ;
|
||||
compoundN : N -> Str -> N = \n,adv -> lin N {
|
||||
s = \\c,num => n.s ! c ! num ++ adv ;
|
||||
voc = n.voc ++ adv ;
|
||||
g = n.g
|
||||
} ;
|
||||
compoundN : Str -> N -> N = \adv,n -> lin N {
|
||||
s = \\c,num => adv ++ n.s ! c ! num ;
|
||||
voc = adv ++ n.voc ;
|
||||
g = n.g
|
||||
}
|
||||
} ;
|
||||
|
||||
mkPron : (_,_,_,_,_,_ : Str) -> Gender -> Number -> Person -> Pron =
|
||||
\nom,acc,dat,gen,loc,instr,g,n,p -> lin Pron {
|
||||
s = table {
|
||||
Nom => nom ;
|
||||
Acc => acc ;
|
||||
Dat => dat ;
|
||||
Gen => gen ;
|
||||
Loc => loc ;
|
||||
Instr => instr
|
||||
} ;
|
||||
a = {g=g; n = n; p = p}
|
||||
} ;
|
||||
|
||||
regV : Str -> V -- infinitive
|
||||
= \form -> case form of {
|
||||
_ + "агчы" => mkV021 form;
|
||||
@@ -717,6 +753,16 @@ oper
|
||||
_ => regV form1
|
||||
} ;
|
||||
|
||||
compoundV : V -> Str -> V = \v,adv -> lin V {
|
||||
active = \\a => {past=(v.active ! a).past ++ adv ;
|
||||
pres=\\p,num=>(v.active ! a).pres ! p ! num ++ adv
|
||||
} ;
|
||||
imperative = \\num => v.imperative ! num ++ adv ;
|
||||
infinitive = v.infinitive ++ adv ;
|
||||
participle = \\g,num => v.participle ! g ! num ++ adv ;
|
||||
passive = \\a,t => v.passive ! a ! t ++ adv
|
||||
} ;
|
||||
|
||||
regA : Str -> A -- s;Nom;('GSg', Masc)
|
||||
= \form -> case form of {
|
||||
_ + "які" => mkA006 form;
|
||||
@@ -819,24 +865,37 @@ 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=Acc} ;
|
||||
nominative : Case = Nom ;
|
||||
accusative : Case = Acc ;
|
||||
dative : Case = Dat ;
|
||||
genitive : Case = Gen ;
|
||||
locative : Case = Loc ;
|
||||
instrumental : Case = Instr ;
|
||||
|
||||
mkPrep = overload {
|
||||
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
|
||||
mkPrep : Case -> Prep = \c -> lin Prep {s=[]; c=c} ;
|
||||
mkPrep : Str -> Case -> Prep = \s,c -> lin Prep {s=s; c=c}
|
||||
} ;
|
||||
|
||||
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} ;
|
||||
mkIP : Str -> IP = \s -> lin IP (mkSimpleNP s Masc Sg P3) ;
|
||||
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_,_,_ => s} ;
|
||||
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_,_ => s; n=Sg} ;
|
||||
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
|
||||
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
|
||||
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} ;
|
||||
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_ => s} ;
|
||||
adjQuant : A -> Quant = \a -> lin Quant {s=\\c,g,n => a.s ! c ! genNum g n} ;
|
||||
mkPredet : Str -> Predet = \s -> lin Predet {s=\\_,_,_ => s} ;
|
||||
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg} ;
|
||||
mkCard : Str -> Card = \s -> lin Card {s=s; n=Pl} ;
|
||||
mkACard : Str -> ACard = \s -> lin ACard {s=s; n=Pl} ;
|
||||
mkConj : Str -> Conj = \s -> lin Conj {s=s; n=Pl} ;
|
||||
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
|
||||
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
|
||||
|
||||
mkLN : Str -> LN = \s -> lin LN {s=s} ;
|
||||
mkGN : Str -> GN = \s -> lin GN {s=s} ;
|
||||
mkLN : Str -> LN = \s -> lin LN {s=caseTable s; g=Neuter; n=Sg} ;
|
||||
mkGN : Str -> GN = \s -> lin GN {s=s; g=Masc} ;
|
||||
mkSN : Str -> SN = \s -> lin SN {s=s} ;
|
||||
mkPN : Str -> PN = \s -> lin PN {s=s} ;
|
||||
mkPN : Str -> PN = \s -> lin PN {s=caseTable s; g=Masc; n=Sg} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,25 @@
|
||||
concrete PhraseBel of Phrase = CatBel ** {
|
||||
concrete PhraseBel of Phrase = CatBel ** open ResBel in {
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
|
||||
UttS s = s ;
|
||||
UttQS qs = qs ;
|
||||
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
|
||||
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
|
||||
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
|
||||
UttIP ip = {s = ip.s ! Nom} ;
|
||||
UttIAdv iadv = iadv ;
|
||||
UttNP np = {s = np.s ! Nom} ;
|
||||
UttAdv adv = adv ;
|
||||
UttVP vp = {s = vp.inf} ;
|
||||
UttCN cn = {s = cn.s ! Nom ! Sg} ;
|
||||
UttCard card = {s = card.s} ;
|
||||
UttAP ap = {s = ap.s ! Nom ! GSg Masc} ;
|
||||
UttInterj i = i ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
PConjConj conj = {s = conj.s} ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
VocNP np = {s = np.s ! Nom} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
concrete QuestionBel of Question = CatBel ** open ResBel, (R = ParamX) in {
|
||||
|
||||
lincat
|
||||
QVP = {s : Str} ;
|
||||
|
||||
lin
|
||||
QuestCl cl = cl ;
|
||||
QuestVP ip vp = {
|
||||
s = \\t,p => ip.s ! Nom ++ vp.s ! t ! p ! ip.a
|
||||
} ;
|
||||
QuestSlash ip cl = {
|
||||
s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p
|
||||
} ;
|
||||
QuestIAdv iadv cl = {
|
||||
s = \\t,p => iadv.s ++ cl.s ! t ! p
|
||||
} ;
|
||||
QuestIComp icomp np = {
|
||||
s = \\t,p => icomp.s ++ np.s ! Nom
|
||||
} ;
|
||||
|
||||
IdetCN idet cn = {
|
||||
s = \\c => idet.s ! c ! cn.g ++ cn.s ! c ! idet.n ;
|
||||
a = {g=cn.g; n=idet.n; p=P3}
|
||||
} ;
|
||||
IdetIP idet = {
|
||||
s = \\c => idet.s ! c ! Masc ;
|
||||
a = {g=Masc; n=idet.n; p=P3}
|
||||
} ;
|
||||
AdvIP ip adv = {
|
||||
s = \\c => ip.s ! c ++ adv.s ;
|
||||
a = ip.a
|
||||
} ;
|
||||
IdetQuant iquant num = {
|
||||
s = \\c,g => iquant.s ! c ! g ! num.n ++ num.s ! c ! g ;
|
||||
n = num.n
|
||||
} ;
|
||||
|
||||
PrepIP prep ip = {s = prepNP prep ip} ;
|
||||
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
|
||||
CompIAdv iadv = iadv ;
|
||||
CompIP ip = {s = ip.s ! Nom} ;
|
||||
|
||||
ComplSlashIP vp ip = {s = vp.s ! R.Pres ! R.Pos ! defaultAgr ++ vp.c.s ++ ip.s ! vp.c.c ++ vp.post} ;
|
||||
AdvQVP vp iadv = {s = vp.s ! R.Pres ! R.Pos ! defaultAgr ++ iadv.s} ;
|
||||
AddAdvQVP qvp iadv = {s = qvp.s ++ iadv.s} ;
|
||||
QuestQVP ip qvp = {
|
||||
s = \\_,_ => ip.s ! Nom ++ qvp.s
|
||||
} ;
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user