mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-10 13:29:32 -06:00
179 lines
6.1 KiB
Plaintext
179 lines
6.1 KiB
Plaintext
concrete LetterRus of Letter = {
|
||
|
||
flags lexer=textlit ; unlexer=textlit ; coding=utf8 ;
|
||
|
||
param Gen = masc | fem ;
|
||
param Num = sg | pl ;
|
||
param Kas = nom | acc ;
|
||
param DepNum = depnum | cnum Num ;
|
||
param DepGen = depgen | cgen Gen ;
|
||
|
||
oper SS = {s : Str} ;
|
||
oper SSDep = {s : Num => Gen => Str} ; -- needs Num and Gen
|
||
oper SSSrc = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
|
||
oper SSSrc2 = {s : Num => Gen => Str ; n : DepNum ; g : DepGen} ; -- gives&needs
|
||
oper SSDep2 = {s : DepNum => DepGen => Num => Gen => Str} ; -- needs Auth's&Rec's
|
||
oper SSSrcGen = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
|
||
|
||
oper
|
||
ss : Str -> SS = \s -> {s = s} ;
|
||
regAdj : Str -> Num => Gen => Tok =\s -> table {
|
||
sg => table {masc => s+"ой"; fem => s+"ая"};
|
||
pl => table {masc => s+"ие"; fem => s+"ие"}
|
||
};
|
||
regVer : Str -> Num => Gen => Str = \s -> table {
|
||
sg => table {masc => s; fem => s+"а"};
|
||
pl => table {masc => s+"ы"; fem => s+"ы"}
|
||
};
|
||
|
||
hello : Str -> Num => Str = \s ->
|
||
table {sg => s ; pl => s+"те" } ;
|
||
|
||
regVerPerf : Str -> Num => Gen => Str = \s -> table {
|
||
sg => table {masc => s+"ся"; fem => s+"ось"};
|
||
pl => table {masc => s+"ись"; fem => s+"ись"}
|
||
};
|
||
|
||
ego : Num => Str =
|
||
table {sg => "я" ; pl => "вы" } ;
|
||
egoHave : Num => Str =
|
||
table {sg => ["я имею"] ; pl => ["мы имеем"]} ;
|
||
|
||
haveBeen : Num => Gen => Str = table {
|
||
sg => table {masc => ["ты был"] ; fem => ["ты была"] };
|
||
pl => table {masc => ["вы были"]; fem => ["вы были"]}
|
||
};
|
||
|
||
thatPrep = [", что"] ;
|
||
informYou : Num => Str =
|
||
table {sg => ["сообщить тебе"]; pl => ["сообщить вам"]} ;
|
||
|
||
loveYou : Num => Num => Str = table {
|
||
sg => table {sg => ["я тебя люблю"] ;
|
||
pl => ["я вас люблю"]} ;
|
||
pl => table {sg => ["мы тебя любим"] ;
|
||
pl => ["мы вас любим"]}
|
||
} ;
|
||
|
||
constNG : Str -> Num -> Gen -> SSSrc2 = \str,num,gen ->
|
||
{s = table {_ => table {_ => str}} ; n = cnum num ; g = cgen gen} ;
|
||
|
||
dep2num : DepNum -> Num -> Num = \dn,n -> case dn of {
|
||
depnum => n ;
|
||
cnum cn => cn
|
||
} ;
|
||
dep2gen : DepGen -> Gen -> Gen = \dg,g -> case dg of {
|
||
depgen => case g of {
|
||
masc => fem ;
|
||
fem => masc
|
||
}; -- negative dependence: the author is of opposite sex
|
||
cgen cg => cg
|
||
} ;
|
||
|
||
RET = "" ; -- &-
|
||
|
||
lincat
|
||
Letter = SS ;
|
||
Recipient = SSSrc ;
|
||
Author = SSSrc2 ;
|
||
Message = SSDep2 ;
|
||
Heading = SSSrc ;
|
||
Ending = SSSrc2 ;
|
||
Mode = SSDep2 ;
|
||
Sentence = SSDep2 ;
|
||
NounPhrase = SSSrcGen ;
|
||
Position = SSDep ;
|
||
|
||
lin
|
||
MkLetter head mess end =
|
||
ss (head.s ++ "," ++ RET ++
|
||
mess.s ! end.n ! end.g ! head.n ! head.g ++ "." ++ RET ++
|
||
end.s ! head.n ! head.g) ;
|
||
|
||
DearRec rec = {s = regAdj "Дорог"
|
||
! rec.n ! rec.g ++ rec.s ; n = rec.n ; g = rec.g} ;
|
||
PlainRec rec = rec ;
|
||
HelloRec rec = {s = hello "Здравствуй" ! rec.n ++ rec.s ; n = rec.n ; g = rec.g} ;
|
||
JustHello rec = {s = hello "Здравствуй" ! rec.n ; n = rec.n ; g = rec.g} ;
|
||
|
||
ModeSent mode sent =
|
||
{s =
|
||
table {na => table {xa => table {nr => table {xr =>
|
||
mode.s ! na ! xa ! nr ! xr ++ sent.s ! na ! xa ! nr ! xr}}}}
|
||
} ;
|
||
PlainSent sent = sent ;
|
||
|
||
FormalEnding auth =
|
||
{s =
|
||
table {n => table {g =>
|
||
"С" ++
|
||
["наилучшими пожеланиями ,"] ++ RET ++ auth.s ! n ! g}} ;
|
||
n = auth.n ; g = auth.g} ;
|
||
InformalEnding auth =
|
||
{s = table {n => table {g => ["С дружеским приветом , "] ++ RET ++ auth.s ! n ! g}} ;
|
||
n = auth.n ; g = auth.g} ;
|
||
|
||
ColleaguesHe = {s = "коллеги" ; n = pl ; g = masc} ;
|
||
ColleaguesShe = {s = "коллеги" ; n = pl ; g = fem} ;
|
||
ColleagueHe = {s = "коллега" ; n = sg ; g = masc} ;
|
||
ColleagueShe = {s = "коллега" ; n = sg ; g = fem} ;
|
||
DarlingHe = {s = "любимый" ; n = sg ; g = masc} ;
|
||
DarlingShe = {s = "любимая" ; n = sg ; g = fem} ;
|
||
NameHe s = {s = s.s ; n = sg ; g = masc} ;
|
||
NameShe s = {s = s.s ; n = sg ; g = fem} ;
|
||
|
||
|
||
Honour = {s =
|
||
table {na => table {xa => table {nr => table {xr =>
|
||
egoHave ! dep2num na nr ++
|
||
["честь"] ++ informYou ! nr ++ thatPrep}}}}
|
||
} ;
|
||
|
||
Regret = {s =
|
||
table {na => table {ga => table {nr => table {gr =>
|
||
let {dga = dep2gen ga gr ; dna = dep2num na nr} in
|
||
ego ! dna ++ regVer "вынужден" ! dna ! dga ++
|
||
["сообщить"] ++ thatPrep}}}}
|
||
} ;
|
||
|
||
|
||
President = constNG ["президент"] sg masc ;
|
||
Mother = constNG ["мама"] sg fem ;
|
||
Spouse = {s = table {
|
||
sg => table {fem => ["твой муж"] ; masc => ["твоя жена"]} ;
|
||
pl => table {fem => ["ваши мужья"] ; masc => ["ваши жены"]}
|
||
} ; n = depnum ; g = depgen} ;
|
||
Dean = constNG ["декан"] sg masc ;
|
||
Name s = constNG s.s sg masc ; ---
|
||
|
||
BePromoted pos = {s =
|
||
table {na => table {xa => table {nr => table {xr =>
|
||
haveBeen ! nr ! xr ++ regVer "назначен" ! nr ! xr ++
|
||
pos.s ! nr ! xr}}}}
|
||
} ;
|
||
GoBankrupt np = {s =
|
||
table {na => table {xa => table {nr => table {xr =>
|
||
np.s ++ regVerPerf "обанкротил" ! np.n ! np.g }}}}
|
||
} ;
|
||
ILoveYou = {s =
|
||
table {na => table {xa => table {nr => table {xr =>
|
||
loveYou ! dep2num na nr ! nr}}}}
|
||
} ;
|
||
|
||
Company = {s = ["наше предприятие"] ; n = sg ; g = fem} ;
|
||
Competitor = {s = ["наш конкурент"] ; n = sg ; g = masc} ;
|
||
OurCustomers = {s = ["наши клиенты"] ; n = pl ; g = masc} ;
|
||
|
||
Senior = {s = table {sg => table {g => ["старшим научным сотрудником"]} ;
|
||
pl => table {g =>[ "старшими научными сотрудниками"]}
|
||
}
|
||
} ;
|
||
|
||
ProjectManager = {s =
|
||
table {
|
||
sg => table {_ => ["менеджером проекта"]} ;
|
||
pl => table {_ => ["менеджерами проектов"]}
|
||
}} ;
|
||
|
||
}
|