1
0
forked from GitHub/gf-core

changed names of resource-1.3; added a note on homepage on release

This commit is contained in:
aarne
2008-06-25 16:54:35 +00:00
parent 7d721eb16e
commit c5c6d13546
1729 changed files with 113 additions and 32 deletions

View File

@@ -1,412 +0,0 @@
concrete Hebrew of Letter=open ResHebU in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;oper A''114:Str=table ResHebU.Gen[("в░в÷в≥"++("в·в╕в≤в╒в╗в╙"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘"))))("в░в÷в≥"++("в·в╕в≤в╒в╗"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘"))))];
oper A''115:Str=table ResHebU.Gen[("в░в÷в≈в÷в∙"++("в·в╕в≤в╒в╗в∙в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в░в÷в≈в÷в∙"++("в·в╕в≤в╒в╗в≥в²"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))];
oper A''117:Str=table ResHebU.Gen{p_Regret__3=>"в░в÷в≥"++("в·в╕в≤в╒в╗"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘")))};
oper A''118:Str=table ResHebU.Gen[("в░в÷в≈в÷в∙"++("в·в╕в≤в╒в╗в≥в²"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в░в÷в≈в÷в∙"++("в·в╕в≤в╒в╗в≥в²"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))];
oper A''120:Str=table ResHebU.Gen{p_Regret__3=>"в░в÷в≥"++("в·в╕в≤в╒в╗в╙"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘")))};
oper A''121:Str=table ResHebU.Gen[("в░в÷в≈в÷в∙"++("в·в╕в≤в╒в╗в∙в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в░в÷в≈в÷в∙"++("в·в╕в≤в╒в╗в∙в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))];
oper A''22:Str=table ResHebU.Gen[("в■в÷в÷в≥"++("в·в╙в⌡в▒в⌠в╙"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘"))))("в■в÷в÷в≥"++("в·в╙в⌡в▒в⌠"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘"))))];
oper A''23:Str=table ResHebU.Gen[("в■в÷в÷в∙"++("в·в╙в⌡в▒в⌠в∙в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в■в÷в÷в∙"++("в·в╙в⌡в▒в⌠в≥в²"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))];
oper A''25:Str=table ResHebU.Gen{p_Honour__3=>"в■в÷в÷в≥"++("в·в╙в⌡в▒в⌠"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘")))};
oper A''26:Str=table ResHebU.Gen[("в■в÷в÷в∙"++("в·в╙в⌡в▒в⌠в≥в²"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в■в÷в÷в∙"++("в·в╙в⌡в▒в⌠в≥в²"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))];
oper A''28:Str=table ResHebU.Gen{p_Honour__3=>"в■в÷в÷в≥"++("в·в╙в⌡в▒в⌠в╙"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘")))};
oper A''29:Str=table ResHebU.Gen[("в■в÷в÷в∙"++("в·в╙в⌡в▒в⌠в∙в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в■в÷в÷в∙"++("в·в╙в⌡в▒в⌠в∙в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))];
oper A''47:Str=table ResHebU.Gen[("в░в÷в≥"++("в░в∙в■в▒в╙"++"в░в∙в╙в "))("в░в÷в≥"++("в░в∙в■в▒"++"в░в∙в╙в "))];
oper A''48:Str=table ResHebU.Gen[("в░в÷в≈в÷в∙"++("в░в∙в■в▒в∙в╙"++"в░в╙в⌡в²"))("в░в÷в≈в÷в∙"++("в░в∙в■в▒в≥в²"++"в░в╙в⌡в÷"))];
oper A''5:Str=<ResHebU.cgen<ResHebU.masc>>;
oper A''50:Str=table ResHebU.Gen{p_ILoveYou__3=>"в░в÷в≥"++("в░в∙в■в▒"++"в░в∙в╙в ")};
oper A''51:Str=table ResHebU.Gen[("в░в÷в≈в÷в∙"++("в░в∙в■в▒в≥в²"++"в░в╙в⌡в²"))("в░в÷в≈в÷в∙"++("в░в∙в■в▒в≥в²"++"в░в╙в⌡в÷"))];
oper A''53:Str=table ResHebU.Gen{p_ILoveYou__3=>"в░в÷в≥"++("в░в∙в■в▒в╙"++"в░в∙в╙в ")};
oper A''54:Str=table ResHebU.Gen[("в░в÷в≈в÷в∙"++("в░в∙в■в▒в∙в╙"++"в░в╙в⌡в²"))("в░в÷в≈в÷в∙"++("в░в∙в■в▒в∙в╙"++"в░в╙в⌡в÷"))];
oper A''6:Str=<ResHebU.cnum<ResHebU.sg>>;
oper A''79:Str=<ResHebU.cgen<ResHebU.fem>>;
oper A''93:Str=<ResHebU.cnum<ResHebU.pl>>;
lincat Author={g:ResHebU.DepGen;n:ResHebU.DepNum;s:(ResHebU.Num=>(ResHebU.Gen=>Str))}={g=<ResHebU.depgen>;n=<ResHebU.depnum>;s=table ResHebU.Num{p_Author__0=>table ResHebU.Gen{p_Author__1=>str@0}}};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResHebU.DepNum{p_BePromoted__0=>table ResHebU.DepGen{p_BePromoted__1=>table ResHebU.Num[(table ResHebU.Gen{p_BePromoted__3=>"в╖в∙в⌠в·в╙"++("в°в╙в╓в╖в≥в⌠"++("в╘в°"++Position@0.s!<ResHebU.sg>!$p_BePromoted__3))})(table ResHebU.Gen[("в╖в∙в⌠в·в╙в²"++("в°в╙в╓в╖в≥в⌠"++("в╘в°"++Position@0.s!<ResHebU.pl>!<ResHebU.masc>)))("в╖в∙в⌠в·в╙в÷"++("в°в╙в╓в╖в≥в⌠"++("в╘в°"++Position@0.s!<ResHebU.pl>!<ResHebU.fem>)))])]}}};"в╖в∙в⌠в·в╙ в°в╙в╓в╖в≥в⌠ в╘в° Position_0";
lin ColleagueHe:Letter.Recipient=\->{g=<ResHebU.masc>;n=<ResHebU.sg>;s="в╒в·в≥в╙"};"{ResHebU.masc}";
lin ColleagueShe:Letter.Recipient=\->{g=<ResHebU.fem>;n=<ResHebU.sg>;s="в╒в·в≥в╙в■"};"{ResHebU.fem}";
lin ColleaguesHe:Letter.Recipient=\->{g=<ResHebU.masc>;n=<ResHebU.pl>;s="в╒в·в≥в╙в≥в²"};"{ResHebU.masc}";
lin ColleaguesShe:Letter.Recipient=\->{g=<ResHebU.fem>;n=<ResHebU.pl>;s="в╒в·в≥в╙в∙в╙"};"{ResHebU.fem}";
lin Company:Letter.NounPhrase=\->{g=<ResHebU.fem>;n=<ResHebU.sg>;s="в≈в▒в╗в╙в÷в∙"};"{ResHebU.fem}";
lin Competitor:Letter.NounPhrase=\->{g=<ResHebU.masc>;n=<ResHebU.sg>;s="в■в·в╙в≈в╗в■"++("в■в▓в╗в∙в╒"++("в▒в≥в∙в╙в╗"++"в╘в°в÷в∙"))};"{ResHebU.masc}";
lin DarlingHe:Letter.Recipient=\->{g=<ResHebU.masc>;n=<ResHebU.sg>;s="в░в■в∙в▒в≥"};"{ResHebU.masc}";
lin DarlingShe:Letter.Recipient=\->{g=<ResHebU.fem>;n=<ResHebU.sg>;s="в░в■в∙в▒в╙в≥"};"{ResHebU.fem}";
lin Dean:Letter.Author=\->{g=Hebrew.A''5;n=Hebrew.A''6;s=table ResHebU.Num{p_Dean__0=>table ResHebU.Gen{p_Dean__1=>"в⌠в≥в╖в÷"}}};"{ResHebU.cgen} {ResHebU.masc}";
lin DearRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=Recipient@0.s++table ResHebU.Num[(table ResHebU.Gen["в≥в╖в╗""в≥в╖в╗в■"]!(Recipient@0.g))(table ResHebU.Gen["в≥в╖в╗в≥в²""в≥в╖в╗в∙в╙"]!(Recipient@0.g))]!(Recipient@0.n)};"Recipient_0";
lincat Ending={g:ResHebU.DepGen;n:ResHebU.DepNum;s:(ResHebU.Num=>(ResHebU.Gen=>Str))}={g=<ResHebU.depgen>;n=<ResHebU.depnum>;s=table ResHebU.Num{p_Ending__0=>table ResHebU.Gen{p_Ending__1=>str@0}}};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{g=Author@0.g;n=Author@0.n;s=table ResHebU.Num{p_FormalEnding__0=>table ResHebU.Gen{p_FormalEnding__1=>",в▒в⌡в▒в∙в⌠"++("в╗в▒"++"&-")++Author@0.s!$p_FormalEnding__0!$p_FormalEnding__1}}};"Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResHebU.DepNum{p_GoBankrupt__0=>table ResHebU.DepGen{p_GoBankrupt__1=>table ResHebU.Num{p_GoBankrupt__2=>table ResHebU.Gen{p_GoBankrupt__3=>NounPhrase@0.s++(table ResHebU.Num[(table ResHebU.Gen["в╓в╘в≤""в╓в╘в≤в■"]!(NounPhrase@0.g))(table ResHebU.Gen{p_GoBankrupt__5=>"в╓в╘в≤в∙"}!(NounPhrase@0.g))]!(NounPhrase@0.n)++"в╗в▓в°")}}}}};"NounPhrase_0 в╓в╘в≤ в╗в▓в°";
lincat Heading={g:ResHebU.Gen;n:ResHebU.Num;s:Str}={g=<ResHebU.masc>;n=<ResHebU.sg>;s=str@0};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=table ResHebU.Num{p_HelloRec__0=>"в╘в°в∙в²"}!(Recipient@0.n)++Recipient@0.s};"Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResHebU.DepNum[(table ResHebU.DepGen[(table ResHebU.Num[Hebrew.A''22 Hebrew.A''23])(table ResHebU.Num[Hebrew.A''25 Hebrew.A''26])(table ResHebU.Num[Hebrew.A''28 Hebrew.A''29])])(table ResHebU.DepGen[(table ResHebU.Num[Hebrew.A''22(table ResHebU.Gen[("в■в÷в÷в≥"++("в·в╙в⌡в▒в⌠в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в■в÷в÷в≥"++("в·в╙в⌡в▒в⌠"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))])])(table ResHebU.Num[Hebrew.A''25(table ResHebU.Gen[("в■в÷в÷в≥"++("в·в╙в⌡в▒в⌠"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в■в÷в÷в≥"++("в·в╙в⌡в▒в⌠"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))])])(table ResHebU.Num[Hebrew.A''28(table ResHebU.Gen[("в■в÷в÷в≥"++("в·в╙в⌡в▒в⌠в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в■в÷в÷в≥"++("в·в╙в⌡в▒в⌠в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))])])])(table ResHebU.DepGen[(table ResHebU.Num[(table ResHebU.Gen[("в■в÷в÷в∙"++("в·в╙в⌡в▒в⌠в∙в╙"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘"))))("в■в÷в÷в∙"++("в·в╙в⌡в▒в⌠в≥в²"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘"))))])Hebrew.A''23])(table ResHebU.Num[(table ResHebU.Gen{p_Honour__3=>"в■в÷в÷в∙"++("в·в╙в⌡в▒в⌠в≥в²"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘")))})Hebrew.A''26])(table ResHebU.Num[(table ResHebU.Gen{p_Honour__3=>"в■в÷в÷в∙"++("в·в╙в⌡в▒в⌠в∙в╙"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘")))})Hebrew.A''29])])]};"в■в÷в÷в≥ в·в╙в⌡в▒в⌠в╙ в°в■в∙в⌠в≥в╒ в°в  в╘";
lin ILoveYou:Letter.Sentence=\->{s=table ResHebU.DepNum[(table ResHebU.DepGen[(table ResHebU.Num[Hebrew.A''47 Hebrew.A''48])(table ResHebU.Num[Hebrew.A''50 Hebrew.A''51])(table ResHebU.Num[Hebrew.A''53 Hebrew.A''54])])(table ResHebU.DepGen[(table ResHebU.Num[Hebrew.A''47(table ResHebU.Gen[("в░в÷в≥"++("в░в∙в■в▒в╙"++"в░в╙в⌡в²"))("в░в÷в≥"++("в░в∙в■в▒"++"в░в╙в⌡в÷"))])])(table ResHebU.Num[Hebrew.A''50(table ResHebU.Gen[("в░в÷в≥"++("в░в∙в■в▒"++"в░в╙в⌡в²"))("в░в÷в≥"++("в░в∙в■в▒"++"в░в╙в⌡в÷"))])])(table ResHebU.Num[Hebrew.A''53(table ResHebU.Gen[("в░в÷в≥"++("в░в∙в■в▒в╙"++"в░в╙в⌡в²"))("в░в÷в≥"++("в░в∙в■в▒в╙"++"в░в╙в⌡в÷"))])])])(table ResHebU.DepGen[(table ResHebU.Num[(table ResHebU.Gen[("в░в÷в≈в÷в∙"++("в░в∙в■в▒в∙в╙"++"в░в∙в╙в "))("в░в÷в≈в÷в∙"++("в░в∙в■в▒в≥в²"++"в░в∙в╙в "))])Hebrew.A''48])(table ResHebU.Num[(table ResHebU.Gen{p_ILoveYou__3=>"в░в÷в≈в÷в∙"++("в░в∙в■в▒в≥в²"++"в░в∙в╙в ")})Hebrew.A''51])(table ResHebU.Num[(table ResHebU.Gen{p_ILoveYou__3=>"в░в÷в≈в÷в∙"++("в░в∙в■в▒в∙в╙"++"в░в∙в╙в ")})Hebrew.A''54])])]};"в░в÷в≥ в░в∙в■в▒в╙ в░в∙в╙в ";
lin InformalEnding:Letter.Ending=\Author@0->{g=Author@0.g;n=Author@0.n;s=table ResHebU.Num{p_InformalEnding__0=>table ResHebU.Gen{p_InformalEnding__1=>",в▒в▒в╗в⌡в■"++"&-"++Author@0.s!$p_InformalEnding__0!$p_InformalEnding__1}}};"Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=table ResHebU.Num{p_JustHello__0=>"в╘в°в∙в²"}!(Recipient@0.n)};"Recipient_0";
lincat Letter={s:Str}={s=str@0};"Letter";
lincat Message={s:(ResHebU.DepNum=>(ResHebU.DepGen=>(ResHebU.Num=>(ResHebU.Gen=>Str))))}={s=table ResHebU.DepNum{p_Message__0=>table ResHebU.DepGen{p_Message__1=>table ResHebU.Num{p_Message__2=>table ResHebU.Gen{p_Message__3=>str@0}}}}};"Message";
lin MkLetter:Letter.Letter=\Heading@0,Message@1,Ending@2->{s=","++(Heading@0.s++("&-"++(Message@1.s!(Ending@2.n)!(Ending@2.g)!(Heading@0.n)!(Heading@0.g)++("&-"++Ending@2.s!(Heading@0.n)!(Heading@0.g)))))};", Heading_0 &- Message_1 &- Ending_2";
lincat Mode={s:(ResHebU.DepNum=>(ResHebU.DepGen=>(ResHebU.Num=>(ResHebU.Gen=>Str))))}={s=table ResHebU.DepNum{p_Mode__0=>table ResHebU.DepGen{p_Mode__1=>table ResHebU.Num{p_Mode__2=>table ResHebU.Gen{p_Mode__3=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResHebU.DepNum[(table ResHebU.DepGen[(table ResHebU.Num{p_ModeSent__2=>table ResHebU.Gen{p_ModeSent__3=>Mode@0.s!<ResHebU.depnum>!<ResHebU.depgen>!$p_ModeSent__2!$p_ModeSent__3++Sentence@1.s!<ResHebU.depnum>!<ResHebU.depgen>!$p_ModeSent__2!$p_ModeSent__3}})(table ResHebU.Num{p_ModeSent__2=>table ResHebU.Gen[(Mode@0.s!<ResHebU.depnum>!Hebrew.A''5!$p_ModeSent__2!<ResHebU.masc>++Sentence@1.s!<ResHebU.depnum>!Hebrew.A''5!$p_ModeSent__2!<ResHebU.masc>)(Mode@0.s!<ResHebU.depnum>!Hebrew.A''5!$p_ModeSent__2!<ResHebU.fem>++Sentence@1.s!<ResHebU.depnum>!Hebrew.A''5!$p_ModeSent__2!<ResHebU.fem>)]})(table ResHebU.Num{p_ModeSent__2=>table ResHebU.Gen[(Mode@0.s!<ResHebU.depnum>!Hebrew.A''79!$p_ModeSent__2!<ResHebU.masc>++Sentence@1.s!<ResHebU.depnum>!Hebrew.A''79!$p_ModeSent__2!<ResHebU.masc>)(Mode@0.s!<ResHebU.depnum>!Hebrew.A''79!$p_ModeSent__2!<ResHebU.fem>++Sentence@1.s!<ResHebU.depnum>!Hebrew.A''79!$p_ModeSent__2!<ResHebU.fem>)]})])(table ResHebU.DepGen[(table ResHebU.Num[(table ResHebU.Gen{p_ModeSent__3=>Mode@0.s!Hebrew.A''6!<ResHebU.depgen>!<ResHebU.sg>!$p_ModeSent__3++Sentence@1.s!Hebrew.A''6!<ResHebU.depgen>!<ResHebU.sg>!$p_ModeSent__3})(table ResHebU.Gen{p_ModeSent__3=>Mode@0.s!Hebrew.A''6!<ResHebU.depgen>!<ResHebU.pl>!$p_ModeSent__3++Sentence@1.s!Hebrew.A''6!<ResHebU.depgen>!<ResHebU.pl>!$p_ModeSent__3})])(table ResHebU.Num[(table ResHebU.Gen[(Mode@0.s!Hebrew.A''6!Hebrew.A''5!<ResHebU.sg>!<ResHebU.masc>++Sentence@1.s!Hebrew.A''6!Hebrew.A''5!<ResHebU.sg>!<ResHebU.masc>)(Mode@0.s!Hebrew.A''6!Hebrew.A''5!<ResHebU.sg>!<ResHebU.fem>++Sentence@1.s!Hebrew.A''6!Hebrew.A''5!<ResHebU.sg>!<ResHebU.fem>)])(table ResHebU.Gen[(Mode@0.s!Hebrew.A''6!Hebrew.A''5!<ResHebU.pl>!<ResHebU.masc>++Sentence@1.s!Hebrew.A''6!Hebrew.A''5!<ResHebU.pl>!<ResHebU.masc>)(Mode@0.s!Hebrew.A''6!Hebrew.A''5!<ResHebU.pl>!<ResHebU.fem>++Sentence@1.s!Hebrew.A''6!Hebrew.A''5!<ResHebU.pl>!<ResHebU.fem>)])])(table ResHebU.Num[(table ResHebU.Gen[(Mode@0.s!Hebrew.A''6!Hebrew.A''79!<ResHebU.sg>!<ResHebU.masc>++Sentence@1.s!Hebrew.A''6!Hebrew.A''79!<ResHebU.sg>!<ResHebU.masc>)(Mode@0.s!Hebrew.A''6!Hebrew.A''79!<ResHebU.sg>!<ResHebU.fem>++Sentence@1.s!Hebrew.A''6!Hebrew.A''79!<ResHebU.sg>!<ResHebU.fem>)])(table ResHebU.Gen[(Mode@0.s!Hebrew.A''6!Hebrew.A''79!<ResHebU.pl>!<ResHebU.masc>++Sentence@1.s!Hebrew.A''6!Hebrew.A''79!<ResHebU.pl>!<ResHebU.masc>)(Mode@0.s!Hebrew.A''6!Hebrew.A''79!<ResHebU.pl>!<ResHebU.fem>++Sentence@1.s!Hebrew.A''6!Hebrew.A''79!<ResHebU.pl>!<ResHebU.fem>)])])])(table ResHebU.DepGen[(table ResHebU.Num[(table ResHebU.Gen{p_ModeSent__3=>Mode@0.s!Hebrew.A''93!<ResHebU.depgen>!<ResHebU.sg>!$p_ModeSent__3++Sentence@1.s!Hebrew.A''93!<ResHebU.depgen>!<ResHebU.sg>!$p_ModeSent__3})(table ResHebU.Gen{p_ModeSent__3=>Mode@0.s!Hebrew.A''93!<ResHebU.depgen>!<ResHebU.pl>!$p_ModeSent__3++Sentence@1.s!Hebrew.A''93!<ResHebU.depgen>!<ResHebU.pl>!$p_ModeSent__3})])(table ResHebU.Num[(table ResHebU.Gen[(Mode@0.s!Hebrew.A''93!Hebrew.A''5!<ResHebU.sg>!<ResHebU.masc>++Sentence@1.s!Hebrew.A''93!Hebrew.A''5!<ResHebU.sg>!<ResHebU.masc>)(Mode@0.s!Hebrew.A''93!Hebrew.A''5!<ResHebU.sg>!<ResHebU.fem>++Sentence@1.s!Hebrew.A''93!Hebrew.A''5!<ResHebU.sg>!<ResHebU.fem>)])(table ResHebU.Gen[(Mode@0.s!Hebrew.A''93!Hebrew.A''5!<ResHebU.pl>!<ResHebU.masc>++Sentence@1.s!Hebrew.A''93!Hebrew.A''5!<ResHebU.pl>!<ResHebU.masc>)(Mode@0.s!Hebrew.A''93!Hebrew.A''5!<ResHebU.pl>!<ResHebU.fem>++Sentence@1.s!Hebrew.A''93!Hebrew.A''5!<ResHebU.pl>!<ResHebU.fem>)])])(table ResHebU.Num[(table ResHebU.Gen[(Mode@0.s!Hebrew.A''93!Hebrew.A''79!<ResHebU.sg>!<ResHebU.masc>++Sentence@1.s!Hebrew.A''93!Hebrew.A''79!<ResHebU.sg>!<ResHebU.masc>)(Mode@0.s!Hebrew.A''93!Hebrew.A''79!<ResHebU.sg>!<ResHebU.fem>++Sentence@1.s!Hebrew.A''93!Hebrew.A''79!<ResHebU.sg>!<ResHebU.fem>)])(table ResHebU.Gen[(Mode@0.s!Hebrew.A''93!Hebrew.A''79!<ResHebU.pl>!<ResHebU.masc>++Sentence@1.s!Hebrew.A''93!Hebrew.A''79!<ResHebU.pl>!<ResHebU.masc>)(Mode@0.s!Hebrew.A''93!Hebrew.A''79!<ResHebU.pl>!<ResHebU.fem>++Sentence@1.s!Hebrew.A''93!Hebrew.A''79!<ResHebU.pl>!<ResHebU.fem>)])])])]};"Mode_0 Sentence_1";
lin Mother:Letter.Author=\->{g=Hebrew.A''79;n=Hebrew.A''6;s=table ResHebU.Num{p_Mother__0=>table ResHebU.Gen{p_Mother__1=>"в░в·в░"}}};"{ResHebU.cgen} {ResHebU.fem}";
lin Name:Letter.Author=\String@0->{g=Hebrew.A''5;n=Hebrew.A''6;s=table ResHebU.Num{p_Name__0=>table ResHebU.Gen{p_Name__1=>String@0.s}}};"{ResHebU.cgen} {ResHebU.masc}";
lin NameHe:Letter.Recipient=\String@0->{g=<ResHebU.masc>;n=<ResHebU.sg>;s=String@0.s};"{ResHebU.masc}";
lin NameShe:Letter.Recipient=\String@0->{g=<ResHebU.fem>;n=<ResHebU.sg>;s=String@0.s};"{ResHebU.fem}";
lincat NounPhrase={g:ResHebU.Gen;n:ResHebU.Num;s:Str}={g=<ResHebU.masc>;n=<ResHebU.sg>;s=str@0};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{g=<ResHebU.masc>;n=<ResHebU.pl>;s="в°в╖в∙в≈в∙в╙в≥в÷в∙"};"{ResHebU.masc}";
lin PlainRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=Recipient@0.s};"Recipient_0";
lin PlainSent:Letter.Message=\Sentence@0->{s=Sentence@0.s};"Sentence_0";
lincat Position={s:(ResHebU.Num=>(ResHebU.Gen=>Str))}={s=table ResHebU.Num{p_Position__0=>table ResHebU.Gen{p_Position__1=>str@0}}};"Position";
lin President:Letter.Author=\->{g=Hebrew.A''5;n=Hebrew.A''6;s=table ResHebU.Num{p_President__0=>table ResHebU.Gen{p_President__1=>"в÷в╘в≥в░"}}};"{ResHebU.cgen} {ResHebU.masc}";
lin ProjectManager:Letter.Position=\->{s=table ResHebU.Num[(table ResHebU.Gen[("в·в÷в■в°"++"в╓в╗в∙в≥в≥в╖в≤")("в·в÷в■в°в╙"++"в╓в╗в∙в≥в≥в╖в≤")])(table ResHebU.Gen[("в·в÷в■в°в≥"++"в╓в╗в∙в≥в≥в╖в≤")("в·в÷в■в°в∙в╙"++"в╓в╗в∙в≥в≥в╖в≤")])]};"в·в÷в■в° в╓в╗в∙в≥в≥в╖в≤";
lincat Recipient={g:ResHebU.Gen;n:ResHebU.Num;s:Str}={g=<ResHebU.masc>;n=<ResHebU.sg>;s=str@0};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResHebU.DepNum[(table ResHebU.DepGen[(table ResHebU.Num[Hebrew.A''114 Hebrew.A''115])(table ResHebU.Num[Hebrew.A''117 Hebrew.A''118])(table ResHebU.Num[Hebrew.A''120 Hebrew.A''121])])(table ResHebU.DepGen[(table ResHebU.Num[Hebrew.A''114(table ResHebU.Gen[("в░в÷в≥"++("в·в╕в≤в╒в╗в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в░в÷в≥"++("в·в╕в≤в╒в╗"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))])])(table ResHebU.Num[Hebrew.A''117(table ResHebU.Gen[("в░в÷в≥"++("в·в╕в≤в╒в╗"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в░в÷в≥"++("в·в╕в≤в╒в╗"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))])])(table ResHebU.Num[Hebrew.A''120(table ResHebU.Gen[("в░в÷в≥"++("в·в╕в≤в╒в╗в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в²"++"в╘"))))("в░в÷в≥"++("в·в╕в≤в╒в╗в╙"++("в°в■в∙в⌠в≥в╒"++("в°в⌡в÷"++"в╘"))))])])])(table ResHebU.DepGen[(table ResHebU.Num[(table ResHebU.Gen[("в░в÷в≈в÷в∙"++("в·в╕в≤в╒в╗в∙в╙"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘"))))("в░в÷в≈в÷в∙"++("в·в╕в≤в╒в╗в≥в²"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘"))))])Hebrew.A''115])(table ResHebU.Num[(table ResHebU.Gen{p_Regret__3=>"в░в÷в≈в÷в∙"++("в·в╕в≤в╒в╗в≥в²"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘")))})Hebrew.A''118])(table ResHebU.Num[(table ResHebU.Gen{p_Regret__3=>"в░в÷в≈в÷в∙"++("в·в╕в≤в╒в╗в∙в╙"++("в°в■в∙в⌠в≥в╒"++("в°в "++"в╘")))})Hebrew.A''121])])]};"в░в÷в≥ в·в╕в≤в╒в╗в╙ в°в■в∙в⌠в≥в╒ в°в  в╘";
lin Senior:Letter.Position=\->{s=table ResHebU.Num[(table ResHebU.Gen{p_Senior__1=>"в≈в▒в╗"++"в▒в⌡в≥в╗"})(table ResHebU.Gen{p_Senior__1=>"в≈в▒в╗в≥в²"++"в▒в⌡в≥в╗в≥в²"})]};"в≈в▒в╗ в▒в⌡в≥в╗";
lincat Sentence={s:(ResHebU.DepNum=>(ResHebU.DepGen=>(ResHebU.Num=>(ResHebU.Gen=>Str))))}={s=table ResHebU.DepNum{p_Sentence__0=>table ResHebU.DepGen{p_Sentence__1=>table ResHebU.Num{p_Sentence__2=>table ResHebU.Gen{p_Sentence__3=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{g=<ResHebU.depgen>;n=<ResHebU.depnum>;s=table ResHebU.Num[(table ResHebU.Gen["в░в≥в╘в╙в ""в▒в╒в°в "])(table ResHebU.Gen["в÷в╘в∙в╙в≥в⌡в²""в▒в╒в°в≥в⌡в÷"])]};"{ResHebU.depgen}";
}
resource ResHebU={flags coding=utf8;flags modulesize=n5;param DepGen=depgen|cgen ResHebU.Gen;
param DepNum=depnum|cnum ResHebU.Num;
param Gen=masc|fem;
param Kas=nom|dat|acc;
param Num=sg|pl;
}
abstract Letter={flags coding=utf8;flags modulesize=n42;cat Author[]=;
fun BePromoted:(h_:Letter.Position)->Letter.Sentence={};
fun ColleagueHe:Letter.Recipient={};
fun ColleagueShe:Letter.Recipient={};
fun ColleaguesHe:Letter.Recipient={};
fun ColleaguesShe:Letter.Recipient={};
fun Company:Letter.NounPhrase={};
fun Competitor:Letter.NounPhrase={};
fun DarlingHe:Letter.Recipient={};
fun DarlingShe:Letter.Recipient={};
fun Dean:Letter.Author={};
fun DearRec:(h_:Letter.Recipient)->Letter.Heading={};
cat Ending[]=;
fun FormalEnding:(h_:Letter.Author)->Letter.Ending={};
fun GoBankrupt:(h_:Letter.NounPhrase)->Letter.Sentence={};
cat Heading[]=;
fun HelloRec:(h_:Letter.Recipient)->Letter.Heading={};
fun Honour:Letter.Mode={};
fun ILoveYou:Letter.Sentence={};
fun InformalEnding:(h_:Letter.Author)->Letter.Ending={};
fun JustHello:(h_:Letter.Recipient)->Letter.Heading={};
cat Letter[]=;
cat Message[]=;
fun MkLetter:(h_:Letter.Heading)->(h_:Letter.Message)->(h_:Letter.Ending)->Letter.Letter={};
cat Mode[]=;
fun ModeSent:(h_:Letter.Mode)->(h_:Letter.Sentence)->Letter.Message={};
fun Mother:Letter.Author={};
fun Name:(h_:PredefAbs.String)->Letter.Author={};
fun NameHe:(h_:PredefAbs.String)->Letter.Recipient={};
fun NameShe:(h_:PredefAbs.String)->Letter.Recipient={};
cat NounPhrase[]=;
fun OurCustomers:Letter.NounPhrase={};
fun PlainRec:(h_:Letter.Recipient)->Letter.Heading={};
fun PlainSent:(h_:Letter.Sentence)->Letter.Message={};
cat Position[]=;
fun President:Letter.Author={};
fun ProjectManager:Letter.Position={};
cat Recipient[]=;
fun Regret:Letter.Mode={};
fun Senior:Letter.Position={};
cat Sentence[]=;
fun Spouse:Letter.Author={};
}
concrete Russian of Letter=open ResRusU in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;oper A''21:Str=table ResRusU.Num["п≈п╢я─п╟п╡я│я┌п╡я┐п╧""п≈п╢я─п╟п╡я│я┌п╡я┐п╧я┌п╣"];
oper A''22:Str=table ResRusU.Gen{p_Honour__3=>"я▐"++"п╦п╪п╣я▌"++("я┤п╣я│я┌я▄"++("я│п╬п╬п╠я┴п╦я┌я▄"++"я┌п╣п╠п╣"++(","++"я┤я┌п╬")))};
oper A''23:Str=table ResRusU.Gen{p_Honour__3=>"п╪я▀"++"п╦п╪п╣п╣п╪"++("я┤п╣я│я┌я▄"++("я│п╬п╬п╠я┴п╦я┌я▄"++"п╡п╟п╪"++(","++"я┤я┌п╬")))};
oper A''33:Str=table ResRusU.Gen{p_ILoveYou__3=>"я▐"++("я┌п╣п╠я▐"++"п╩я▌п╠п╩я▌")};
oper A''34:Str=table ResRusU.Gen{p_ILoveYou__3=>"п╪я▀"++("п╡п╟я│"++"п╩я▌п╠п╦п╪")};
oper A''5:Str=<ResRusU.cgen<ResRusU.masc>>;
oper A''50:Str=<ResRusU.cgen<ResRusU.fem>>;
oper A''6:Str=<ResRusU.cnum<ResRusU.sg>>;
oper A''64:Str=<ResRusU.cnum<ResRusU.pl>>;
oper A''85:Str=table ResRusU.Gen[("я▐"++("п╡я▀п╫я┐п╤п╢п╣п╫п╟"++("я│п╬п╬п╠я┴п╦я┌я▄"++(","++"я┤я┌п╬"))))("я▐"++("п╡я▀п╫я┐п╤п╢п╣п╫"++("я│п╬п╬п╠я┴п╦я┌я▄"++(","++"я┤я┌п╬"))))];
oper A''86:Str=table ResRusU.Gen{p_Regret__3=>"п╡я▀"++("п╡я▀п╫я┐п╤п╢п╣п╫я▀"++("я│п╬п╬п╠я┴п╦я┌я▄"++(","++"я┤я┌п╬")))};
oper A''88:Str=table ResRusU.Gen{p_Regret__3=>"я▐"++("п╡я▀п╫я┐п╤п╢п╣п╫"++("я│п╬п╬п╠я┴п╦я┌я▄"++(","++"я┤я┌п╬")))};
oper A''90:Str=table ResRusU.Gen{p_Regret__3=>"я▐"++("п╡я▀п╫я┐п╤п╢п╣п╫п╟"++("я│п╬п╬п╠я┴п╦я┌я▄"++(","++"я┤я┌п╬")))};
lincat Author={g:ResRusU.DepGen;n:ResRusU.DepNum;s:(ResRusU.Num=>(ResRusU.Gen=>Str))}={g=<ResRusU.depgen>;n=<ResRusU.depnum>;s=table ResRusU.Num{p_Author__0=>table ResRusU.Gen{p_Author__1=>str@0}}};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResRusU.DepNum{p_BePromoted__0=>table ResRusU.DepGen{p_BePromoted__1=>table ResRusU.Num[(table ResRusU.Gen[("я┌я▀"++"п╠я▀п╩"++("п╫п╟п╥п╫п╟я┤п╣п╫"++Position@0.s!<ResRusU.sg>!<ResRusU.masc>))("я┌я▀"++"п╠я▀п╩п╟"++("п╫п╟п╥п╫п╟я┤п╣п╫п╟"++Position@0.s!<ResRusU.sg>!<ResRusU.fem>))])(table ResRusU.Gen{p_BePromoted__3=>"п╡я▀"++"п╠я▀п╩п╦"++("п╫п╟п╥п╫п╟я┤п╣п╫я▀"++Position@0.s!<ResRusU.pl>!$p_BePromoted__3)})]}}};"(я┌я▀ п╠я▀п╩)п╫п╟п╥п╫п╟я┤п╣п╫ Position_0";
lin ColleagueHe:Letter.Recipient=\->{g=<ResRusU.masc>;n=<ResRusU.sg>;s="п╨п╬п╩п╩п╣пЁп╟"};"{ResRusU.masc}";
lin ColleagueShe:Letter.Recipient=\->{g=<ResRusU.fem>;n=<ResRusU.sg>;s="п╨п╬п╩п╩п╣пЁп╟"};"{ResRusU.fem}";
lin ColleaguesHe:Letter.Recipient=\->{g=<ResRusU.masc>;n=<ResRusU.pl>;s="п╨п╬п╩п╩п╣пЁп╦"};"{ResRusU.masc}";
lin ColleaguesShe:Letter.Recipient=\->{g=<ResRusU.fem>;n=<ResRusU.pl>;s="п╨п╬п╩п╩п╣пЁп╦"};"{ResRusU.fem}";
lin Company:Letter.NounPhrase=\->{g=<ResRusU.fem>;n=<ResRusU.sg>;s="п╫п╟я┬п╣"++"п©я─п╣п╢п©я─п╦я▐я┌п╦п╣"};"{ResRusU.fem}";
lin Competitor:Letter.NounPhrase=\->{g=<ResRusU.masc>;n=<ResRusU.sg>;s="п╫п╟я┬"++"п╨п╬п╫п╨я┐я─п╣п╫я┌"};"{ResRusU.masc}";
lin DarlingHe:Letter.Recipient=\->{g=<ResRusU.masc>;n=<ResRusU.sg>;s="п╩я▌п╠п╦п╪я▀п╧"};"{ResRusU.masc}";
lin DarlingShe:Letter.Recipient=\->{g=<ResRusU.fem>;n=<ResRusU.sg>;s="п╩я▌п╠п╦п╪п╟я▐"};"{ResRusU.fem}";
lin Dean:Letter.Author=\->{g=Russian.A''5;n=Russian.A''6;s=table ResRusU.Num{p_Dean__0=>table ResRusU.Gen{p_Dean__1=>"п╢п╣п╨п╟п╫"}}};"{ResRusU.cgen} {ResRusU.masc}";
lin DearRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=table ResRusU.Num[(table ResRusU.Gen["п■п╬я─п╬пЁп╬п╧""п■п╬я─п╬пЁп╟я▐"]!(Recipient@0.g))(table ResRusU.Gen{p_DearRec__1=>"п■п╬я─п╬пЁп╦п╣"}!(Recipient@0.g))]!(Recipient@0.n)++Recipient@0.s};"Recipient_0";
lincat Ending={g:ResRusU.DepGen;n:ResRusU.DepNum;s:(ResRusU.Num=>(ResRusU.Gen=>Str))}={g=<ResRusU.depgen>;n=<ResRusU.depnum>;s=table ResRusU.Num{p_Ending__0=>table ResRusU.Gen{p_Ending__1=>str@0}}};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{g=Author@0.g;n=Author@0.n;s=table ResRusU.Num{p_FormalEnding__0=>table ResRusU.Gen{p_FormalEnding__1=>"п║"++("п╫п╟п╦п╩я┐я┤я┬п╦п╪п╦"++("п©п╬п╤п╣п╩п╟п╫п╦я▐п╪п╦,"++"&-")++Author@0.s!$p_FormalEnding__0!$p_FormalEnding__1)}}};"Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResRusU.DepNum{p_GoBankrupt__0=>table ResRusU.DepGen{p_GoBankrupt__1=>table ResRusU.Num{p_GoBankrupt__2=>table ResRusU.Gen{p_GoBankrupt__3=>NounPhrase@0.s++table ResRusU.Num[(table ResRusU.Gen["п╬п╠п╟п╫п╨я─п╬я┌п╦п╩я│я▐""п╬п╠п╟п╫п╨я─п╬я┌п╦п╩п╬я│я▄"]!(NounPhrase@0.g))(table ResRusU.Gen{p_GoBankrupt__5=>"п╬п╠п╟п╫п╨я─п╬я┌п╦п╩п╦я│я▄"}!(NounPhrase@0.g))]!(NounPhrase@0.n)}}}}};"NounPhrase_0 п╬п╠п╟п╫п╨я─п╬я┌п╦п╩я│я▐";
lincat Heading={g:ResRusU.Gen;n:ResRusU.Num;s:Str}={g=<ResRusU.masc>;n=<ResRusU.sg>;s=str@0};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=Russian.A''21!(Recipient@0.n)++Recipient@0.s};"Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResRusU.DepNum[(table ResRusU.DepGen{p_Honour__1=>table ResRusU.Num[Russian.A''22 Russian.A''23]})(table ResRusU.DepGen{p_Honour__1=>table ResRusU.Num[Russian.A''22(table ResRusU.Gen{p_Honour__3=>"я▐"++"п╦п╪п╣я▌"++("я┤п╣я│я┌я▄"++("я│п╬п╬п╠я┴п╦я┌я▄"++"п╡п╟п╪"++(","++"я┤я┌п╬")))})]})(table ResRusU.DepGen{p_Honour__1=>table ResRusU.Num[(table ResRusU.Gen{p_Honour__3=>"п╪я▀"++"п╦п╪п╣п╣п╪"++("я┤п╣я│я┌я▄"++("я│п╬п╬п╠я┴п╦я┌я▄"++"я┌п╣п╠п╣"++(","++"я┤я┌п╬")))})Russian.A''23]})]};"(я▐ п╦п╪п╣я▌)я┤п╣я│я┌я▄ (я│п╬п╬п╠я┴п╦я┌я▄ я┌п╣п╠п╣), я┤я┌п╬";
lin ILoveYou:Letter.Sentence=\->{s=table ResRusU.DepNum[(table ResRusU.DepGen{p_ILoveYou__1=>table ResRusU.Num[Russian.A''33 Russian.A''34]})(table ResRusU.DepGen{p_ILoveYou__1=>table ResRusU.Num[Russian.A''33(table ResRusU.Gen{p_ILoveYou__3=>"я▐"++("п╡п╟я│"++"п╩я▌п╠п╩я▌")})]})(table ResRusU.DepGen{p_ILoveYou__1=>table ResRusU.Num[(table ResRusU.Gen{p_ILoveYou__3=>"п╪я▀"++("я┌п╣п╠я▐"++"п╩я▌п╠п╦п╪")})Russian.A''34]})]};"я▐ я┌п╣п╠я▐ п╩я▌п╠п╩я▌";
lin InformalEnding:Letter.Ending=\Author@0->{g=Author@0.g;n=Author@0.n;s=table ResRusU.Num{p_InformalEnding__0=>table ResRusU.Gen{p_InformalEnding__1=>"п║"++("п╢я─я┐п╤п╣я│п╨п╦п╪"++("п©я─п╦п╡п╣я┌п╬п╪,"++"&-"))++Author@0.s!$p_InformalEnding__0!$p_InformalEnding__1}}};"Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=Russian.A''21!(Recipient@0.n)};"Recipient_0";
lincat Letter={s:Str}={s=str@0};"Letter";
lincat Message={s:(ResRusU.DepNum=>(ResRusU.DepGen=>(ResRusU.Num=>(ResRusU.Gen=>Str))))}={s=table ResRusU.DepNum{p_Message__0=>table ResRusU.DepGen{p_Message__1=>table ResRusU.Num{p_Message__2=>table ResRusU.Gen{p_Message__3=>str@0}}}}};"Message";
lin MkLetter:Letter.Letter=\Heading@0,Message@1,Ending@2->{s=Heading@0.s++(","++("&-"++(Message@1.s!(Ending@2.n)!(Ending@2.g)!(Heading@0.n)!(Heading@0.g)++("."++("&-"++Ending@2.s!(Heading@0.n)!(Heading@0.g))))))};"Heading_0 , &- Message_1 . &- Ending_2";
lincat Mode={s:(ResRusU.DepNum=>(ResRusU.DepGen=>(ResRusU.Num=>(ResRusU.Gen=>Str))))}={s=table ResRusU.DepNum{p_Mode__0=>table ResRusU.DepGen{p_Mode__1=>table ResRusU.Num{p_Mode__2=>table ResRusU.Gen{p_Mode__3=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResRusU.DepNum[(table ResRusU.DepGen[(table ResRusU.Num{p_ModeSent__2=>table ResRusU.Gen{p_ModeSent__3=>Mode@0.s!<ResRusU.depnum>!<ResRusU.depgen>!$p_ModeSent__2!$p_ModeSent__3++Sentence@1.s!<ResRusU.depnum>!<ResRusU.depgen>!$p_ModeSent__2!$p_ModeSent__3}})(table ResRusU.Num{p_ModeSent__2=>table ResRusU.Gen[(Mode@0.s!<ResRusU.depnum>!Russian.A''5!$p_ModeSent__2!<ResRusU.masc>++Sentence@1.s!<ResRusU.depnum>!Russian.A''5!$p_ModeSent__2!<ResRusU.masc>)(Mode@0.s!<ResRusU.depnum>!Russian.A''5!$p_ModeSent__2!<ResRusU.fem>++Sentence@1.s!<ResRusU.depnum>!Russian.A''5!$p_ModeSent__2!<ResRusU.fem>)]})(table ResRusU.Num{p_ModeSent__2=>table ResRusU.Gen[(Mode@0.s!<ResRusU.depnum>!Russian.A''50!$p_ModeSent__2!<ResRusU.masc>++Sentence@1.s!<ResRusU.depnum>!Russian.A''50!$p_ModeSent__2!<ResRusU.masc>)(Mode@0.s!<ResRusU.depnum>!Russian.A''50!$p_ModeSent__2!<ResRusU.fem>++Sentence@1.s!<ResRusU.depnum>!Russian.A''50!$p_ModeSent__2!<ResRusU.fem>)]})])(table ResRusU.DepGen[(table ResRusU.Num[(table ResRusU.Gen{p_ModeSent__3=>Mode@0.s!Russian.A''6!<ResRusU.depgen>!<ResRusU.sg>!$p_ModeSent__3++Sentence@1.s!Russian.A''6!<ResRusU.depgen>!<ResRusU.sg>!$p_ModeSent__3})(table ResRusU.Gen{p_ModeSent__3=>Mode@0.s!Russian.A''6!<ResRusU.depgen>!<ResRusU.pl>!$p_ModeSent__3++Sentence@1.s!Russian.A''6!<ResRusU.depgen>!<ResRusU.pl>!$p_ModeSent__3})])(table ResRusU.Num[(table ResRusU.Gen[(Mode@0.s!Russian.A''6!Russian.A''5!<ResRusU.sg>!<ResRusU.masc>++Sentence@1.s!Russian.A''6!Russian.A''5!<ResRusU.sg>!<ResRusU.masc>)(Mode@0.s!Russian.A''6!Russian.A''5!<ResRusU.sg>!<ResRusU.fem>++Sentence@1.s!Russian.A''6!Russian.A''5!<ResRusU.sg>!<ResRusU.fem>)])(table ResRusU.Gen[(Mode@0.s!Russian.A''6!Russian.A''5!<ResRusU.pl>!<ResRusU.masc>++Sentence@1.s!Russian.A''6!Russian.A''5!<ResRusU.pl>!<ResRusU.masc>)(Mode@0.s!Russian.A''6!Russian.A''5!<ResRusU.pl>!<ResRusU.fem>++Sentence@1.s!Russian.A''6!Russian.A''5!<ResRusU.pl>!<ResRusU.fem>)])])(table ResRusU.Num[(table ResRusU.Gen[(Mode@0.s!Russian.A''6!Russian.A''50!<ResRusU.sg>!<ResRusU.masc>++Sentence@1.s!Russian.A''6!Russian.A''50!<ResRusU.sg>!<ResRusU.masc>)(Mode@0.s!Russian.A''6!Russian.A''50!<ResRusU.sg>!<ResRusU.fem>++Sentence@1.s!Russian.A''6!Russian.A''50!<ResRusU.sg>!<ResRusU.fem>)])(table ResRusU.Gen[(Mode@0.s!Russian.A''6!Russian.A''50!<ResRusU.pl>!<ResRusU.masc>++Sentence@1.s!Russian.A''6!Russian.A''50!<ResRusU.pl>!<ResRusU.masc>)(Mode@0.s!Russian.A''6!Russian.A''50!<ResRusU.pl>!<ResRusU.fem>++Sentence@1.s!Russian.A''6!Russian.A''50!<ResRusU.pl>!<ResRusU.fem>)])])])(table ResRusU.DepGen[(table ResRusU.Num[(table ResRusU.Gen{p_ModeSent__3=>Mode@0.s!Russian.A''64!<ResRusU.depgen>!<ResRusU.sg>!$p_ModeSent__3++Sentence@1.s!Russian.A''64!<ResRusU.depgen>!<ResRusU.sg>!$p_ModeSent__3})(table ResRusU.Gen{p_ModeSent__3=>Mode@0.s!Russian.A''64!<ResRusU.depgen>!<ResRusU.pl>!$p_ModeSent__3++Sentence@1.s!Russian.A''64!<ResRusU.depgen>!<ResRusU.pl>!$p_ModeSent__3})])(table ResRusU.Num[(table ResRusU.Gen[(Mode@0.s!Russian.A''64!Russian.A''5!<ResRusU.sg>!<ResRusU.masc>++Sentence@1.s!Russian.A''64!Russian.A''5!<ResRusU.sg>!<ResRusU.masc>)(Mode@0.s!Russian.A''64!Russian.A''5!<ResRusU.sg>!<ResRusU.fem>++Sentence@1.s!Russian.A''64!Russian.A''5!<ResRusU.sg>!<ResRusU.fem>)])(table ResRusU.Gen[(Mode@0.s!Russian.A''64!Russian.A''5!<ResRusU.pl>!<ResRusU.masc>++Sentence@1.s!Russian.A''64!Russian.A''5!<ResRusU.pl>!<ResRusU.masc>)(Mode@0.s!Russian.A''64!Russian.A''5!<ResRusU.pl>!<ResRusU.fem>++Sentence@1.s!Russian.A''64!Russian.A''5!<ResRusU.pl>!<ResRusU.fem>)])])(table ResRusU.Num[(table ResRusU.Gen[(Mode@0.s!Russian.A''64!Russian.A''50!<ResRusU.sg>!<ResRusU.masc>++Sentence@1.s!Russian.A''64!Russian.A''50!<ResRusU.sg>!<ResRusU.masc>)(Mode@0.s!Russian.A''64!Russian.A''50!<ResRusU.sg>!<ResRusU.fem>++Sentence@1.s!Russian.A''64!Russian.A''50!<ResRusU.sg>!<ResRusU.fem>)])(table ResRusU.Gen[(Mode@0.s!Russian.A''64!Russian.A''50!<ResRusU.pl>!<ResRusU.masc>++Sentence@1.s!Russian.A''64!Russian.A''50!<ResRusU.pl>!<ResRusU.masc>)(Mode@0.s!Russian.A''64!Russian.A''50!<ResRusU.pl>!<ResRusU.fem>++Sentence@1.s!Russian.A''64!Russian.A''50!<ResRusU.pl>!<ResRusU.fem>)])])])]};"Mode_0 Sentence_1";
lin Mother:Letter.Author=\->{g=Russian.A''50;n=Russian.A''6;s=table ResRusU.Num{p_Mother__0=>table ResRusU.Gen{p_Mother__1=>"п╪п╟п╪п╟"}}};"{ResRusU.cgen} {ResRusU.fem}";
lin Name:Letter.Author=\String@0->{g=Russian.A''5;n=Russian.A''6;s=table ResRusU.Num{p_Name__0=>table ResRusU.Gen{p_Name__1=>String@0.s}}};"{ResRusU.cgen} {ResRusU.masc}";
lin NameHe:Letter.Recipient=\String@0->{g=<ResRusU.masc>;n=<ResRusU.sg>;s=String@0.s};"{ResRusU.masc}";
lin NameShe:Letter.Recipient=\String@0->{g=<ResRusU.fem>;n=<ResRusU.sg>;s=String@0.s};"{ResRusU.fem}";
lincat NounPhrase={g:ResRusU.Gen;n:ResRusU.Num;s:Str}={g=<ResRusU.masc>;n=<ResRusU.sg>;s=str@0};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{g=<ResRusU.masc>;n=<ResRusU.pl>;s="п╫п╟я┬п╦"++"п╨п╩п╦п╣п╫я┌я▀"};"{ResRusU.masc}";
lin PlainRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=Recipient@0.s};"Recipient_0";
lin PlainSent:Letter.Message=\Sentence@0->{s=Sentence@0.s};"Sentence_0";
lincat Position={s:(ResRusU.Num=>(ResRusU.Gen=>Str))}={s=table ResRusU.Num{p_Position__0=>table ResRusU.Gen{p_Position__1=>str@0}}};"Position";
lin President:Letter.Author=\->{g=Russian.A''5;n=Russian.A''6;s=table ResRusU.Num{p_President__0=>table ResRusU.Gen{p_President__1=>"п©я─п╣п╥п╦п╢п╣п╫я┌"}}};"{ResRusU.cgen} {ResRusU.masc}";
lin ProjectManager:Letter.Position=\->{s=table ResRusU.Num[(table ResRusU.Gen{p_ProjectManager__1=>"п╪п╣п╫п╣п╢п╤п╣я─п╬п╪"++"п©я─п╬п╣п╨я┌п╟"})(table ResRusU.Gen{p_ProjectManager__1=>"п╪п╣п╫п╣п╢п╤п╣я─п╟п╪п╦"++"п©я─п╬п╣п╨я┌п╬п╡"})]};"п╪п╣п╫п╣п╢п╤п╣я─п╬п╪ п©я─п╬п╣п╨я┌п╟";
lincat Recipient={g:ResRusU.Gen;n:ResRusU.Num;s:Str}={g=<ResRusU.masc>;n=<ResRusU.sg>;s=str@0};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResRusU.DepNum[(table ResRusU.DepGen[(table ResRusU.Num[Russian.A''85 Russian.A''86])(table ResRusU.Num[Russian.A''88 Russian.A''86])(table ResRusU.Num[Russian.A''90 Russian.A''86])])(table ResRusU.DepGen[(table ResRusU.Num{p_Regret__2=>Russian.A''85})(table ResRusU.Num{p_Regret__2=>Russian.A''88})(table ResRusU.Num{p_Regret__2=>Russian.A''90})])(table ResRusU.DepGen{p_Regret__1=>table ResRusU.Num{p_Regret__2=>Russian.A''86}})]};"я▐ п╡я▀п╫я┐п╤п╢п╣п╫п╟ я│п╬п╬п╠я┴п╦я┌я▄ , я┤я┌п╬";
lin Senior:Letter.Position=\->{s=table ResRusU.Num[(table ResRusU.Gen{p_Senior__1=>"я│я┌п╟я─я┬п╦п╪"++("п╫п╟я┐я┤п╫я▀п╪"++"я│п╬я┌я─я┐п╢п╫п╦п╨п╬п╪")})(table ResRusU.Gen{p_Senior__1=>"я│я┌п╟я─я┬п╦п╪п╦"++("п╫п╟я┐я┤п╫я▀п╪п╦"++"я│п╬я┌я─я┐п╢п╫п╦п╨п╟п╪п╦")})]};"я│я┌п╟я─я┬п╦п╪ п╫п╟я┐я┤п╫я▀п╪ я│п╬я┌я─я┐п╢п╫п╦п╨п╬п╪";
lincat Sentence={s:(ResRusU.DepNum=>(ResRusU.DepGen=>(ResRusU.Num=>(ResRusU.Gen=>Str))))}={s=table ResRusU.DepNum{p_Sentence__0=>table ResRusU.DepGen{p_Sentence__1=>table ResRusU.Num{p_Sentence__2=>table ResRusU.Gen{p_Sentence__3=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{g=<ResRusU.depgen>;n=<ResRusU.depnum>;s=table ResRusU.Num[(table ResRusU.Gen[("я┌п╡п╬я▐"++"п╤п╣п╫п╟")("я┌п╡п╬п╧"++"п╪я┐п╤")])(table ResRusU.Gen[("п╡п╟я┬п╦"++"п╤п╣п╫я▀")("п╡п╟я┬п╦"++"п╪я┐п╤я▄я▐")])]};"{ResRusU.depgen}";
}
resource ResRusU={flags coding=utf8;flags modulesize=n5;param DepGen=depgen|cgen ResRusU.Gen;
param DepNum=depnum|cnum ResRusU.Num;
param Gen=masc|fem;
param Kas=nom|acc;
param Num=sg|pl;
}
concrete Finnish of Letter=open ResFin in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;oper A''20:Str=table ResFin.Gen{p_Honour__3=>"minulla"++"on"++("kunnia"++("ilmoittaa"++"sinulle"++"ettц╓"))};
oper A''21:Str=table ResFin.Gen{p_Honour__3=>"meillц╓"++"on"++("kunnia"++("ilmoittaa"++"teille"++"ettц╓"))};
oper A''31:Str=table ResFin.Gen{p_ILoveYou__3=>"rakastan"++"sinua"};
oper A''32:Str=table ResFin.Gen{p_ILoveYou__3=>"rakastamme"++"teitц╓"};
oper A''48:Str=<ResFin.cgen<ResFin.fem>>;
oper A''5:Str=<ResFin.cgen<ResFin.masc>>;
oper A''6:Str=<ResFin.cnum<ResFin.sg>>;
oper A''62:Str=<ResFin.cnum<ResFin.pl>>;
oper A''83:Str=table ResFin.Gen{p_Regret__3=>"minun"++("on"++("valitettavasti"++"ilmoitettava")++"ettц╓")};
oper A''84:Str=table ResFin.Gen{p_Regret__3=>"meidц╓n"++("on"++("valitettavasti"++"ilmoitettava")++"ettц╓")};
lincat Author={g:ResFin.DepGen;n:ResFin.DepNum;s:(ResFin.Num=>(ResFin.Gen=>Str))}={g=<ResFin.depgen>;n=<ResFin.depnum>;s=table ResFin.Num{p_Author__0=>table ResFin.Gen{p_Author__1=>str@0}}};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResFin.DepNum{p_BePromoted__0=>table ResFin.DepGen{p_BePromoted__1=>table ResFin.Num[(table ResFin.Gen{p_BePromoted__3=>"sinut"++"on"++("ylennetty"++Position@0.s!<ResFin.sg>!$p_BePromoted__3)})(table ResFin.Gen{p_BePromoted__3=>"teidц╓t"++"on"++("ylennetty"++Position@0.s!<ResFin.pl>!$p_BePromoted__3)})]}}};"(sinut on)ylennetty Position_0";
lin ColleagueHe:Letter.Recipient=\->{g=<ResFin.masc>;n=<ResFin.sg>;s="kollega"};"{ResFin.masc}";
lin ColleagueShe:Letter.Recipient=\->{g=<ResFin.fem>;n=<ResFin.sg>;s="kollega"};"{ResFin.fem}";
lin ColleaguesHe:Letter.Recipient=\->{g=<ResFin.masc>;n=<ResFin.pl>;s="kollegat"};"{ResFin.masc}";
lin ColleaguesShe:Letter.Recipient=\->{g=<ResFin.fem>;n=<ResFin.pl>;s="kollegat"};"{ResFin.fem}";
lin Company:Letter.NounPhrase=\->{g=<ResFin.fem>;n=<ResFin.sg>;s="yrityksemme"};"{ResFin.fem}";
lin Competitor:Letter.NounPhrase=\->{g=<ResFin.masc>;n=<ResFin.sg>;s="pahin"++"kilpailijamme"};"{ResFin.masc}";
lin DarlingHe:Letter.Recipient=\->{g=<ResFin.masc>;n=<ResFin.sg>;s="kulta"};"{ResFin.masc}";
lin DarlingShe:Letter.Recipient=\->{g=<ResFin.fem>;n=<ResFin.sg>;s="kulta"};"{ResFin.fem}";
lin Dean:Letter.Author=\->{g=Finnish.A''5;n=Finnish.A''6;s=table ResFin.Num{p_Dean__0=>table ResFin.Gen{p_Dean__1=>"dekaani"}}};"{ResFin.cgen} {ResFin.masc}";
lin DearRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=table ResFin.Num[(table ResFin.Gen{p_DearRec__1=>"rakas"}!(Recipient@0.g))(table ResFin.Gen{p_DearRec__1=>"rakkaat"}!(Recipient@0.g))]!(Recipient@0.n)++Recipient@0.s};"Recipient_0";
lincat Ending={g:ResFin.DepGen;n:ResFin.DepNum;s:(ResFin.Num=>(ResFin.Gen=>Str))}={g=<ResFin.depgen>;n=<ResFin.depnum>;s=table ResFin.Num{p_Ending__0=>table ResFin.Gen{p_Ending__1=>str@0}}};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{g=Author@0.g;n=Author@0.n;s=table ResFin.Num{p_FormalEnding__0=>table ResFin.Gen{p_FormalEnding__1=>"parhain"++("terveisin"++"&-")++Author@0.s!$p_FormalEnding__0!$p_FormalEnding__1}}};"Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResFin.DepNum{p_GoBankrupt__0=>table ResFin.DepGen{p_GoBankrupt__1=>table ResFin.Num{p_GoBankrupt__2=>table ResFin.Gen{p_GoBankrupt__3=>NounPhrase@0.s++(table ResFin.Num["on""ovat"]!(NounPhrase@0.n)++(table ResFin.Num["mennyt""menneet"]!(NounPhrase@0.n)++"konkurssiin"))}}}}};"NounPhrase_0 on mennyt konkurssiin";
lincat Heading={g:ResFin.Gen;n:ResFin.Num;s:Str}={g=<ResFin.masc>;n=<ResFin.sg>;s=str@0};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s="Terve"++Recipient@0.s};"Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResFin.DepNum[(table ResFin.DepGen{p_Honour__1=>table ResFin.Num[Finnish.A''20 Finnish.A''21]})(table ResFin.DepGen{p_Honour__1=>table ResFin.Num[Finnish.A''20(table ResFin.Gen{p_Honour__3=>"minulla"++"on"++("kunnia"++("ilmoittaa"++"teille"++"ettц╓"))})]})(table ResFin.DepGen{p_Honour__1=>table ResFin.Num[(table ResFin.Gen{p_Honour__3=>"meillц╓"++"on"++("kunnia"++("ilmoittaa"++"sinulle"++"ettц╓"))})Finnish.A''21]})]};"(minulla on)kunnia (ilmoittaa sinulle)ettД";
lin ILoveYou:Letter.Sentence=\->{s=table ResFin.DepNum[(table ResFin.DepGen{p_ILoveYou__1=>table ResFin.Num[Finnish.A''31 Finnish.A''32]})(table ResFin.DepGen{p_ILoveYou__1=>table ResFin.Num[Finnish.A''31(table ResFin.Gen{p_ILoveYou__3=>"rakastan"++"teitц╓"})]})(table ResFin.DepGen{p_ILoveYou__1=>table ResFin.Num[(table ResFin.Gen{p_ILoveYou__3=>"rakastamme"++"sinua"})Finnish.A''32]})]};"rakastan sinua";
lin InformalEnding:Letter.Ending=\Author@0->{g=Author@0.g;n=Author@0.n;s=table ResFin.Num{p_InformalEnding__0=>table ResFin.Gen{p_InformalEnding__1=>"terveisin"++"&-"++Author@0.s!$p_InformalEnding__0!$p_InformalEnding__1}}};"Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s="Terve"};"Recipient_0";
lincat Letter={s:Str}={s=str@0};"Letter";
lincat Message={s:(ResFin.DepNum=>(ResFin.DepGen=>(ResFin.Num=>(ResFin.Gen=>Str))))}={s=table ResFin.DepNum{p_Message__0=>table ResFin.DepGen{p_Message__1=>table ResFin.Num{p_Message__2=>table ResFin.Gen{p_Message__3=>str@0}}}}};"Message";
lin MkLetter:Letter.Letter=\Heading@0,Message@1,Ending@2->{s=Heading@0.s++(","++("&-"++(Message@1.s!(Ending@2.n)!(Ending@2.g)!(Heading@0.n)!(Heading@0.g)++("."++("&-"++Ending@2.s!(Heading@0.n)!(Heading@0.g))))))};"Heading_0 , &- Message_1 . &- Ending_2";
lincat Mode={s:(ResFin.DepNum=>(ResFin.DepGen=>(ResFin.Num=>(ResFin.Gen=>Str))))}={s=table ResFin.DepNum{p_Mode__0=>table ResFin.DepGen{p_Mode__1=>table ResFin.Num{p_Mode__2=>table ResFin.Gen{p_Mode__3=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResFin.DepNum[(table ResFin.DepGen[(table ResFin.Num{p_ModeSent__2=>table ResFin.Gen{p_ModeSent__3=>Mode@0.s!<ResFin.depnum>!<ResFin.depgen>!$p_ModeSent__2!$p_ModeSent__3++Sentence@1.s!<ResFin.depnum>!<ResFin.depgen>!$p_ModeSent__2!$p_ModeSent__3}})(table ResFin.Num{p_ModeSent__2=>table ResFin.Gen[(Mode@0.s!<ResFin.depnum>!Finnish.A''5!$p_ModeSent__2!<ResFin.masc>++Sentence@1.s!<ResFin.depnum>!Finnish.A''5!$p_ModeSent__2!<ResFin.masc>)(Mode@0.s!<ResFin.depnum>!Finnish.A''5!$p_ModeSent__2!<ResFin.fem>++Sentence@1.s!<ResFin.depnum>!Finnish.A''5!$p_ModeSent__2!<ResFin.fem>)]})(table ResFin.Num{p_ModeSent__2=>table ResFin.Gen[(Mode@0.s!<ResFin.depnum>!Finnish.A''48!$p_ModeSent__2!<ResFin.masc>++Sentence@1.s!<ResFin.depnum>!Finnish.A''48!$p_ModeSent__2!<ResFin.masc>)(Mode@0.s!<ResFin.depnum>!Finnish.A''48!$p_ModeSent__2!<ResFin.fem>++Sentence@1.s!<ResFin.depnum>!Finnish.A''48!$p_ModeSent__2!<ResFin.fem>)]})])(table ResFin.DepGen[(table ResFin.Num[(table ResFin.Gen{p_ModeSent__3=>Mode@0.s!Finnish.A''6!<ResFin.depgen>!<ResFin.sg>!$p_ModeSent__3++Sentence@1.s!Finnish.A''6!<ResFin.depgen>!<ResFin.sg>!$p_ModeSent__3})(table ResFin.Gen{p_ModeSent__3=>Mode@0.s!Finnish.A''6!<ResFin.depgen>!<ResFin.pl>!$p_ModeSent__3++Sentence@1.s!Finnish.A''6!<ResFin.depgen>!<ResFin.pl>!$p_ModeSent__3})])(table ResFin.Num[(table ResFin.Gen[(Mode@0.s!Finnish.A''6!Finnish.A''5!<ResFin.sg>!<ResFin.masc>++Sentence@1.s!Finnish.A''6!Finnish.A''5!<ResFin.sg>!<ResFin.masc>)(Mode@0.s!Finnish.A''6!Finnish.A''5!<ResFin.sg>!<ResFin.fem>++Sentence@1.s!Finnish.A''6!Finnish.A''5!<ResFin.sg>!<ResFin.fem>)])(table ResFin.Gen[(Mode@0.s!Finnish.A''6!Finnish.A''5!<ResFin.pl>!<ResFin.masc>++Sentence@1.s!Finnish.A''6!Finnish.A''5!<ResFin.pl>!<ResFin.masc>)(Mode@0.s!Finnish.A''6!Finnish.A''5!<ResFin.pl>!<ResFin.fem>++Sentence@1.s!Finnish.A''6!Finnish.A''5!<ResFin.pl>!<ResFin.fem>)])])(table ResFin.Num[(table ResFin.Gen[(Mode@0.s!Finnish.A''6!Finnish.A''48!<ResFin.sg>!<ResFin.masc>++Sentence@1.s!Finnish.A''6!Finnish.A''48!<ResFin.sg>!<ResFin.masc>)(Mode@0.s!Finnish.A''6!Finnish.A''48!<ResFin.sg>!<ResFin.fem>++Sentence@1.s!Finnish.A''6!Finnish.A''48!<ResFin.sg>!<ResFin.fem>)])(table ResFin.Gen[(Mode@0.s!Finnish.A''6!Finnish.A''48!<ResFin.pl>!<ResFin.masc>++Sentence@1.s!Finnish.A''6!Finnish.A''48!<ResFin.pl>!<ResFin.masc>)(Mode@0.s!Finnish.A''6!Finnish.A''48!<ResFin.pl>!<ResFin.fem>++Sentence@1.s!Finnish.A''6!Finnish.A''48!<ResFin.pl>!<ResFin.fem>)])])])(table ResFin.DepGen[(table ResFin.Num[(table ResFin.Gen{p_ModeSent__3=>Mode@0.s!Finnish.A''62!<ResFin.depgen>!<ResFin.sg>!$p_ModeSent__3++Sentence@1.s!Finnish.A''62!<ResFin.depgen>!<ResFin.sg>!$p_ModeSent__3})(table ResFin.Gen{p_ModeSent__3=>Mode@0.s!Finnish.A''62!<ResFin.depgen>!<ResFin.pl>!$p_ModeSent__3++Sentence@1.s!Finnish.A''62!<ResFin.depgen>!<ResFin.pl>!$p_ModeSent__3})])(table ResFin.Num[(table ResFin.Gen[(Mode@0.s!Finnish.A''62!Finnish.A''5!<ResFin.sg>!<ResFin.masc>++Sentence@1.s!Finnish.A''62!Finnish.A''5!<ResFin.sg>!<ResFin.masc>)(Mode@0.s!Finnish.A''62!Finnish.A''5!<ResFin.sg>!<ResFin.fem>++Sentence@1.s!Finnish.A''62!Finnish.A''5!<ResFin.sg>!<ResFin.fem>)])(table ResFin.Gen[(Mode@0.s!Finnish.A''62!Finnish.A''5!<ResFin.pl>!<ResFin.masc>++Sentence@1.s!Finnish.A''62!Finnish.A''5!<ResFin.pl>!<ResFin.masc>)(Mode@0.s!Finnish.A''62!Finnish.A''5!<ResFin.pl>!<ResFin.fem>++Sentence@1.s!Finnish.A''62!Finnish.A''5!<ResFin.pl>!<ResFin.fem>)])])(table ResFin.Num[(table ResFin.Gen[(Mode@0.s!Finnish.A''62!Finnish.A''48!<ResFin.sg>!<ResFin.masc>++Sentence@1.s!Finnish.A''62!Finnish.A''48!<ResFin.sg>!<ResFin.masc>)(Mode@0.s!Finnish.A''62!Finnish.A''48!<ResFin.sg>!<ResFin.fem>++Sentence@1.s!Finnish.A''62!Finnish.A''48!<ResFin.sg>!<ResFin.fem>)])(table ResFin.Gen[(Mode@0.s!Finnish.A''62!Finnish.A''48!<ResFin.pl>!<ResFin.masc>++Sentence@1.s!Finnish.A''62!Finnish.A''48!<ResFin.pl>!<ResFin.masc>)(Mode@0.s!Finnish.A''62!Finnish.A''48!<ResFin.pl>!<ResFin.fem>++Sentence@1.s!Finnish.A''62!Finnish.A''48!<ResFin.pl>!<ResFin.fem>)])])])]};"Mode_0 Sentence_1";
lin Mother:Letter.Author=\->{g=Finnish.A''48;n=Finnish.A''6;s=table ResFin.Num{p_Mother__0=>table ResFin.Gen{p_Mother__1=>"ц╓iti"}}};"{ResFin.cgen} {ResFin.fem}";
lin Name:Letter.Author=\String@0->{g=Finnish.A''5;n=Finnish.A''6;s=table ResFin.Num{p_Name__0=>table ResFin.Gen{p_Name__1=>String@0.s}}};"{ResFin.cgen} {ResFin.masc}";
lin NameHe:Letter.Recipient=\String@0->{g=<ResFin.masc>;n=<ResFin.sg>;s=String@0.s};"{ResFin.masc}";
lin NameShe:Letter.Recipient=\String@0->{g=<ResFin.fem>;n=<ResFin.sg>;s=String@0.s};"{ResFin.fem}";
lincat NounPhrase={g:ResFin.Gen;n:ResFin.Num;s:Str}={g=<ResFin.masc>;n=<ResFin.sg>;s=str@0};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{g=<ResFin.masc>;n=<ResFin.pl>;s="asiakkaamme"};"{ResFin.masc}";
lin PlainRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=Recipient@0.s};"Recipient_0";
lin PlainSent:Letter.Message=\Sentence@0->{s=Sentence@0.s};"Sentence_0";
lincat Position={s:(ResFin.Num=>(ResFin.Gen=>Str))}={s=table ResFin.Num{p_Position__0=>table ResFin.Gen{p_Position__1=>str@0}}};"Position";
lin President:Letter.Author=\->{g=Finnish.A''5;n=Finnish.A''6;s=table ResFin.Num{p_President__0=>table ResFin.Gen{p_President__1=>"presidentti"}}};"{ResFin.cgen} {ResFin.masc}";
lin ProjectManager:Letter.Position=\->{s=table ResFin.Num[(table ResFin.Gen{p_ProjectManager__1=>"projektipц╓ц╓llikц╤ksi"})(table ResFin.Gen{p_ProjectManager__1=>"projektipц╓ц╓llikц╤iksi"})]};"projektipДДllikЖksi";
lincat Recipient={g:ResFin.Gen;n:ResFin.Num;s:Str}={g=<ResFin.masc>;n=<ResFin.sg>;s=str@0};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResFin.DepNum[(table ResFin.DepGen{p_Regret__1=>table ResFin.Num[Finnish.A''83 Finnish.A''84]})(table ResFin.DepGen{p_Regret__1=>table ResFin.Num{p_Regret__2=>Finnish.A''83}})(table ResFin.DepGen{p_Regret__1=>table ResFin.Num{p_Regret__2=>Finnish.A''84}})]};"minun (on valitettavasti ilmoitettava)ettД";
lin Senior:Letter.Position=\->{s=table ResFin.Num[(table ResFin.Gen{p_Senior__1=>"vanhemmaksi"++"tutkijaksi"})(table ResFin.Gen{p_Senior__1=>"vanhemmiksi"++"tutkijoiksi"})]};"vanhemmaksi tutkijaksi";
lincat Sentence={s:(ResFin.DepNum=>(ResFin.DepGen=>(ResFin.Num=>(ResFin.Gen=>Str))))}={s=table ResFin.DepNum{p_Sentence__0=>table ResFin.DepGen{p_Sentence__1=>table ResFin.Num{p_Sentence__2=>table ResFin.Gen{p_Sentence__3=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{g=<ResFin.depgen>;n=<ResFin.depnum>;s=table ResFin.Num[(table ResFin.Gen["vaimosi""miehesi"])(table ResFin.Gen["vaimonne""miehenne"])]};"{ResFin.depgen}";
}
resource ResFin={flags coding=utf8;flags modulesize=n5;param DepGen=depgen|cgen ResFin.Gen;
param DepNum=depnum|cnum ResFin.Num;
param Gen=masc|fem;
param Kas=nom|acc;
param Num=sg|pl;
}
concrete Swedish of Letter=open ResSve in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;oper A''17:Str=table ResSve.Sex{p_Honour__3=>"jag"++("har"++("ц╓ran"++("att"++"meddela"))++("dig"++"att"))};
oper A''18:Str=table ResSve.Sex{p_Honour__3=>"vi"++("har"++("ц╓ran"++("att"++"meddela"))++("er"++"att"))};
oper A''28:Str=table ResSve.Sex{p_ILoveYou__3=>"jag"++("ц╓lskar"++"dig")};
oper A''29:Str=table ResSve.Sex{p_ILoveYou__3=>"vi"++("ц╓lskar"++"er")};
oper A''5:Str=<ResSve.cnum<ResSve.sg>>;
oper A''53:Str=<ResSve.cnum<ResSve.pl>>;
oper A''71:Str=table ResSve.Sex{p_Regret__3=>"jag"++("mц╔ste"++("tyvц╓rr"++"meddela")++("dig"++"att"))};
oper A''72:Str=table ResSve.Sex{p_Regret__3=>"vi"++("mц╔ste"++("tyvц╓rr"++"meddela")++("er"++"att"))};
lincat Author={n:ResSve.DepNum;s:(ResSve.Num=>(ResSve.Sex=>Str));x:ResSve.Sex}={n=<ResSve.depnum>;s=table ResSve.Num{p_Author__0=>table ResSve.Sex{p_Author__1=>str@0}};x=<ResSve.masc>};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResSve.DepNum{p_BePromoted__0=>table ResSve.Sex{p_BePromoted__1=>table ResSve.Num[(table ResSve.Sex{p_BePromoted__3=>"du"++("har"++"blivit"++("befordrad"++("till"++Position@0.s!<ResSve.sg>!$p_BePromoted__3)))})(table ResSve.Sex{p_BePromoted__3=>"ni"++("har"++"blivit"++("befordrade"++("till"++Position@0.s!<ResSve.pl>!$p_BePromoted__3)))})]}}};"du (har blivit)befordrad till Position_0";
lin ColleagueHe:Letter.Recipient=\->{n=<ResSve.sg>;s="kollega";x=<ResSve.masc>};"{ResSve.sg}";
lin ColleagueShe:Letter.Recipient=\->{n=<ResSve.sg>;s="kollega";x=<ResSve.fem>};"{ResSve.sg}";
lin ColleaguesHe:Letter.Recipient=\->{n=<ResSve.pl>;s="kollegor";x=<ResSve.masc>};"{ResSve.pl}";
lin ColleaguesShe:Letter.Recipient=\->{n=<ResSve.pl>;s="kollegor";x=<ResSve.fem>};"{ResSve.pl}";
lin Company:Letter.NounPhrase=\->{g=<ResSve.ett>;n=<ResSve.sg>;s="vц╔rt"++"fц╤retag"};"{ResSve.ett}";
lin Competitor:Letter.NounPhrase=\->{g=<ResSve.en>;n=<ResSve.sg>;s="vц╔r"++("vц╓rsta"++"konkurrent")};"{ResSve.en}";
lin DarlingHe:Letter.Recipient=\->{n=<ResSve.sg>;s="ц╓lskling";x=<ResSve.masc>};"{ResSve.sg}";
lin DarlingShe:Letter.Recipient=\->{n=<ResSve.sg>;s="ц╓lskling";x=<ResSve.fem>};"{ResSve.sg}";
lin Dean:Letter.Author=\->{n=Swedish.A''5;s=table ResSve.Num{p_Dean__0=>table ResSve.Sex{p_Dean__1=>"Dekanus"}};x=<ResSve.masc>};"{ResSve.cnum} {ResSve.sg}";
lin DearRec:Letter.Heading=\Recipient@0->{n=Recipient@0.n;s=table ResSve.Num[(table ResSve.Sex["Kц╓re""Kц╓ra"]!(Recipient@0.x))(table ResSve.Sex{p_DearRec__1=>"Kц╓ra"}!(Recipient@0.x))]!(Recipient@0.n)++Recipient@0.s;x=Recipient@0.x};"Recipient_0";
lincat Ending={n:ResSve.DepNum;s:(ResSve.Num=>(ResSve.Sex=>Str));x:ResSve.Sex}={n=<ResSve.depnum>;s=table ResSve.Num{p_Ending__0=>table ResSve.Sex{p_Ending__1=>str@0}};x=<ResSve.masc>};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{n=Author@0.n;s=table ResSve.Num{p_FormalEnding__0=>table ResSve.Sex{p_FormalEnding__1=>"Med"++("vц╓nlig"++("hц╓lsning"++"&-"))++Author@0.s!$p_FormalEnding__0!$p_FormalEnding__1}};x=Author@0.x};"Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResSve.DepNum{p_GoBankrupt__0=>table ResSve.Sex{p_GoBankrupt__1=>table ResSve.Num{p_GoBankrupt__2=>table ResSve.Sex{p_GoBankrupt__3=>NounPhrase@0.s++("har"++("gц╔tt"++("i"++"konkurs")))}}}}};"NounPhrase_0 har gЕtt i konkurs";
lincat Heading={n:ResSve.Num;s:Str;x:ResSve.Sex}={n=<ResSve.sg>;s=str@0;x=<ResSve.masc>};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{n=Recipient@0.n;s="Hej"++Recipient@0.s;x=Recipient@0.x};"Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResSve.DepNum[(table ResSve.Sex{p_Honour__1=>table ResSve.Num[Swedish.A''17 Swedish.A''18]})(table ResSve.Sex{p_Honour__1=>table ResSve.Num[Swedish.A''17(table ResSve.Sex{p_Honour__3=>"jag"++("har"++("ц╓ran"++("att"++"meddela"))++("er"++"att"))})]})(table ResSve.Sex{p_Honour__1=>table ResSve.Num[(table ResSve.Sex{p_Honour__3=>"vi"++("har"++("ц╓ran"++("att"++"meddela"))++("dig"++"att"))})Swedish.A''18]})]};"jag (har Дran att meddela)dig att";
lin ILoveYou:Letter.Sentence=\->{s=table ResSve.DepNum[(table ResSve.Sex{p_ILoveYou__1=>table ResSve.Num[Swedish.A''28 Swedish.A''29]})(table ResSve.Sex{p_ILoveYou__1=>table ResSve.Num[Swedish.A''28(table ResSve.Sex{p_ILoveYou__3=>"jag"++("ц╓lskar"++"er")})]})(table ResSve.Sex{p_ILoveYou__1=>table ResSve.Num[(table ResSve.Sex{p_ILoveYou__3=>"vi"++("ц╓lskar"++"dig")})Swedish.A''29]})]};"jag Дlskar dig";
lin InformalEnding:Letter.Ending=\Author@0->{n=Author@0.n;s=table ResSve.Num{p_InformalEnding__0=>table ResSve.Sex{p_InformalEnding__1=>"Med"++("hц╓lsningar"++"&-")++Author@0.s!$p_InformalEnding__0!$p_InformalEnding__1}};x=Author@0.x};"Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{n=Recipient@0.n;s="Hej";x=Recipient@0.x};"Recipient_0";
lincat Letter={s:Str}={s=str@0};"Brev";
lincat Message={s:(ResSve.DepNum=>(ResSve.Sex=>(ResSve.Num=>(ResSve.Sex=>Str))))}={s=table ResSve.DepNum{p_Message__0=>table ResSve.Sex{p_Message__1=>table ResSve.Num{p_Message__2=>table ResSve.Sex{p_Message__3=>str@0}}}}};"Message";
lin MkLetter:Letter.Letter=\Heading@0,Message@1,Ending@2->{s=Heading@0.s++(","++("&-"++(Message@1.s!(Ending@2.n)!(Ending@2.x)!(Heading@0.n)!(Heading@0.x)++("."++("&-"++Ending@2.s!(Heading@0.n)!(Heading@0.x))))))};"brevmall";
lincat Mode={s:(ResSve.DepNum=>(ResSve.Sex=>(ResSve.Num=>(ResSve.Sex=>Str))))}={s=table ResSve.DepNum{p_Mode__0=>table ResSve.Sex{p_Mode__1=>table ResSve.Num{p_Mode__2=>table ResSve.Sex{p_Mode__3=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResSve.DepNum[(table ResSve.Sex[(table ResSve.Num{p_ModeSent__2=>table ResSve.Sex[(Mode@0.s!<ResSve.depnum>!<ResSve.masc>!$p_ModeSent__2!<ResSve.masc>++Sentence@1.s!<ResSve.depnum>!<ResSve.masc>!$p_ModeSent__2!<ResSve.masc>)(Mode@0.s!<ResSve.depnum>!<ResSve.masc>!$p_ModeSent__2!<ResSve.fem>++Sentence@1.s!<ResSve.depnum>!<ResSve.masc>!$p_ModeSent__2!<ResSve.fem>)]})(table ResSve.Num{p_ModeSent__2=>table ResSve.Sex[(Mode@0.s!<ResSve.depnum>!<ResSve.fem>!$p_ModeSent__2!<ResSve.masc>++Sentence@1.s!<ResSve.depnum>!<ResSve.fem>!$p_ModeSent__2!<ResSve.masc>)(Mode@0.s!<ResSve.depnum>!<ResSve.fem>!$p_ModeSent__2!<ResSve.fem>++Sentence@1.s!<ResSve.depnum>!<ResSve.fem>!$p_ModeSent__2!<ResSve.fem>)]})])(table ResSve.Sex[(table ResSve.Num[(table ResSve.Sex[(Mode@0.s!Swedish.A''5!<ResSve.masc>!<ResSve.sg>!<ResSve.masc>++Sentence@1.s!Swedish.A''5!<ResSve.masc>!<ResSve.sg>!<ResSve.masc>)(Mode@0.s!Swedish.A''5!<ResSve.masc>!<ResSve.sg>!<ResSve.fem>++Sentence@1.s!Swedish.A''5!<ResSve.masc>!<ResSve.sg>!<ResSve.fem>)])(table ResSve.Sex[(Mode@0.s!Swedish.A''5!<ResSve.masc>!<ResSve.pl>!<ResSve.masc>++Sentence@1.s!Swedish.A''5!<ResSve.masc>!<ResSve.pl>!<ResSve.masc>)(Mode@0.s!Swedish.A''5!<ResSve.masc>!<ResSve.pl>!<ResSve.fem>++Sentence@1.s!Swedish.A''5!<ResSve.masc>!<ResSve.pl>!<ResSve.fem>)])])(table ResSve.Num[(table ResSve.Sex[(Mode@0.s!Swedish.A''5!<ResSve.fem>!<ResSve.sg>!<ResSve.masc>++Sentence@1.s!Swedish.A''5!<ResSve.fem>!<ResSve.sg>!<ResSve.masc>)(Mode@0.s!Swedish.A''5!<ResSve.fem>!<ResSve.sg>!<ResSve.fem>++Sentence@1.s!Swedish.A''5!<ResSve.fem>!<ResSve.sg>!<ResSve.fem>)])(table ResSve.Sex[(Mode@0.s!Swedish.A''5!<ResSve.fem>!<ResSve.pl>!<ResSve.masc>++Sentence@1.s!Swedish.A''5!<ResSve.fem>!<ResSve.pl>!<ResSve.masc>)(Mode@0.s!Swedish.A''5!<ResSve.fem>!<ResSve.pl>!<ResSve.fem>++Sentence@1.s!Swedish.A''5!<ResSve.fem>!<ResSve.pl>!<ResSve.fem>)])])])(table ResSve.Sex[(table ResSve.Num[(table ResSve.Sex[(Mode@0.s!Swedish.A''53!<ResSve.masc>!<ResSve.sg>!<ResSve.masc>++Sentence@1.s!Swedish.A''53!<ResSve.masc>!<ResSve.sg>!<ResSve.masc>)(Mode@0.s!Swedish.A''53!<ResSve.masc>!<ResSve.sg>!<ResSve.fem>++Sentence@1.s!Swedish.A''53!<ResSve.masc>!<ResSve.sg>!<ResSve.fem>)])(table ResSve.Sex[(Mode@0.s!Swedish.A''53!<ResSve.masc>!<ResSve.pl>!<ResSve.masc>++Sentence@1.s!Swedish.A''53!<ResSve.masc>!<ResSve.pl>!<ResSve.masc>)(Mode@0.s!Swedish.A''53!<ResSve.masc>!<ResSve.pl>!<ResSve.fem>++Sentence@1.s!Swedish.A''53!<ResSve.masc>!<ResSve.pl>!<ResSve.fem>)])])(table ResSve.Num[(table ResSve.Sex[(Mode@0.s!Swedish.A''53!<ResSve.fem>!<ResSve.sg>!<ResSve.masc>++Sentence@1.s!Swedish.A''53!<ResSve.fem>!<ResSve.sg>!<ResSve.masc>)(Mode@0.s!Swedish.A''53!<ResSve.fem>!<ResSve.sg>!<ResSve.fem>++Sentence@1.s!Swedish.A''53!<ResSve.fem>!<ResSve.sg>!<ResSve.fem>)])(table ResSve.Sex[(Mode@0.s!Swedish.A''53!<ResSve.fem>!<ResSve.pl>!<ResSve.masc>++Sentence@1.s!Swedish.A''53!<ResSve.fem>!<ResSve.pl>!<ResSve.masc>)(Mode@0.s!Swedish.A''53!<ResSve.fem>!<ResSve.pl>!<ResSve.fem>++Sentence@1.s!Swedish.A''53!<ResSve.fem>!<ResSve.pl>!<ResSve.fem>)])])])]};"Mode_0 Sentence_1";
lin Mother:Letter.Author=\->{n=Swedish.A''5;s=table ResSve.Num{p_Mother__0=>table ResSve.Sex{p_Mother__1=>"Mamma"}};x=<ResSve.fem>};"{ResSve.cnum} {ResSve.sg}";
lin Name:Letter.Author=\String@0->{n=Swedish.A''5;s=table ResSve.Num{p_Name__0=>table ResSve.Sex{p_Name__1=>String@0.s}};x=<ResSve.masc>};"{ResSve.cnum} {ResSve.sg}";
lin NameHe:Letter.Recipient=\String@0->{n=<ResSve.sg>;s=String@0.s;x=<ResSve.masc>};"{ResSve.sg}";
lin NameShe:Letter.Recipient=\String@0->{n=<ResSve.sg>;s=String@0.s;x=<ResSve.fem>};"{ResSve.sg}";
lincat NounPhrase={g:ResSve.Gen;n:ResSve.Num;s:Str}={g=<ResSve.en>;n=<ResSve.sg>;s=str@0};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{g=<ResSve.en>;n=<ResSve.pl>;s="vц╔ra"++"kunder"};"{ResSve.en}";
lin PlainRec:Letter.Heading=\Recipient@0->{n=Recipient@0.n;s=Recipient@0.s;x=Recipient@0.x};"Recipient_0";
lin PlainSent:Letter.Message=\Sentence@0->{s=Sentence@0.s};"Sentence_0";
lincat Position={s:(ResSve.Num=>(ResSve.Sex=>Str))}={s=table ResSve.Num{p_Position__0=>table ResSve.Sex{p_Position__1=>str@0}}};"Position";
lin President:Letter.Author=\->{n=Swedish.A''5;s=table ResSve.Num{p_President__0=>table ResSve.Sex{p_President__1=>"Presidenten"}};x=<ResSve.masc>};"{ResSve.cnum} {ResSve.sg}";
lin ProjectManager:Letter.Position=\->{s=table ResSve.Num[(table ResSve.Sex{p_ProjectManager__1=>"projektchef"})(table ResSve.Sex{p_ProjectManager__1=>"projektchefer"})]};"projektchef";
lincat Recipient={n:ResSve.Num;s:Str;x:ResSve.Sex}={n=<ResSve.sg>;s=str@0;x=<ResSve.masc>};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResSve.DepNum[(table ResSve.Sex{p_Regret__1=>table ResSve.Num[Swedish.A''71 Swedish.A''72]})(table ResSve.Sex{p_Regret__1=>table ResSve.Num[Swedish.A''71(table ResSve.Sex{p_Regret__3=>"jag"++("mц╔ste"++("tyvц╓rr"++"meddela")++("er"++"att"))})]})(table ResSve.Sex{p_Regret__1=>table ResSve.Num[(table ResSve.Sex{p_Regret__3=>"vi"++("mц╔ste"++("tyvц╓rr"++"meddela")++("dig"++"att"))})Swedish.A''72]})]};"jag (mЕste tyvДrr meddela)dig att";
lin Senior:Letter.Position=\->{s=table ResSve.Num{p_Senior__0=>table ResSve.Sex{p_Senior__1=>"ц╓ldre"++"forskare"}}};"Дldre forskare";
lincat Sentence={s:(ResSve.DepNum=>(ResSve.Sex=>(ResSve.Num=>(ResSve.Sex=>Str))))}={s=table ResSve.DepNum{p_Sentence__0=>table ResSve.Sex{p_Sentence__1=>table ResSve.Num{p_Sentence__2=>table ResSve.Sex{p_Sentence__3=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{n=<ResSve.depnum>;s=table ResSve.Num[(table ResSve.Sex[("din"++"hustru")("din"++"man")])(table ResSve.Sex[("era"++"hustrur")("era"++"mц╓n")])];x=<ResSve.masc>};"{ResSve.depnum}";
}
resource ResSve={flags coding=utf8;flags modulesize=n5;param DepNum=depnum|cnum ResSve.Num;
param Gen=en|ett;
param Kas=nom|acc;
param Num=sg|pl;
param Sex=masc|fem;
}
concrete French of Letter=open ResFra in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;oper A''12:Str=table ResFra.Num["mes""nos"];
oper A''23:Str=table ResFra.Gen{p_Honour__3=>"j'ai"++("l'honneur"++"de"++("t'informer"++"que"))};
oper A''24:Str=table ResFra.Gen{p_Honour__3=>"nous"++"avons"++("l'honneur"++"de"++("vous"++"informer"++"que"))};
oper A''34:Str=table ResFra.Gen{p_ILoveYou__3=>"je"++"t'aime"};
oper A''35:Str=table ResFra.Gen{p_ILoveYou__3=>"nous"++("vous"++"aimons")};
oper A''5:Str=<ResFra.cgen<ResFra.masc>>;
oper A''51:Str=<ResFra.cgen<ResFra.fem>>;
oper A''6:Str=<ResFra.cnum<ResFra.sg>>;
oper A''65:Str=<ResFra.cnum<ResFra.pl>>;
oper A''86:Str=table ResFra.Gen[("je"++"suis"++("dц╘solц╘e"++("d'informer"++"que")))("je"++"suis"++("dц╘solц╘"++("d'informer"++"que")))];
oper A''87:Str=table ResFra.Gen[("nous"++"sommes"++("dц╘solц╘es"++("d'informer"++"que")))("nous"++"sommes"++("dц╘solц╘s"++("d'informer"++"que")))];
oper A''89:Str=table ResFra.Gen{p_Regret__3=>"je"++"suis"++("dц╘solц╘"++("d'informer"++"que"))};
oper A''90:Str=table ResFra.Gen{p_Regret__3=>"nous"++"sommes"++("dц╘solц╘s"++("d'informer"++"que"))};
oper A''92:Str=table ResFra.Gen{p_Regret__3=>"je"++"suis"++("dц╘solц╘e"++("d'informer"++"que"))};
oper A''93:Str=table ResFra.Gen{p_Regret__3=>"nous"++"sommes"++("dц╘solц╘es"++("d'informer"++"que"))};
lincat Author={g:ResFra.DepGen;n:ResFra.DepNum;s:(ResFra.Num=>(ResFra.Gen=>Str))}={g=<ResFra.depgen>;n=<ResFra.depnum>;s=table ResFra.Num{p_Author__0=>table ResFra.Gen{p_Author__1=>str@0}}};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResFra.DepNum{p_BePromoted__0=>table ResFra.DepGen{p_BePromoted__1=>table ResFra.Num[(table ResFra.Gen[("tu"++("as"++"ц╘tц╘")++("promu"++Position@0.s!<ResFra.sg>!<ResFra.masc>))("tu"++("as"++"ц╘tц╘")++("promue"++Position@0.s!<ResFra.sg>!<ResFra.fem>))])(table ResFra.Gen[("vous"++("avez"++"ц╘tц╘")++("promus"++Position@0.s!<ResFra.pl>!<ResFra.masc>))("vous"++("avez"++"ц╘tц╘")++("promues"++Position@0.s!<ResFra.pl>!<ResFra.fem>))])]}}};"(tu as ИtИ)promu Position_0";
lin ColleagueHe:Letter.Recipient=\->{g=<ResFra.masc>;n=<ResFra.sg>;s="collц╗gue"};"{ResFra.masc}";
lin ColleagueShe:Letter.Recipient=\->{g=<ResFra.fem>;n=<ResFra.sg>;s="collц╗gue"};"{ResFra.fem}";
lin ColleaguesHe:Letter.Recipient=\->{g=<ResFra.masc>;n=<ResFra.pl>;s="collц╗gues"};"{ResFra.masc}";
lin ColleaguesShe:Letter.Recipient=\->{g=<ResFra.fem>;n=<ResFra.pl>;s="collц╗gues"};"{ResFra.fem}";
lin Company:Letter.NounPhrase=\->{g=<ResFra.fem>;n=<ResFra.sg>;s="notre"++"entreprise"};"{ResFra.fem}";
lin Competitor:Letter.NounPhrase=\->{g=<ResFra.masc>;n=<ResFra.sg>;s="notre"++("pire"++"compц╘titeur")};"{ResFra.masc}";
lin DarlingHe:Letter.Recipient=\->{g=<ResFra.masc>;n=<ResFra.sg>;s="chц╘ri"};"{ResFra.masc}";
lin DarlingShe:Letter.Recipient=\->{g=<ResFra.fem>;n=<ResFra.sg>;s="chц╘rie"};"{ResFra.fem}";
lin Dean:Letter.Author=\->{g=French.A''5;n=French.A''6;s=table ResFra.Num{p_Dean__0=>table ResFra.Gen{p_Dean__1=>"le"++"doyen"}}};"{ResFra.cgen} {ResFra.masc}";
lin DearRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=table ResFra.Num[(table ResFra.Gen["cher""chц╗re"]!(Recipient@0.g))(table ResFra.Gen["chers""chц╗res"]!(Recipient@0.g))]!(Recipient@0.n)++Recipient@0.s};"Recipient_0";
lincat Ending={g:ResFra.DepGen;n:ResFra.DepNum;s:(ResFra.Num=>(ResFra.Gen=>Str))}={g=<ResFra.depgen>;n=<ResFra.depnum>;s=table ResFra.Num{p_Ending__0=>table ResFra.Gen{p_Ending__1=>str@0}}};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{g=Author@0.g;n=Author@0.n;s=table ResFra.Num[(table ResFra.Gen{p_FormalEnding__1=>"avec"++(French.A''12!(table ResFra.DepNum[<ResFra.sg><ResFra.sg><ResFra.pl>]!(Author@0.n))++("salutations"++("distinguц╘es"++"&-")++Author@0.s!<ResFra.sg>!$p_FormalEnding__1))})(table ResFra.Gen{p_FormalEnding__1=>"avec"++(French.A''12!(table ResFra.DepNum[<ResFra.pl><ResFra.sg><ResFra.pl>]!(Author@0.n))++("salutations"++("distinguц╘es"++"&-")++Author@0.s!<ResFra.pl>!$p_FormalEnding__1))})]};"Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResFra.DepNum{p_GoBankrupt__0=>table ResFra.DepGen{p_GoBankrupt__1=>table ResFra.Num{p_GoBankrupt__2=>table ResFra.Gen{p_GoBankrupt__3=>NounPhrase@0.s++(table ResFra.Num["a""ont"]!(NounPhrase@0.n)++("fait"++"banqueroute"))}}}}};"NounPhrase_0 a fait banqueroute";
lincat Heading={g:ResFra.Gen;n:ResFra.Num;s:Str}={g=<ResFra.masc>;n=<ResFra.sg>;s=str@0};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s="Bonjour"++Recipient@0.s};"Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResFra.DepNum[(table ResFra.DepGen{p_Honour__1=>table ResFra.Num[French.A''23 French.A''24]})(table ResFra.DepGen{p_Honour__1=>table ResFra.Num[French.A''23(table ResFra.Gen{p_Honour__3=>"j'ai"++("l'honneur"++"de"++("vous"++"informer"++"que"))})]})(table ResFra.DepGen{p_Honour__1=>table ResFra.Num[(table ResFra.Gen{p_Honour__3=>"nous"++"avons"++("l'honneur"++"de"++("t'informer"++"que"))})French.A''24]})]};"j'ai (l'honneur de)t'informer que";
lin ILoveYou:Letter.Sentence=\->{s=table ResFra.DepNum[(table ResFra.DepGen{p_ILoveYou__1=>table ResFra.Num[French.A''34 French.A''35]})(table ResFra.DepGen{p_ILoveYou__1=>table ResFra.Num[French.A''34(table ResFra.Gen{p_ILoveYou__3=>"je"++("vous"++"aime")})]})(table ResFra.DepGen{p_ILoveYou__1=>table ResFra.Num[(table ResFra.Gen{p_ILoveYou__3=>"nous"++"t'aimons"})French.A''35]})]};"je t'aime";
lin InformalEnding:Letter.Ending=\Author@0->{g=Author@0.g;n=Author@0.n;s=table ResFra.Num{p_InformalEnding__0=>table ResFra.Gen{p_InformalEnding__1=>"Amicalement"++"&-"++Author@0.s!$p_InformalEnding__0!$p_InformalEnding__1}}};"Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s="Bonjour"};"Recipient_0";
lincat Letter={s:Str}={s=str@0};"Letter";
lincat Message={s:(ResFra.DepNum=>(ResFra.DepGen=>(ResFra.Num=>(ResFra.Gen=>Str))))}={s=table ResFra.DepNum{p_Message__0=>table ResFra.DepGen{p_Message__1=>table ResFra.Num{p_Message__2=>table ResFra.Gen{p_Message__3=>str@0}}}}};"Message";
lin MkLetter:Letter.Letter=\Heading@0,Message@1,Ending@2->{s=Heading@0.s++(","++("&-"++(Message@1.s!(Ending@2.n)!(Ending@2.g)!(Heading@0.n)!(Heading@0.g)++("."++("&-"++Ending@2.s!(Heading@0.n)!(Heading@0.g))))))};"Heading_0 , &- Message_1 . &- Ending_2";
lincat Mode={s:(ResFra.DepNum=>(ResFra.DepGen=>(ResFra.Num=>(ResFra.Gen=>Str))))}={s=table ResFra.DepNum{p_Mode__0=>table ResFra.DepGen{p_Mode__1=>table ResFra.Num{p_Mode__2=>table ResFra.Gen{p_Mode__3=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResFra.DepNum[(table ResFra.DepGen[(table ResFra.Num{p_ModeSent__2=>table ResFra.Gen{p_ModeSent__3=>Mode@0.s!<ResFra.depnum>!<ResFra.depgen>!$p_ModeSent__2!$p_ModeSent__3++Sentence@1.s!<ResFra.depnum>!<ResFra.depgen>!$p_ModeSent__2!$p_ModeSent__3}})(table ResFra.Num{p_ModeSent__2=>table ResFra.Gen[(Mode@0.s!<ResFra.depnum>!French.A''5!$p_ModeSent__2!<ResFra.masc>++Sentence@1.s!<ResFra.depnum>!French.A''5!$p_ModeSent__2!<ResFra.masc>)(Mode@0.s!<ResFra.depnum>!French.A''5!$p_ModeSent__2!<ResFra.fem>++Sentence@1.s!<ResFra.depnum>!French.A''5!$p_ModeSent__2!<ResFra.fem>)]})(table ResFra.Num{p_ModeSent__2=>table ResFra.Gen[(Mode@0.s!<ResFra.depnum>!French.A''51!$p_ModeSent__2!<ResFra.masc>++Sentence@1.s!<ResFra.depnum>!French.A''51!$p_ModeSent__2!<ResFra.masc>)(Mode@0.s!<ResFra.depnum>!French.A''51!$p_ModeSent__2!<ResFra.fem>++Sentence@1.s!<ResFra.depnum>!French.A''51!$p_ModeSent__2!<ResFra.fem>)]})])(table ResFra.DepGen[(table ResFra.Num[(table ResFra.Gen{p_ModeSent__3=>Mode@0.s!French.A''6!<ResFra.depgen>!<ResFra.sg>!$p_ModeSent__3++Sentence@1.s!French.A''6!<ResFra.depgen>!<ResFra.sg>!$p_ModeSent__3})(table ResFra.Gen{p_ModeSent__3=>Mode@0.s!French.A''6!<ResFra.depgen>!<ResFra.pl>!$p_ModeSent__3++Sentence@1.s!French.A''6!<ResFra.depgen>!<ResFra.pl>!$p_ModeSent__3})])(table ResFra.Num[(table ResFra.Gen[(Mode@0.s!French.A''6!French.A''5!<ResFra.sg>!<ResFra.masc>++Sentence@1.s!French.A''6!French.A''5!<ResFra.sg>!<ResFra.masc>)(Mode@0.s!French.A''6!French.A''5!<ResFra.sg>!<ResFra.fem>++Sentence@1.s!French.A''6!French.A''5!<ResFra.sg>!<ResFra.fem>)])(table ResFra.Gen[(Mode@0.s!French.A''6!French.A''5!<ResFra.pl>!<ResFra.masc>++Sentence@1.s!French.A''6!French.A''5!<ResFra.pl>!<ResFra.masc>)(Mode@0.s!French.A''6!French.A''5!<ResFra.pl>!<ResFra.fem>++Sentence@1.s!French.A''6!French.A''5!<ResFra.pl>!<ResFra.fem>)])])(table ResFra.Num[(table ResFra.Gen[(Mode@0.s!French.A''6!French.A''51!<ResFra.sg>!<ResFra.masc>++Sentence@1.s!French.A''6!French.A''51!<ResFra.sg>!<ResFra.masc>)(Mode@0.s!French.A''6!French.A''51!<ResFra.sg>!<ResFra.fem>++Sentence@1.s!French.A''6!French.A''51!<ResFra.sg>!<ResFra.fem>)])(table ResFra.Gen[(Mode@0.s!French.A''6!French.A''51!<ResFra.pl>!<ResFra.masc>++Sentence@1.s!French.A''6!French.A''51!<ResFra.pl>!<ResFra.masc>)(Mode@0.s!French.A''6!French.A''51!<ResFra.pl>!<ResFra.fem>++Sentence@1.s!French.A''6!French.A''51!<ResFra.pl>!<ResFra.fem>)])])])(table ResFra.DepGen[(table ResFra.Num[(table ResFra.Gen{p_ModeSent__3=>Mode@0.s!French.A''65!<ResFra.depgen>!<ResFra.sg>!$p_ModeSent__3++Sentence@1.s!French.A''65!<ResFra.depgen>!<ResFra.sg>!$p_ModeSent__3})(table ResFra.Gen{p_ModeSent__3=>Mode@0.s!French.A''65!<ResFra.depgen>!<ResFra.pl>!$p_ModeSent__3++Sentence@1.s!French.A''65!<ResFra.depgen>!<ResFra.pl>!$p_ModeSent__3})])(table ResFra.Num[(table ResFra.Gen[(Mode@0.s!French.A''65!French.A''5!<ResFra.sg>!<ResFra.masc>++Sentence@1.s!French.A''65!French.A''5!<ResFra.sg>!<ResFra.masc>)(Mode@0.s!French.A''65!French.A''5!<ResFra.sg>!<ResFra.fem>++Sentence@1.s!French.A''65!French.A''5!<ResFra.sg>!<ResFra.fem>)])(table ResFra.Gen[(Mode@0.s!French.A''65!French.A''5!<ResFra.pl>!<ResFra.masc>++Sentence@1.s!French.A''65!French.A''5!<ResFra.pl>!<ResFra.masc>)(Mode@0.s!French.A''65!French.A''5!<ResFra.pl>!<ResFra.fem>++Sentence@1.s!French.A''65!French.A''5!<ResFra.pl>!<ResFra.fem>)])])(table ResFra.Num[(table ResFra.Gen[(Mode@0.s!French.A''65!French.A''51!<ResFra.sg>!<ResFra.masc>++Sentence@1.s!French.A''65!French.A''51!<ResFra.sg>!<ResFra.masc>)(Mode@0.s!French.A''65!French.A''51!<ResFra.sg>!<ResFra.fem>++Sentence@1.s!French.A''65!French.A''51!<ResFra.sg>!<ResFra.fem>)])(table ResFra.Gen[(Mode@0.s!French.A''65!French.A''51!<ResFra.pl>!<ResFra.masc>++Sentence@1.s!French.A''65!French.A''51!<ResFra.pl>!<ResFra.masc>)(Mode@0.s!French.A''65!French.A''51!<ResFra.pl>!<ResFra.fem>++Sentence@1.s!French.A''65!French.A''51!<ResFra.pl>!<ResFra.fem>)])])])]};"Mode_0 Sentence_1";
lin Mother:Letter.Author=\->{g=French.A''51;n=French.A''6;s=table ResFra.Num{p_Mother__0=>table ResFra.Gen{p_Mother__1=>"maman"}}};"{ResFra.cgen} {ResFra.fem}";
lin Name:Letter.Author=\String@0->{g=French.A''5;n=French.A''6;s=table ResFra.Num{p_Name__0=>table ResFra.Gen{p_Name__1=>String@0.s}}};"{ResFra.cgen} {ResFra.masc}";
lin NameHe:Letter.Recipient=\String@0->{g=<ResFra.masc>;n=<ResFra.sg>;s=String@0.s};"{ResFra.masc}";
lin NameShe:Letter.Recipient=\String@0->{g=<ResFra.fem>;n=<ResFra.sg>;s=String@0.s};"{ResFra.fem}";
lincat NounPhrase={g:ResFra.Gen;n:ResFra.Num;s:Str}={g=<ResFra.masc>;n=<ResFra.sg>;s=str@0};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{g=<ResFra.masc>;n=<ResFra.pl>;s="nos"++"clients"};"{ResFra.masc}";
lin PlainRec:Letter.Heading=\Recipient@0->{g=Recipient@0.g;n=Recipient@0.n;s=Recipient@0.s};"Recipient_0";
lin PlainSent:Letter.Message=\Sentence@0->{s=Sentence@0.s};"Sentence_0";
lincat Position={s:(ResFra.Num=>(ResFra.Gen=>Str))}={s=table ResFra.Num{p_Position__0=>table ResFra.Gen{p_Position__1=>str@0}}};"Position";
lin President:Letter.Author=\->{g=French.A''5;n=French.A''6;s=table ResFra.Num{p_President__0=>table ResFra.Gen{p_President__1=>"le"++"prц╘sident"}}};"{ResFra.cgen} {ResFra.masc}";
lin ProjectManager:Letter.Position=\->{s=table ResFra.Num[(table ResFra.Gen{p_ProjectManager__1=>"chef"++("de"++"projet")})(table ResFra.Gen{p_ProjectManager__1=>"chefs"++("de"++"projets")})]};"chef de projet";
lincat Recipient={g:ResFra.Gen;n:ResFra.Num;s:Str}={g=<ResFra.masc>;n=<ResFra.sg>;s=str@0};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResFra.DepNum[(table ResFra.DepGen[(table ResFra.Num[French.A''86 French.A''87])(table ResFra.Num[French.A''89 French.A''90])(table ResFra.Num[French.A''92 French.A''93])])(table ResFra.DepGen[(table ResFra.Num{p_Regret__2=>French.A''86})(table ResFra.Num{p_Regret__2=>French.A''89})(table ResFra.Num{p_Regret__2=>French.A''92})])(table ResFra.DepGen[(table ResFra.Num{p_Regret__2=>French.A''87})(table ResFra.Num{p_Regret__2=>French.A''90})(table ResFra.Num{p_Regret__2=>French.A''93})])]};"(je suis)dИsolИe d'informer que";
lin Senior:Letter.Position=\->{s=table ResFra.Num[(table ResFra.Gen{p_Senior__1=>"responsable"++"scientifique"})(table ResFra.Gen{p_Senior__1=>"responsables"++"scientifiques"})]};"responsable scientifique";
lincat Sentence={s:(ResFra.DepNum=>(ResFra.DepGen=>(ResFra.Num=>(ResFra.Gen=>Str))))}={s=table ResFra.DepNum{p_Sentence__0=>table ResFra.DepGen{p_Sentence__1=>table ResFra.Num{p_Sentence__2=>table ResFra.Gen{p_Sentence__3=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{g=<ResFra.depgen>;n=<ResFra.depnum>;s=table ResFra.Num[(table ResFra.Gen[("ta"++"femme")("ton"++"mari")])(table ResFra.Gen[("vos"++"femmes")("vos"++"maris")])]};"{ResFra.depgen}";
}
resource ResFra={flags coding=utf8;flags modulesize=n5;param DepGen=depgen|cgen ResFra.Gen;
param DepNum=depnum|cnum ResFra.Num;
param Gen=masc|fem;
param Kas=nom|acc;
param Num=sg|pl;
}
concrete English of Letter=open ResEng in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;oper A''14:Str=table ResEng.Sex{p_Honour__3=>"I"++("have"++("the"++("honour"++("to"++("inform"++("you"++"that"))))))};
oper A''15:Str=table ResEng.Sex{p_Honour__3=>"we"++("have"++("the"++("honour"++("to"++("inform"++("you"++"that"))))))};
oper A''23:Str=table ResEng.Sex{p_ILoveYou__3=>"I"++("love"++"you")};
oper A''24:Str=table ResEng.Sex{p_ILoveYou__3=>"we"++("love"++"you")};
oper A''4:Str=<ResEng.cnum<ResEng.sg>>;
oper A''46:Str=<ResEng.cnum<ResEng.pl>>;
oper A''64:Str=table ResEng.Sex{p_Regret__3=>"I"++("am"++("sorry"++("to"++("inform"++("you"++"that")))))};
oper A''65:Str=table ResEng.Sex{p_Regret__3=>"we"++("are"++("sorry"++("to"++("inform"++("you"++"that")))))};
lincat Author={n:ResEng.DepNum;s:(ResEng.Num=>(ResEng.Sex=>Str));x:ResEng.Sex}={n=<ResEng.depnum>;s=table ResEng.Num{p_Author__0=>table ResEng.Sex{p_Author__1=>str@0}};x=<ResEng.masc>};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResEng.DepNum{p_BePromoted__0=>table ResEng.Sex{p_BePromoted__1=>table ResEng.Num{p_BePromoted__2=>table ResEng.Sex{p_BePromoted__3=>"you"++("have"++("been"++("promoted"++"to")))++Position@0.s!$p_BePromoted__2!$p_BePromoted__3}}}}};"(you have been promoted to)Position_0";
lin ColleagueHe:Letter.Recipient=\->{n=<ResEng.sg>;s="colleague";x=<ResEng.masc>};"{ResEng.sg}";
lin ColleagueShe:Letter.Recipient=\->{n=<ResEng.sg>;s="colleague";x=<ResEng.fem>};"{ResEng.sg}";
lin ColleaguesHe:Letter.Recipient=\->{n=<ResEng.pl>;s="colleagues";x=<ResEng.masc>};"{ResEng.pl}";
lin ColleaguesShe:Letter.Recipient=\->{n=<ResEng.pl>;s="colleagues";x=<ResEng.fem>};"{ResEng.pl}";
lin Company:Letter.NounPhrase=\->{n=<ResEng.sg>;s="our"++"company"};"{ResEng.sg}";
lin Competitor:Letter.NounPhrase=\->{n=<ResEng.sg>;s="our"++("worst"++"competitor")};"{ResEng.sg}";
lin DarlingHe:Letter.Recipient=\->{n=<ResEng.sg>;s="darling";x=<ResEng.masc>};"{ResEng.sg}";
lin DarlingShe:Letter.Recipient=\->{n=<ResEng.sg>;s="darling";x=<ResEng.fem>};"{ResEng.sg}";
lin Dean:Letter.Author=\->{n=English.A''4;s=table ResEng.Num{p_Dean__0=>table ResEng.Sex{p_Dean__1=>"the"++"Dean"}};x=<ResEng.masc>};"{ResEng.cnum} {ResEng.sg}";
lin DearRec:Letter.Heading=\Recipient@0->{n=Recipient@0.n;s="Dear"++Recipient@0.s;x=Recipient@0.x};"Recipient_0";
lincat Ending={n:ResEng.DepNum;s:(ResEng.Num=>(ResEng.Sex=>Str));x:ResEng.Sex}={n=<ResEng.depnum>;s=table ResEng.Num{p_Ending__0=>table ResEng.Sex{p_Ending__1=>str@0}};x=<ResEng.masc>};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{n=Author@0.n;s=table ResEng.Num{p_FormalEnding__0=>table ResEng.Sex{p_FormalEnding__1=>"Sincerely"++("yours"++"&-")++Author@0.s!$p_FormalEnding__0!$p_FormalEnding__1}};x=Author@0.x};"Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResEng.DepNum{p_GoBankrupt__0=>table ResEng.Sex{p_GoBankrupt__1=>table ResEng.Num{p_GoBankrupt__2=>table ResEng.Sex{p_GoBankrupt__3=>NounPhrase@0.s++(table ResEng.Num["has""have"]!(NounPhrase@0.n)++("gone"++"bankrupt"))}}}}};"NounPhrase_0 has gone bankrupt";
lincat Heading={n:ResEng.Num;s:Str;x:ResEng.Sex}={n=<ResEng.sg>;s=str@0;x=<ResEng.masc>};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{n=Recipient@0.n;s="Hello"++Recipient@0.s;x=Recipient@0.x};"Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResEng.DepNum[(table ResEng.Sex{p_Honour__1=>table ResEng.Num[English.A''14 English.A''15]})(table ResEng.Sex{p_Honour__1=>table ResEng.Num{p_Honour__2=>English.A''14}})(table ResEng.Sex{p_Honour__1=>table ResEng.Num{p_Honour__2=>English.A''15}})]};"I have the honour to inform you that";
lin ILoveYou:Letter.Sentence=\->{s=table ResEng.DepNum[(table ResEng.Sex{p_ILoveYou__1=>table ResEng.Num[English.A''23 English.A''24]})(table ResEng.Sex{p_ILoveYou__1=>table ResEng.Num{p_ILoveYou__2=>English.A''23}})(table ResEng.Sex{p_ILoveYou__1=>table ResEng.Num{p_ILoveYou__2=>English.A''24}})]};"I love you";
lin InformalEnding:Letter.Ending=\Author@0->{n=Author@0.n;s=table ResEng.Num{p_InformalEnding__0=>table ResEng.Sex{p_InformalEnding__1=>"With"++("best"++("regards"++"&-"))++Author@0.s!$p_InformalEnding__0!$p_InformalEnding__1}};x=Author@0.x};"Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{n=Recipient@0.n;s="Hello";x=Recipient@0.x};"Recipient_0";
lincat Letter={s:Str}={s=str@0};"Letter";
lincat Message={s:(ResEng.DepNum=>(ResEng.Sex=>(ResEng.Num=>(ResEng.Sex=>Str))))}={s=table ResEng.DepNum{p_Message__0=>table ResEng.Sex{p_Message__1=>table ResEng.Num{p_Message__2=>table ResEng.Sex{p_Message__3=>str@0}}}}};"Message";
lin MkLetter:Letter.Letter=\Heading@0,Message@1,Ending@2->{s=Heading@0.s++(","++("&-"++(Message@1.s!(Ending@2.n)!(Ending@2.x)!(Heading@0.n)!(Heading@0.x)++("."++("&-"++Ending@2.s!(Heading@0.n)!(Heading@0.x))))))};"Heading_0 , &- Message_1 . &- Ending_2";
lincat Mode={s:(ResEng.DepNum=>(ResEng.Sex=>(ResEng.Num=>(ResEng.Sex=>Str))))}={s=table ResEng.DepNum{p_Mode__0=>table ResEng.Sex{p_Mode__1=>table ResEng.Num{p_Mode__2=>table ResEng.Sex{p_Mode__3=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResEng.DepNum[(table ResEng.Sex[(table ResEng.Num{p_ModeSent__2=>table ResEng.Sex[(Mode@0.s!<ResEng.depnum>!<ResEng.masc>!$p_ModeSent__2!<ResEng.masc>++Sentence@1.s!<ResEng.depnum>!<ResEng.masc>!$p_ModeSent__2!<ResEng.masc>)(Mode@0.s!<ResEng.depnum>!<ResEng.masc>!$p_ModeSent__2!<ResEng.fem>++Sentence@1.s!<ResEng.depnum>!<ResEng.masc>!$p_ModeSent__2!<ResEng.fem>)]})(table ResEng.Num{p_ModeSent__2=>table ResEng.Sex[(Mode@0.s!<ResEng.depnum>!<ResEng.fem>!$p_ModeSent__2!<ResEng.masc>++Sentence@1.s!<ResEng.depnum>!<ResEng.fem>!$p_ModeSent__2!<ResEng.masc>)(Mode@0.s!<ResEng.depnum>!<ResEng.fem>!$p_ModeSent__2!<ResEng.fem>++Sentence@1.s!<ResEng.depnum>!<ResEng.fem>!$p_ModeSent__2!<ResEng.fem>)]})])(table ResEng.Sex[(table ResEng.Num[(table ResEng.Sex[(Mode@0.s!English.A''4!<ResEng.masc>!<ResEng.sg>!<ResEng.masc>++Sentence@1.s!English.A''4!<ResEng.masc>!<ResEng.sg>!<ResEng.masc>)(Mode@0.s!English.A''4!<ResEng.masc>!<ResEng.sg>!<ResEng.fem>++Sentence@1.s!English.A''4!<ResEng.masc>!<ResEng.sg>!<ResEng.fem>)])(table ResEng.Sex[(Mode@0.s!English.A''4!<ResEng.masc>!<ResEng.pl>!<ResEng.masc>++Sentence@1.s!English.A''4!<ResEng.masc>!<ResEng.pl>!<ResEng.masc>)(Mode@0.s!English.A''4!<ResEng.masc>!<ResEng.pl>!<ResEng.fem>++Sentence@1.s!English.A''4!<ResEng.masc>!<ResEng.pl>!<ResEng.fem>)])])(table ResEng.Num[(table ResEng.Sex[(Mode@0.s!English.A''4!<ResEng.fem>!<ResEng.sg>!<ResEng.masc>++Sentence@1.s!English.A''4!<ResEng.fem>!<ResEng.sg>!<ResEng.masc>)(Mode@0.s!English.A''4!<ResEng.fem>!<ResEng.sg>!<ResEng.fem>++Sentence@1.s!English.A''4!<ResEng.fem>!<ResEng.sg>!<ResEng.fem>)])(table ResEng.Sex[(Mode@0.s!English.A''4!<ResEng.fem>!<ResEng.pl>!<ResEng.masc>++Sentence@1.s!English.A''4!<ResEng.fem>!<ResEng.pl>!<ResEng.masc>)(Mode@0.s!English.A''4!<ResEng.fem>!<ResEng.pl>!<ResEng.fem>++Sentence@1.s!English.A''4!<ResEng.fem>!<ResEng.pl>!<ResEng.fem>)])])])(table ResEng.Sex[(table ResEng.Num[(table ResEng.Sex[(Mode@0.s!English.A''46!<ResEng.masc>!<ResEng.sg>!<ResEng.masc>++Sentence@1.s!English.A''46!<ResEng.masc>!<ResEng.sg>!<ResEng.masc>)(Mode@0.s!English.A''46!<ResEng.masc>!<ResEng.sg>!<ResEng.fem>++Sentence@1.s!English.A''46!<ResEng.masc>!<ResEng.sg>!<ResEng.fem>)])(table ResEng.Sex[(Mode@0.s!English.A''46!<ResEng.masc>!<ResEng.pl>!<ResEng.masc>++Sentence@1.s!English.A''46!<ResEng.masc>!<ResEng.pl>!<ResEng.masc>)(Mode@0.s!English.A''46!<ResEng.masc>!<ResEng.pl>!<ResEng.fem>++Sentence@1.s!English.A''46!<ResEng.masc>!<ResEng.pl>!<ResEng.fem>)])])(table ResEng.Num[(table ResEng.Sex[(Mode@0.s!English.A''46!<ResEng.fem>!<ResEng.sg>!<ResEng.masc>++Sentence@1.s!English.A''46!<ResEng.fem>!<ResEng.sg>!<ResEng.masc>)(Mode@0.s!English.A''46!<ResEng.fem>!<ResEng.sg>!<ResEng.fem>++Sentence@1.s!English.A''46!<ResEng.fem>!<ResEng.sg>!<ResEng.fem>)])(table ResEng.Sex[(Mode@0.s!English.A''46!<ResEng.fem>!<ResEng.pl>!<ResEng.masc>++Sentence@1.s!English.A''46!<ResEng.fem>!<ResEng.pl>!<ResEng.masc>)(Mode@0.s!English.A''46!<ResEng.fem>!<ResEng.pl>!<ResEng.fem>++Sentence@1.s!English.A''46!<ResEng.fem>!<ResEng.pl>!<ResEng.fem>)])])])]};"Mode_0 Sentence_1";
lin Mother:Letter.Author=\->{n=English.A''4;s=table ResEng.Num{p_Mother__0=>table ResEng.Sex{p_Mother__1=>"Mom"}};x=<ResEng.fem>};"{ResEng.cnum} {ResEng.sg}";
lin Name:Letter.Author=\String@0->{n=English.A''4;s=table ResEng.Num{p_Name__0=>table ResEng.Sex{p_Name__1=>String@0.s}};x=<ResEng.masc>};"{ResEng.cnum} {ResEng.sg}";
lin NameHe:Letter.Recipient=\String@0->{n=<ResEng.sg>;s=String@0.s;x=<ResEng.masc>};"{ResEng.sg}";
lin NameShe:Letter.Recipient=\String@0->{n=<ResEng.sg>;s=String@0.s;x=<ResEng.fem>};"{ResEng.sg}";
lincat NounPhrase={n:ResEng.Num;s:Str}={n=<ResEng.sg>;s=str@0};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{n=<ResEng.pl>;s="our"++"customers"};"{ResEng.pl}";
lin PlainRec:Letter.Heading=\Recipient@0->{n=Recipient@0.n;s=Recipient@0.s;x=Recipient@0.x};"Recipient_0";
lin PlainSent:Letter.Message=\Sentence@0->{s=Sentence@0.s};"Sentence_0";
lincat Position={s:(ResEng.Num=>(ResEng.Sex=>Str))}={s=table ResEng.Num{p_Position__0=>table ResEng.Sex{p_Position__1=>str@0}}};"Position";
lin President:Letter.Author=\->{n=English.A''4;s=table ResEng.Num{p_President__0=>table ResEng.Sex{p_President__1=>"the"++"President"}};x=<ResEng.masc>};"{ResEng.cnum} {ResEng.sg}";
lin ProjectManager:Letter.Position=\->{s=table ResEng.Num[(table ResEng.Sex{p_ProjectManager__1=>"a"++("project"++"manager")})(table ResEng.Sex{p_ProjectManager__1=>"project"++"managers"})]};"a project manager";
lincat Recipient={n:ResEng.Num;s:Str;x:ResEng.Sex}={n=<ResEng.sg>;s=str@0;x=<ResEng.masc>};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResEng.DepNum[(table ResEng.Sex{p_Regret__1=>table ResEng.Num[English.A''64 English.A''65]})(table ResEng.Sex{p_Regret__1=>table ResEng.Num{p_Regret__2=>English.A''64}})(table ResEng.Sex{p_Regret__1=>table ResEng.Num{p_Regret__2=>English.A''65}})]};"I am sorry to inform you that";
lin Senior:Letter.Position=\->{s=table ResEng.Num[(table ResEng.Sex{p_Senior__1=>"a"++("senior"++"fellow")})(table ResEng.Sex{p_Senior__1=>"senior"++"fellows"})]};"a senior fellow";
lincat Sentence={s:(ResEng.DepNum=>(ResEng.Sex=>(ResEng.Num=>(ResEng.Sex=>Str))))}={s=table ResEng.DepNum{p_Sentence__0=>table ResEng.Sex{p_Sentence__1=>table ResEng.Num{p_Sentence__2=>table ResEng.Sex{p_Sentence__3=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{n=<ResEng.depnum>;s=table ResEng.Num[(table ResEng.Sex[("your"++"wife")("your"++"husband")])(table ResEng.Sex[("your"++"wives")("your"++"husbands")])];x=<ResEng.masc>};"{ResEng.depnum}";
}
resource ResEng={flags coding=utf8;flags modulesize=n4;param DepNum=depnum|cnum ResEng.Num;
param Kas=nom|acc;
param Num=sg|pl;
param Sex=masc|fem;
}

View File

@@ -1,36 +0,0 @@
GF challenges Microsoft Works! Here you find templates for
multilingual authoring of business and love letters!
Another point of these grammars is to illustrate how
local updates are propagated everywhere in the document.
Form, in the editor
Dear Colleague,
I love you.
With best regards,
your wife
and change between ColleagueHe, ColleagueShe, ColleaguesHe, ColleaguesShe.
The grammars are somewhat ad hoc and messy, and could be improved
with better abstractions.
(AR 2001)
To use in the editor, it is a good idea to precompile:
gf <mkLetter.gfs
For the actual use, type then
jgf Letter.gfcm
and select "Letter" from the "New" menu.
Copyright (c) 2001-2005 Janna Khegai, Alex Kutsela, Aarne Ranta
under GNU General Public License (GPL).
Document last updated August 3, 2004, by Aarne Ranta.

View File

@@ -1,80 +0,0 @@
--1 An Abstract Syntax for Business and Love Letters
--
-- This file defines the abstract syntax of a grammar set whose concrete syntax
-- has so far been written to five languages: English, Finnish, French, Russian,
-- and Swedish.
--
-- The main category of the grammar is $Letter$. The other categories are
-- parts of the letter.
flags startcat=Letter ;
cat
Letter ;
Recipient ; Author ;
Message ;
Heading ; Ending ;
Mode ; Sentence ; NounPhrase ; Position ;
-- There is just one top-level letter structure.
fun
MkLetter : Heading -> Message -> Ending -> Letter ;
-- The heading consists of a greeting of the recipient. The $JustHello$
-- function will actually suppress the name (and title) of the recipient,
-- but the $Recipient$ argument keeps track of the gender and number.
DearRec : Recipient -> Heading ;
PlainRec : Recipient -> Heading ;
HelloRec : Recipient -> Heading ;
JustHello : Recipient -> Heading ;
-- A message is a sentence with of without a *mode*, which is either
-- regret or honour.
ModeSent : Mode -> Sentence -> Message ;
PlainSent : Sentence -> Message ;
Honour, Regret : Mode ;
-- The ending is either formal or informal. It does not currently depend on
-- the heading: making it so would eliminate formality mismatches between
-- the heading and the ending.
FormalEnding : Author -> Ending ;
InformalEnding : Author -> Ending ;
-- The recipient is either a colleague, colleagues, or darling.
-- It can also be a named person. The gender distinction is made
-- because there are things in the body of the letter that depend on it.
ColleagueHe, ColleagueShe : Recipient ;
ColleaguesHe, ColleaguesShe : Recipient ;
DarlingHe, DarlingShe : Recipient ;
NameHe, NameShe : String -> Recipient ;
-- For the author, there is likewise a fixed set of titles, plus the named author.
-- Gender distinctions could be useful even here, for the same reason as with
-- $Recipient$. Notice that the rendering of $Spouse$ will depend on the
-- gender of the recipient.
President, Mother, Spouse, Dean : Author ;
Name : String -> Author ;
-- As for the message body, no much choice is yet available: one can say that
-- the recipient is promoted to some position, that someone has gone bankrupt,
-- or that the author loves the recipient.
BePromoted : Position -> Sentence ;
GoBankrupt : NounPhrase -> Sentence ;
ILoveYou : Sentence ;
Competitor : NounPhrase ;
Company : NounPhrase ;
OurCustomers : NounPhrase ;
Senior : Position ;
ProjectManager : Position ;

View File

@@ -1,151 +0,0 @@
--1 An English Concrete Syntax for Business and Love Letters
--
-- This file defines the English syntax of the grammar set
-- whose abstract syntax is $letter.Abs.gf$.
include letter.Abs.gf ;
flags lexer=textlit ; unlexer=textlit ;
param Sex = masc | fem ;
param Num = sg | pl ;
param Kas = nom | acc ;
param DepNum = depnum | cnum Num ;
lintype SS = {s : Str} ;
lintype SSDep = {s : Num => Sex => Str} ; -- needs Num and Sex
lintype SSSrc = {s : Str ; n : Num ; x : Sex} ; -- gives Num and Sex
lintype SSSrc2 = {s : Num => Sex => Str ; n : DepNum ; x : Sex} ; -- gives and needs
lintype SSDep2 = {s : DepNum => Sex => Num => Sex => Str} ; -- needs Auth's & Recp's
lintype SSSrcNum = {s : Str ; n : Num} ; -- gives Num only
oper
ss : Str -> SS = \s -> {s = s} ;
constNX : Str -> Num -> Sex -> SSSrc2 = \str,num,sex ->
{s = table {_ => table {_ => str}} ; n = cnum num ; x = sex} ;
dep2num : DepNum -> Num -> Num = \dn,n -> case dn of {
depnum => n ;
cnum cn => cn
} ;
lincat
Letter = SS ;
Recipient = SSSrc ;
Author = SSSrc2 ;
Message = SSDep2 ;
Heading = SSSrc ;
Ending = SSSrc2 ;
Mode = SSDep2 ;
Sentence = SSDep2 ;
NounPhrase = SSSrcNum ;
Position = SSDep ;
lin
MkLetter head mess end =
ss (head.s ++ "," ++ "&-" ++
mess.s ! end.n ! end.x ! head.n ! head.x ++ "." ++ "&-" ++
end.s ! head.n ! head.x) ;
DearRec rec = {s = "Dear" ++ rec.s ; n = rec.n ; x = rec.x} ;
PlainRec rec = rec ;
HelloRec rec = {s = "Hello" ++ rec.s ; n = rec.n ; x = rec.x} ;
JustHello rec = {s = "Hello" ; n = rec.n ; x = rec.x} ;
ModeSent mode sent =
{s =
table {dna => table {xa => table {nr => table {xr =>
mode.s ! dna ! xa ! nr ! xr ++ sent.s ! dna ! xa ! nr ! xr}}}}
} ;
PlainSent sent = sent ;
FormalEnding auth =
{s = table {n => table {x =>
["Sincerely yours &-"] ++ auth.s ! n ! x}} ; n = auth.n ; x = auth.x} ;
InformalEnding auth =
{s = table {n => table {x =>
["With best regards &-"] ++ auth.s ! n ! x}} ; n = auth.n ; x = auth.x} ;
ColleaguesHe = {s = kollega ! pl ; n = pl ; x = masc} ;
ColleaguesShe = {s = kollega ! pl ; n = pl ; x = fem} ;
ColleagueHe = {s = kollega ! sg ; n = sg ; x = masc} ;
ColleagueShe = {s = kollega ! sg ; n = sg ; x = fem} ;
DarlingHe = {s = "darling" ; n = sg ; x = masc} ;
DarlingShe = {s = "darling" ; n = sg ; x = fem} ;
NameHe s = {s = s.s ; n = sg ; x = masc} ;
NameShe s = {s = s.s ; n = sg ; x = fem} ;
Honour = {s =
table {dna => table {xa => table {nr => table {xr =>
let {na = dep2num dna nr} in
ego ! na ! nom ++ ["have the honour to inform you that"]}}}}
} ;
Regret = {s =
table {dna => table {xa => table {nr => table {xr =>
let {na = dep2num dna nr} in
ego ! na ! nom ++ am ! na ++ ["sorry to inform you that"]}}}}
} ;
President = constNX ["the President"] sg masc ;
Mother = constNX "Mom" sg fem ;
Spouse = {s = table {
sg => table {fem => ["your husband"] ; masc => ["your wife"]} ;
pl => table {fem => ["your husbands"] ; masc => ["your wives"]}
} ; n = depnum ; x = masc} ; -- sex does not matter here
Dean = constNX ["the Dean"] sg masc ;
Name s = constNX s.s sg masc ; ---
BePromoted pos = {s =
table {na => table {xa => table {nr => table {xr =>
["you have been promoted to"] ++
pos.s ! nr ! xr}}}}
} ;
GoBankrupt np = {s =
table {na => table {xa => table {nr => table {xr =>
np.s ++ have ! np.n ++ ["gone bankrupt"]}}}}
} ;
ILoveYou = {s =
table {na => table {xa => table {nr => table {xr =>
ego ! dep2num na nr ! nom ++ ["love you"]}}}}
} ;
Company = {s = ["our company"] ; n = sg} ;
Competitor = {s = ["our worst competitor"] ; n = sg} ;
OurCustomers = {s = ["our customers"] ; n = pl} ;
Senior = {s =
table {
sg => table {x => ["a senior fellow"]} ;
pl => table {x => ["senior fellows"]}
}} ;
ProjectManager = {s =
table {
sg => table {_ => ["a project manager"]} ;
pl => table {_ => ["project managers"]}
}} ;
oper
kollega :
Num => Str =
table {sg => "colleague" ; pl => "colleagues"} ;
am :
Num => Str =
table {sg => "am" ; pl => "are"} ;
have :
Num => Str =
table {sg => "has" ; pl => "have"} ;
ego :
Num => Kas => Str =
table {
sg => table {nom => "I" ; acc => "me"} ;
pl => table {nom => "we" ; acc => "us"}
} ;

View File

@@ -1,179 +0,0 @@
--1 A Finnish Concrete Syntax for Business and Love Letters
--
-- This file defines the Finnish syntax of the grammar set
-- whose abstract syntax is $letter.Abs.gf$.
include letter.Abs.gf ;
flags lexer=textlit ; unlexer=textlit ;
-- modified from French in 20 min, 15/6/2002
param Gen = masc | fem ;
param Num = sg | pl ;
param Kas = nom | acc ;
param DepNum = depnum | cnum Num ;
param DepGen = depgen | cgen Gen ;
lintype SS = {s : Str} ;
lintype SSDep = {s : Num => Gen => Str} ; -- needs Num and Gen
lintype SSSrc = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
lintype SSSrc2 = {s : Num => Gen => Str ; n : DepNum ; g : DepGen} ; -- gives&needs
lintype SSDep2 = {s : DepNum => DepGen => Num => Gen => Str} ; -- needs Auth's&Rec's
lintype SSSrcGen = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
oper
ss : Str -> SS = \s -> {s = s} ;
noDep : (P : Type) -> Str -> P => Str = \_,s -> table {_ => s} ;
cher : Num => Gen => Tok =
table {sg => noDep Gen "rakas" ; pl => noDep Gen "rakkaat"} ;
egosum : Num => Str =
table {sg => "olen" ; pl => "olemme"} ;
egohabeo : Num => Str =
table {sg => "minulla" ++ "on" ; pl => "meillä" ++ "on"} ;
fuisti : Num => Str =
table {sg => "sinut" ++ "on"; pl => "teidät" ++ "on"} ;
quePrep = "että" ; ----
tuinformare : Num => Str =
table {sg => "ilmoittaa" ++ "sinulle" ; pl => "ilmoittaa" ++ "teille"} ;
regNom : Str -> Num => Str = \pora -> table {sg => pora ; pl => pora + "t"} ;
avoir : Num => Str =
table {sg => "on"; pl => "ovat"} ;
mes : Num => Str = table {sg => "minun" ; pl => "meidän"} ;
teamo : Num => Num => Str = table {
sg => table {sg => "rakastan" ++ "sinua" ;
pl => "rakastan" ++ "teitä"} ;
pl => table {sg => "rakastamme" ++ "sinua" ;
pl => "rakastamme" ++ "teitä"}
} ;
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
} ;
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 ++ "," ++ "&-" ++
mess.s ! end.n ! end.g ! head.n ! head.g ++ "." ++ "&-" ++
end.s ! head.n ! head.g) ;
DearRec rec = {s = cher ! rec.n ! rec.g ++ rec.s ; n = rec.n ; g = rec.g} ;
PlainRec rec = rec ;
HelloRec rec = {s = "Terve" ++ rec.s ; n = rec.n ; g = rec.g} ;
JustHello rec = {s = "Terve" ; 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 => ["parhain terveisin &-"] ++ auth.s ! n ! g}} ;
n = auth.n ; g = auth.g} ;
InformalEnding auth =
{s = table {n => table {g => ["terveisin &-"] ++ auth.s ! n ! g}} ;
n = auth.n ; g = auth.g} ;
ColleaguesHe = {s = regNom "kollega" ! pl ; n = pl ; g = masc} ;
ColleaguesShe = {s = regNom "kollega" ! pl ; n = pl ; g = fem} ;
ColleagueHe = {s = regNom "kollega" ! sg ; n = sg ; g = masc} ;
ColleagueShe = {s = regNom "kollega" ! sg ; n = sg ; g = fem} ;
DarlingHe = {s = "kulta" ; n = sg ; g = masc} ;
DarlingShe = {s = "kulta" ; 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 =>
egohabeo ! dep2num na nr ++
["kunnia"] ++ tuinformare ! nr ++ quePrep}}}}
} ;
Regret = {s =
table {na => table {ga => table {nr => table {gr =>
mes ! dep2num na nr ++
["on valitettavasti ilmoitettava"] ++ quePrep}}}}
} ;
President = constNG ["presidentti"] sg masc ;
Mother = constNG ["äiti"] sg fem ;
Spouse = {s = table {
sg => table {fem => ["miehesi"] ; masc => ["vaimosi"]} ;
pl => table {fem => ["miehenne"] ; masc => ["vaimonne"]}
} ; n = depnum ; g = depgen} ;
Dean = constNG ["dekaani"] sg masc ;
Name s = constNG s.s sg masc ; ---
BePromoted pos = {s =
table {na => table {xa => table {nr => table {xr =>
fuisti ! nr ++ "ylennetty" ++
pos.s ! nr ! xr}}}}
} ;
GoBankrupt np = {s =
table {na =>
table {xa =>
table {nr =>
table {xr =>
np.s ++ avoir ! np.n ++
(case np.n of {sg => "mennyt" ; pl => "menneet"}) ++
"konkurssiin"
}
}
}
}
} ;
ILoveYou = {s =
table {na => table {xa => table {nr => table {xr =>
teamo ! dep2num na nr ! nr}}}}} ;
Company = {s = ["yrityksemme"] ; n = sg ; g = fem} ;
Competitor = {s = ["pahin kilpailijamme"] ; n = sg ; g = masc} ;
OurCustomers = {s = ["asiakkaamme"] ; n = pl ; g = masc} ;
Senior = {s = table {sg => table {g => ["vanhemmaksi tutkijaksi"]} ;
pl => table {g => ["vanhemmiksi tutkijoiksi"]}
}
} ;
ProjectManager = {s =
table {
sg => table {_ => ["projektipäälliköksi"]} ;
pl => table {_ => ["projektipäälliköiksi"]}
}} ;

View File

@@ -1,168 +0,0 @@
--1 An French Concrete Syntax for Business and Love Letters
--
-- This file defines the French syntax of the grammar set
-- whose abstract syntax is $letter.Abs.gf$.
include letter.Abs.gf ;
flags lexer=textlit ; unlexer=textlit ;
param Gen = masc | fem ;
param Num = sg | pl ;
param Kas = nom | acc ;
param DepNum = depnum | cnum Num ;
param DepGen = depgen | cgen Gen ;
lintype SS = {s : Str} ;
lintype SSDep = {s : Num => Gen => Str} ; -- needs Num and Gen
lintype SSSrc = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
lintype SSSrc2 = {s : Num => Gen => Str ; n : DepNum ; g : DepGen} ; -- gives&needs
lintype SSDep2 = {s : DepNum => DepGen => Num => Gen => Str} ; -- needs Auth's&Rec's
lintype SSSrcGen = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
oper
ss : Str -> SS = \s -> {s = s} ;
cher : Num => Gen => Tok =
table {n => table {masc => regNom "cher" ! n ; fem => regNom "chère" ! n}};
regAdj : Str -> Gen => Num => Str = \s ->
table {masc => regNom s ; fem => regNom (s + "e")} ;
regNom : Str -> Num => Str = \s -> table {sg => s ; pl => s + "s"} ;
egosum : Num => Str =
table {sg => "je" ++ "suis" ; pl => "nous" ++ "sommes"} ;
egohabeo : Num => Str =
table {sg => "j'ai" ; pl => "nous" ++ "avons"} ;
fuisti : Num => Str =
table {sg => "tu" ++ "as" ++ "été"; pl => "vous" ++ "avez" ++ "été"} ;
quePrep = "que" ; ----
tuinformare : Num => Str =
table {sg => "t'informer"; pl => "vous" ++ "informer"} ;
avoir : Num => Str =
table {sg => "a"; pl => "ont"} ;
mes : Num => Str = table {sg => "mes" ; pl => "nos"} ;
teamo : Num => Num => Str = table {
sg => table {sg => "je" ++ "t'aime" ;
pl => "je" ++ "vous" ++ "aime"} ;
pl => table {sg => "nous" ++ "t'aimons" ;
pl => "nous" ++ "vous" ++ "aimons"}
} ;
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 sg => sg ;
cnum pl => pl
} ;
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
} ;
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 ++ "," ++ "&-" ++
mess.s ! end.n ! end.g ! head.n ! head.g ++ "." ++ "&-" ++
end.s ! head.n ! head.g) ;
DearRec rec = {s = cher ! rec.n ! rec.g ++ rec.s ; n = rec.n ; g = rec.g} ;
PlainRec rec = rec ;
HelloRec rec = {s = "Bonjour" ++ rec.s ; n = rec.n ; g = rec.g} ;
JustHello rec = {s = "Bonjour" ; 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 =>
"avec" ++ mes ! dep2num auth.n n ++
["salutations distinguées &-"] ++ auth.s ! n ! g}} ;
n = auth.n ; g = auth.g} ;
InformalEnding auth =
{s = table {n => table {g => ["Amicalement &-"] ++ auth.s ! n ! g}} ;
n = auth.n ; g = auth.g} ;
ColleaguesHe = {s = regNom "collègue" ! pl ; n = pl ; g = masc} ;
ColleaguesShe = {s = regNom "collègue" ! pl ; n = pl ; g = fem} ;
ColleagueHe = {s = regNom "collègue" ! sg ; n = sg ; g = masc} ;
ColleagueShe = {s = regNom "collègue" ! sg ; n = sg ; g = fem} ;
DarlingHe = {s = "chéri" ; n = sg ; g = masc} ;
DarlingShe = {s = "chérie" ; 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 =>
egohabeo ! dep2num na nr ++
["l'honneur de"] ++ tuinformare ! nr ++ quePrep}}}}
} ;
Regret = {s =
table {na => table {ga => table {nr => table {gr =>
let {dga = dep2gen ga gr ; dna = dep2num na nr} in
egosum ! dna ++ regAdj "désolé" ! dga ! dna ++
["d'informer"] ++ quePrep}}}}
} ;
President = constNG ["le président"] sg masc ;
Mother = constNG ["maman"] sg fem ;
Spouse = {s = table {
sg => table {fem => ["ton mari"] ; masc => ["ta femme"]} ;
pl => table {fem => ["vos maris"] ; masc => ["vos femmes"]}
} ; n = depnum ; g = depgen} ;
Dean = constNG ["le doyen"] sg masc ;
Name s = constNG s.s sg masc ; ---
BePromoted pos = {s =
table {na => table {xa => table {nr => table {xr =>
fuisti ! nr ++ regAdj "promu" ! xr ! nr ++
pos.s ! nr ! xr}}}}
} ;
GoBankrupt np = {s =
table {na => table {xa => table {nr => table {xr =>
np.s ++ avoir ! np.n ++ ["fait banqueroute"]}}}}
} ;
ILoveYou = {s =
table {na => table {xa => table {nr => table {xr =>
teamo ! dep2num na nr ! nr}}}}
} ;
Company = {s = ["notre entreprise"] ; n = sg ; g = fem} ;
Competitor = {s = ["notre pire compétiteur"] ; n = sg ; g = masc} ;
OurCustomers = {s = ["nos clients"] ; n = pl ; g = masc} ;
Senior = {s = table {sg => table {g => ["responsable scientifique"]} ;
pl => table {g => ["responsables scientifiques"]}
}
} ;
ProjectManager = {s =
table {
sg => table {_ => ["chef de projet"]} ;
pl => table {_ => ["chefs de projets"]}
}} ;

View File

@@ -1,212 +0,0 @@
include letter.Abs.gf ;
-- (c) Alex Kutsela 2005
flags lexer=textlit ; unlexer=textlit ; coding=utf8 ;
param Gen = masc | fem ;
param Num = sg | pl ;
param Kas = nom | dat | acc ;
param DepNum = depnum | cnum Num ;
param DepGen = depgen | cgen Gen ;
lintype SS = {s : Str} ;
lintype SSDep = {s : Num => Gen => Str} ; -- needs Num and Gen
lintype SSSrc = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
lintype SSSrc2 = {s : Num => Gen => Str ; n : DepNum ; g : DepGen} ; -- gives&needs
lintype SSDep2 = {s : DepNum => DepGen => Num => Gen => Str} ; -- needs Auth's&Rec's
lintype 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+"ות"}
};
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 => "אןחןו" } ;
tu : Num => Gen => Kas => Str =
table {sg => table {fem => table {nom => "את"; dat => "לך"; acc => "אותך"} ;
masc => table {nom => "אתה"; dat => "לך"; acc => "אותך"}
} ;
pl => table {fem => table {nom => "אתן"; dat => "לכן"; acc => "אתכן"} ;
masc => table {nom => "אתם"; dat => "לכם"; acc => "אתכם"}
}
};
hereIam : Num => Str =
table {sg => "הןןי" ; pl => "הןןו" } ;
haveBeen : Str -> Num => Gen => Str = \s ->
table {sg => table {masc => s+"ת"; fem => s+"ת"};
pl => table {masc => s+"תם"; fem => s+"תן"}
};
thatConj = ["ש"] ;
regVer : Str -> Num => Gen => Str = \s ->
table {sg => table {masc => s; fem => s+"ת"};
pl => table {masc => s+"ים"; fem => s+"ות"}
};
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
} ;
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 ++ "&-" ++
mess.s ! end.n ! end.g ! head.n ! head.g ++ "&-" ++
end.s ! head.n ! head.g) ;
DearRec rec = {s = rec.s ++ regAdj "יקר" ! rec.n ! rec.g;
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 =>
[",בכבוד רב &-"] ++
auth.s ! n ! g
}} ;
n = auth.n ; g = auth.g} ;
InformalEnding auth =
{s = table {n => table {g => [",בברכה &-"] ++ auth.s ! n ! g}} ;
n = auth.n ; g = auth.g} ;
ColleagueHe = {s = "עמית" ; n = sg ; g = masc} ;
ColleagueShe = {s = "עמיתה" ; n = sg ; g = fem} ;
ColleaguesHe = {s = "עמיתים" ; n = pl ; g = masc} ;
ColleaguesShe = {s = "עמיתות" ; n = pl ; 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 => hereIam ! dep2num na nr ++
regVer "מתכבד" ! dep2num na nr ! dep2gen xa xr ++
["להודיע"] ++ tu ! nr ! xr ! dat ++ thatConj
}
}
}
}
} ;
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 ++
["להודיע"] ++ tu ! nr ! gr ! dat ++ thatConj
}
}
}
}
} ;
Dean = constNG ["דיקן"] sg masc ;
President = constNG ["ןשיא"] sg masc ;
Mother = constNG ["אמא"] sg fem ;
Name s = constNG s.s sg masc ; ---
Spouse = {s = table {
sg => table {fem => ["בעלך"] ; masc => ["אישתך"]} ;
pl => table {fem => ["בעליכן"] ; masc => ["ןשותיכם"]}
} ; n = depnum ; g = depgen} ;
BePromoted pos = {s = table {
na => table {
xa => table {
nr => table {
xr => haveBeen "קודמ" ! 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
{ga => table
{nr => table
{gr => let {dga = dep2gen ga gr ; dna = dep2num na nr} in
ego ! dna ++ regVer "אוהב" ! dna ! dga ++
tu ! nr ! gr ! acc}
}
}
}
} ;
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 {fem => ["מןהלת פרוייקט"]; masc => ["מןהל פרוייקט"]} ;
pl => table {fem => ["מןהלות פרוייקט"]; mask =>["מןהלי פרוייקט"]}
}
} ;

View File

@@ -1,178 +0,0 @@
include letter.Abs.gf ;
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 ;
lintype SS = {s : Str} ;
lintype SSDep = {s : Num => Gen => Str} ; -- needs Num and Gen
lintype SSSrc = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
lintype SSSrc2 = {s : Num => Gen => Str ; n : DepNum ; g : DepGen} ; -- gives&needs
lintype SSDep2 = {s : DepNum => DepGen => Num => Gen => Str} ; -- needs Auth's&Rec's
lintype 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
} ;
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 ++ "," ++ "&-" ++
mess.s ! end.n ! end.g ! head.n ! head.g ++ "." ++ "&-" ++
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 =>
"С" ++
["наилучшими пожеланиями, &-"] ++ auth.s ! n ! g}} ;
n = auth.n ; g = auth.g} ;
InformalEnding auth =
{s = table {n => table {g => ["С дружеским приветом, &-"] ++ 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 {_ => ["менеджерами проектов"]}
}} ;

View File

@@ -1,161 +0,0 @@
--1 An Swedish Concrete Syntax for Business and Love Letters
--
-- This file defines the Swedish syntax of the grammar set
-- whose abstract syntax is $letter.Abs.gf$.
include letter.Abs.gf ;
flags lexer=textlit ; unlexer=textlit ;
printname Letter = "Brev" ;
printname MkLetter = "brevmall" ;
param Sex = masc | fem ;
param Gen = en | ett ;
param Num = sg | pl ;
param Kas = nom | acc ;
param DepNum = depnum | cnum Num ;
lintype SS = {s : Str} ;
lintype SSDep = {s : Num => Sex => Str} ; -- needs Num and Sex
lintype SSSrc = {s : Str ; n : Num ; x : Sex} ; -- gives Num and Sex
lintype SSSrc2 = {s : Num => Sex => Str ; n : DepNum ; x : Sex} ; -- gives and needs
lintype SSDep2 = {s : DepNum => Sex => Num => Sex => Str} ; -- needs Auth's & Recp's
lintype SSSrcGen = {s : Str ; n : Num ; g : Gen} ; -- gives Num and Gen
oper
ss : Str -> SS = \s -> {s = s} ;
constNX : Str -> Num -> Sex -> SSSrc2 = \str,num,sex ->
{s = table {_ => table {_ => str}} ; n = cnum num ; x = sex} ;
dep2num : DepNum -> Num -> Num = \dn,n -> case dn of {
depnum => n ;
cnum cn => cn
} ;
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 ++ "," ++ "&-" ++
mess.s ! end.n ! end.x ! head.n ! head.x ++ "." ++ "&-" ++
end.s ! head.n ! head.x) ;
DearRec rec = {s = kaer ! rec.n ! rec.x ++ rec.s ; n = rec.n ; x = rec.x} ;
PlainRec rec = rec ;
HelloRec rec = {s = "Hej" ++ rec.s ; n = rec.n ; x = rec.x} ;
JustHello rec = {s = "Hej" ; n = rec.n ; x = rec.x} ;
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 {x =>
["Med vänlig hälsning &-"] ++ auth.s ! n ! x}} ; n = auth.n ; x = auth.x} ;
InformalEnding auth =
{s = table {n => table {x =>
["Med hälsningar &-"] ++ auth.s ! n ! x}} ; n = auth.n ; x = auth.x} ;
ColleaguesHe = {s = kollega ! pl ; n = pl ; x = masc} ;
ColleaguesShe = {s = kollega ! pl ; n = pl ; x = fem} ;
ColleagueHe = {s = kollega ! sg ; n = sg ; x = masc} ;
ColleagueShe = {s = kollega ! sg ; n = sg ; x = fem} ;
DarlingHe = {s = "älskling" ; n = sg ; x = masc} ;
DarlingShe = {s = "älskling" ; n = sg ; x = fem} ;
NameHe s = {s = s.s ; n = sg ; x = masc} ;
NameShe s = {s = s.s ; n = sg ; x = fem} ;
Honour = {s =
table {na => table {xa => table {nr => table {xr =>
jag ! dep2num na nr ! nom ++ ["har äran att meddela"] ++
du ! nr ! acc ++ "att"}}}}
} ;
Regret = {s =
table {na => table {xa => table {nr => table {xr =>
jag ! dep2num na nr ! nom ++ ["måste tyvärr meddela"] ++
du ! nr ! acc ++ "att"}}}}
} ;
President = constNX ["Presidenten"] sg masc ;
Mother = constNX ["Mamma"] sg fem ;
Spouse = {s = table {
sg => table {fem => ["din man"] ; masc => ["din hustru"]} ;
pl => table {fem => ["era män"] ; masc => ["era hustrur"]}
} ; n = depnum ; x = masc} ; -- sex does not matter here
Dean = constNX ["Dekanus"] sg masc ;
Name s = constNX s.s sg masc ; ---
BePromoted pos = {s =
table {na => table {xa => table {nr => table {xr =>
du ! nr ! nom ++ ["har blivit"] ++ befordrad ! nr ++
"till" ++ pos.s ! nr ! xr}}}}
} ;
GoBankrupt np = {s =
table {na => table {xa => table {nr => table {xr =>
np.s ++ ["har gått i konkurs"]}}}}
} ;
ILoveYou = {s =
table {na => table {xa => table {nr => table {xr =>
jag ! dep2num na nr ! nom ++ ["älskar"] ++ du ! nr ! acc}}}}
} ;
Company = {s = ["vårt företag"] ; n = sg ; g = ett} ;
Competitor = {s = ["vår värsta konkurrent"] ; n = sg ; g = en} ;
OurCustomers = {s = ["våra kunder"] ; n = pl ; g = en} ;
Senior = {s = table {n => table {x => ["äldre forskare"]}}} ;
ProjectManager = {s =
table {
sg => table {_ => "projektchef"} ;
pl => table {_ => "projektchefer"}
}} ;
oper
kaer :
Num => Sex => Str =
table {
sg => table {masc => "Käre" ; fem => "Kära"} ;
pl => table {_ => "Kära"}
} ;
kollega :
Num => Str =
table {sg => "kollega" ; pl => "kollegor"} ;
befordrad :
Num => Str =
table {sg => "befordrad" ; pl => "befordrade"} ;
jag :
Num => Kas => Str =
table {
sg => table {nom => "jag" ; acc => "mig"} ;
pl => table {nom => "vi" ; acc => "oss"}
} ;
du :
Num => Kas => Str =
table {
sg => table {nom => "du" ; acc => "dig"} ;
pl => table {nom => "ni" ; acc => "er"}
} ;

View File

@@ -1,14 +0,0 @@
-- to make a multilingual gfcm grammar for rapid loading. AR 29/1/2004
-- to run: gf <mkLetter.gfs
i -old -abs=Letter -cnc=English letter.Eng.gf
i -old -abs=Letter -cnc=French letter.Fra.gf
i -old -abs=Letter -cnc=Swedish letter.Sve.gf
i -old -abs=Letter -cnc=Finnish letter.Fin.gf
i -old -abs=Letter -cnc=Russian letter.RusU.gf
i -old -abs=Letter -cnc=Hebrew letter.HebU.gf
s
pm -utf8 | wf Letter.gfcm