1 Commits
Author SHA1 Message Date
Inari Listenmaa ba879527ab (Som) Add full forms of the pronoun into the s field in UsePron…
…The clitic forms used in VPs and Cls are syncategorematic, so those constructions did not break.
2026-04-22 17:20:09 +02:00
438 changed files with 22568 additions and 171004 deletions
+3 -3
View File
@@ -1,5 +1,5 @@
Code,Name,Directory,Functor,Unlexer,Present,All,Try,Symbolic,Compatibility,Synopsis,MorphoDict
Afr,Afrikaans,afrikaans,,,,,,y,,y,n
Afr,Afrikaans,afrikaans,,,,,,n,,y,n
Amh,Amharic,amharic,,,,,n,n,,n,n
Ara,Arabic,arabic,,,,,,y,,y,y
Bel,Belarusian,belarusian,,,,y,n,n,n,y,n
@@ -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,,,,,,y,,y,n
Cze,Czech,czech,,,,,,n,,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,y,n,n,,n,n
Tel,Telugu,telugu,,,y,n,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
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis MorphoDict
2 Afr Afrikaans afrikaans y n y n
3 Amh Amharic amharic n n n n
4 Ara Arabic arabic y y y
5 Bel Belarusian belarusian y n n n y n
7 Cat Catalan catalan Romance y y y n
8 Cgg Rukiga rukiga y y n n y y n
9 Chi Chinese (simplified) chinese y y
10 Cze Czech czech y n y n
11 Dan Danish danish Scand y y n
12 Dut Dutch dutch y y n
13 Eng English english y y y y
55 Swa Swahili swahili Bantu y n n n n n
56 Swe Swedish swedish Scand y y y y
57 Tam Tamil tamil n n n n n n n n n
58 Tel Telugu telugu y y n n n n n
59 Tha Thai thai to_thai y n
60 Tur Turkish turkish y n n n
61 Ukr Ukrainian ukrainian y n n n y n
-1
View File
@@ -35,7 +35,6 @@ fun
InflectionAdA : AdA -> Inflection ;
InflectionAdN : AdN -> Inflection ;
InflectionPrep : Prep -> Inflection ;
InflectionCl : Cl -> Inflection ;
fun
NoDefinition : String -> Definition ;
-5
View File
@@ -49,11 +49,6 @@ 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
+1 -2
View File
@@ -47,7 +47,7 @@ concrete CatAfr of Cat =
NP = {s : NPCase => Str ; a : Agr ; isPron : Bool} ;
Pron = Pronoun ;
Det,DAP = {s,sp : Gender => Str ; n : Number ; a : Adjf} ;
Det = {s,sp : Gender => Str ; n : Number ; a : Adjf} ;
Quant = {
s : Bool => Number => Gender => Str ;
sp : Number => Gender => Str ;
@@ -56,7 +56,6 @@ 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
-5
View File
@@ -19,8 +19,6 @@ 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 ;
@@ -33,8 +31,6 @@ 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} ;
@@ -42,6 +38,5 @@ 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} ;
}
-60
View File
@@ -1,60 +0,0 @@
--# -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" ;
}
+2 -160
View File
@@ -1,155 +1,10 @@
concrete ExtendAfr of Extend =
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
]
CatAfr ** ExtendFunctor - [PassVPSlash,PassAgentVPSlash]
with
(Grammar = GrammarAfr) **
open
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 ;
ParadigmsAfr, ResAfr in {
-- KA: guessed from PassV2 in Afrikaans and the equivalents in Dutch
lin PassVPSlash vps =
@@ -157,17 +12,4 @@ 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"
} ;
}
-22
View File
@@ -20,10 +20,6 @@ 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
@@ -36,24 +32,6 @@ 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 =
-1
View File
@@ -3,6 +3,5 @@
concrete LangAfr of Lang =
GrammarAfr,
LexiconAfr
,ConstructionAfr
,DocumentationAfr --# notpresent
;
-29
View File
@@ -39,11 +39,6 @@ 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 ;
@@ -178,30 +173,6 @@ 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 ;
-31
View File
@@ -40,49 +40,18 @@ 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 ;
-12
View File
@@ -275,18 +275,6 @@ 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
-10
View File
@@ -62,16 +62,6 @@ 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} ;
}
-6
View File
@@ -78,14 +78,8 @@ 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) ;
+4 -19
View File
@@ -1,26 +1,11 @@
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 = adjForm 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
}
} ;
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} ;
}
-11
View File
@@ -1,11 +0,0 @@
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 -3
View File
@@ -1,6 +1,4 @@
concrete AllSqi of AllSqiAbs =
LangSqi,
ExtendSqi,
IrregSqi
LangSqi
**
{} ;
+1 -3
View File
@@ -1,5 +1,3 @@
abstract AllSqiAbs =
Lang,
Extend,
IrregSqiAbs
Lang
** {}
+25 -48
View File
@@ -1,84 +1,61 @@
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 V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat Prep = Compl ;
lincat ACard = {s : Str} ;
lincat AP = {s : Species => Case => Gender => Number => Str} ;
lincat CN = Noun ;
lincat Card = {s : Str} ;
lincat Cl = {s : ParamX.Tense => Anteriority => Polarity => Str} ;
lincat ClSlash = {s : ParamX.Tense => Anteriority => Polarity => Str; c2 : Compl} ;
lincat Comp = {s : Agr => Str} ;
lincat Cl = {s : Str} ;
lincat ClSlash = {s : Str} ;
lincat Comp = {s : Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str; n : Number} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat Det = {
s : Case => Gender => Str;
post : Species => Case => Gender => Str;
sp : Species;
n : Number
} ;
lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ;
lincat GN = {s : Str} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Gender => Str; n : Number} ;
lincat IP = {s : Str; a : Agr} ;
lincat IQuant = {s : Gender => Str} ;
lincat Imp = {s : Polarity => Number => Str} ;
lincat IDet = {s : Str} ;
lincat IP = {s : Str} ;
lincat IQuant = {s : Str} ;
lincat Imp = {s : Str} ;
lincat LN = {s : Str} ;
lincat N = Noun ;
lincat N2 = {s : Species => Case => Number => Str; g : Gender;
c2 : Compl} ;
c2 : {s : Str}} ;
lincat N3 = {s : Species => Case => Number => Str; g : Gender;
c2 : Compl; c3 : Compl} ;
c2 : {s : Str}; c3 : {s : Str}} ;
lincat NP = {s : Case => Str; a : Agr} ;
lincat Num = {s : Str; n : Number} ;
lincat Numeral = {s : Str} ;
lincat Ord = {s : Case => Gender => Number => Str} ;
lincat Ord = {s : 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 Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {
s : Case => Gender => Number => Str;
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 Quant = {s : Case => Gender => Number => Str; spec : Species} ;
lincat RCl = {s : Str} ;
lincat RP = {s : Str} ;
lincat RS = {s : Str} ;
lincat S = {s : Str} ;
lincat SN = {s : Str} ;
lincat SSlash = {s : Str; c2 : Compl} ;
lincat SSlash = {s : Str} ;
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;
lincat VP = {indicative : Tense => Number => Person => Case => Str;
participle : Case => Str;
pres_optative : Number => Person => Case => Str;
perf_optative : Number => Person => Case => Str;
pres_admirative : Number => Person => Case => Str;
imperf_admirative : Number => Person => Case => Str;
vtype : VType} ;
imperf_admirative : Number => Person => Case => Str} ;
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} ;
imperf_admirative : Number => Person => Str} ;
}
-27
View File
@@ -1,27 +0,0 @@
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};
}
-64
View File
@@ -1,64 +0,0 @@
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";
}
-135
View File
@@ -1,135 +0,0 @@
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} ;
}
-8
View File
@@ -1,16 +1,8 @@
concrete GrammarSqi of Grammar =
NounSqi,
VerbSqi,
AdjectiveSqi,
AdverbSqi,
SentenceSqi,
QuestionSqi,
RelativeSqi,
ConjunctionSqi,
NumeralSqi,
PhraseSqi,
IdiomSqi,
NamesSqi,
StructuralSqi
** {
-23
View File
@@ -1,23 +0,0 @@
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ë"} ;
}
-24
View File
@@ -1,24 +0,0 @@
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" ;
}
-24
View File
@@ -1,24 +0,0 @@
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 ;
}
-1
View File
@@ -2,7 +2,6 @@
concrete LangSqi of Lang =
GrammarSqi,
LexiconSqi
,ConstructionSqi
,DocumentationSqi --# notpresent
** {
+8125 -8149
View File
File diff suppressed because it is too large Load Diff
-12
View File
@@ -1,12 +0,0 @@
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} ;
}
+10 -83
View File
@@ -1,111 +1,38 @@
concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi, Prelude in {
concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
flags optimize=all_subs ;
lin
DetCN det cn = {
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.sp ! c ! det.n ++
det.post ! det.sp ! c ! cn.g ;
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.spec ! c ! det.n ;
a = agrgP3 cn.g det.n
} ;
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} ;
-- UsePron p = p ;
DetQuant quant num = {
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 => []
} ;
s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ;
n = num.n ;
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
spec = quant.spec
} ;
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 => [] ;
sp = Def;
isPoss = False
spec = Def
} ;
IndefArt = {
s = \\c,g => table Number ["një"; []] ;
sp = Indef;
isPoss = False
spec = Indef
} ;
UseN 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 = \\sp,c,n => cn.s ! sp ! c ! n ++ ap.s ! sp ! c ! cn.g ! n ;
s = \\spec,c,n => cn.s ! spec ! c ! n ++ ap.s ! spec ! c ! cn.g ! n ;
g = cn.g
} ;
-15
View File
@@ -12,8 +12,6 @@ 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ë" }};
@@ -41,23 +39,10 @@ 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} ;
+13 -87
View File
@@ -4,11 +4,6 @@ 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 {
@@ -1204,39 +1199,6 @@ 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
@@ -1269,19 +1231,6 @@ 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} ;
@@ -1324,9 +1273,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; a={gn=GSg Masc; p=P3}} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_=>s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_=>s; n=Sg} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
@@ -1334,13 +1283,7 @@ 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} ;
mkQuant = overload {
mkQuant : Str -> Quant = \s -> lin Quant {
s = \\_,_,_ => s ;
sp = Indef ;
isPoss = False
} ;
mkQuant : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Quant =
oper 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 {
@@ -1384,19 +1327,10 @@ mkQuant = overload {
}
}
} ;
sp = Indef ;
isPoss = False
}
} ;
mkDet = overload {
mkDet : Str -> Number -> Det = \s,n -> lin Det {
s = \\_,_ => s ;
post = \\_,_,_ => [] ;
sp = Indef ;
n = n
spec = Indef
} ;
mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
\f1,f2,f3,f4,f5,f6,f7,f8,n -> lin Det
{ s = table {
Nom => table {
@@ -1416,23 +1350,18 @@ mkDet = overload {
Fem => f8
}
} ;
post = \\_,_,_ => [] ;
sp = Indef ;
spec = 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) ->
(Case => Gender => Number => Str) ->
GenNum -> Person -> Pron =
\nom,acc,dat,ablat,acc_clit,dat_clit,poss,gn,p -> lin Pron
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
{s = table Case [nom; acc; dat; ablat];
acc_clit = acc_clit;
dat_clit = dat_clit;
poss = poss;
a = {gn=gn; p=p}
} ;
@@ -1440,10 +1369,7 @@ 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 -> Case -> Prep = \s,c -> lin Prep {
s=s;
c=c
} ;
noPrep : Prep = lin Prep {s=""; c=Acc} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s} ;
noPrep : Prep = lin Prep {s=""} ;
}
-13
View File
@@ -4,24 +4,11 @@ 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} ;
}
-21
View File
@@ -1,21 +0,0 @@
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} ;
}
-8
View File
@@ -1,8 +0,0 @@
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} ;
}
+3 -62
View File
@@ -1,6 +1,6 @@
resource ResSqi = ParamX-[Tense,Past,Pres] ** open Prelude in {
oper Compl = {s : Str; c : Case} ;
oper Compl = {s : Str} ;
param Species = Indef | Def ;
param Case = Nom | Acc | Dat | Ablat ;
@@ -9,16 +9,6 @@ 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 ->
@@ -114,8 +104,7 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Bool -> Adj =
param Tense = Pres | Past | Imperfect | Aorist ;
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 Verb = {indicative: Tense => Number => Person => Str; imperative: Number => Str; participle: Str; pres_optative: Number => Person => Str; perf_optative: Number => Person => Str; pres_admirative: Number => Person => Str; imperf_admirative: Number => Person => Str} ; -- 758
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43,f44,f45,f46,f47,f48,f49,f50,f51 ->
{ indicative = table {
@@ -220,8 +209,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
P2 => f50 ;
P3 => f51
}
} ;
vtype = VNormal
}
} ;
oper link_clitic : Species => Case => Gender => Number => Str =
@@ -270,51 +258,4 @@ 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"}
}
} ;
}
-46
View File
@@ -1,46 +0,0 @@
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}} ;
}
+8 -154
View File
@@ -1,56 +1,13 @@
concrete StructuralSqi of Structural = CatSqi ** open ResSqi, ParadigmsSqi in {
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 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 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"
@@ -59,107 +16,4 @@ 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"} ;
}
-150
View File
@@ -1,150 +0,0 @@
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} ;
}
-5
View File
@@ -1,5 +0,0 @@
--# -path=.:../afrikaans:../common:../abstract:../prelude
resource SymbolicAfr = Symbolic with
(Symbol = SymbolAfr),
(Grammar = GrammarAfr) ;
+1 -1
View File
@@ -1,3 +1,3 @@
--# -path=.:../afrikaans:../common:../abstract:../prelude
resource TryAfr = SyntaxAfr, LexiconAfr, ParadigmsAfr - [mkAdv,mkAdN,mkCard,mkOrd,mkIAdv,mkIDet] ;
resource TryAfr = SyntaxAfr, LexiconAfr, ParadigmsAfr - [mkAdv,mkOrd] ;
+1 -1
View File
@@ -1,6 +1,6 @@
--# -path=.:../maltese:../common:../abstract:../prelude
resource TryMlt = SyntaxMlt, LexiconMlt, ParadigmsMlt - [mkAdN, mkAdv,mkCard,mkDet,mkIAdv,mkIDet,mkOrd,mkPConj,mkQuant,mkVoc] **
resource TryMlt = SyntaxMlt, LexiconMlt, ParadigmsMlt - [mkAdN, mkAdv,mkOrd,mkQuant] **
open (P = ParadigmsMlt) in {
}
+5 -9
View File
@@ -1,16 +1,12 @@
--# -path=.:../persian:../common:../abstract:../prelude
resource TryPes = SyntaxPes-[mkAdN], LexiconPes, ParadigmsPes -[mkDet,mkQuant,mkAdv,mkAdN,mkOrd,mkQuant,mkVoc]**
resource TryPes = SyntaxPes, LexiconPes, ParadigmsPes -[mkDet,mkQuant,mkAdv]**
open (P = ParadigmsPes) in {
oper
mkAdv = overload SyntaxPes {
mkAdv : Str -> Adv = P.mkAdv ;
} ;
-- oper
mkAdN = overload {
mkAdN : CAdv -> AdN = SyntaxPes.mkAdN ;
mkAdN : Str -> AdN = P.mkAdN ;
} ;
-- mkAdv = overload SyntaxPes {
-- mkAdv : Str -> Adv = P.mkAdv ;
-- } ;
}
-1
View File
@@ -4,7 +4,6 @@ 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
-- } ;
-10
View File
@@ -17,16 +17,6 @@ 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 ;
+4 -119
View File
@@ -4,23 +4,16 @@ concrete ExtendAra of Extend =
CatAra ** ExtendFunctor - [
GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem,
EmptyRelSlash, PredAPVP,
ComplDirectVS, ComplDirectVQ, UttAdV, -- because of Utt
ComplDirectVS, ComplDirectVQ, -- 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,
@@ -38,8 +31,6 @@ 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} ;
@@ -78,10 +69,6 @@ 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 = {
@@ -106,70 +93,11 @@ 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 => 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 ;
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
---- very unsure about this as well
CompoundN a b = b ** {
@@ -204,47 +132,4 @@ 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 => "اللَّاتِي"
}
}
} ;
}
+2 -10
View File
@@ -44,17 +44,9 @@ concrete IdiomAra of Idiom = CatAra ** open
-- ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
-- Arabic normally expresses the unmarked progressive with the
-- imperfect, so no extra auxiliary is required here.
ProgrVP vp = vp ;
-- ProgrVP : VP -> VP ; -- be sleeping
-- 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} ;
-- ImpPl1 : VP -> Utt ; -- let's go
-- ImpP3 : NP -> VP -> Utt ; -- let John walk
-6
View File
@@ -11,12 +11,6 @@ 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
-18
View File
@@ -75,24 +75,6 @@ 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 ;
-40
View File
@@ -105,46 +105,6 @@ 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
+4 -7
View File
@@ -907,6 +907,10 @@ 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
@@ -997,11 +1001,4 @@ 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
} ;
} ;
-2
View File
@@ -22,8 +22,6 @@ 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 ;
+2 -8
View File
@@ -465,11 +465,8 @@ oper
param
VPForm = VPPerf
| VPPassPerf
| VPImpf Mood
| VPPassImpf Mood
| VPImp
| VPPPart
| VPGer ;
VType = -- indicates if there is a predicate (xabar):
@@ -503,11 +500,8 @@ 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 ;
@@ -521,8 +515,8 @@ oper
let actVP = predV v in actVP ** {
s = \\pgn,vf =>
case vf of {
VPPerf => actVP.s ! pgn ! VPPassPerf ;
VPImpf m => actVP.s ! pgn ! VPPassImpf m ;
VPPerf => v.s ! VPerf Pas pgn ;
VPImpf m => v.s ! VImpf m Pas pgn ;
_ => actVP.s ! pgn ! vf
}
};
+1 -14
View File
@@ -15,8 +15,6 @@ 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 {
@@ -39,15 +37,8 @@ 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 = (predV copula) ** {
s = \\_,_ => cl.s ! Pres ! Pos ! Verbal ;
c2 = prep ;
agrObj = \\_ => [] ;
subj = np2subj emptyNP
} ;
-- SlashPrep cl prep = TODO
-- SlashVS np vs sslash = TODO
@@ -81,8 +72,4 @@ 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
} ;
}
-8
View File
@@ -43,10 +43,6 @@ 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 =
@@ -112,10 +108,6 @@ 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
-16
View File
@@ -15,21 +15,5 @@ lin
} ;
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
} ;
}
-4
View File
@@ -3,8 +3,4 @@ concrete AdverbHye of Adverb = CatHye ** open Prelude,ResHye in {
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 -2
View File
@@ -1,5 +1,4 @@
concrete AllHye of AllHyeAbs =
LangHye,
ExtendHye
LangHye
**
{} ;
+1 -2
View File
@@ -1,4 +1,3 @@
abstract AllHyeAbs =
Lang,
Extend
Lang
** {}
+5 -6
View File
@@ -6,7 +6,6 @@ concrete CatHye of Cat = CommonX ** open Prelude,ResHye in {
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;
@@ -18,9 +17,9 @@ concrete CatHye of Cat = CommonX ** open Prelude,ResHye in {
lincat Comp = {s : Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : CardOrd => Str; n : Number; hasDot : Bool} ;
lincat Decimal = {s : Str} ;
lincat Det = {s : Str; n : Number; sp : Species} ;
lincat Digits = {s : CardOrd => Str; n : Number; tail : DTail} ;
lincat Digits = {s : Str} ;
lincat GN = {s : Str} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str} ;
@@ -33,12 +32,12 @@ concrete CatHye of Cat = CommonX ** open Prelude,ResHye in {
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 Numeral = {s : Str} ;
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 Prep = Compl ** {isPre : Bool} ;
lincat Pron = {s : Str; empty : Str; a : Agr} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Str; sp : Species} ;
-22
View File
@@ -1,22 +0,0 @@
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};
}
-59
View File
@@ -1,59 +0,0 @@
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="ուրդու"};
}
-116
View File
@@ -1,116 +0,0 @@
--# -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} ;
}
+3 -9
View File
@@ -1,16 +1,10 @@
concrete GrammarHye of Grammar =
TenseX,
PhraseHye,
NounHye,
VerbHye,
AdjectiveHye,
AdverbHye,
NumeralHye,
SentenceHye,
QuestionHye,
RelativeHye,
ConjunctionHye,
PhraseHye,
StructuralHye,
IdiomHye,
TenseX,
NamesHye ** {
StructuralHye ** {
}
-21
View File
@@ -1,21 +0,0 @@
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 ;
}
-1
View File
@@ -2,7 +2,6 @@
concrete LangHye of Lang =
GrammarHye,
LexiconHye
,ConstructionHye
,DocumentationHye --# notpresent
** {
+688 -648
View File
File diff suppressed because it is too large Load Diff
-12
View File
@@ -1,12 +0,0 @@
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} ;
}
+3 -56
View File
@@ -1,4 +1,4 @@
concrete NounHye of Noun = CatHye ** open Prelude, ResHye in {
concrete NounHye of Noun = CatHye ** open ResHye in {
lin AdjCN ap cn = {
s = \\sp,c,n =>
case ap.isPre of {
@@ -9,70 +9,17 @@ concrete NounHye of Noun = CatHye ** open Prelude, ResHye in {
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 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 =>
@@ -84,5 +31,5 @@ concrete NounHye of Noun = CatHye ** open Prelude, ResHye in {
_ => n.s ! c ! num
}
} ;
lin UsePron pron = {s = pron.s; a=pron.a} ;
lin UsePron pron = {s = \\c => pron.s; a=pron.a} ;
}
-181
View File
@@ -1,181 +0,0 @@
--# -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
} ;
}
+5 -13
View File
@@ -23,7 +23,7 @@ oper
_ + "չալ" => mkV002 form;
_ + "նալ" => mkV004 form;
_ + "ել" => mkV001 form;
_ => lin V (invarVerb form)
_ => error "Cannot find an inflection rule"
} ;
reg2V : Str -> Str -> V -- s Imperative_Jussive;Pl
@@ -212,7 +212,7 @@ oper
_ + "ի" => mkN003 form;
_ + "ե" => mkN006 form;
_ + "է" => mkN006 form;
_ => mkN007 form
_ => error "Cannot find an inflection rule"
} ;
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;
_ => mkA001 form
_ => error "Cannot find an inflection rule"
} ;
reg2A : Str -> Str -> A -- s;Nom;Sg s;Nom;Pl
@@ -440,14 +440,6 @@ 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}) ;
@@ -501,7 +493,7 @@ oper
mkPron : Str -> Number -> Person -> Pron = \s,n,p ->
lin Pron {
s = \\_ => s ;
s = s ;
empty = [] ;
a = {n = n; p = p}
} ;
+1 -13
View File
@@ -1,21 +1,9 @@
concrete PhraseHye of Phrase = CatHye ** open ResHye in {
concrete PhraseHye of Phrase = CatHye ** {
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 = []} ;
-21
View File
@@ -1,21 +0,0 @@
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 ++ "՞"} ;
}
-11
View File
@@ -1,11 +0,0 @@
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
}} ;
}
+3 -18
View File
@@ -1,19 +1,9 @@
resource ResHye = ParamX ** open Prelude in {
resource ResHye = ParamX ** {
param CardOrd = NCard | NOrd ;
param Aspect = Non_Past | Perfect ;
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: 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 ;
@@ -113,11 +103,6 @@ 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 {
@@ -277,7 +262,7 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
} ;
oper Compl = {s : Str; c : Case; isPre : Bool} ;
oper noPrep : Compl = {s=""; c=Nom; isPre=False} ;
oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Dat} ;
}
+4 -55
View File
@@ -1,20 +1,6 @@
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;
lin PredVP np vp = {s = np.s ! Nom ++ vp.s;
conditional = \\a,n => np.s ! Nom ++ vp.conditional ! a ! P3 ! n;
converb = {imperfective = np.s ! Nom ++ vp.converb.imperfective;
futCon1 = np.s ! Nom ++ vp.converb.futCon1;
futCon2 = np.s ! Nom ++ vp.converb.futCon2;
@@ -22,44 +8,7 @@ concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in {
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;
past = \\_,n => np.s ! Nom ++ vp.past ! P3 ! 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} ;
subjunctive = \\a,n => np.s ! Nom ++ vp.subjunctive ! a ! P3 ! n} ;
}
+7 -101
View File
@@ -1,102 +1,8 @@
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="ոչ"} ;
concrete StructuralHye of Structural = CatHye ** open ResHye, ParadigmsHye in {
lin i_Pron = mkPron "ես" Sg P1 ;
lin youSg_Pron = mkPron "դու" Sg P2 ;
lin he_Pron, she_Pron, it_Pron = mkPron "նա" Sg P3 ;
lin we_Pron = mkPron "մեք" Pl P1 ;
lin youPl_Pron = mkPron "դուք" Pl P2 ;
lin they_Pron = mkPron "նոքա" Pl P3 ;
}
+19 -75
View File
@@ -1,35 +1,4 @@
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
} ;
concrete VerbHye of Verb = CatHye ** open Prelude,ResHye in {
lin AdvVP vp adv = {s = adv.s ++ vp.s;
conditional = \\a,p,n => adv.s ++ vp.conditional ! a ! p ! n;
converb = {imperfective = adv.s ++ vp.converb.imperfective;
@@ -43,49 +12,24 @@ concrete VerbHye of Verb = CatHye ** open Prelude, ResHye, ParadigmsHye in {
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 ComplSlash vp np = {s = vp.s ++ vp.c2.s ++ np.s ! vp.c2.c;
conditional = \\a,p,n => vp.conditional ! a ! p ! n
++ vp.c2.s ++ np.s ! vp.c2.c;
converb = {imperfective = vp.converb.imperfective
++ vp.c2.s ++ np.s ! vp.c2.c;
futCon1 = vp.converb.futCon1 ++ vp.c2.s ++ np.s ! vp.c2.c;
futCon2 = vp.converb.futCon2 ++ vp.c2.s ++ np.s ! vp.c2.c;
negative = vp.converb.negative ++ vp.c2.s ++ np.s ! vp.c2.c;
perfective = vp.converb.perfective
++ vp.c2.s ++ np.s ! vp.c2.c;
simultaneous = vp.converb.simultaneous
++ vp.c2.s ++ np.s ! vp.c2.c};
imperative = \\n => vp.imperative ! n ++ vp.c2.s ++ np.s ! Nom;
passive = vp.passive ++ vp.c2.s ++ np.s ! vp.c2.c;
past = \\p,n => vp.past ! p ! n ++ vp.c2.s ++ np.s ! vp.c2.c;
participle = \\p => vp.participle ! p ++ vp.c2.s ++ np.s ! vp.c2.c;
subjunctive = \\a,p,n => vp.subjunctive ! a ! p ! n
++ vp.c2.s ++ np.s ! vp.c2.c} ;
lin SlashV2a v = v ;
lin UseV v = v ;
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} ;
}
+2 -2
View File
@@ -2,5 +2,5 @@
concrete AllEus of AllEusAbs =
LangEus,
ExtendEus
** open ExtraEus in {} ;
ExtraEus
** {} ;
+1 -1
View File
@@ -2,5 +2,5 @@
abstract AllEusAbs =
Lang,
Extend
ExtraEusAbs
** {} ;
+4 -6
View File
@@ -104,18 +104,16 @@ concrete CatEus of Cat = CommonX ** open ResEus, Prelude in {
-- additional lexicon modules.
V,
V2,
V3,
VV, -- verb-phrase-complement verb e.g. "want"
VS, -- sentence-complement verb e.g. "claim"
VQ, -- question-complement verb e.g. "wonder"
VA = ResEus.Verb ; -- adjective-complement verb, e.g. "look"
V2,
VA, -- adjective-complement verb e.g. "look"
V2V, -- verb with NP and V complement e.g. "cause"
V2S, -- verb with NP and S complement e.g. "tell"
V2Q, -- verb with NP and Q complement e.g. "ask"
V2A = ResEus.Verb2 ; -- verb with NP and AP complement e.g. "paint"
V3 = ResEus.Verb3 ;
V2A = ResEus.Verb ; -- verb with NP and AP complement e.g. "paint"
A = ResEus.Adjective ;
A2 = ResEus.Adjective2 ;
+1 -59
View File
@@ -1,5 +1,4 @@
concrete ConstructionEus of Construction = CatEus **
open Prelude, ResEus, ParadigmsEus, (G=GrammarEus) in {
concrete ConstructionEus of Construction = CatEus ** open ParadigmsEus in {
lincat
Timeunit = N ;
@@ -7,63 +6,6 @@ lincat
Monthday = NP ;
Month = N ;
Year = NP ;
lin
weekdayN w = w ;
monthN m = m ;
monday_Weekday = mkN "astelehen" ;
tuesday_Weekday = mkN "astearte" ;
wednesday_Weekday = mkN "asteazken" ;
thursday_Weekday = mkN "ostegun" ;
friday_Weekday = mkN "ostiral" ;
saturday_Weekday = mkN "larunbat" ;
sunday_Weekday = mkN "igande" ;
january_Month = mkN "urtarril" ;
february_Month = mkN "otsail" ;
march_Month = mkN "martxo" ;
april_Month = mkN "apiril" ;
may_Month = mkN "maiatz" ;
june_Month = mkN "ekain" ;
july_Month = mkN "uztail" ;
august_Month = mkN "abuztu" ;
september_Month = mkN "irail" ;
october_Month = mkN "urri" ;
november_Month = mkN "azaro" ;
december_Month = mkN "abendu" ;
weekdayPunctualAdv w = {s = w.s ++ artDef ! Sg ! Ine ! w.ph} ;
weekdayHabitualAdv w = {s = w.s ++ artDef ! Pl ! Ine ! w.ph} ;
weekdayNextAdv w = {s = "hurrengo" ++ w.s ++ artDef ! Sg ! Abs ! w.ph} ;
weekdayLastAdv w = {s = "joan den" ++ w.s ++ artDef ! Sg ! Abs ! w.ph} ;
monthAdv m = {s = m.s ++ artDef ! Sg ! Ine ! m.ph} ;
yearAdv y = {s = glue y.stem "an"} ;
intYear i = lin Year (invariantNP i.s) ;
intMonthday i = lin Monthday (invariantNP i.s) ;
ready_VP = G.UseComp (G.CompAP (G.PositA (mkA "prest"))) ;
has_age_VP card =
(useV {prc = \\_ => [] ; nstem = "izate" ; val = Du Ukan}) ** {
dobj = {s = \\_ => card.s ++ "urte" ; agr = Hauek ; isDef = True}
} ;
cup_of_CN np = G.PartNP (useN (mkNoun "kikara")) np ;
n_units_AP card unit a = {
s = \\_ => card.s ++ linCNIndef unit ++ a.s ! AF Posit ;
ph = a.ph ; typ = Bare
} ;
n_units_of_NP card unit np = lin NP (np ** {
s = \\c => card.s ++ linCNIndef unit ++ np.s ! c ;
stem = card.s ++ linCNIndef unit ++ np.stem ; agr = Hauek
}) ;
oper
invariantNP : Str -> NP = \s -> lin NP {
s = \\_ => s ; stem = s ; agr = Hau ; anim = Inan ; isDef = True
} ;
{-
lin
+2 -155
View File
@@ -1,171 +1,18 @@
--# -path=.:../common:../abstract
concrete ExtendEus of Extend =
CatEus ** ExtendFunctor - [
VPS, ListVPS, BaseVPS, ConsVPS, ConjVPS, MkVPS, PredVPS,
VPI, ListVPI, BaseVPI, ConsVPI, ConjVPI, MkVPI, ComplVPIVV,
ListComp, BaseComp, ConsComp, ConjComp,
ListImp, BaseImp, ConsImp, ConjImp,
GenNP, GenModNP, ICompAP,
PresPartAP, PastPartAP, PastPartAgentAP,
PassVPSlash, PassAgentVPSlash, ProgrVPSlash,
ReflPron, ReflPoss, AdvRNP, AdvRVP, AdvRAP, PossPronRNP,
CompoundN, CompoundAP, GerundCN, GerundNP, GerundAdv,
ByVP, InOrderToVP, ApposNP, PositAdVAdj,
UseDAP, UseDAPMasc, UseDAPFem, CompVP, ExistIPQS
]
CatEus ** ExtendFunctor - [GenNP,ICompAP]
with (Grammar=GrammarEus)
** open Prelude, ResEus, AditzTrinkoak, Coordination, (G=GrammarEus) in {
lincat
VPS = {s : Agr => Str ; sc : Case} ;
[VPS] = {s1,s2 : Agr => Str ; sc : Case} ;
VPI = {s : Agr => Str} ;
[VPI] = {s1,s2 : Agr => Str} ;
[Comp] = {s1,s2 : Agr => Str ; copula : SyntVerb1} ;
[Imp] = {s1,s2 : Str} ;
** open Prelude, ResEus in {
lin
MkVPS temp pol vp = {
s = \\agr => linS ((mkClause False
(empty_NP ** {agr = agr}) vp).s
! temp.t ! temp.a ! pol.p ! Stat) ;
sc = subjCase vp.val
} ;
BaseVPS x y = {s1 = x.s ; s2 = y.s ; sc = x.sc} ;
ConsVPS x xs = {
s1 = \\agr => x.s ! agr ++ SOFT_BIND ++ "," ++ xs.s1 ! agr ;
s2 = xs.s2 ; sc = x.sc
} ;
ConjVPS conj xs = {
s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr ;
sc = xs.sc
} ;
PredVPS np vps = sentenceFromStr (np.s ! vps.sc ++ vps.s ! np.agr) ;
MkVPI vp = {s = linVPPrc vp} ;
BaseVPI x y = {s1 = x.s ; s2 = y.s} ;
ConsVPI x xs = {
s1 = \\agr => x.s ! agr ++ SOFT_BIND ++ "," ++ xs.s1 ! agr ;
s2 = xs.s2
} ;
ConjVPI conj xs = {
s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr
} ;
ComplVPIVV vv vpi = insertComp vpi.s (useV vv) ;
BaseComp x y = {s1 = x.s ; s2 = y.s ; copula = x.copula} ;
ConsComp x xs = {
s1 = \\agr => x.s ! agr ++ SOFT_BIND ++ "," ++ xs.s1 ! agr ;
s2 = xs.s2 ; copula = xs.copula
} ;
ConjComp conj xs = {
s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr ;
copula = xs.copula
} ;
BaseImp x y = {s1 = x.s ; s2 = y.s} ;
ConsImp x xs = {s1 = x.s ++ SOFT_BIND ++ "," ++ xs.s1 ; s2 = xs.s2} ;
ConjImp conj xs = {s = conj.s1 ++ xs.s1 ++ conj.s2 ++ xs.s2} ;
GenNP np = -- NP -> Quant ; -- this man's
{ s = artDef ;
indep, isDef = True ;
pref = np.s ! Gen } ;
GenModNP num np cn = G.DetCN (G.DetQuant G.DefArt num) (G.PossNP cn np) ;
ICompAP ap = -- AP -> IComp ; -- "how old"
{ s = "nola" ++ ap.s ! Hau } ; --TODO agreement -- change type of IComp
PresPartAP vp = relativeAP vp ;
PastPartAP vps = relativeAP (passVPSlash vps) ;
PastPartAgentAP vps agent = relativeAP (passAgentVPSlash vps agent) ;
PassVPSlash = passVPSlash ;
PassAgentVPSlash = passAgentVPSlash ;
ProgrVPSlash vps = vps ** {prc = \\_ => vps.prc ! Pres ++ "ari"} ;
ReflPron = reflexiveNP ;
ReflPoss num cn = lin RNP (G.DetCN (reflexiveDet num) cn) ;
AdvRNP np prep rnp = lin RNP (np ** {
s = \\c => np.s ! c ++ applyPost prep rnp ;
stem = np.stem ++ applyPost prep rnp
}) ;
AdvRVP vp prep rnp = insertAdv (ss (applyPost prep rnp)) vp ;
AdvRAP ap prep rnp = ap ** {
s = \\agr => ap.s ! agr ++ applyPost prep rnp
} ;
PossPronRNP pron num cn rnp =
G.DetCN (G.DetQuant (G.PossPron pron) num)
(cn ** {s = \\agr => rnp.s ! Gen ++ cn.s ! agr}) ;
CompoundN modifier head = head ** {s = modifier.s ++ head.s} ;
CompoundAP noun adjective = adjective ** {
s = \\agr => noun.s ++ adjective.s ! AF Posit ;
typ = Bare
} ;
GerundCN vp = {
s = \\_ => gerundStr vp ; comp = [] ; ph = FinalVow ; anim = Inan ;
heavyMod = \\_ => []
} ;
GerundNP vp = G.MassNP (GerundCN vp) ;
GerundAdv vp = {s = (GerundNP vp).s ! Gen ++ "bidez"} ;
ByVP = GerundAdv ;
InOrderToVP vp = {s = vpObjects vp ++ glue vp.nstem "ra"} ;
ApposNP np app = np ** {
s = \\c => np.s ! c ++ SOFT_BIND ++ "," ++ app.s ! Abs ++ SOFT_BIND ++ "," ;
stem = np.stem ++ SOFT_BIND ++ "," ++ app.stem ++ SOFT_BIND ++ ","
} ;
PositAdVAdj a = {s = a.s ! AAdv} ;
UseDAP dap = G.DetNP dap ;
UseDAPMasc = UseDAP ;
UseDAPFem = UseDAP ;
CompVP ant pol vp = {
s = \\agr => case pol.p of {
Pos => vpObjects vp ++ vp.prc ! Past ;
Neg => vpObjects vp ++ "ez" ++ vp.prc ! Past
} ;
copula = Izan
} ;
ExistIPQS temp pol ip =
G.UseQCl temp pol (G.QuestCl (G.ExistNP (lin NP ip))) ;
oper
sentenceFromStr : Str -> {s : Sentence} = \str -> {
s = {beforeAux = str ; aux = mkVForms [] ; afterAux = []}
} ;
passVPSlash : ResEus.VPSlash -> ResEus.VerbPhrase = \vps -> vps ** {
val = Da Izan ;
dobj = {s = \\_ => [] ; agr = Hau ; isDef = True}
} ;
passAgentVPSlash : ResEus.VPSlash -> NounPhrase -> ResEus.VerbPhrase = \vps,agent ->
insertAdv (ss (agent.s ! Ins)) (passVPSlash vps) ;
relativeAP : ResEus.VerbPhrase -> AdjPhrase = \vp ->
let rc = rclFromVP (BIND ++ "n") vp
in {s = \\agr => rc.s ! Pres ! Simul ! Pos ! agr ;
ph = FinalCons ; typ = Ko} ;
reflexiveDet : Num -> Determiner = \num -> {
s = artDef ! num.n ; indep = True ; nbr = num.n ;
pref = "bere" ; isDef = True
} ;
reflexiveNP : RNP = lin RNP
(G.DetCN (reflexiveDet G.NumSg) (useN (mkNoun "buru"))) ;
vpObjects : ResEus.VerbPhrase -> Str = \vp ->
vp.adv ++ vp.iobj.s ++ vp.dobj.s ! Pos ++ vp.comp ! Hau ;
gerundStr : ResEus.VerbPhrase -> Str = \vp -> vpObjects vp ++ vp.nstem ;
} ;
-1
View File
@@ -9,7 +9,6 @@ concrete GrammarEus of Grammar =
RelativeEus,
ConjunctionEus,
PhraseEus,
NamesEus,
TextX,
StructuralEus,
IdiomEus,
-4
View File
@@ -21,10 +21,6 @@ concrete IdiomEus of Idiom = CatEus ** open Prelude, ResEus, VerbEus in {
ExistNP np = let vp = UseComp (CompNP np)
in clFromVP empty_NP vp ;
ExistNPAdv np adv =
let vp = AdvVP (UseComp (CompNP np)) adv
in clFromVP empty_NP vp ;
{- ExistIP : IP -> QCl ; -- which houses are there
-- 7/12/2012 generalizations of these
+5 -5
View File
@@ -91,7 +91,7 @@ lin die_V = izanV "hil" ; -- | mkV "zendu" ; --Apertium
lin dig_V = mkV "zulatu" ; --Apertium
lin dirty_A = mkA "likits" ; --| mkA "zikin" ; --Apertium
lin distance_N3 = mkN3 (mkN "distantzia") toPrep S.from_Prep ; --Apertium
lin do_V2 = mkV2 egin_V ;
lin do_V2 = lin V2 egin_V ;
lin doctor_N = mkN "mediku" animate ; --| mkN "doktore" ; --Apertium
lin dog_N = mkN "txakur" ;
lin door_N = mkN "ate" ;
@@ -120,7 +120,7 @@ lin fall_V = mkV "amildu" ; -- | mkV "erori" ; --Apertium
lin far_Adv = mkAdv "urrun" ;
lin fat_N = mkN "gantz" ; --| mkN "koipe" ; --Apertium
lin father_N2 = mkN2 (mkN "aita" animate) ;
lin fear_V2 = mkV2 (ukanV "beldur") ; -- beldur nauzu `you are afraid of me'
lin fear_V2 = ukanV "beldur" ; -- beldur nauzu `you are afraid of me'
lin fear_VS = izanV "beldur" ; -- beldur naiz [ez datorrela] `I'm afraid s/he won't come'
lin feather_N = mkN "luma" ; --Apertium
lin fight_V2 = mkV2 "borrokatu" ; --Apertium
@@ -224,7 +224,7 @@ lin long_A = mkA "luze" ; --Apertium
lin lose_V2 = mkV2 "galdu" ; --Apertium
lin louse_N = mkN "zorri" ; --Apertium
lin love_N = mkN "maitasun" ; -- | mkN "amodio" ; --Apertium
lin love_V2 = mkV2 (ukanV "maite") ;
lin love_V2 = ukanV "maite" ;
lin man_N = mkN "gizon" animate ; --Apertium
lin married_A2 = mkA2 "ezkondu" (mkPrep [] sociative) ;
lin meat_N = mkN "haragi" ; -- | mkN "mami" ; --Apertium
@@ -336,7 +336,7 @@ lin snake_N = mkN "suge" ; --Apertium
lin snow_N = mkN "elur" ; --Apertium
lin sock_N = mkN "galtzetin" ; --Apertium
lin song_N = mkN "abesti" ; --| mkN "kanta" | mkN "kantu" ; --Apertium
lin speak_V2 = mkV2 (mkV "hitz" egin_V) ; --Apertium
lin speak_V2 = lin V2 (mkV "hitz" egin_V) ; --Apertium
lin spit_V = mkV "txistua bota" ; --Apertium
lin split_V2 = mkV2 "pitzatu" ; --| mkV2 "zatitu" ; --Apertium
lin squeeze_V2 = mkV2 "estutu" ; --Apertium
@@ -430,7 +430,7 @@ oper
ibili_V : V = lin V (R.syntVerbDa "ibili" R.Ibili) ;
jakin_V2 : V2 = lin V2 (R.syntVerbDu "jakin" R.Jakin ** {c2 = R.noPost}) ;
jakin_V2 : V2 = lin V2 (R.syntVerbDu "jakin" R.Jakin) ;
joan_V : V = lin V (R.syntVerbDa "joan" R.Joan) ;
}
-25
View File
@@ -1,25 +0,0 @@
concrete NamesEus of Names = CatEus ** open ResEus, Prelude in {
lin
GivenName = nameNP ;
MaleSurname = nameNP ;
FemaleSurname = nameNP ;
PlSurname sn = (nameNP sn) ** {agr = Hauek} ;
FullName gn sn = nameNP (sn ** {s = gn.s ++ sn.s ; nbr = Sg}) ;
UseLN, PlainLN = nameNP ;
InLN ln = {s = (nameNP ln).s ! Ine} ;
AdjLN ap ln = ln ** {s = ap.s ! Hau ++ ln.s} ;
oper
nameNP : PNoun -> NounPhrase = \pn -> {
s = \\c => pn.s ++ artIndef ! c ! pn.ph ;
stem = pn.s ;
agr = case pn.nbr of {Sg => Hau ; Pl => Hauek} ;
anim = pn.anim ;
isDef = True
} ;
}
+2 -14
View File
@@ -127,18 +127,6 @@ concrete NounEus of Noun = CatEus ** open ResEus, Prelude in {
NumDigits dig = { s = dig.s ! NCard ; n = dig.n } ;
NumDecimal dec = { s = dec.s ! NCard ; n = dec.n } ;
QuantityNP dec mu = {
s = \\_ => case mu.isPre of {
True => mu.s ++ dec.s ! NCard ;
False => dec.s ! NCard ++ mu.s
} ;
stem = case mu.isPre of {
True => mu.s ++ dec.s ! NCard ;
False => dec.s ! NCard ++ mu.s
} ;
agr = Hauek ; anim = Inan ; isDef = True
} ;
-- : Numeral -> Card ;
NumNumeral num = num ;
@@ -204,9 +192,9 @@ concrete NounEus of Noun = CatEus ** open ResEus, Prelude in {
let a : Str = artIndef ! Abs ! cn.ph ; --`a' for FinalA, [] for other
result : {s : Agr => Str ; ph : Phono} =
case ap.typ of {
Ko => { s = \\agr => ap.s ! agr ++ cn.s ! agr ;
Ko => { s = \\agr => ap.s ! Hau ++ cn.s ! agr ;
ph = cn.ph } ;
Bare => { s = \\agr => cn.s ! agr ++ a ++ ap.s ! agr ;
Bare => { s = \\agr => cn.s ! agr ++ a ++ ap.s ! Hau ;
ph = ap.ph }
} ;
in cn ** { s = result.s ;
-16
View File
@@ -73,7 +73,6 @@ lin pot2plus d e =
n = Pl ;
isHundred = True } ;
lin pot2as3 n = n ;
lin pot21 = {s = "ehun" ; n = Pl ; isHundred = True} ;
lin pot3 n =
{s = table {Sg => [] ; Pl => n.s } ! n.n ++ "mila" ;
n = n.n } ;
@@ -85,21 +84,6 @@ lin pot3plus n m =
{ s = table {Sg => [] ; Pl => n.s } ! n.n ++ "mila" ++ ta ++ m.s ;
n = n.n } ;
lin pot31 = {s = "mila" ; n = Pl} ;
lin pot3as4 n = n ;
lin pot3decimal n = {s = n.s ! NCard ++ "mila" ; n = Pl} ;
lin pot41 = {s = "milioi bat" ; n = Pl} ;
lin pot4 n = {s = n.s ++ "milioi" ; n = Pl} ;
lin pot4plus n m = {s = n.s ++ "milioi" ++ m.s ; n = Pl} ;
lin pot4as5 n = n ;
lin pot4decimal n = {s = n.s ! NCard ++ "milioi" ; n = Pl} ;
lin pot51 = {s = "mila milioi" ; n = Pl} ;
lin pot5 n = {s = n.s ++ "mila milioi" ; n = Pl} ;
lin pot5plus n m = {s = n.s ++ "mila milioi" ++ m.s ; n = Pl} ;
lin pot5decimal n = {s = n.s ! NCard ++ "mila milioi" ; n = Pl} ;
----------------------------------------------------------------------------
lincat Dig = TDigit ;
+10 -40
View File
@@ -41,22 +41,6 @@ oper
mkN : Str -> Bizi -> N = \s,bizi -> lin N (mkNoun s ** { anim = bizi }) ;
} ;
-- Keep the noun's lexical final -a inside compounds with a following
-- adjective or adverb, but let case and number suffixes attach at the
-- compound's right edge: bonba atomiko+a, bonba atomiko+ek, ...
compoundN = overload {
compoundN : N -> A -> N = \noun,adj ->
lin N {
s = noun.s ++ artIndef ! Abs ! noun.ph ++ adj.s ! AF Posit ;
ph = adj.ph ;
anim = noun.anim
} ;
compoundN : N -> Str -> N = \noun,adv ->
let compound = mkNoun (noun.s ++ artIndef ! Abs ! noun.ph ++ adv)
in lin N (compound ** {anim = noun.anim}) ;
} ;
mkPN : Str -> PN = \s -> lin PN (mkPNoun s) ;
mkLN : Str -> LN = \s -> lin LN (mkPNoun s) ;
mkGN : Str -> GN = \s -> lin GN (mkPNoun s) ;
@@ -104,43 +88,28 @@ oper
-- For verbs with non-inflecting participle, see izanV, egonV and ukanV.
mkV2 = overload {
mkV2 : Str -> V2 = \s -> lin V2 (mkVerbDu s ** {c2 = noPost}) ;
mkV2 : Str -> V2 = \s -> lin V2 (mkVerbDu s) ;
mkV2 : Str -> AuxType -> V2 = \s,val -> lin V2 (mkVerbDa s ** {val = val ; c2 = noPost}) ;
mkV2 : Str -> AuxType -> V2 = \s,val -> lin V2 (mkVerbDa s ** { val = val }) ;
mkV2 : Str -> V -> V2 = \lo,egin ->
lin V2 (egin ** { prc = \\t => lo ++ egin.prc ! t ;
val = Du Ukan ;
c2 = noPost}) ;
val = Du Ukan }) ;
-- A V2 always selects the transitive auxiliary. Keeping the auxiliary
-- inherited from mkV made the very common `mkV2 (mkV "...")` idiom
-- produce absolutive subjects and forms of izan (e.g. *hura ... da).
mkV2 : V -> V2 = \x -> lin V2 (x ** {val = Du Ukan ; c2 = noPost}) ;
mkV2 : V -> Prep -> V2 = \v,p ->
lin V2 (v ** {val = Du Ukan ; c2 = p}) ;
mkV2 : V -> V2 = \x -> lin V2 x ;
} ;
mkVA : Str -> VA = \s -> lin VA (mkVerbDa s) ; -- Nor
mkV2A : Str -> V2A = \s -> lin V2A (mkVerbDu s ** {c2 = noPost}) ; -- Nor-nork
mkV2A : Str -> V2A = \s -> lin V2A (mkVerbDu s) ; -- Nor-nork
mkVQ : Str -> VQ = \s -> lin VQ (mkVerbDu s) ; -- Nor-nork
mkVS : Str -> VS = \s -> lin VS (mkVerbDu s) ; -- Nor-nork
mkVV : V -> VV = \v -> lin VV v ;
mkV2V : Str -> V2V = \s -> lin V2V (mkVerbDio s ** {c2 = noPost}) ; -- ??? TODO check valency
mkV2S : Str -> V2S = \s -> lin V2S (mkVerbDio s ** {c2 = noPost}) ; -- Nor-nori-nork: (mutilari) (neska datorrela) erantzun diot
mkV2Q : Str -> V2Q = \s -> lin V2Q (mkVerbDio s ** {c2 = noPost}) ; -- Nor-nori-nork: (mutilari) (neska datorren) galdetu diot
mkV3 = overload {
mkV3 : Str -> V3 = \s ->
lin V3 (mkVerbDio s ** {c2 = noPost ; c3 = mkPost [] Dat False}) ;
mkV3 : V -> Prep -> V3 = \v,p3 ->
lin V3 (v ** {val = Dio ; c2 = noPost ; c3 = p3}) ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p2,p3 ->
lin V3 (v ** {val = Dio ; c2 = p2 ; c3 = p3}) ;
} ; -- Nor-nori-nork: (mutilari) (garagardoa) edan diot
mkV2V : Str -> V2V = \s -> lin V2V (mkVerbDio s) ; -- ??? TODO check valency
mkV2S : Str -> V2S = \s -> lin V2S (mkVerbDio s) ; -- Nor-nori-nork: (mutilari) (neska datorrela) erantzun diot
mkV2Q : Str -> V2Q = \s -> lin V2Q (mkVerbDio s) ; -- Nor-nori-nork: (mutilari) (neska datorren) galdetu diot
mkV3 : Str -> V3 = \s -> lin V3 (mkVerbDio s) ; -- Nor-nori-nork: (mutilari) (garagardoa) edan diot
-----
@@ -225,3 +194,4 @@ oper
--------------------------------------------------------------------------------
}
+1 -1
View File
@@ -16,7 +16,7 @@ concrete QuestionEus of Question = CatEus ** open ResEus, (VE=VerbEus), (NE=Noun
-- : IAdv -> Cl -> QCl ; -- why does John walk
-- nola (how), zerbait (how much), noiz (when), non (where), zergatik (why)
QuestIAdv iadv cl = cl **
QuestIAdv iadv cl =
{ s = \\t,a,p,c =>
let sent = cl.s ! t ! a ! p ! Indir ; -- no "al" with a wh-word!
in { beforeAux = iadv.s ++ sent.beforeAux ;
+4 -37
View File
@@ -298,9 +298,6 @@ oper
val : AuxType --TODO change name of the field
} ;
Verb2 : Type = Verb ** { c2 : Postposizio } ;
Verb3 : Type = Verb2 ** { c3 : Postposizio } ;
mkVerbDa : Str -> Verb = \s -> { val = Da Izan ;
nstem = mkNStem s ;
prc = mkPrc s } ;
@@ -416,33 +413,9 @@ oper
{ post = noPost ;
missing = missingArg } ;
slashDObj : Verb2 -> VPSlash = \v ->
case v.c2.complCase of {
Abs => slashV MissingDObj v ;
_ => (slashV MissingAdv v) ** {post = v.c2}
} ; --works for V2, V2V, V2S, V2Q, V2A.
slashDObj : Verb -> VPSlash = slashV MissingDObj ; --works for V2, V2V, V2S, V2Q, V2A.
slashIObj : Verb3 -> VPSlash = \v ->
case v.c3.complCase of {
Dat => slashV MissingIObj v ;
_ => (slashV MissingAdv v) ** {post = v.c3}
} ; --only Slash3V3
slashDObjVP : Verb2 -> VerbPhrase -> VPSlash = \v,vp ->
vp ** { post = v.c2 ;
missing = case v.c2.complCase of {
Acc => MissingDObj ;
_ => MissingAdv
}
} ;
slashIObjVP : Verb3 -> VerbPhrase -> VPSlash = \v,vp ->
vp ** { post = v.c3 ;
missing = case v.c3.complCase of {
Acc => MissingIObj ;
_ => MissingAdv
}
} ;
slashIObj : Verb -> VPSlash = slashV MissingIObj ; --only Slash3V3
-----
-- Modify existing VPs
@@ -489,11 +462,7 @@ oper
linSSub : Sentence -> Str -> Str = \sent,subj ->
sent.beforeAux ++ glue sent.aux.stem subj ++ sent.afterAux ;
Clause : Type = {
s : Tense => Anteriority => Polarity => ClType => Sentence ;
subj : NounPhrase ;
vp : VerbPhrase
} ;
Clause : Type = { s : Tense => Anteriority => Polarity => ClType => Sentence } ;
linCl : Clause -> Str = \clause ->
linS (clause.s ! Pres ! Simul ! Pos ! Stat) ;
@@ -529,9 +498,7 @@ oper
++ vp.dobj.s ! pol -- garagardoa / garagardorik
++ vp.comp ! subj.agr ; -- etorriko dela / nor den / handi(ak) / ...
prc = verb.prc ;
aux = verb.aux ! subj.agr } ;
subj = subj ;
vp = vp
aux = verb.aux ! subj.agr }
} ;
verbformPeriphrastic : Tense -> Anteriority -> VerbPhrase -> {aux : Agr => VForms ; prc : Str} = \t,a,vp ->
+1 -4
View File
@@ -21,8 +21,7 @@ lin
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
AdvSlash cls adv = cls ** insertAdv adv cls ;
SlashPrep cl prep = mkClSlash cl.subj
(cl.vp ** {post = prep ; missing = MissingAdv}) ;
-- SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks
-- : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves
-- SlashVS np vs ss = {} ;
@@ -38,8 +37,6 @@ lin
-- : VP -> Imp ;
ImpVP vp = { s = linVPPrc vp ! Hau } ; --TODO: check negation
AdvImp adv imp = {s = adv.s ++ imp.s} ;
--2 Embedded sentences
+1 -1
View File
@@ -173,7 +173,7 @@ lin yes_Utt = ss "bai" ;
-------
-- Verb
lin have_V2 = R.syntVerbDu "eduki" R.Eduki ** {c2 = R.noPost} ;
lin have_V2 = R.syntVerbDu "eduki" R.Eduki ;
lin can8know_VV = ukanV "ahal" ; -- can (capacity)
lin can_VV = ukanV "ahal" ; -- can (possibility)
+8 -4
View File
@@ -39,12 +39,15 @@ lin
-- : V3 -> NP -> VPSlash ; -- give it (to her)
Slash2V3 v3 npNor =
slashIObjVP v3 (complSlash (slashDObj v3) npNor) ;
Slash2V3 v3 npNori = slashDObj v3 **
{ iobj = { s = npNori.s ! Dat ;
agr = npNori.agr }
} ;
-- : V3 -> NP -> VPSlash ; -- give (it) to her
Slash3V3 v3 npNori =
slashDObjVP v3 (complSlash (slashIObj v3) npNori) ;
Slash3V3 v3 npNor = slashIObj v3 **
{ dobj = npNor ** { s = mkDObj npNor }
} ;
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
@@ -168,3 +171,4 @@ oper
}
+1 -11
View File
@@ -1,14 +1,4 @@
concrete AdjectiveBel of Adjective = CatBel ** open ResBel in {
concrete AdjectiveBel of Adjective = CatBel ** {
lin
PositA a = a ;
ComparA a np = {s = \\c,gn => "больш" ++ a.s ! c ! gn ++ "за" ++ np.s ! Acc; adv = "больш" ++ a.adv ++ "за" ++ np.s ! Acc; post = a.post} ;
ComplA2 a np = {s = \\c,gn => a.s ! c ! gn ++ prepNP a.c2 np; adv = a.adv ++ prepNP a.c2 np; post = a.post} ;
ReflA2 a = {s = \\c,gn => a.s ! c ! gn ++ "да сябе"; adv = a.adv ++ "да сябе"; post = a.post} ;
UseA2 a = a ;
UseComparA a = {s = \\c,gn => "больш" ++ a.s ! c ! gn; adv = "больш" ++ a.adv; post = a.post} ;
CAdvAP cadv ap np = {s = \\c,gn => cadv.s ++ ap.s ! c ! gn ++ cadv.p ++ np.s ! Nom; adv = cadv.s ++ ap.adv ++ cadv.p ++ np.s ! Nom; post = ap.post} ;
AdjOrd ord = ord ;
SentAP ap sc = {s = \\c,gn => ap.s ! c ! gn ++ sc.s; adv = ap.adv ++ sc.s; post = ap.post} ;
AdAP ada ap = {s = \\c,gn => ada.s ++ ap.s ! c ! gn; adv = ada.s ++ ap.adv; post = ap.post} ;
AdvAP ap adv = {s = \\c,gn => ap.s ! c ! gn ++ adv.s; adv = ap.adv ++ adv.s; post = ap.post} ;
}
-13
View File
@@ -1,13 +0,0 @@
concrete AdverbBel of Adverb = CatBel ** open ResBel in {
lin
PositAdvAdj a = {s = a.adv} ;
PrepNP prep np = {s = prepNP prep np} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.adv ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.adv ++ cadv.p ++ s.s} ;
AdAdv ada adv = {s = ada.s ++ adv.s} ;
PositAdAAdj a = {s = a.adv} ;
SubjS subj s = {s = subj.s ++ s.s} ;
AdnCAdv cadv = {s = cadv.s} ;
}
+1 -2
View File
@@ -1,5 +1,4 @@
concrete AllBel of AllBelAbs =
LangBel,
ExtendBel
LangBel
**
{} ;
+1 -2
View File
@@ -1,4 +1,3 @@
abstract AllBelAbs =
Lang,
Extend
Lang
** {}
+16 -63
View File
@@ -1,68 +1,21 @@
concrete CatBel of Cat = CommonX ** open ResBel, (R = ParamX) in {
concrete CatBel of Cat = CommonX ** open ResBel in {
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 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} ;
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} ;
lincat LN,SN,GN,PN = {s : Str} ;
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; poss : Case => Gender => Number => 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; pa : Adj} ;
V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl; pa : Adj} ;
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 ;
linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
}

Some files were not shown because too many files have changed in this diff Show More