mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-06-21 01:06:21 -06:00
184 lines
5.7 KiB
Plaintext
184 lines
5.7 KiB
Plaintext
resource ResSlv = open ParamX, Prelude in {
|
|
|
|
param
|
|
Case = Nom | Gen | Dat | Acc | Loc | Instr;
|
|
Number = Sg | Dl | Pl ;
|
|
Gender = Masc | Fem | Neut ;
|
|
Person = P1 | P2 | P3 ;
|
|
Species = Indef | Def ;
|
|
Animacy = Animate | Inanimate ;
|
|
AGender = AMasc Animacy | AFem | ANeut ;
|
|
|
|
NumAgr = UseNum Number | UseGen;
|
|
DForm = Unit Gender | Teen | Ten | Hundred;
|
|
|
|
VForm = VInf
|
|
| VSup
|
|
| VPastPart Gender Number
|
|
| VPres Number Person
|
|
| VImper1Sg
|
|
| VImper1Dl
|
|
| VImper2 Number ;
|
|
|
|
AForm = APosit Gender Number Case
|
|
| ACompar Gender Number Case
|
|
| ASuperl Gender Number Case
|
|
|
|
-- the rest are not really needed because they seem to be syncretic
|
|
| APositDefNom
|
|
| APositIndefAcc
|
|
| APositDefAcc
|
|
| AComparDefAcc
|
|
| ASuperlDefAcc ;
|
|
|
|
oper
|
|
Agr = {g : Gender; n : Number; p : Person} ;
|
|
|
|
Conj = {s : Str; n : Number} ;
|
|
|
|
mkConj : Str -> Number -> Conj = \str,nr -> { s = str ; n = nr } ;
|
|
|
|
conjNumber : Number -> Number -> Number = \m,n ->
|
|
case m of {
|
|
Sg => n ;
|
|
_ => Pl
|
|
} ;
|
|
|
|
conjAgr : Agr -> Agr -> Agr = \a,b -> {
|
|
g = b.g ;
|
|
n = conjNumber a.n b.n ;
|
|
p = b.p
|
|
} ;
|
|
|
|
VP = {s : Polarity => VForm => Str; s2 : Agr => Str; isCop : Bool ; refl : Str} ;
|
|
|
|
ne : Polarity => Str =
|
|
table {Pos => "" ;
|
|
Neg => "ne"
|
|
} ;
|
|
|
|
ni : Polarity => Str =
|
|
table {Pos => "" ;
|
|
Neg => "ni"
|
|
} ;
|
|
|
|
|
|
--Added the position of the reflexive particle. Needs testing.
|
|
|
|
predV : Bool -> Bool -> Str -> (Polarity => VForm => Str) -> Tense => Polarity => Agr => Str =
|
|
\ispron,iscop,refl,v -> table {
|
|
Pres => \\p,a => v ! p ! VPres a.n a.p ++ refl ;
|
|
Past => \\p,a => case <ispron,p> of {
|
|
<True,Pos> => v ! Pos ! VPastPart a.g a.n ++ refl ++ copula ! p ! VPres a.n a.p ;
|
|
<_ ,_ > => copula ! p ! VPres a.n a.p ++ refl ++ v ! Pos ! VPastPart a.g a.n } ;
|
|
Fut => \\p,a => case <ispron,p> of {
|
|
<True,Pos> => case iscop of {
|
|
False => v ! Pos ! VPastPart a.g a.n ++ refl ++ bom_V ! a.n ! a.p ;
|
|
True => bom_V ! a.n ! a.p
|
|
} ;
|
|
<_ ,_ > => case iscop of {
|
|
False => refl ++ ne ! p ++ bom_V ! a.n ! a.p ++ v ! Pos ! VPastPart a.g a.n ;
|
|
True => ne ! p ++ bom_V ! a.n ! a.p
|
|
} } ;
|
|
Cond => \\p,a => ne ! p ++ "bi" ++ refl ++ v ! Pos ! VPastPart a.g a.n
|
|
} ;
|
|
|
|
copula : Polarity => VForm => Str = \\p =>
|
|
table {
|
|
VInf => ne ! p ++ "biti";
|
|
VSup => ne ! p ++ "bit";
|
|
VPastPart Masc Sg => ni ! p ++ "bil";
|
|
VPastPart Masc Dl => ni ! p ++ "bila";
|
|
VPastPart Masc Pl => ni ! p ++ "bili";
|
|
VPastPart Fem Sg => ni ! p ++ "bila";
|
|
VPastPart Fem Dl => ni ! p ++ "bili";
|
|
VPastPart Fem Pl => ni ! p ++ "bile";
|
|
VPastPart Neut Sg => ni ! p ++ "bilo";
|
|
VPastPart Neut Dl => ni ! p ++ "bili";
|
|
VPastPart Neut Pl => ni ! p ++ "bila";
|
|
VPres Sg P1 => ni ! p + "sem";
|
|
VPres Sg P2 => ni ! p + "si";
|
|
VPres Sg P3 => case p of {Pos=>"je"; Neg=>"ni"};
|
|
VPres Dl P1 => ni ! p + "sva";
|
|
VPres Dl P2 => ni ! p + "sta";
|
|
VPres Dl P3 => ni ! p + "sta";
|
|
VPres Pl P1 => ni ! p + "smo";
|
|
VPres Pl P2 => ni ! p + "ste";
|
|
VPres Pl P3 => ni ! p + "so";
|
|
VImper1Sg => ne ! p ++ "bodita";
|
|
VImper1Dl => ne ! p ++ "bodite";
|
|
VImper2 Sg => ne ! p ++ "bodi";
|
|
VImper2 Dl => ne ! p ++ "bodiva";
|
|
VImper2 Pl => ne ! p ++ "bodimo"
|
|
};
|
|
|
|
bom_V : Number => Person => Str =
|
|
table {
|
|
Sg => table {
|
|
P1 => "bom" ;
|
|
P2 => "boš" ;
|
|
P3 => "bo"
|
|
} ;
|
|
Dl => table {
|
|
P1 => "bova" ;
|
|
P2 => "bosta" ;
|
|
P3 => "bosta"
|
|
} ;
|
|
Pl => table {
|
|
P1 => "bomo" ;
|
|
P2 => "boste" ;
|
|
P3 => "bodo"
|
|
}
|
|
} ;
|
|
|
|
reflexive : Case => Str =
|
|
table {
|
|
(Acc | Gen) => "se" ;
|
|
(Loc | Dat) => "si" ;
|
|
Instr => "sabo" ;
|
|
_ => "wrong" --we should never get here
|
|
} ;
|
|
|
|
|
|
Clause : Type = {
|
|
s : Tense => Anteriority => Polarity => Str
|
|
} ;
|
|
|
|
|
|
-- Ändra här så att vi kan fixa in det reflexiva pronomenet. Ändra även så att vi har en V2Slash med ett särskilt fält för reflexiv?
|
|
|
|
mkClause : Str -> Agr -> Bool -> VP -> Clause =
|
|
\subj,agr,ispron,vp -> {
|
|
s = \\t,a,p =>
|
|
case ispron of {
|
|
False => subj ++ predV ispron vp.isCop vp.refl vp.s ! t ! p ! agr ++ vp.s2 ! agr ;
|
|
True => case vp.isCop of {
|
|
False => predV ispron vp.isCop vp.refl vp.s ! t ! p ! agr ++ vp.s2 ! agr ;
|
|
True => vp.s2 ! agr ++ predV ispron vp.isCop vp.refl vp.s ! t ! p ! agr
|
|
}
|
|
}
|
|
} ;
|
|
|
|
insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> vp ** {
|
|
s2 = \\a => vp.s2 ! a ++ obj ! a ;
|
|
} ;
|
|
|
|
numAgr2num : NumAgr => Number =
|
|
table {UseNum n => n; UseGen => Pl} ;
|
|
|
|
agender2gender : AGender -> Gender = \ag ->
|
|
case ag of {
|
|
AMasc _ => Masc ;
|
|
AFem => Fem ;
|
|
ANeut => Neut
|
|
} ;
|
|
|
|
inanimateGender : Gender -> AGender = \g ->
|
|
case g of {
|
|
Masc => AMasc Inanimate ;
|
|
Fem => AFem ;
|
|
Neut => ANeut
|
|
} ;
|
|
|
|
}
|