more updates from Codex

This commit is contained in:
Krasimir Angelov
2026-09-18 10:30:53 +02:00
parent 4bf10ff93a
commit bb5372b159
17 changed files with 626 additions and 170 deletions
+8 -8
View File
@@ -2,31 +2,31 @@ concrete AdjectiveFao of Adjective = CatFao ** open ResFao in {
lin
PositA a = a ;
ComparA a np = {
s = \\g,n,c => "meir" ++ a.s ! g ! n ! c ++ "enn" ++ np.s ! Nom
s = \\af,g,n,c => "meir" ++ a.s ! af ! g ! n ! c ++ "enn" ++ np.s ! Nom
} ;
ComplA2 a np = {
s = \\g,n,c => a.s ! g ! n ! c ++ a.c2.s ++ np.s ! a.c2.c
s = \\af,g,n,c => a.s ! af ! g ! n ! c ++ a.c2.s ++ np.s ! a.c2.c
} ;
ReflA2 a = {
s = \\g,n,c => a.s ! g ! n ! c ++ a.c2.s ++ "seg"
s = \\af,g,n,c => a.s ! af ! g ! n ! c ++ a.c2.s ++ "seg"
} ;
UseA2 a = a ;
UseComparA a = {
s = \\g,n,c => "meir" ++ a.s ! g ! n ! c
s = \\af,g,n,c => "meir" ++ a.s ! af ! g ! n ! c
} ;
CAdvAP cadv ap np = {
s = \\g,n,c => cadv.s ++ ap.s ! g ! n ! c ++ cadv.p ++ np.s ! Nom
s = \\af,g,n,c => cadv.s ++ ap.s ! af ! g ! n ! c ++ cadv.p ++ np.s ! Nom
} ;
AdjOrd ord = {
s = ord.s
} ;
SentAP ap sc = {
s = \\g,n,c => ap.s ! g ! n ! c ++ sc.s
s = \\af,g,n,c => ap.s ! af ! g ! n ! c ++ sc.s
} ;
AdAP ada ap = {
s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c
s = \\af,g,n,c => ada.s ++ ap.s ! af ! g ! n ! c
} ;
AdvAP ap adv = {
s = \\g,n,c => ap.s ! g ! n ! c ++ adv.s
s = \\af,g,n,c => ap.s ! af ! g ! n ! c ++ adv.s
} ;
}
+4 -4
View File
@@ -1,11 +1,11 @@
concrete AdverbFao of Adverb = CatFao ** open Prelude,ResFao in {
lin
PositAdvAdj a = {s = a.s ! Neuter ! Sg ! Nom} ;
PositAdvAdj a = {s = a.s ! Strong ! Neuter ! Sg ! Nom} ;
PrepNP p np = {s = p.s ++ np.s ! p.c} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Neuter ! Sg ! Nom ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Neuter ! Sg ! Nom ++ cadv.p ++ s.s} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Strong ! Neuter ! Sg ! Nom ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Strong ! Neuter ! Sg ! Nom ++ cadv.p ++ s.s} ;
AdAdv ada adv = {s = ada.s ++ adv.s} ;
PositAdAAdj a = {s = a.s ! Neuter ! Sg ! Nom} ;
PositAdAAdj a = {s = a.s ! Strong ! Neuter ! Sg ! Nom} ;
SubjS subj s = {s = subj.s ++ s.s} ;
AdnCAdv cadv = {s = cadv.s} ;
}
+14 -6
View File
@@ -18,9 +18,17 @@ lincat SSlash = {s : Str ; c2 : Compl} ;
lincat Imp = {s : Polarity => Number => Str} ;
lincat Prep = Compl ;
lincat CN = CommonNoun ;
lincat NP, Pron = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
lincat NP = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
lincat Pron = {
s : Case => Str ;
poss : Gender => Number => Case => Str ;
g : Gender ; n : Number ; p : Person
} ;
lincat QS = {s : Str} ;
lincat QCl = {s : Tense => Polarity => Str} ;
lincat QCl = {
s,anterior : Tense => Polarity => Str ;
future,conditional : Polarity => Str
} ;
lincat IP = {s : Str ; n : Number} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str ; n : Number} ;
@@ -29,14 +37,14 @@ lincat RCl = {s : Tense => Polarity => Gender => PersNum => Str} ;
lincat RS = {s : Gender => PersNum => Str} ;
lincat RP = {s : Str} ;
lincat AP = AdjPhrase ;
lincat Det = {s : Gender => Case => Str ; n : Number ; sp : Species} ;
lincat Det = {s : Gender => Case => Str ; n : Number ; sp : Species ; d : Declension} ;
lincat Predet = {s : Str} ;
lincat Quant = {s : Bool => Gender => Number => Case => Str; sp : Species} ;
lincat Quant = {s : Bool => Gender => Number => Case => Str; sp : Species ; d : Declension} ;
lincat Num = {s : Gender => Case => Str ; n : Number ; hasCard : Bool} ;
lincat Card = {s : Gender => Case => Str ; n : Number} ;
lincat ACard = {s : Str} ;
lincat Ord = {s : Gender => Number => Case => Str} ;
lincat DAP = {s : Gender => Case => Str ; n : Number ; sp : Species} ;
lincat Ord = {s : Declension => Gender => Number => Case => Str} ;
lincat DAP = {s : Gender => Case => Str ; n : Number ; sp : Species ; d : Declension} ;
lincat S = {s : Str} ;
lincat Numeral = {
s : CardOrd => Gender => Case => Str ;
+20 -10
View File
@@ -5,9 +5,9 @@ lincat
[RS] = {s1,s2 : Gender => PersNum => Str} ;
[Adv], [AdV], [IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str ; g : Gender ; n : Number ; p : Person} ;
[AP] = {s1,s2 : Gender => Number => Case => Str} ;
[CN] = {s1,s2 : Species => Number => Case => Str ; g : Gender} ;
[DAP] = {s1,s2 : Gender => Case => Str ; n : Number ; sp : Species} ;
[AP] = {s1,s2 : Declension => Gender => Number => Case => Str} ;
[CN] = {s1,s2 : Species => Number => Case => Str ; p1,p2 : Number => Case => Str ; g : Gender} ;
[DAP] = {s1,s2 : Gender => Case => Str ; n : Number ; sp : Species ; d : Declension} ;
lin
ConjS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
@@ -21,15 +21,19 @@ lin
n = Pl ;
p = P3
} ;
ConjAP conj xs = {s = \\g,n,c => xs.s1 ! g ! n ! c ++ conj.s ++ xs.s2 ! g ! n ! c} ;
ConjAP conj xs = {
s = \\af,g,n,c => xs.s1 ! af ! g ! n ! c ++ conj.s ++ xs.s2 ! af ! g ! n ! c
} ;
ConjCN conj xs = {
s = \\sp,n,c => xs.s1 ! sp ! n ! c ++ conj.s ++ xs.s2 ! sp ! n ! c ;
p = \\n,c => xs.p1 ! n ! c ++ conj.s ++ xs.p2 ! n ! c ;
g = xs.g
} ;
ConjDet conj xs = {
s = \\g,c => xs.s1 ! g ! c ++ conj.s ++ xs.s2 ! g ! c ;
n = xs.n ;
sp = xs.sp
sp = xs.sp ;
d = xs.d
} ;
BaseS x y = {s1 = x.s ; s2 = y.s} ;
@@ -45,9 +49,15 @@ lin
BaseNP x y = {s1 = x.s ; s2 = y.s ; g = x.g ; n = Pl ; p = P3} ;
ConsNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c ; s2 = xs.s2 ; g = xs.g ; n = Pl ; p = P3} ;
BaseAP x y = {s1 = x.s ; s2 = y.s} ;
ConsAP x xs = {s1 = \\g,n,c => x.s ! g ! n ! c ++ "," ++ xs.s1 ! g ! n ! c ; s2 = xs.s2} ;
BaseCN x y = {s1 = x.s ; s2 = y.s ; g = x.g} ;
ConsCN x xs = {s1 = \\sp,n,c => x.s ! sp ! n ! c ++ "," ++ xs.s1 ! sp ! n ! c ; s2 = xs.s2 ; g = xs.g} ;
BaseDAP x y = {s1 = x.s ; s2 = y.s ; n = y.n ; sp = y.sp} ;
ConsDAP x xs = {s1 = \\g,c => x.s ! g ! c ++ "," ++ xs.s1 ! g ! c ; s2 = xs.s2 ; n = xs.n ; sp = xs.sp} ;
ConsAP x xs = {
s1 = \\af,g,n,c => x.s ! af ! g ! n ! c ++ "," ++ xs.s1 ! af ! g ! n ! c ;
s2 = xs.s2
} ;
BaseCN x y = {s1 = x.s ; s2 = y.s ; p1 = x.p ; p2 = y.p ; g = x.g} ;
ConsCN x xs = {
s1 = \\sp,n,c => x.s ! sp ! n ! c ++ "," ++ xs.s1 ! sp ! n ! c ; s2 = xs.s2 ;
p1 = \\n,c => x.p ! n ! c ++ "," ++ xs.p1 ! n ! c ; p2 = xs.p2 ; g = xs.g
} ;
BaseDAP x y = {s1 = x.s ; s2 = y.s ; n = y.n ; sp = y.sp ; d = y.d} ;
ConsDAP x xs = {s1 = \\g,c => x.s ! g ! c ++ "," ++ xs.s1 ! g ! c ; s2 = xs.s2 ; n = xs.n ; sp = xs.sp ; d = xs.d} ;
}
+42 -9
View File
@@ -14,34 +14,64 @@ lin
have_name_Cl np name = {
Converb = np.s ! Nom ++ "eitur" ++ name.s ! Nom ;
Indicative = \\t,pol => np.s ! Nom ++ "eitur" ++ negStr pol ++ name.s ! Nom ;
Interrogative = \\t,pol => "eitur" ++ np.s ! Nom ++ negStr pol ++ name.s ! Nom ;
Future = \\pol => np.s ! Nom ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "eita" ++ name.s ! Nom ;
FutureInterrogative = \\pol => futureAux ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "eita" ++ name.s ! Nom ;
Conditional = \\pol => np.s ! Nom ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "eita" ++ name.s ! Nom ;
ConditionalInterrogative = \\pol => conditionalAux ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "eita" ++ name.s ! Nom ;
Anterior = \\t,pol => np.s ! Nom ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "itið" ++ name.s ! Nom ;
AnteriorInterrogative = \\t,pol => perfectAux ! t ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "itið" ++ name.s ! Nom ;
Nonfinite = np.s ! Nom ++ "eita" ++ name.s ! Nom ;
Participle = \\_ => np.s ! Nom ++ "itið" ++ name.s ! Nom
} ;
married_Cl np spouse = {
Converb = np.s ! Nom ++ "er giftur við" ++ spouse.s ! Dat ;
Indicative = \\t,pol => np.s ! Nom ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ "giftur við" ++ spouse.s ! Dat ;
Interrogative = \\t,pol => copula ! t ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "giftur við" ++ spouse.s ! Dat ;
Future = \\pol => np.s ! Nom ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "vera giftur við" ++ spouse.s ! Dat ;
FutureInterrogative = \\pol => futureAux ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "vera giftur við" ++ spouse.s ! Dat ;
Conditional = \\pol => np.s ! Nom ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "vera giftur við" ++ spouse.s ! Dat ;
ConditionalInterrogative = \\pol => conditionalAux ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "vera giftur við" ++ spouse.s ! Dat ;
Anterior = \\t,pol => np.s ! Nom ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "verið giftur við" ++ spouse.s ! Dat ;
AnteriorInterrogative = \\t,pol => perfectAux ! t ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "verið giftur við" ++ spouse.s ! Dat ;
Nonfinite = np.s ! Nom ++ "vera giftur við" ++ spouse.s ! Dat ;
Participle = \\_ => np.s ! Nom ++ "verið giftur við" ++ spouse.s ! Dat
} ;
what_name_QCl np = {
s = \\t,pol => "hvat" ++ "eitur" ++ np.s ! Nom
s = \\t,pol => "hvat" ++ "eitur" ++ np.s ! Nom ;
anterior = \\t,pol => "hvat" ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "itið" ++ np.s ! Nom ;
future = \\pol => "hvat" ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "eita" ++ np.s ! Nom ;
conditional = \\pol => "hvat" ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "eita" ++ np.s ! Nom
} ;
how_old_QCl np = {
s = \\t,pol => "hvussu gamal" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
s = \\t,pol => "hvussu gamal" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom ;
anterior = \\t,pol => "hvussu gamal" ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "verið" ++ np.s ! Nom ;
future = \\pol => "hvussu gamal" ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom ;
conditional = \\pol => "hvussu gamal" ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom
} ;
how_far_QCl np = {
s = \\t,pol => "hvussu langt burtur" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
s = \\t,pol => "hvussu langt burtur" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom ;
anterior = \\t,pol => "hvussu langt burtur" ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "verið" ++ np.s ! Nom ;
future = \\pol => "hvussu langt burtur" ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom ;
conditional = \\pol => "hvussu langt burtur" ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom
} ;
weather_adjCl ap = {
Converb = "tað er" ++ ap.s ! Neuter ! Sg ! Nom ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ ap.s ! Neuter ! Sg ! Nom ;
Nonfinite = "vera" ++ ap.s ! Neuter ! Sg ! Nom ;
Participle = \\_ => "ver" ++ ap.s ! Neuter ! Sg ! Nom
Converb = "tað er" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ ap.s ! Strong ! Neuter ! Sg ! Nom ;
Interrogative = \\t,pol => copula ! t ! PSg P3 ++ "tað" ++ negStr pol ++ ap.s ! Strong ! Neuter ! Sg ! Nom ;
Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ "vera" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ;
FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ;
Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ "vera" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ;
ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ;
Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ "verið" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ;
AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ "verið" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ;
Nonfinite = "vera" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ;
Participle = \\_ => "verið" ++ ap.s ! Strong ! Neuter ! Sg ! Nom
} ;
is_right_VP = beVP "rættur" ;
is_wrong_VP = beVP "skeivur" ;
n_units_AP card cn a = {
s = \\g,n,c => card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ a.s ! g ! n ! c
s = \\af,g,n,c => card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ a.s ! af ! g ! n ! c
} ;
n_units_of_NP card cn np = mkNP (card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ "av" ++ np.s ! Dat) np.g np.n np.p ;
n_unit_CN card unit cn = mkCN (card.s ! unit.g ! Nom ++ unit.s ! Indef ! Sg ! Nom ++ cn.s ! Indef ! Sg ! Nom) cn.g ;
@@ -162,8 +192,11 @@ lin
oper
beVP : Str -> VerbPhrase = \ap -> {
Converb = copula ! Pres ! PPl ++ ap ;
Converb = "verið" ++ ap ;
Imperative = \\n => case n of {Sg => "ver" ; Pl => "verið"} ++ ap ;
Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ++ ap ;
Finite = copula ;
Remainder = \\pol,_,_ => negStr pol ++ ap ;
Nonfinite = "vera" ++ ap ;
Participle = \\_ => "verið" ++ ap
} ;
+8 -8
View File
@@ -36,15 +36,15 @@ lin
s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neuter") ++
tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++
th "Nom" ++ td (x.s ! Masc ! Sg ! Nom) ++ td (x.s ! Fem ! Sg ! Nom) ++ td (x.s ! Neuter ! Sg ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Sg ! Acc) ++ td (x.s ! Fem ! Sg ! Acc) ++ td (x.s ! Neuter ! Sg ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Sg ! Dat) ++ td (x.s ! Fem ! Sg ! Dat) ++ td (x.s ! Neuter ! Sg ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Sg ! Gen) ++ td (x.s ! Fem ! Sg ! Gen) ++ td (x.s ! Neuter ! Sg ! Gen)) ++
th "Nom" ++ td (x.s ! Strong ! Masc ! Sg ! Nom) ++ td (x.s ! Strong ! Fem ! Sg ! Nom) ++ td (x.s ! Strong ! Neuter ! Sg ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Strong ! Masc ! Sg ! Acc) ++ td (x.s ! Strong ! Fem ! Sg ! Acc) ++ td (x.s ! Strong ! Neuter ! Sg ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Strong ! Masc ! Sg ! Dat) ++ td (x.s ! Strong ! Fem ! Sg ! Dat) ++ td (x.s ! Strong ! Neuter ! Sg ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Strong ! Masc ! Sg ! Gen) ++ td (x.s ! Strong ! Fem ! Sg ! Gen) ++ td (x.s ! Strong ! Neuter ! Sg ! Gen)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Pl" ++
th "Nom" ++ td (x.s ! Masc ! Pl ! Nom) ++ td (x.s ! Fem ! Pl ! Nom) ++ td (x.s ! Neuter ! Pl ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Pl ! Acc) ++ td (x.s ! Fem ! Pl ! Acc) ++ td (x.s ! Neuter ! Pl ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Pl ! Dat) ++ td (x.s ! Fem ! Pl ! Dat) ++ td (x.s ! Neuter ! Pl ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Pl ! Gen) ++ td (x.s ! Fem ! Pl ! Gen) ++ td (x.s ! Neuter ! Pl ! Gen))) ;
th "Nom" ++ td (x.s ! Strong ! Masc ! Pl ! Nom) ++ td (x.s ! Strong ! Fem ! Pl ! Nom) ++ td (x.s ! Strong ! Neuter ! Pl ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Strong ! Masc ! Pl ! Acc) ++ td (x.s ! Strong ! Fem ! Pl ! Acc) ++ td (x.s ! Strong ! Neuter ! Pl ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Strong ! Masc ! Pl ! Dat) ++ td (x.s ! Strong ! Fem ! Pl ! Dat) ++ td (x.s ! Strong ! Neuter ! Pl ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Strong ! Masc ! Pl ! Gen) ++ td (x.s ! Strong ! Fem ! Pl ! Gen) ++ td (x.s ! Strong ! Neuter ! Pl ! Gen))) ;
s3=[]
} ;
lin
+54 -2
View File
@@ -4,48 +4,99 @@ lin
ImpersCl vp = {
Converb = "tað" ++ vp.Converb ;
Indicative = \\t,pol => "tað" ++ vp.Indicative ! t ! pol ! Neuter ! PSg P3 ;
Interrogative = \\t,pol => vp.Finite ! t ! PSg P3 ++ "tað" ++ vp.Remainder ! pol ! Neuter ! PSg P3 ;
Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ;
FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ vp.Nonfinite ;
Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ;
ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ vp.Nonfinite ;
Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ vp.Converb ;
AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ vp.Converb ;
Nonfinite = "tað" ++ vp.Nonfinite ;
Participle = \\t => "tað" ++ vp.Participle ! t
} ;
GenericCl vp = {
Converb = "mann" ++ vp.Converb ;
Indicative = \\t,pol => "mann" ++ vp.Indicative ! t ! pol ! Masc ! PSg P3 ;
Interrogative = \\t,pol => vp.Finite ! t ! PSg P3 ++ "mann" ++ vp.Remainder ! pol ! Masc ! PSg P3 ;
Future = \\pol => "mann" ++ futureAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ;
FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "mann" ++ negStr pol ++ vp.Nonfinite ;
Conditional = \\pol => "mann" ++ conditionalAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ;
ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "mann" ++ negStr pol ++ vp.Nonfinite ;
Anterior = \\t,pol => "mann" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ vp.Converb ;
AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "mann" ++ negStr pol ++ vp.Converb ;
Nonfinite = "mann" ++ vp.Nonfinite ;
Participle = \\t => "mann" ++ vp.Participle ! t
} ;
CleftNP np rs = {
Converb = "tað er" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Interrogative = \\t,pol => copula ! t ! PSg P3 ++ "tað" ++ negStr pol ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ "verið" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ "verið" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Nonfinite = "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Participle = \\_ => "verið" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p
} ;
CleftAdv adv s = {
Converb = "tað er" ++ adv.s ++ s.s ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ adv.s ++ s.s ;
Interrogative = \\t,pol => copula ! t ! PSg P3 ++ "tað" ++ negStr pol ++ adv.s ++ s.s ;
Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ "vera" ++ adv.s ++ s.s ;
FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ adv.s ++ s.s ;
Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ "vera" ++ adv.s ++ s.s ;
ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ adv.s ++ s.s ;
Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ "verið" ++ adv.s ++ s.s ;
AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ "verið" ++ adv.s ++ s.s ;
Nonfinite = "vera" ++ adv.s ++ s.s ;
Participle = \\_ => "verið" ++ adv.s ++ s.s
} ;
ExistNP np = {
Converb = "tað er" ++ np.s ! Nom ;
Indicative = \\t,pol => "tað" ++ copula ! t ! persNum np.n P3 ++ negStr pol ++ np.s ! Nom ;
Interrogative = \\t,pol => copula ! t ! persNum np.n P3 ++ "tað" ++ negStr pol ++ np.s ! Nom ;
Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ;
FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ;
Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ;
ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ;
Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ "verið" ++ np.s ! Nom ;
AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ "verið" ++ np.s ! Nom ;
Nonfinite = "vera" ++ np.s ! Nom ;
Participle = \\_ => "verið" ++ np.s ! Nom
} ;
ExistIP ip = {
s = \\t,pol => "hvat" ++ copula ! t ! persNum ip.n P3 ++ negStr pol
s = \\t,pol => "hvat" ++ copula ! t ! persNum ip.n P3 ++ negStr pol ;
anterior = \\t,pol => "hvat" ++ perfectAux ! t ! persNum ip.n P3 ++ negStr pol ++ "verið" ;
future = \\pol => "hvat" ++ futureAux ! persNum ip.n P3 ++ negStr pol ++ "vera" ;
conditional = \\pol => "hvat" ++ conditionalAux ! persNum ip.n P3 ++ negStr pol ++ "vera"
} ;
ExistNPAdv np adv = {
Converb = "tað er" ++ np.s ! Nom ++ adv.s ;
Indicative = \\t,pol => "tað" ++ copula ! t ! persNum np.n P3 ++ negStr pol ++ np.s ! Nom ++ adv.s ;
Interrogative = \\t,pol => copula ! t ! persNum np.n P3 ++ "tað" ++ negStr pol ++ np.s ! Nom ++ adv.s ;
Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ++ adv.s ;
FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ++ adv.s ;
Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ++ adv.s ;
ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ++ adv.s ;
Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ "verið" ++ np.s ! Nom ++ adv.s ;
AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ "verið" ++ np.s ! Nom ++ adv.s ;
Nonfinite = "vera" ++ np.s ! Nom ++ adv.s ;
Participle = \\_ => "verið" ++ np.s ! Nom ++ adv.s
} ;
ExistIPAdv ip adv = {
s = \\t,pol => ip.s ++ copula ! t ! persNum ip.n P3 ++ negStr pol ++ adv.s
s = \\t,pol => ip.s ++ copula ! t ! persNum ip.n P3 ++ negStr pol ++ adv.s ;
anterior = \\t,pol => ip.s ++ perfectAux ! t ! persNum ip.n P3 ++ negStr pol ++ "verið" ++ adv.s ;
future = \\pol => ip.s ++ futureAux ! persNum ip.n P3 ++ negStr pol ++ "vera" ++ adv.s ;
conditional = \\pol => ip.s ++ conditionalAux ! persNum ip.n P3 ++ negStr pol ++ "vera" ++ adv.s
} ;
ProgrVP vp = {
Converb = "vera við at" ++ vp.Nonfinite ;
Imperative = \\n => case n of {Sg => "ver" ; Pl => "verið"} ++ "við at" ++ vp.Nonfinite ;
Indicative = \\t,pol,g,p => copula ! t ! p ++ negStr pol ++ "við at" ++ vp.Nonfinite ;
Finite = copula ;
Remainder = \\pol,_,_ => negStr pol ++ "við at" ++ vp.Nonfinite ;
Nonfinite = "vera við at" ++ vp.Nonfinite ;
Participle = \\_ => "verið við at" ++ vp.Nonfinite
} ;
@@ -54,6 +105,7 @@ lin
SelfAdvVP vp = vp ** {
Converb = vp.Converb ++ "sjálvur" ;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ "sjálvur" ;
Remainder = \\pol,g,p => vp.Remainder ! pol ! g ! p ++ "sjálvur" ;
Nonfinite = vp.Nonfinite ++ "sjálvur" ;
Participle = \\t => vp.Participle ! t ++ "sjálvur"
} ;
+202 -79
View File
@@ -54,24 +54,24 @@ mkN002 base =
Gen => base_1+"s"
} ;
Pl => table {
Nom => base_1+"ð" ;
Acc => base_1+"ð" ;
Dat => base_1+"num" ;
Gen => base_1+"sins"
Nom => base_1 ;
Acc => base_1 ;
Dat => base_1+"um" ;
Gen => base_1+"a"
}
} ;
Def => table {
Sg => table {
Nom => nonExist ;
Acc => nonExist ;
Dat => nonExist ;
Gen => nonExist
Nom => base_1+"ð" ;
Acc => base_1+"ð" ;
Dat => base_1+"num" ;
Gen => base_1+"sins"
} ;
Pl => table {
Nom => nonExist ;
Acc => nonExist ;
Dat => nonExist ;
Gen => nonExist
Nom => base_1+"ni" ;
Acc => base_1+"ni" ;
Dat => base_1+"unum" ;
Gen => base_1+"anna"
}
}
} ;
@@ -249,24 +249,24 @@ mkN007 base =
Gen => base_1+"ar"
} ;
Pl => table {
Nom => base_1+"in" ;
Acc => base_1+"ina" ;
Dat => base_1+"ini" ;
Gen => base_1+"arinnar"
Nom => base_1+"ir" ;
Acc => base_1+"ir" ;
Dat => base_1+"um" ;
Gen => base_1+"a"
}
} ;
Def => table {
Sg => table {
Nom => nonExist ;
Acc => nonExist ;
Dat => nonExist ;
Gen => nonExist
Nom => base_1+"in" ;
Acc => base_1+"ina" ;
Dat => base_1+"ini" ;
Gen => base_1+"arinnar"
} ;
Pl => table {
Nom => nonExist ;
Acc => nonExist ;
Dat => nonExist ;
Gen => nonExist
Nom => base_1+"irnar" ;
Acc => base_1+"irnar" ;
Dat => base_1+"unum" ;
Gen => base_1+"anna"
}
}
} ;
@@ -288,24 +288,24 @@ mkN008 base =
Gen => base_1+"s"
} ;
Pl => table {
Nom => base_1+"ið" ;
Acc => base_1+"ið" ;
Dat => base_1+"inum" ;
Gen => base_1+"sins"
Nom => base_1 ;
Acc => base_1 ;
Dat => base_1+"um" ;
Gen => base_1+"a"
}
} ;
Def => table {
Sg => table {
Nom => base_1+"in" ;
Acc => base_1+"in" ;
Nom => base_1+"ið" ;
Acc => base_1+"ið" ;
Dat => base_1+"inum" ;
Gen => base_1+"sins"
} ;
Pl => table {
Nom => nonExist ;
Acc => nonExist ;
Dat => nonExist ;
Gen => nonExist
Nom => base_1+"ini" ;
Acc => base_1+"ini" ;
Dat => base_1+"unum" ;
Gen => base_1+"anna"
}
}
} ;
@@ -6637,6 +6637,7 @@ mkA001 base =
case base of {
base_1+"dur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"dur" ;
@@ -6679,7 +6680,9 @@ mkA001 base =
Gen => base_1+"da"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA001"
} ;
@@ -6689,6 +6692,7 @@ mkA002 base =
case base of {
base_1+"a"+base_2@(?+?)+"ur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"a"+base_2+"ur" ;
@@ -6731,7 +6735,9 @@ mkA002 base =
Gen => base_1+"a"+base_2+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA002"
} ;
@@ -6741,6 +6747,7 @@ mkA003 base =
case base of {
base_1+"ur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"ur" ;
@@ -6783,7 +6790,9 @@ mkA003 base =
Gen => base_1+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA003"
} ;
@@ -6793,6 +6802,7 @@ mkA004 base =
case base of {
base_1+"a"+base_2@?+"u"+base_3@? => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"a"+base_2+"u"+base_3 ;
@@ -6835,7 +6845,9 @@ mkA004 base =
Gen => base_1+"a"+base_2+base_3+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA004"
} ;
@@ -6845,6 +6857,7 @@ mkA005 base =
case base of {
"a"+base_1+"lur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => "a"+base_1+"lur" ;
@@ -6887,7 +6900,9 @@ mkA005 base =
Gen => "a"+base_1+"la"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA005"
} ;
@@ -6897,6 +6912,7 @@ mkA006 base =
case base of {
base_1+"nur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"nur" ;
@@ -6939,7 +6955,9 @@ mkA006 base =
Gen => base_1+"na"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA006"
} ;
@@ -6949,6 +6967,7 @@ mkA007 base =
case base of {
base_1+"ur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"ur" ;
@@ -6991,7 +7010,9 @@ mkA007 base =
Gen => base_1+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA007"
} ;
@@ -7001,6 +7022,7 @@ mkA008 base =
case base of {
base_1+"ur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"ur" ;
@@ -7043,7 +7065,9 @@ mkA008 base =
Gen => base_1+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA008"
} ;
@@ -7053,6 +7077,7 @@ mkA009 base =
case base of {
base_1+"in" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"in" ;
@@ -7095,7 +7120,9 @@ mkA009 base =
Gen => base_1+"na"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA009"
} ;
@@ -7105,6 +7132,7 @@ mkA010 base =
case base of {
base_1+"ður" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"ður" ;
@@ -7147,7 +7175,9 @@ mkA010 base =
Gen => base_1+"ða"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA010"
} ;
@@ -7157,6 +7187,7 @@ mkA011 base =
case base of {
base_1+"tur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"tur" ;
@@ -7199,7 +7230,9 @@ mkA011 base =
Gen => base_1+"ta"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA011"
} ;
@@ -7209,6 +7242,7 @@ mkA012 base =
case base of {
base_1+"gvin" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"gvin" ;
@@ -7251,7 +7285,9 @@ mkA012 base =
Gen => base_1+"na"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA012"
} ;
@@ -7261,6 +7297,7 @@ mkA013 base =
case base of {
base_1+"gur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"gur" ;
@@ -7303,7 +7340,9 @@ mkA013 base =
Gen => base_1+"ga"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA013"
} ;
@@ -7313,6 +7352,7 @@ mkA014 base =
case base of {
base_1+"ddur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"ddur" ;
@@ -7355,7 +7395,9 @@ mkA014 base =
Gen => base_1+"dda"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA014"
} ;
@@ -7365,6 +7407,7 @@ mkA015 base =
case base of {
base_1+"a"+base_2@("ng"|"m"|(?+?+?))+"ur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"a"+base_2+"ur" ;
@@ -7407,7 +7450,9 @@ mkA015 base =
Gen => base_1+"a"+base_2+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA015"
} ;
@@ -7417,6 +7462,7 @@ mkA016 base =
case base of {
base_1+"mur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"mur" ;
@@ -7459,7 +7505,9 @@ mkA016 base =
Gen => base_1+"madimra"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA016"
} ;
@@ -7469,6 +7517,7 @@ mkA017 base =
case base of {
base_1+"ur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"ur" ;
@@ -7511,7 +7560,9 @@ mkA017 base =
Gen => base_1+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA017"
} ;
@@ -7521,6 +7572,7 @@ mkA018 base =
case base of {
base_1+"kur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"kur" ;
@@ -7563,7 +7615,9 @@ mkA018 base =
Gen => base_1+"kadøkra"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA018"
} ;
@@ -7573,6 +7627,7 @@ mkA019 base =
case base of {
base_1+"tin" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"tin" ;
@@ -7615,7 +7670,9 @@ mkA019 base =
Gen => base_1+"na"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA019"
} ;
@@ -7625,6 +7682,7 @@ mkA020 base =
case base of {
base_1+"a"+base_2@?+"dur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"a"+base_2+"dur" ;
@@ -7667,7 +7725,9 @@ mkA020 base =
Gen => base_1+"a"+base_2+"da"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA020"
} ;
@@ -7677,6 +7737,7 @@ mkA021 base =
case base of {
base_1+"a"+base_2@?+"lur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"a"+base_2+"lur" ;
@@ -7719,7 +7780,9 @@ mkA021 base =
Gen => base_1+"a"+base_2+"la"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA021"
} ;
@@ -7729,6 +7792,7 @@ mkA022 base =
case base of {
base_1+"a"+base_2@?+"ur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"a"+base_2+"ur" ;
@@ -7771,7 +7835,9 @@ mkA022 base =
Gen => base_1+"a"+base_2+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA022"
} ;
@@ -7781,6 +7847,7 @@ mkA023 base =
case base of {
base_1+"rin" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"rin" ;
@@ -7823,7 +7890,9 @@ mkA023 base =
Gen => base_1+"na"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA023"
} ;
@@ -7833,6 +7902,7 @@ mkA024 base =
case base of {
base_1+"lur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"lur" ;
@@ -7875,7 +7945,9 @@ mkA024 base =
Gen => base_1+"lafulra"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA024"
} ;
@@ -7885,6 +7957,7 @@ mkA025 base =
case base of {
base_1+"a"+base_2@?+"a"+base_3@? => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"a"+base_2+"a"+base_3 ;
@@ -7927,7 +8000,9 @@ mkA025 base =
Gen => base_1+"a"+base_2+base_3+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA025"
} ;
@@ -7937,6 +8012,7 @@ mkA026 base =
case base of {
base_1+"óður" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"óður" ;
@@ -7979,7 +8055,9 @@ mkA026 base =
Gen => base_1+"óða"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA026"
} ;
@@ -7989,6 +8067,7 @@ mkA027 base =
case base of {
base_1+"ei"+base_2@?+"a"+base_3@?+"ur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"ei"+base_2+"a"+base_3+"ur" ;
@@ -8031,7 +8110,9 @@ mkA027 base =
Gen => base_1+"ei"+base_2+"a"+base_3+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA027"
} ;
@@ -8041,6 +8122,7 @@ mkA028 base =
case base of {
base_1+"pin" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"pin" ;
@@ -8083,7 +8165,9 @@ mkA028 base =
Gen => base_1+"na"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA028"
} ;
@@ -8093,6 +8177,7 @@ mkA029 base =
case base of {
base_1+"a"+base_2@?+"sur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"a"+base_2+"sur" ;
@@ -8135,7 +8220,9 @@ mkA029 base =
Gen => base_1+"a"+base_2+"sa"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA029"
} ;
@@ -8145,6 +8232,7 @@ mkA030 base =
case base of {
base_1+"ddur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"ddur" ;
@@ -8187,7 +8275,9 @@ mkA030 base =
Gen => base_1+"dda"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA030"
} ;
@@ -8197,6 +8287,7 @@ mkA031 base =
case base of {
base_1+"a"+base_2@?+"ur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"a"+base_2+"ur" ;
@@ -8239,7 +8330,9 @@ mkA031 base =
Gen => base_1+"a"+base_2+"alatra"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA031"
} ;
@@ -8249,6 +8342,7 @@ mkA032 base =
case base of {
base_1+"ðin" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"ðin" ;
@@ -8291,7 +8385,9 @@ mkA032 base =
Gen => base_1+"dna"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA032"
} ;
@@ -8301,6 +8397,7 @@ mkA033 base =
case base of {
base_1+"ggjur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"ggjur" ;
@@ -8343,7 +8440,9 @@ mkA033 base =
Gen => base_1+"ggja"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA033"
} ;
@@ -8353,6 +8452,7 @@ mkA034 base =
case base of {
base_1+"a"+base_2@?+"ur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"a"+base_2+"ur" ;
@@ -8395,7 +8495,9 @@ mkA034 base =
Gen => base_1+"a"+base_2+"amakra"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA034"
} ;
@@ -8405,6 +8507,7 @@ mkA035 base =
case base of {
base_1+"il" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"il" ;
@@ -8447,7 +8550,9 @@ mkA035 base =
Gen => base_1+"la"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA035"
} ;
@@ -8457,6 +8562,7 @@ mkA036 base =
case base of {
base_1+"lur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"lur" ;
@@ -8499,7 +8605,9 @@ mkA036 base =
Gen => base_1+"la"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA036"
} ;
@@ -8509,6 +8617,7 @@ mkA037 base =
case base of {
base_1+"gvur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"gvur" ;
@@ -8551,7 +8660,9 @@ mkA037 base =
Gen => base_1+"gva"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA037"
} ;
@@ -8561,6 +8672,7 @@ mkA038 base =
case base of {
base_1+"u"+base_2@? => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"u"+base_2 ;
@@ -8603,7 +8715,9 @@ mkA038 base =
Gen => base_1+base_2+"a"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA038"
} ;
@@ -8613,6 +8727,7 @@ mkA039 base =
case base of {
base_1+"rur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"rur" ;
@@ -8655,7 +8770,9 @@ mkA039 base =
Gen => base_1+"ra"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA039"
} ;
@@ -8665,6 +8782,7 @@ mkA040 base =
case base of {
base_1+"lur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"lur" ;
@@ -8707,7 +8825,9 @@ mkA040 base =
Gen => base_1+"lavilra"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA040"
} ;
@@ -8717,6 +8837,7 @@ mkA041 base =
case base of {
base_1+"sur" => lin A
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => base_1+"sur" ;
@@ -8759,7 +8880,9 @@ mkA041 base =
Gen => base_1+"sa"
}
}
}
} ;
Weak => weakAdjForms base
}
};
_ => error "Can't apply paradigm mkA041"
} ;
@@ -8902,8 +9025,8 @@ mkV005 base =
base_1+"a"+base_2@(?+?) => lin V
{ Converb = base_1+"a"+base_2 ;
imperative = table {
Sg => nonExist ;
Pl => nonExist
Sg => base_1+base_2 ;
Pl => base_1+"i"+base_2
} ;
Indicative = table {
Pres => table {
@@ -10882,8 +11005,8 @@ mkV065 base =
base_1+"u"+base_2@?+"na" => lin V
{ Converb = base_1+"u"+base_2+"nað" ;
imperative = table {
Sg => nonExist ;
Pl => nonExist
Sg => base_1+"u"+base_2+"n" ;
Pl => base_1+"u"+base_2+"nið"
} ;
Indicative = table {
Pres => table {
+1 -1
View File
@@ -10,5 +10,5 @@ lin
UseLN ln = mkNP ln.s Neuter Sg P3 ;
PlainLN ln = mkNP ln.s Neuter Sg P3 ;
InLN ln = {s = "í" ++ ln.s} ;
AdjLN ap ln = {s = ap.s ! Neuter ! Sg ! Nom ++ ln.s} ;
AdjLN ap ln = {s = ap.s ! Strong ! Neuter ! Sg ! Nom ++ ln.s} ;
}
+39 -13
View File
@@ -1,7 +1,7 @@
concrete NounFao of Noun = CatFao ** open ResFao, Prelude in {
lin
UseN n = n ;
UseN2 n = n ;
UseN n = {s = n.s ; p = n.s ! Indef ; g = n.g} ;
UseN2 n = {s = n.s ; p = n.s ! Indef ; g = n.g} ;
Use2N3 n = n ** {c2 = n.c2} ;
Use3N3 n = n ** {c2 = n.c3} ;
UsePN pn = mkNP pn.s Masc Sg P3 ;
@@ -27,7 +27,10 @@ lin
s = \\c => np.s ! c ++ "," ++ adv.s
} ;
DetCN det cn = {
s = \\c => det.s ! cn.g ! c ++ cn.s ! det.sp ! det.n ! c ;
s = \\c => det.s ! cn.g ! c ++ case det.d of {
Weak => cn.p ! det.n ! c ;
Strong => cn.s ! det.sp ! det.n ! c
} ;
g = cn.g ;
n = det.n ;
p = P3
@@ -35,6 +38,7 @@ lin
DefArt = {
s = \\_,_,_,_ => [] ;
sp = Def ;
d = Strong
} ;
IndefArt = {
s = \\b =>
@@ -62,18 +66,24 @@ lin
}
} ;
sp = Indef ;
d = Strong
} ;
DetQuant quant num = {
s = \\g,c => quant.s ! num.hasCard ! g ! num.n ! c ++
num.s ! g ! c ;
n = num.n ;
sp = quant.sp
sp = quant.sp ;
d = quant.d
} ;
DetQuantOrd quant num ord = {
s = \\g,c => quant.s ! num.hasCard ! g ! num.n ! c ++
num.s ! g ! c ++ ord.s ! g ! num.n ! c ;
num.s ! g ! c ++ case quant.sp of {
Indef => ord.s ! Strong ! g ! num.n ! c ;
Def => ord.s ! Weak ! g ! num.n ! c
} ;
n = num.n ;
sp = quant.sp
sp = quant.sp ;
d = quant.d
} ;
NumSg = {
s = \\_,_ => [] ;
@@ -90,11 +100,11 @@ lin
NumDecimal dec = {s = \\_,_ => dec.s ; n = Pl} ;
NumNumeral numeral = {s=numeral.s ! NCard; n=numeral.n} ;
AdNum adn card = {s = \\g,c => adn.s ++ card.s ! g ! c ; n = card.n} ;
OrdDigits digits = {s = \\_,_,_ => digits.s ++ BIND ++ "."} ;
OrdNumeral numeral = {s = \\g,n,c => numeral.s ! NOrd n ! g ! c} ;
OrdDigits digits = {s = \\_,_,_,_ => digits.s ++ BIND ++ "."} ;
OrdNumeral numeral = {s = \\_,g,n,c => numeral.s ! NOrd n ! g ! c} ;
OrdSuperl a = {s = a.s} ;
OrdNumeralSuperl numeral a = {
s = \\g,n,c => numeral.s ! NOrd n ! g ! c ++ a.s ! g ! n ! c
s = \\af,g,n,c => numeral.s ! NOrd n ! g ! c ++ a.s ! af ! g ! n ! c
} ;
MassNP cn = {
s = \\c => cn.s ! Indef ! Sg ! c ;
@@ -103,43 +113,59 @@ lin
p = P3
} ;
PossPron pron = {
s = \\_,_,_,_ => pron.s ! Gen ;
sp = Def
s = \\_,g,n,c => pron.poss ! g ! n ! c ;
-- A preposed possessive replaces, rather than licenses, the suffixed
-- definite article: mín vinur, not *mín vinurin.
sp = Indef ;
d = Weak
} ;
ComplN2 n2 np = {
s = \\sp,n,c => n2.s ! sp ! n ! c ++ n2.c2.s ++ np.s ! n2.c2.c ;
p = \\n,c => n2.s ! Indef ! n ! c ++ n2.c2.s ++ np.s ! n2.c2.c ;
g = n2.g
} ;
ComplN3 n3 np = n3 ** {
s = \\sp,n,c => n3.s ! sp ! n ! c ++ n3.c2.s ++ np.s ! n3.c2.c ;
p = \\n,c => n3.s ! Indef ! n ! c ++ n3.c2.s ++ np.s ! n3.c2.c ;
c2 = n3.c3
} ;
AdjCN ap cn = {
s = \\sp,n,c => ap.s ! cn.g ! n ! c ++ cn.s ! sp ! n ! c ;
s = \\sp,n,c =>
case sp of {
Indef => ap.s ! Strong ! cn.g ! n ! c ++ cn.s ! sp ! n ! c ;
Def => weakAdj ap cn.g n c ++ cn.s ! sp ! n ! c
} ;
p = \\n,c => ap.s ! Weak ! cn.g ! n ! c ++ cn.p ! n ! c ;
g = cn.g
} ;
RelCN cn rs = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ rs.s ! cn.g ! persNum n P3 ;
p = \\n,c => cn.p ! n ! c ++ rs.s ! cn.g ! persNum n P3 ;
g = cn.g
} ;
AdvCN cn adv = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ adv.s ;
p = \\n,c => cn.p ! n ! c ++ adv.s ;
g = cn.g
} ;
SentCN cn sc = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ sc.s ;
p = \\n,c => cn.p ! n ! c ++ sc.s ;
g = cn.g
} ;
ApposCN cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ np.s ! Nom ;
p = \\n,c => cn.p ! n ! c ++ np.s ! Nom ;
g = cn.g
} ;
PossNP cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ np.s ! Gen ;
p = \\n,c => cn.p ! n ! c ++ np.s ! Gen ;
g = cn.g
} ;
PartNP cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ "av" ++ np.s ! Dat ;
p = \\n,c => cn.p ! n ! c ++ "av" ++ np.s ! Dat ;
g = cn.g
} ;
CountNP det np = {
@@ -149,7 +175,7 @@ lin
p = P3
} ;
AdjDAP dap ap = dap ** {
s = \\g,c => dap.s ! g ! c ++ ap.s ! g ! dap.n ! c
s = \\g,c => dap.s ! g ! c ++ ap.s ! dap.d ! g ! dap.n ! c
} ;
DetDAP det = det ;
QuantityNP dec mu = {
+28 -4
View File
@@ -327,11 +327,32 @@ oper
Dat => dat ;
Gen => gen
} ;
poss = case <n,p> of {
<Sg,P1> => possessiveForms "mín" "mítt" ;
<Sg,P2> => possessiveForms "tín" "títt" ;
_ => \\_,_,_ => gen
} ;
g = g ;
n = n ;
p = p
} ;
possessiveForms : Str -> Str -> Gender => Number => Case => Str = \common,neuter ->
table {
Masc => table {
Sg => table {Nom => common ; Acc => common ; Dat => common + "um" ; Gen => common + "s"} ;
Pl => table {Nom => common + "ir" ; Acc => common + "ar" ; Dat => common + "um" ; Gen => common + "a"}
} ;
Fem => table {
Sg => table {Nom => common ; Acc => common + "a" ; Dat => common + "i" ; Gen => common + "ar"} ;
Pl => table {Nom => common + "ar" ; Acc => common + "ar" ; Dat => common + "um" ; Gen => common + "a"}
} ;
Neuter => table {
Sg => table {Nom => neuter ; Acc => neuter ; Dat => common + "um" ; Gen => common + "s"} ;
Pl => table {Nom => common + "i" ; Acc => common + "i" ; Dat => common + "um" ; Gen => common + "a"}
}
} ;
regA : Str -> A -- s;Masc;Sg;Nom
= \form -> case form of {
_ + "dur" => mkA001 form;
@@ -513,7 +534,7 @@ oper
} ;
invarA : Str -> A = \s -> lin A {
s = \\_,_,_ => s
s = \\_,_,_,_ => s
} ;
mkA2 = overload {
@@ -580,16 +601,19 @@ oper
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkPrep = overload {
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkPrep : Str -> Case -> Prep = \s,c -> lin Prep {s=s; c=c}
} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s; n=Sg} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s; n=Sg} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_,_ => s; sp=Indef} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_,_ => s; sp=Indef; d=Strong} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg; sp=Indef} ;
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg; sp=Indef; d=Strong} ;
mkCard : Str -> Card = \s -> lin Card {s=\\_,_ => s; n=Pl} ;
mkACard : Str -> ACard = \s -> lin ACard {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
+1 -1
View File
@@ -13,7 +13,7 @@ lin
UttVP vp = {s = vp.Nonfinite} ;
UttCN cn = {s = cn.s ! Indef ! Sg ! Nom} ;
UttCard card = {s = card.s ! Neuter ! Nom} ;
UttAP ap = {s = ap.s ! Masc ! Sg ! Nom} ;
UttAP ap = {s = ap.s ! Strong ! Masc ! Sg ! Nom} ;
UttAdv adv = adv ;
UttInterj i = i ;
+36 -10
View File
@@ -1,20 +1,36 @@
concrete QuestionFao of Question = CatFao ** open ResFao in {
lincat QVP = {s : Tense => Polarity => Str} ;
lincat QVP = {
s,anterior : Tense => Polarity => Str ;
future,conditional : Polarity => Str
} ;
lin
QuestCl cl = {s = cl.Indicative} ;
QuestCl cl = {
s = cl.Interrogative ; anterior = cl.AnteriorInterrogative ;
future = cl.FutureInterrogative ; conditional = cl.ConditionalInterrogative
} ;
QuestVP ip vp = {
s = \\t,pol => ip.s ++ vp.Indicative ! t ! pol ! Masc ! persNum ip.n P3
s = \\t,pol => ip.s ++ vp.Indicative ! t ! pol ! Masc ! persNum ip.n P3 ;
anterior = \\t,pol => ip.s ++ perfectAux ! t ! persNum ip.n P3 ++ negStr pol ++ vp.Converb ;
future = \\pol => ip.s ++ futureAux ! persNum ip.n P3 ++ negStr pol ++ vp.Nonfinite ;
conditional = \\pol => ip.s ++ conditionalAux ! persNum ip.n P3 ++ negStr pol ++ vp.Nonfinite
} ;
QuestSlash ip cls = {
s = \\t,pol => ip.s ++ cls.s ! t ! pol
s = \\t,pol => ip.s ++ cls.s ! t ! pol ; anterior = \\t,pol => ip.s ++ cls.s ! t ! pol ;
future = \\pol => ip.s ++ cls.s ! Pres ! pol ; conditional = \\pol => ip.s ++ cls.s ! Past ! pol
} ;
QuestIAdv iadv cl = {
s = \\t,pol => iadv.s ++ cl.Indicative ! t ! pol
s = \\t,pol => iadv.s ++ cl.Interrogative ! t ! pol ;
anterior = \\t,pol => iadv.s ++ cl.AnteriorInterrogative ! t ! pol ;
future = \\pol => iadv.s ++ cl.FutureInterrogative ! pol ;
conditional = \\pol => iadv.s ++ cl.ConditionalInterrogative ! pol
} ;
QuestIComp icomp np = {
s = \\t,pol => icomp.s ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
s = \\t,pol => icomp.s ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom ;
anterior = \\t,pol => icomp.s ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "verið" ++ np.s ! Nom ;
future = \\pol => icomp.s ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom ;
conditional = \\pol => icomp.s ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom
} ;
IdetCN idet cn = {
@@ -36,15 +52,25 @@ lin
CompIP ip = {s = ip.s} ;
ComplSlashIP vps ip = {
s = \\t,pol => vps.Indicative ! t ! PSg P3 ++ vps.particle ++ negStr pol ++ vps.c2.s ++ ip.s ++ vps.sc
s = \\t,pol => vps.Indicative ! t ! PSg P3 ++ vps.particle ++ negStr pol ++ vps.c2.s ++ ip.s ++ vps.sc ;
anterior = \\t,pol => perfectAux ! t ! PSg P3 ++ negStr pol ++ vps.Converb ++ vps.c2.s ++ ip.s ++ vps.sc ;
future = \\pol => futureAux ! PSg P3 ++ negStr pol ++ vps.Nonfinite ++ vps.c2.s ++ ip.s ++ vps.sc ;
conditional = \\pol => conditionalAux ! PSg P3 ++ negStr pol ++ vps.Nonfinite ++ vps.c2.s ++ ip.s ++ vps.sc
} ;
AdvQVP vp iadv = {
s = \\t,pol => vp.Indicative ! t ! pol ! Masc ! PSg P3 ++ iadv.s
s = \\t,pol => vp.Indicative ! t ! pol ! Masc ! PSg P3 ++ iadv.s ;
anterior = \\t,pol => perfectAux ! t ! PSg P3 ++ negStr pol ++ vp.Converb ++ iadv.s ;
future = \\pol => futureAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ++ iadv.s ;
conditional = \\pol => conditionalAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ++ iadv.s
} ;
AddAdvQVP qvp iadv = {
s = \\t,pol => qvp.s ! t ! pol ++ iadv.s
s = \\t,pol => qvp.s ! t ! pol ++ iadv.s ;
anterior = \\t,pol => qvp.anterior ! t ! pol ++ iadv.s ;
future = \\pol => qvp.future ! pol ++ iadv.s ; conditional = \\pol => qvp.conditional ! pol ++ iadv.s
} ;
QuestQVP ip qvp = {
s = \\t,pol => ip.s ++ qvp.s ! t ! pol
s = \\t,pol => ip.s ++ qvp.s ! t ! pol ;
anterior = \\t,pol => ip.s ++ qvp.anterior ! t ! pol ;
future = \\pol => ip.s ++ qvp.future ! pol ; conditional = \\pol => ip.s ++ qvp.conditional ! pol
} ;
}
+76 -3
View File
@@ -43,10 +43,52 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
} ;
oper Adj = {s: Gender => Number => Case => Str} ; -- 346
param Declension = Strong | Weak ;
oper Adj = {
s : Declension => Gender => Number => Case => Str ;
} ; -- 346
-- The weak adjective is used attributively in definite noun phrases. The
-- generated morphology contains the strong paradigm; the three weak forms
-- can be recovered from it (e.g. langa -> langi, longum -> longu).
oper weakAdj : Adj -> Gender -> Number -> Case -> Str =
\a,g,n,c -> a.s ! Weak ! g ! n ! c ;
oper weakAdjForms : Str -> Gender => Number => Case => Str = \lemma ->
let stem = case lemma of {
x + "ur" => x ;
x + "nin" => x + "n" ;
x + "in" => x + "n" ;
x + "il" => x + "il" ;
x => x
} in table {
Masc => table {
Sg => table {Nom => stem + "i" ; _ => stem + "a"} ;
Pl => \\_ => stem + "u"
} ;
_ => table {
Sg => \\_ => stem + "a" ;
Pl => \\_ => stem + "u"
}
} ;
oper reflPoss : Gender -> Number -> Case -> Str = \g,n,c ->
case <g,n,c> of {
<Masc,Sg,Nom> => "sín" ; <Masc,Sg,Acc> => "sín" ;
<Masc,Sg,Dat> => "sínum" ; <Masc,Sg,Gen> => "síns" ;
<Fem,Sg,Nom> => "sín" ; <Fem,Sg,Acc> => "sína" ;
<Fem,Sg,Dat> => "síni" ; <Fem,Sg,Gen> => "sínar" ;
<Neuter,Sg,Nom> => "sítt" ; <Neuter,Sg,Acc> => "sítt" ;
<Neuter,Sg,Dat> => "sínum" ; <Neuter,Sg,Gen> => "síns" ;
<Masc,Pl,Nom> => "sínir" ; <Masc,Pl,Acc> => "sínar" ;
<Fem,Pl,Nom> => "sínar" ; <Fem,Pl,Acc> => "sínar" ;
<Neuter,Pl,Nom> => "síni" ; <Neuter,Pl,Acc> => "síni" ;
<_,Pl,Dat> => "sínum" ; <_,Pl,Gen> => "sína"
} ;
oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 ->
{ s = table {
Strong => table {
Masc => table {
Sg => table {
Nom => f1 ;
@@ -89,7 +131,9 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
Gen => f24
}
}
}
} ;
Weak => weakAdjForms f1
}
} ;
param Tense = Pres | Past ;
@@ -140,17 +184,31 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ;
oper CommonNoun = {
s : Species => Number => Case => Str ;
p : Number => Case => Str ;
g : Gender
} ;
oper AdjPhrase = Adj ;
oper VerbPhrase = {
Converb : Str ;
Imperative : Number => Str ;
Indicative : Tense => Polarity => Gender => PersNum => Str ;
Finite : Tense => PersNum => Str ;
Remainder : Polarity => Gender => PersNum => Str ;
Nonfinite : Str ;
Participle : Tense => Str ;
} ;
oper Clause = {
Converb : Str ;
Indicative : Tense => Polarity => Str ;
Interrogative : Tense => Polarity => Str ;
Future : Polarity => Str ;
FutureInterrogative : Polarity => Str ;
Conditional : Polarity => Str ;
ConditionalInterrogative : Polarity => Str ;
Anterior : Tense => Polarity => Str ;
AnteriorInterrogative : Tense => Polarity => Str ;
Nonfinite : Str ;
Participle : Tense => Str
} ;
@@ -172,6 +230,17 @@ oper
}
} ;
futureAux : PersNum => Str = table {
PSg P1 => "skal" ; PSg P2 => "skalt" ; PSg P3 => "skal" ; PPl => "skulu"
} ;
conditionalAux : PersNum => Str = table {
PSg _ => "skuldi" ; PPl => "skuldu"
} ;
perfectAux : Tense => PersNum => Str = table {
Pres => table {PSg P1 => "havi" ; PSg P2 => "hevur" ; PSg P3 => "hevur" ; PPl => "hava"} ;
Past => table {PSg _ => "hevði" ; PPl => "høvdu"}
} ;
oper
negStr : Polarity -> Str = \pol -> case pol of {
Pos => [] ;
@@ -189,13 +258,17 @@ oper
mkCN : Str -> Gender -> CommonNoun =
\str,g -> {
s = \\_,_,_ => str ;
p = \\_,_ => str ;
g = g
} ;
mkVP : Str -> VerbPhrase =
\str -> {
Converb = str ;
Imperative = \\_ => str ;
Indicative = \\_,pol,_,_ => str ++ negStr pol ;
Finite = \\_,_ => str ;
Remainder = \\pol,_,_ => negStr pol ;
Nonfinite = str ;
Participle = \\_ => str
} ;
+43 -3
View File
@@ -3,10 +3,32 @@ concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX)
Indicative = \\t,pol =>
let p = persNum np.n np.p
in np.s ! Nom ++ vp.Indicative ! t ! pol ! np.g ! p;
Interrogative = \\t,pol => let p = persNum np.n np.p in
vp.Finite ! t ! p ++ np.s ! Nom ++ vp.Remainder ! pol ! np.g ! p ;
Future = \\pol => let p = persNum np.n np.p in
np.s ! Nom ++ futureAux ! p ++ negStr pol ++ vp.Nonfinite ;
FutureInterrogative = \\pol => let p = persNum np.n np.p in
futureAux ! p ++ np.s ! Nom ++ negStr pol ++ vp.Nonfinite ;
Conditional = \\pol => let p = persNum np.n np.p in
np.s ! Nom ++ conditionalAux ! p ++ negStr pol ++ vp.Nonfinite ;
ConditionalInterrogative = \\pol => let p = persNum np.n np.p in
conditionalAux ! p ++ np.s ! Nom ++ negStr pol ++ vp.Nonfinite ;
Anterior = \\t,pol => let p = persNum np.n np.p in
np.s ! Nom ++ perfectAux ! t ! p ++ negStr pol ++ vp.Converb ;
AnteriorInterrogative = \\t,pol => let p = persNum np.n np.p in
perfectAux ! t ! p ++ np.s ! Nom ++ negStr pol ++ vp.Converb ;
Nonfinite = np.s ! Nom ++ vp.Nonfinite;
Participle = \\t => np.s ! Nom ++ vp.Participle ! t} ;
PredSCVP sc vp = {Converb = sc.s ++ vp.Converb;
Indicative = \\t,pol => sc.s ++ vp.Indicative ! t ! pol ! Neuter ! PSg P3;
Interrogative = \\t,pol => vp.Finite ! t ! PSg P3 ++ sc.s ++
vp.Remainder ! pol ! Neuter ! PSg P3;
Future = \\pol => sc.s ++ futureAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ;
FutureInterrogative = \\pol => futureAux ! PSg P3 ++ sc.s ++ negStr pol ++ vp.Nonfinite ;
Conditional = \\pol => sc.s ++ conditionalAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ;
ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ sc.s ++ negStr pol ++ vp.Nonfinite ;
Anterior = \\t,pol => sc.s ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ vp.Converb ;
AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ sc.s ++ negStr pol ++ vp.Converb ;
Nonfinite = sc.s ++ vp.Nonfinite;
Participle = \\t => sc.s ++ vp.Participle ! t} ;
SlashVP np vps = {
@@ -29,7 +51,7 @@ concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX)
c2 = sslash.c2
} ;
ImpVP vp = {
s = \\pol,n => negStr pol ++ vp.Nonfinite
s = \\pol,n => negStr pol ++ vp.Imperative ! n
} ;
AdvImp adv imp = {
s = \\pol,n => adv.s ++ imp.s ! pol ! n
@@ -43,7 +65,16 @@ concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX)
P.Cond => Past
} ;
in {
s = temp.s ++ pol.s ++ cl.Indicative ! tense ! pol.p
s = temp.s ++ pol.s ++ case <temp.a,temp.t> of {
<P.Simul,P.Pres> => cl.Indicative ! Pres ! pol.p ;
<P.Simul,P.Past> => cl.Indicative ! Past ! pol.p ;
<P.Simul,P.Fut> => cl.Future ! pol.p ;
<P.Simul,P.Cond> => cl.Conditional ! pol.p ;
<P.Anter,P.Pres> => cl.Anterior ! Pres ! pol.p ;
<P.Anter,P.Past> => cl.Anterior ! Past ! pol.p ;
<P.Anter,P.Fut> => cl.Future ! pol.p ;
<P.Anter,P.Cond> => cl.Anterior ! Past ! pol.p
}
} ;
UseQCl temp pol qcl =
let
@@ -54,7 +85,16 @@ concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX)
P.Cond => Past
} ;
in {
s = temp.s ++ pol.s ++ qcl.s ! tense ! pol.p
s = temp.s ++ pol.s ++ case <temp.a,temp.t> of {
<P.Simul,P.Pres> => qcl.s ! Pres ! pol.p ;
<P.Simul,P.Past> => qcl.s ! Past ! pol.p ;
<P.Simul,P.Fut> => qcl.future ! pol.p ;
<P.Simul,P.Cond> => qcl.conditional ! pol.p ;
<P.Anter,P.Pres> => qcl.anterior ! Pres ! pol.p ;
<P.Anter,P.Past> => qcl.anterior ! Past ! pol.p ;
<P.Anter,P.Fut> => qcl.future ! pol.p ;
<P.Anter,P.Cond> => qcl.anterior ! Past ! pol.p
}
} ;
UseRCl temp pol rcl =
let
+48 -7
View File
@@ -1,64 +1,99 @@
concrete VerbFao of Verb = CatFao ** open Prelude,ResFao in {
lin UseV v = {Converb = v.Converb ++ v.particle;
Imperative = \\n => v.imperative ! n ++ v.particle;
Indicative = \\t,pol,g,p => v.Indicative ! t ! p ++ v.particle ++
negStr pol ;
Finite = v.Indicative ;
Remainder = \\pol,_,_ => negStr pol ++ v.particle ;
Nonfinite = v.Nonfinite ++ v.particle;
Participle = \\t => v.Participle ! t ++ v.particle} ;
lin ComplVV vv vp = {Converb = vv.Converb ++ vv.particle ++ vp.Nonfinite;
Imperative = \\n => vv.imperative ! n ++ vv.particle ++ vp.Nonfinite;
Indicative = \\t,pol,g,p =>
vv.Indicative ! t ! p ++ vv.particle ++ negStr pol ++ vp.Nonfinite;
Finite = vv.Indicative ;
Remainder = \\pol,_,_ => negStr pol ++ vv.particle ++ vp.Nonfinite;
Nonfinite = vv.Nonfinite ++ vv.particle ++ vp.Nonfinite;
Participle = \\t => vv.Participle ! t ++ vv.particle ++ vp.Nonfinite} ;
lin ComplVS vs s = {Converb = vs.Converb ++ vs.particle ++ "at" ++ s.s;
Imperative = \\n => vs.imperative ! n ++ vs.particle ++ "at" ++ s.s;
Indicative = \\t,pol,g,p =>
vs.Indicative ! t ! p ++ vs.particle ++ negStr pol ++ "at" ++ s.s;
Finite = vs.Indicative ;
Remainder = \\pol,_,_ => negStr pol ++ vs.particle ++ "at" ++ s.s;
Nonfinite = vs.Nonfinite ++ vs.particle ++ "at" ++ s.s;
Participle = \\t => vs.Participle ! t ++ vs.particle ++ "at" ++ s.s} ;
lin ComplVQ vq qs = {Converb = vq.Converb ++ vq.particle ++ qs.s;
Imperative = \\n => vq.imperative ! n ++ vq.particle ++ qs.s;
Indicative = \\t,pol,g,p =>
vq.Indicative ! t ! p ++ vq.particle ++ negStr pol ++ qs.s;
Finite = vq.Indicative ;
Remainder = \\pol,_,_ => negStr pol ++ vq.particle ++ qs.s;
Nonfinite = vq.Nonfinite ++ vq.particle ++ qs.s;
Participle = \\t => vq.Participle ! t ++ vq.particle ++ qs.s} ;
lin ComplVA va ap = {Converb = va.Converb ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom;
lin ComplVA va ap = {Converb = va.Converb ++ va.particle ++ ap.s ! Strong ! Neuter ! Sg ! Nom;
Imperative = \\n => va.imperative ! n ++ va.particle ++ ap.s ! Strong ! Neuter ! Sg ! Nom;
Indicative = \\t,pol,g,p =>
va.Indicative ! t ! p ++ va.particle ++ negStr pol ++ ap.s ! g ! persNumNumber p ! Nom;
Nonfinite = va.Nonfinite ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom;
Participle = \\t => va.Participle ! t ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom} ;
va.Indicative ! t ! p ++ va.particle ++ negStr pol ++ ap.s ! Strong ! g ! persNumNumber p ! Nom;
Finite = va.Indicative ;
Remainder = \\pol,g,p => negStr pol ++ va.particle ++ ap.s ! Strong ! g ! persNumNumber p ! Nom;
Nonfinite = va.Nonfinite ++ va.particle ++ ap.s ! Strong ! Neuter ! Sg ! Nom;
Participle = \\t => va.Participle ! t ++ va.particle ++ ap.s ! Strong ! Neuter ! Sg ! Nom} ;
lin AdvVP vp adv = {Converb = vp.Converb ++ adv.s;
Imperative = \\n => vp.Imperative ! n ++ adv.s;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ adv.s;
Finite = vp.Finite ;
Remainder = \\pol,g,p => vp.Remainder ! pol ! g ! p ++ adv.s;
Nonfinite = vp.Nonfinite ++ adv.s;
Participle = \\t => vp.Participle ! t ++ adv.s} ;
lin ExtAdvVP vp adv = {Converb = vp.Converb ++ "," ++ adv.s;
Imperative = \\n => vp.Imperative ! n ++ "," ++ adv.s;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ "," ++ adv.s;
Finite = vp.Finite ;
Remainder = \\pol,g,p => vp.Remainder ! pol ! g ! p ++ "," ++ adv.s;
Nonfinite = vp.Nonfinite ++ "," ++ adv.s;
Participle = \\t => vp.Participle ! t ++ "," ++ adv.s} ;
lin AdVVP adv vp = {Converb = adv.s ++ vp.Converb;
Imperative = \\n => adv.s ++ vp.Imperative ! n;
Indicative = \\t,pol,g,p => adv.s ++ vp.Indicative ! t ! pol ! g ! p;
Finite = vp.Finite ;
Remainder = \\pol,g,p => negStr pol ++ adv.s ++ vp.Remainder ! Pos ! g ! p;
Nonfinite = adv.s ++ vp.Nonfinite;
Participle = \\t => adv.s ++ vp.Participle ! t} ;
lin ComplSlash vps np = {Converb = vps.Converb ++ vps.particle
++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc;
Imperative = \\n => vps.imperative ! n ++ vps.particle ++
vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc;
Indicative = \\t,pol,g,p =>
vps.Indicative ! t ! p ++ vps.particle ++
negStr pol ++
vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Finite = vps.Indicative ;
Remainder = \\pol,_,_ => negStr pol ++ vps.particle ++
vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Nonfinite = vps.Nonfinite ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc;
Participle = \\t => vps.Participle ! t ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc} ;
lin UseComp comp = {
Converb = copula ! Pres ! PPl ++ comp.s ! Masc ! Sg ;
Converb = "verið" ++ comp.s ! Masc ! Sg ;
Imperative = \\n => case n of {Sg => "ver" ; Pl => "verið"} ++ comp.s ! Masc ! n ;
Indicative = \\t,pol,g,p => copula ! t ! p ++
negStr pol ++
comp.s ! g ! persNumNumber p ;
Finite = copula ;
Remainder = \\pol,g,p => negStr pol ++ comp.s ! g ! persNumNumber p ;
Nonfinite = "vera" ++ comp.s ! Masc ! Sg ;
Participle = \\t => "verið" ++ comp.s ! Masc ! Sg
} ;
lin CompAP ap = {s = \\g,n => ap.s ! g ! n ! Nom} ;
lin CompAP ap = {s = \\g,n => ap.s ! Strong ! g ! n ! Nom} ;
lin CompNP np = {s = \\_,_ => np.s ! Nom} ;
lin CompAdv adv = {s = \\_,_ => adv.s} ;
lin CompCN cn = {s = \\_,n => cn.s ! Indef ! n ! Nom} ;
lin UseCopula = {
Converb = "verið" ;
Imperative = table {Sg => "ver" ; Pl => "verið"} ;
Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ;
Finite = copula ;
Remainder = \\pol,_,_ => negStr pol ;
Nonfinite = "vera" ;
Participle = \\_ => "verið"
} ;
@@ -79,7 +114,7 @@ concrete VerbFao of Verb = CatFao ** open Prelude,ResFao in {
} ;
lin SlashV2A v ap = v ** {
c2 = v.c2 ;
sc = ap.s ! Neuter ! Sg ! Nom
sc = ap.s ! Strong ! Neuter ! Sg ! Nom
} ;
lin SlashV2S v s = v ** {
c2 = v.c2 ;
@@ -107,14 +142,20 @@ concrete VerbFao of Verb = CatFao ** open Prelude,ResFao in {
lin ReflVP vps =
let np = mkNP "seg" Masc Sg P3 in {
Converb = vps.Converb ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Imperative = \\n => vps.imperative ! n ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Indicative = \\t,pol,g,p =>
vps.Indicative ! t ! p ++ vps.particle ++ negStr pol ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Finite = vps.Indicative ;
Remainder = \\pol,_,_ => negStr pol ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Nonfinite = vps.Nonfinite ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Participle = \\t => vps.Participle ! t ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc
} ;
lin PassV2 v = {
Converb = "verið" ++ v.Participle ! Past ;
Imperative = table {Sg => "ver" ++ v.Participle ! Past ; Pl => "verið" ++ v.Participle ! Past} ;
Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ++ v.Participle ! Past ;
Finite = copula ;
Remainder = \\pol,_,_ => negStr pol ++ v.Participle ! Past ;
Nonfinite = "vera" ++ v.Participle ! Past ;
Participle = \\_ => "verið" ++ v.Participle ! Past
} ;
+2 -2
View File
@@ -225,8 +225,8 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude, Maybe in {
-- warmest
OrdSuperl a = {
s = \\c => case a.hasComp of {
True => a.s ! ASuperl ;
False => "l-iktar" ++ a.s ! APosit (GSg Masc) --- should agree
True => a.s ! ACompar ;
False => "iktar" ++ a.s ! APosit (GSg Masc) --- should agree
}
} ;