extensions by Codex

This commit is contained in:
Krasimir Angelov committed 2026-10-12 16:11:21 +02:00
1 parent 020663a88c
commit eb6769c87f
7 files changed
+478 -13

No files matched your search

+1
View File
@@ -16,6 +16,7 @@ instance DiffNor of DiffScand = open CommonScand, Prelude in {
neutrum = NNeutr ;
detDef : Species = Def ;
artDef : GenNum -> Str = \gn -> gennumForms "den" "det" "de" ! gn ;
Verb : Type = {
s : VForm => Str ;
+410 -2
View File
@@ -14,19 +14,427 @@ concrete ExtendNor of Extend = CatNor **
RNP, RNPList, ReflRNP, ReflPron, ReflPoss, PredetRNP, ConjRNP,
Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, ReflPossPron,
CompoundN, CompoundAP, AdvIsNP,
UttAccNP,
A2VPSlash, N2VPSlash,
CardCNCard,
GenRP
]
with (Grammar = GrammarNor)
** open Prelude in {
**
open CommonScand, ResNor, ParamX, VerbNor, Prelude, DiffNor, StructuralNor, MorphoNor,
NounNor, Coordination, AdjectiveNor, SentenceNor, AdverbNor, RelativeNor, (P = ParadigmsNor)
in {
flags coding=utf8 ;
lin CompoundN n1 n2 = {
lin
GenNP np = {
s,sp = \\n,_,_,g => np.s ! NPPoss (gennum (ngen2gen g) n) Nom ;
det = DDef Indef
} ;
GenModNP num np cn = DetCN (DetQuant (GenNP (lin NP np)) num) cn ;
ComplBareVS v s = insertObj (\\_ => s.s ! Sub) (predV v) ;
CompBareCN cn = {s = \\a => case a.n of {
Sg => cn.s ! Sg ! DIndef ! Nom ;
Pl => cn.s ! Pl ! DIndef ! Nom
}
} ;
StrandRelSlash rp slash = {
s = \\t,a,p,ag,_ =>
rp.s ! ag.g ! ag.n ! RNom ++ slash.s ! t ! a ! p ! Sub ++ slash.n3 ! ag ++ slash.c2.s ;
c = NPAcc
} ;
EmptyRelSlash slash = {
s = \\t,a,p,ag,_ =>
slash.s ! t ! a ! p ! Sub ++ slash.n3 ! ag ++ slash.c2.s ;
c = NPAcc
} ;
StrandQuestSlash ip slash = {
s = \\t,a,p =>
let
cls = slash.s ! t ! a ! p ;
who = ip.s ! accusative ;
agr = agrP3 ip.g ip.n ;
in table {
QDir => who ++ cls ! Inv ++ slash.n3 ! agr ++ slash.c2.s ;
QIndir => who ++ cls ! Sub ++ slash.n3 ! agr ++ slash.c2.s
}
} ;
lin
PassVPSlash vps =
insertObj (\\a => vps.c2.s ++ vps.n3 ! a) (passiveVP vps) ;
PassAgentVPSlash vps np =
insertObjPost (\\a => vps.c2.s ++ vps.n3 ! a) (insertObj (\\_ => (PrepNP by8agent_Prep np).s) (passiveVP vps)) ;
ProgrVPSlash vp =
insertObj (\\a => infMark ++ infVP vp a) (predV (P.partV I.holde_V "på")) **
{ n3 = vp.n3 ;
c2 = vp.c2
} ;
N2VPSlash n2 =
let vp : CatNor.VP = UseComp (CompCN (UseN2 n2)) ;
dummyVPS : VPSlash = SlashV2a (P.mkV2 "dummy") ;
in dummyVPS ** -- has necessary fields for VPSlash
vp ** -- has all the right fields except for c2
{c2 = n2.c2} ; -- has the right c2
A2VPSlash a2 =
let vp : CatNor.VP = UseComp (CompAP (UseA2 a2)) ;
dummyVPS : VPSlash = SlashV2a (P.mkV2 "dummy") ;
in dummyVPS ** -- has necessary fields for VPSlash
vp ** -- has all the right fields except for c2
{c2 = a2.c2} ; -- has the right c2
lin UttVPShort vp = {s = infVP vp (agrP3 Utr Sg)} ;
lincat
VPI = {s : VPIForm => Agr => Str} ;
[VPI] = {s1,s2 : VPIForm => Agr => Str} ;
lin
BaseVPI = twoTable2 VPIForm Agr ;
ConsVPI = consrTable2 VPIForm Agr comma ;
MkVPI vp = {
s = \\v,a => infVP vp a ---- no sup
} ;
ConjVPI = conjunctDistrTable2 VPIForm Agr ;
ComplVPIVV vv vpi = insertObj (\\a => vv.c2.s ++ vpi.s ! VPIInf ! a) (predV vv) ;
lincat
VPS = {s : Order => Agr => {verb, compl : Str}} ;
[VPS] = {s : Order => Agr => {s1, s2, s3 : Str}} ; -- älskar, (jag) dig, (och) är lycklig
lin
BaseVPS v w = {
s = \\ord, agr =>
let
vs = v.s ! ord ! agr ;
ws = w.s ! ord ! agr ;
in {
s1 = vs.verb ;
s2 = vs.compl ;
s3 = ws.verb ++ ws.compl
}
} ;
ConsVPS v vv = {
s = \\ord, agr =>
let
vs = v.s ! ord ! agr ;
vvs = vv.s ! ord ! agr ;
in {
s1 = vs.verb ;
s2 = vs.compl ++ comma ++ vvs.s1 ++ vvs.s2 ;
s3 = vvs.s3
}
} ;
ConjVPS conj vv = {
s = \\ord, agr =>
let
vvs = vv.s ! ord ! agr
in {
verb = vvs.s1 ;
compl = conj.s1 ++ vvs.s2 ++ conj.s2 ++ vvs.s3
}
} ;
PredVPS np vps =
let
subj = np.s ! nominative ;
agr = np.a ;
in {
s = \\o =>
let verb = vps.s ! o ! agr
in case o of {
Main => subj ++ verb.verb ++ verb.compl ;
Inv => verb.verb ++ subj ++ verb.compl ; -- älskar jag henne och sover
Sub => subj ++ verb.verb ++ verb.compl --- not quite correct in ConjVPS
}
} ;
RelVPS rp vps = {
s = \\ag,rcase =>
let agr = case rp.a of { -- RP's agr may override in the regular RelativeScand, is this true with VPS too?
RNoAg => ag ;
RAg g n p => {g = g ; n = n ; p = p}
} ;
verb = vps.s ! Sub ! agr
in
rp.s ! ag.g ! ag.n ! rcase ++ verb.verb ++ verb.compl ;
c = NPNom
} ;
MkVPS t p vp = {
s = \\o,a =>
let
verb = vp.s ! Act ! VPFinite t.t t.a ;
neg = verb.a1 ! p.p ! a ;
compl = vp.n2 ! a ++ vp.a2 ++ vp.ext ;
pron = vp.n1 ! a ;
verbf = t.s ++ p.s ++ verb.fin
in
case o of {
Main => {verb = verbf ; compl = neg.p1 ++ verb.inf ++ pron ++ neg.p2 ++ compl} ;
Inv => {verb = verbf ; compl = neg.p1 ++ verb.inf ++ pron ++ neg.p2 ++ compl} ;
Sub => {verb = neg.p1 ++ neg.p2 ++ verbf ; compl = verb.inf ++ pron ++ compl}
}
} ;
lincat
VPS2 = {s : Order => Agr => Str ; c2 : {s : Str; hasPrep : Prelude.Bool}} ;
[VPS2] = {s1,s2 : Order => Agr => Str ; c2 : {s : Str; hasPrep : Prelude.Bool}} ;
lin
BaseVPS2 x y = twoTable2 Order Agr x y ** {c2 = y.c2} ;
ConsVPS2 x xs = consrTable2 Order Agr comma x xs ** {c2 = xs.c2};
MkVPS2 t p vp = {
s = \\o,a =>
let
verb = vp.s ! Act ! VPFinite t.t t.a ;
neg = verb.a1 ! p.p ! a ;
compl = vp.n2 ! a ++ vp.a2 ++ vp.ext ;
pron = vp.n1 ! a
in t.s ++ p.s ++ case o of {
Main => verb.fin ++ neg.p1 ++ verb.inf ++ pron ++ neg.p2 ++ compl ;
Inv => verb.fin ++ neg.p1 ++ verb.inf ++ pron ++ neg.p2 ++ compl ; ----
Sub => neg.p1 ++ neg.p2 ++ verb.fin ++ verb.inf ++ pron ++ compl
} ;
c2 = vp.c2
} ;
ComplVPS2 vps2 np = {
s = \\o,a => {verb = vps2.s !o ! a ; compl = vps2.c2.s ++ np.s ! NPAcc}
} ;
ReflVPS2 vps2 rnp = {
s = \\o,a => {verb = vps2.s ! o ! a ; compl = vps2.c2.s ++ rnp.s ! a}
} ;
ConjVPS2 c xs = conjunctDistrTable2 Order Agr c xs ** {c2 = xs.c2} ;
lincat
VPI2 = {s : VPIForm => Agr => Str ; c2 : {s : Str; hasPrep : Prelude.Bool}} ;
[VPI2] = {s1,s2 : VPIForm => Agr => Str ; c2 : {s : Str; hasPrep : Prelude.Bool}} ;
lin
BaseVPI2 x y = twoTable2 VPIForm Agr x y ** {c2 = y.c2} ;
ConsVPI2 x xs = consrTable2 VPIForm Agr comma x xs ** {c2 = xs.c2} ;
MkVPI2 vp = {
s = \\v,a => infVP vp a ; ---- no sup
c2 = vp.c2
} ;
ConjVPI2 c xs = conjunctDistrTable2 VPIForm Agr c xs ** {c2 = xs.c2} ;
ComplVPI2 vpi2 np = {
s = \\t,a => vpi2.s ! t ! a ++ vpi2.c2.s ++ np.s ! NPAcc
} ;
lincat [Comp] = {s1,s2 : Agr => Str} ;
lin BaseComp x y = twoTable Agr x y ;
ConsComp xs x = consrTable Agr comma xs x ;
ConjComp conj ss = conjunctDistrTable Agr conj ss ;
lincat ListImp = {s1,s2 : Polarity => Number => Str} ;
lin BaseImp = twoTable2 Polarity Number ;
ConsImp = consrTable2 Polarity Number comma ;
ConjImp conj ss = conjunctDistrTable2 Polarity Number conj ss ;
-----------
ICompAP ap = {s = \\a => hur_IAdv.s ++ ap.s ! a} ;
ProDrop pro = pro ** {s = \\_ => []} ;
lincat
RNP = {s : Agr => Str ; isPron : Bool} ; ---- inherent Agr needed: han färgar sitt hår vitt. But also depends on subject
RNPList = {s1,s2 : Agr => Str} ;
lin
ReflRNP vps rnp =
insertObjPost (\\a => vps.n3 ! a)
(insertObjPron (andB rnp.isPron (notB vps.c2.hasPrep)) (\\a => vps.c2.s ++ rnp.s ! a)
vps) ;
ReflPron = {s = \\a => reflPron a ; isPron = True} ; ---- agr ??
ReflPoss num cn = {
s = \\a => possPron a.n a.p num.n (ngen2gen cn.g) ++ num.s ! cn.g ++ cn.s ! num.n ! DDef Indef ! Nom ;
isPron = False
} ;
PredetRNP predet rnp = {
s = \\a => predet.s ! Utr ! Pl ++ predet.p ++ rnp.s ! a ; ---- agr needed here as well
---- s = \\a => predet.s ! np.a.g ! np.a.n ++ predet.p ++ np.s ! a ;
---- a = case pred.a of {PAg n => agrP3 np.a.g n ; _ => np.a} ;
isPron = False
} ;
AdvRNP np prep rnp = {s = \\a => np.s ! NPAcc ++ prep.s ++ rnp.s ! a; isPron = False} ;
AdvRVP vp prep rnp = insertObjPost (\\a => prep.s ++ rnp.s ! a) vp ;
AdvRAP ap prep rnp = {
s = \\a => let agr = case a of {
Strong (GSg g) => agrP3 g Sg ;
Strong GPl => agrP3 Utr Pl ;
Weak n => agrP3 Utr n
}
in ap.s ! a ++ prep.s ++ rnp.s ! agr ;
isPre = ap.isPre
} ;
ReflA2RNP a rnp = {
s = \\ap => let agr = case ap of {
Strong (GSg g) => agrP3 g Sg ;
Strong GPl => agrP3 Utr Pl ;
Weak n => agrP3 Utr n
}
in a.s ! AF (APosit ap) Nom ++ a.c2.s ++ rnp.s ! agr ;
isPre = False
} ;
PossPronRNP pron num cn rnp = DetCN (DetQuant (PossPron pron) num) (PossNP cn (lin NP {s = \\_ => rnp.s ! pron.a; a = pron.a; isPron=False})) ;
ConjRNP conj rpns = conjunctDistrTable Agr conj rpns ** {isPron = False} ;
Base_rr_RNP x y = twoTable Agr x y ;
Base_nr_RNP x y = twoTable Agr {s = \\a => x.s ! NPAcc} y ;
Base_rn_RNP x y = twoTable Agr x {s = \\a => y.s ! NPAcc} ;
Cons_rr_RNP x xs = consrTable Agr comma x xs ;
Cons_nr_RNP x xs = consrTable Agr comma {s = \\a => x.s ! NPAcc} xs ;
ReflPossPron = {
s,sp = table {
Sg => \\_,_ => genderForms "sin" "sitt" ;
Pl => \\_,_,_ => "sine"
} ;
det = DIndef
} ;
lin
ApposNP np1 np2 = {s = \\nform => np1.s ! nform ++ comma ++ np2.s ! nform; a = np1.a; isPron = False} ;
DetNPMasc, DetNPFem = \det ->
let
g = utrum ; ----
m = True ; ---- is this needed for other than Art?
in {
s = \\c => det.sp ! m ! g ; ---- case of det!
a = agrP3 (ngen2gen g) det.n ;
isPron = False
} ;
CompoundN n1 n2 = {
s = \\n,s,c => n1.co ++ BIND ++ n2.s ! n ! s ! c ;
co = n1.co ++ BIND ++ n2.co ;
g = n2.g
} ;
CompoundAP noun adj = {
s = \\ap => noun.co ++ BIND ++ adj.s ! AF (APosit ap) Nom ;
isPre = True
} ;
lin
AdAdV = cc2 ;
PositAdVAdj a = {s = a.s ! AAdv} ;
PresPartAP vp = {
s = \\af => case vp.isSimple of {
True => partVPPlus vp (PartPres Sg Indef Nom) (aformpos2agr af) Pos ;
False => partVPPlusPost vp (PartPres Sg Indef Nom) (aformpos2agr af) Pos
} ;
isPre = vp.isSimple
} ;
PastPartAP vp = {
s = \\af => let vp' = vp**{n2 : Agr => Str =\\a => vp.n2 ! a ++ vp.n3 ! a}
in case vp.isSimple of {
True => partVPPlus vp' (PartPret af Nom) (aformpos2agr af) Pos ;
False => partVPPlusPost vp' (PartPret af Nom) (aformpos2agr af) Pos
} ;
isPre = vp.isSimple
} ;
PastPartAgentAP vp np = {
s = \\af => let vp' = vp**{n2 : Agr => Str =\\a => vp.n2 ! a ++ vp.n3 ! a}
in partVPPlusPost vp' (PartPret af Nom) (aformpos2agr af) Pos ++ "av" ++ np.s ! accusative ;
isPre = False
} ;
GerundCN vp = {
s = \\_,_,_ => infMark ++ infVP vp {g = Utr ; n = Sg ; p = P3} ;
g = neutrum ;
isMod = False
} ;
GerundNP vp = {
s = \\_ => infMark ++ infVP vp {g = Utr ; n = Sg ; p = P3} ;
a = {g = Neutr ; n = Sg ; p = P3} ;
isPron = False
} ;
GerundAdv vp = {
s = partVPPlusPost vp (PartPres Sg Indef (Nom|Gen)) {g = Utr ; n = Sg ; p = P3} Pos -- sovande(s) i sängen
} ;
ByVP vp = {
s = "ved" ++ infMark ++ infVP vp {g = Utr ; n = Sg ; p = P3}
} ;
InOrderToVP vp = {
s = "for" ++ infMark ++ infVP vp {g = Utr ; n = Sg ; p = P3}
} ;
AdvIsNP adv np = PredVP {s = \\_ => adv.s ; a = np.a ; isPron = False} (UseComp (CompNP np)) ;
EmbedSSlash ss = {s = "det" ++ ss.s ! Main ++ ss.c2.s ++ ss.n3 ! agrUSgP3} ;
UttAccNP np = {s = np.s ! NPAcc} ;
lin UseDAP dap =
let
g = neutrum ; ----
m = True ; ---- is this needed for other than Art?
in {
s = table {
NPPoss _ _ => dap.sp ! m ! g ++ BIND ++ "s" ;
_ => dap.sp ! m ! g
} ;
a = agrP3 (ngen2gen g) dap.n ;
isPron = False
} ;
lin UseDAPMasc, UseDAPFem = \dap ->
let
g = utrum ; ----
m = True ; ---- is this needed for other than Art?
in {
s = table {
NPPoss _ _ => dap.sp ! m ! g ++ BIND ++ "s" ;
_ => dap.sp ! m ! g
} ;
a = agrP3 (ngen2gen g) dap.n ;
isPron = False
} ;
lin CardCNCard card cn =
{s = \\g => card.s ! cn.g ++ cn.s ! card.n ! DIndef ! Nom ; n = Pl} ;
GenRP num cn = {
s = \\g_,n,c => "hvis" ++ cn.s ! num.n ! DDef Indef ! Nom ; --- c ?
a = RAg (ngen2gen cn.g) num.n P3
} ;
}
+15
View File
@@ -31,6 +31,21 @@ concrete IdiomNor of Idiom = CatNor **
}
} ;
ExistNPAdv np adv =
mkClause "det" (agrP3 Neutr Sg) (insertObj
(\\_ => np.s ! accusative ++ adv.s) (predV (depV finne_V))) ;
ExistIPAdv ip adv = {
s = \\t,a,p =>
let cls = (mkClause "det" (agrP3 Neutr Sg)
(insertAdv adv.s (predV (depV finne_V)))).s ! t ! a ! p ;
who = ip.s ! accusative
in table {
QDir => who ++ cls ! Inv ;
QIndir => who ++ cls ! Sub
}
} ;
ProgrVP vp =
insertObj (\\a => ["ved å"] ++ infVP vp a) (predV verbBe) ;
+5 -5
View File
@@ -13,7 +13,7 @@ concrete IrregNor of IrregNorAbs = CatNor ** open ParadigmsNor in {
--- lin bli_V = irregV "bli" (variants {"ble" ; "blei"}) "blitt" ;
lin brenne_V = irregV "brenne" (variants {"brant" ; "brente"}) "brent" ;
lin bringe_V = irregV "bringe" "brakte" "brakt" ;
lin burde_V = irregV "burde" "burde" "burdet" ;
lin burde_V = mkV "burde" "bør" "bør" "burde" "burdet" "burde" ;
lin bære_V = irregV "bære" "bar" "båret" ;
lin dra_V = mkV "dra" "drar" "dras" "drog" (variants {"dradd" ; "dratt"}) "dra" ;
lin drikke_V = irregV "drikke" "drakk" "drukket" ;
@@ -41,12 +41,12 @@ concrete IrregNor of IrregNorAbs = CatNor ** open ParadigmsNor in {
lin hjelpe_V = irregV "hjelpe" "hjalp" "hjulpet" ;
lin holde_V = irregV "holde" "holdt" "holdt" ;
lin komme_V = irregV "komme" "kom" "kommet" ;
lin kunne_V = irregV "kunne" "kunne" "kunnet" ;
lin kunne_V = mkV "kunne" "kan" "kan" "kunne" "kunnet" "kunne" ;
lin la_V = irregV "la" "lot" "latt" ;
lin legge_V = irregV "legge" "la" "lagt" ;
lin ligge_V = irregV "ligge" "lå" "ligget" ;
lin løpe_V = irregV "løpe" "løp" (variants {"løpt" ; "løpet"}) ;
lin måtte_V = irregV "måtte" "måtte" "måttet" ;
lin måtte_V = mkV "måtte" "må" "må" "måtte" "måttet" "måtte" ;
lin renne_V = irregV "renne" "rant" "rent" ;
lin se_V = mkV "se" "ser" "ses" "så" "sett" "se" ;
lin selge_V = irregV "selge" "solgte" "solgt" ;
@@ -55,7 +55,7 @@ concrete IrregNor of IrregNorAbs = CatNor ** open ParadigmsNor in {
lin sitte_V = irregV "sitte" "satt" "sittet" ;
lin skjære_V = irregV "skjære" "skar" "skåret" ;
lin skrive_V = irregV "skrive" "skrev" "skrevet" ;
lin skulle_V = irregV "skulle" "skulle" "skullet" ;
lin skulle_V = mkV "skulle" "skal" "skal" "skulle" "skullet" "skulle" ;
lin slå_V = irregV "slå" "slo" "slått" ;
lin slåss_V = mkV "slåss" "slåss" "slåss" "sloss" "slåss" "slåss" ;
lin sove_V = irregV "sove" "sov" "sovet" ;
@@ -69,6 +69,6 @@ concrete IrregNor of IrregNorAbs = CatNor ** open ParadigmsNor in {
lin ta_V = irregV "ta" "tok" "tatt" ;
lin treffe_V = irregV "treffe" "traff" "truffet" ;
lin trives_V = irregV "trives" "trivdes" (variants {"trives" ; "trivs"}) ;
lin ville_V = irregV "ville" "ville" "villet" ;
lin ville_V = mkV "ville" "vil" "vil" "ville" "villet" "ville" ;
lin vite_V = mkV "vite" "vet" "vetes" "visste" "visst" "vit" ;
}
+20
View File
@@ -34,19 +34,39 @@ lin
pot1 d = numPl (d.s ! tiotal) ;
pot1plus d e = {s = \\g => d.s ! tiotal ! invNum ++ e.s ! ental ! g ; n = Pl} ;
pot1as2 n = n ;
pot21 = numPl (cardOrd "hundre" "hundrede") ;
pot2 d =
numPl (\\g => d.s ! ental ! invNum ++ cardOrd "hundre" "hundrede" ! g) ;
pot2plus d e =
{s = \\g => d.s ! ental ! invNum ++ "hundre" ++ "og" ++ e.s ! g ; n = Pl} ;
pot2as3 n = n ;
pot31 = numPl (cardOrd "tusen" "tusende") ;
pot3 n =
numPl (\\g => n.s ! invNum ++ cardOrd "tusen" "tusende" ! g) ;
pot3plus n m =
{s = \\g => n.s ! invNum ++ "tusen" ++ "og" ++ m.s ! g ; n = Pl} ;
pot3as4 n = n ;
pot41 = numPl (cardOrd "en million" "millionte") ;
pot4 n = numPl (\\g => n.s ! NCard masc ++
cardOrd (case n.n of {Sg => "million" ; Pl => "millioner"}) "millionte" ! g) ;
pot4plus n m = {
s = \\g => n.s ! NCard masc ++ case n.n of {Sg => "million" ; Pl => "millioner"} ++ m.s ! g ;
n = Pl
} ;
pot4decimal d = numPl (\\g => d.s ! NCard masc ++ cardOrd "millioner" "millionte" ! g) ;
pot4as5 n = n ;
pot51 = numPl (cardOrd "en milliard" "milliardte") ;
pot5 n = numPl (\\g => n.s ! NCard masc ++
cardOrd (case n.n of {Sg => "milliard" ; Pl => "milliarder"}) "milliardte" ! g) ;
pot5plus n m = {
s = \\g => n.s ! NCard masc ++ case n.n of {Sg => "milliard" ; Pl => "milliarder"} ++ m.s ! g ;
n = Pl
} ;
pot5decimal d = numPl (\\g => d.s ! NCard masc ++ cardOrd "milliarder" "milliardte" ! g) ;
-- Numerals from sequences of digits.
lincat
+16 -5
View File
@@ -372,11 +372,22 @@ oper
mkA2 a p = a ** {c2 = mkComplement p.s ; lock_A2 = <>} ;
mkADeg a b c d e = mkAdject a b c d e ** {isComp = False ; lock_A = <>} ;
regADeg a = case Predef.dp 2 a of {
"ig" => aBillig a ;
"sk" => aRask a ;
_ => aRod a
} ** {isComp = False ; lock_A = <>} ;
regADeg a = case a of {
-- These endings already contain the positive-form inflection. Applying
-- the productive -t/-e suffixes generated forms such as *levendee.
_ + "ende" => mkAdject a a a a a **
{isComp = True ; lock_A = <>} ;
_ + "e" => mkAdject a a a (a + "re") (a + "st") **
{isComp = False ; lock_A = <>} ;
_ => case Predef.dp 2 a of {
"ig" => aBillig a ** {isComp = False ; lock_A = <>} ;
"sk" => aRask a ** {isComp = False ; lock_A = <>} ;
_ => case last a of {
"t" => aAbstrakt a ** {isComp = False ; lock_A = <>} ;
_ => aRod a ** {isComp = False ; lock_A = <>}
}
}
} ;
irregADeg a b c = mkAdject a (a + "t") (a + "e") b c **
{isComp = False ; lock_A = <>} ;
mk3ADeg a b c = mkAdject a b c (a + "ere") (a + "est") **
+11 -1
View File
@@ -11,6 +11,8 @@ concrete StructuralNor of Structural = CatNor **
all_Predet = {s = detForms "all" "alt" "alle" ; p = [] ; a = PNoAg} ;
almost_AdA, almost_AdN = ss "nesten" ;
although_Subj = ss ["selv om"] ;
as_CAdv = X.mkCAdv "like" "som" ;
at_least_AdN = ss "minst" ;
always_AdV = ss "altid" ;
and_Conj = {s1 = [] ; s2 = "og" ; n = Pl ; isDiscont = False} ;
because_Subj = ss "fordi" ;
@@ -55,6 +57,13 @@ concrete StructuralNor of Structural = CatNor **
mkV "måtte" "må" "må" "måtte" "måttet" "mått" **
{c2 = mkComplement [] ; lock_VV = <>} ;
no_Utt = ss ["nei"] ;
no_Quant =
{s,sp = table {
Sg => \\_,_ => genderForms "ingen" "intet" ;
Pl => \\_,_,_ => "ingen"
} ;
det = DIndef
} ;
on_Prep = ss "på" ;
only_Predet = {s = \\_,_ => "kun" ; p = [] ; a = PNoAg} ;
@@ -78,11 +87,12 @@ concrete StructuralNor of Structural = CatNor **
} ;
det = DDef Def
} ;
that_Subj = ss "at" ;
there_Adv = ss "der" ;
there7to_Adv = ss "dit" ;
there7from_Adv = ss "derfra" ;
therefore_PConj = ss "derfor" ;
they_Pron = MorphoNor.mkNP "de" "dem" "deres" "deres" "deres" Utr Pl P1 ;
they_Pron = MorphoNor.mkNP "de" "dem" "deres" "deres" "deres" Utr Pl P3 ;
this_Quant =
{s,sp = table {
Sg => \\_,_ => genderForms ["denne"] ["dette"] ;