Files
gf-core/examples/letter/LetterRus.gf
2009-06-13 13:36:41 +00:00

179 lines
6.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 {_ => ["менеджерами проектов"]}
}} ;
}