Hebrew Letter; news on index

This commit is contained in:
aarne committed 2005-12-22 18:01:35 +00:00
1 parent eda7b07087
commit 19c57dbd29
9 files changed
+676 -440

No files matched your search

+1 -1
View File
@@ -1,7 +1,7 @@
#! /bin/sh
# change the value of GFHOME to the directory where you have the gf binary
GFHOME=../
GFHOME=/home/aarne/GF
JGUILIB=$GFHOME/src/JavaGUI
GF=$GFHOME/bin/gf
+3 -3
View File
@@ -29,9 +29,9 @@ When you have downloaded and installed GF:
<ol>
<li> Copy the files
<a href="tutorial/Paleolithic.gf"><tt>Paleolithic.gf</tt></a>,
<a href="tutorial/PaleolithicEng.gf"><tt>PaleolithicEng.gf</tt></a>, and
<a href="tutorial/PaleolithicIta.gf"><tt>PaleolithicIta.gf</tt></a>.
<a href="tutorial/old/Paleolithic.gf"><tt>Paleolithic.gf</tt></a>,
<a href="tutorial/old/PaleolithicEng.gf"><tt>PaleolithicEng.gf</tt></a>, and
<a href="tutorial/old/PaleolithicIta.gf"><tt>PaleolithicIta.gf</tt></a>.
<li> Start GF with the command
<pre>
+122
View File
@@ -0,0 +1,122 @@
<html>
<body>
<h1>GF News 2004-2005</h1>
<i>December 9, 2005</i>.
<a href="http://www.cs.chalmers.se/~peb/software.html">
MCFG/GF library for Prolog</a>, by
<a href="http://www.cs.chalmers.se/~peb/">Peter Ljunglöf</a>.
This means that you can use GF grammars as parts of
Prolog programs (in the same way as in Java and Haskell
before).
<br>
<i>December 8, 2005</i>.
A structured <a href="doc/index.html">Documentation page</a> on GF.
<br>
<i>December 1, 2005</i>.
Publicly accessible
<a href="http://www.cs.chalmers.se/Cs/Research/Language-technology/darcs/GF/doc/darcs.html">
Darcs repository</a>
for latest sources and documents. The snapshots are no longer updated.
<br>
<i>September 22, 2005</i>.
<a href="http://www.cs.chalmers.se/~bringert/gf/downloads/snapshots/">
Snapshots</a>: latest source and linux binary packages, for testers
and developers. See
<a href="http://www.cs.chalmers.se/Cs/Research/Language-technology/darcs/GF/doc/gf-history.html">GF history</a> for the latest changes.
<br>
<b>Notice</b> (1/12):
Use the
<a href="http://www.cs.chalmers.se/Cs/Research/Language-technology/darcs/GF/doc/darcs.html">
Darcs repository</a> instead!
<br>
<i>July 1, 2005</i>. GF 2.3 released.
Download from
<a href="http://sourceforge.net/project/showfiles.php?group_id=132285">SourceForge</a>.
The <a href="doc/gf-history.html">GF history</a> lists changes.
The source package on SourceForge also contains a new GUI and some new grammars.
<br>
<i>June 3, 2005</i>. Started a page on
<a href="doc/gf-history.html">history of changes</a>.
These changes will appear soon in releases.
<br>
<i>May 17, 2005</i>. Version 2.2 released. See
<a href="doc/gf2.2-highlights.html">highlights</a>.
Download from
<a href="http://sourceforge.net/project/showfiles.php?group_id=132285">SourceForge</a>.
<br>
<i>May 12, 2005</i>. GF now has a mailing list, to which you can register
<a href="https://lists.sourceforge.net/lists/listinfo/gf-tools-users">here</a>.
GF also has a project page on SourceForge,
<a
href="https://sourceforge.net/projects/gf-tools">
https://sourceforge.net/projects/gf-tools</a>,
but this page does not yet have much content.
<br>
<i>May 9, 2005</i>.
PhD Thesis by
<a href="http://www.cs.chalmers.se/~krijo">Kristofer Johannisson</a>:
<a href="http://www.cs.chalmers.se/~krijo/thesis/thesisA4.pdf">
Formal and Informal Software Specifications</a>.
<br>
<i>March 15, 2005</i>.
Master's thesis by
<a href="http://www.cs.chalmers.se/~bringert/">Björn Bringert</a> on
<a
href="http://www.dtek.chalmers.se/~d00bring/publ/exjobb/embedded-grammars.pdf">
Embedded grammars</a>:
GF grammars that can be used as parts of Java programs. And a
<a
href="http://www.cs.chalmers.se/~bringert/misc/tramdemo.avi">demo film</a>
of a multimodal dialogue system built with embedded grammars.
<br>
<i>November 9, 2004</i>.
PhD Thesis by
<a href="http://www.cs.chalmers.se/~peb">Peter Ljunglöf</a>:
<a href="http://www.cs.chalmers.se/~peb/pubs/p04-PhD-thesis.pdf">
Expressivity and Complexity of the Grammatical Framework</a>.
<br>
<i>November 8, 2004</i>. GF 2.1 released.
Here are the <a
href="doc/gf2-highlights.html">highlights</a>.
Software available on the <a href="../GF2.0/download/gf-download.html">GF 2.1 Download
Page</a>.
Main novelties in 2.1:
multiple inheritance of grammar modules,
speech recognition grammar generation,
lots of bug fixes.
Version 2.0 still available
on the <a href="../GF2.0/download-2.0/gf-download.html">GF 2.0 Download Page</a>.
If you need something from the previous version of the web page, it is
still available:
<a href="http://www.cs.chalmers.se/~aarne/GF1">
GF 1.2</a>.
</body>
<7html>
+325 -314
View File
@@ -1,325 +1,336 @@
concrete Russian of Letter = open ResRusU in {
flags modulesize = n42 ;
flags startcat = Letter ;
flags lexer = textlit ;
flags unlexer = textlit ;
flags coding = utf8 ;
lincat Author = {s : (ResRusU.Num => (ResRusU.Gen => Str)) ;n : ResRusU.DepNum ;g : ResRusU.DepGen }= {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }} ;n = <ResRusU.depnum>;g = <ResRusU.depgen>} ;"Author" ;
lin BePromoted : Letter.Sentence = \ Position @ 0 -> {s = table ResRusU.DepNum {(ResRusU.depnum)(ResRusU.cnum (ResRusU.sg)) (ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> "вы" ++ "были" ++ ("назначены" ++ Position @ 0.s ! <ResRusU.pl>! <ResRusU.fem>) ;(ResRusU.masc)=> "вы" ++ "были" ++ ("назначены" ++ Position @ 0.s ! <ResRusU.pl>! <ResRusU.masc>) } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)=> "ты" ++ "был" ++ ("назначен" ++ Position @ 0.s ! <ResRusU.sg>! <ResRusU.masc>) ;(ResRusU.fem)=> "ты" ++ "была" ++ ("назначена" ++ Position @ 0.s ! <ResRusU.sg>! <ResRusU.fem>) }}}}} ;"(ты был)назначен Position_0" ;
lin ColleagueHe : Letter.Recipient = \ -> {s = "коллега" ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"коллега" ;
lin ColleagueShe : Letter.Recipient = \ -> {s = "коллега" ;n = <ResRusU.sg>;g = <ResRusU.fem>} ;"коллега" ;
lin ColleaguesHe : Letter.Recipient = \ -> {s = "коллеги" ;n = <ResRusU.pl>;g = <ResRusU.masc>} ;"коллеги" ;
lin ColleaguesShe : Letter.Recipient = \ -> {s = "коллеги" ;n = <ResRusU.pl>;g = <ResRusU.fem>} ;"коллеги" ;
lin Company : Letter.NounPhrase = \ -> {s = "наше" ++ "предпри�тие" ;n = <ResRusU.sg>;g = <ResRusU.fem>} ;"наше предпри�тие" ;
lin Competitor : Letter.NounPhrase = \ -> {s = "наш" ++ "конкурент" ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"наш конкурент" ;
lin DarlingHe : Letter.Recipient = \ -> {s = "любимый" ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"любимый" ;
lin DarlingShe : Letter.Recipient = \ -> {s = "любима�" ;n = <ResRusU.sg>;g = <ResRusU.fem>} ;"любима�" ;
lin Dean : Letter.Author = \ -> {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "декан" }} ;n = <ResRusU.cnum <ResRusU.sg>> ;g = <ResRusU.cgen <ResRusU.masc>> } ;"декан" ;
lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResRusU.Num {(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "Дорога�" ;(ResRusU.masc)=> "Дорогой" }! (Recipient @ 0.g);(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "Дорогие" }! (Recipient @ 0.g)}! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Дорогой Recipient_0" ;
lincat Ending = {s : (ResRusU.Num => (ResRusU.Gen => Str)) ;n : ResRusU.DepNum ;g : ResRusU.DepGen }= {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }} ;n = <ResRusU.depnum>;g = <ResRusU.depgen>} ;"Ending" ;
lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("наилучшими" ++ ("пожелани�ми," ++ "&-")++ Author @ 0.s ! <ResRusU.pl>! <ResRusU.fem>) ;(ResRusU.masc)=> "С" ++ ("наилучшими" ++ ("пожелани�ми," ++ "&-")++ Author @ 0.s ! <ResRusU.pl>! <ResRusU.masc>) } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("наилучшими" ++ ("пожелани�ми," ++ "&-")++ Author @ 0.s ! <ResRusU.sg>! <ResRusU.fem>) ;(ResRusU.masc)=> "С" ++ ("наилучшими" ++ ("пожелани�ми," ++ "&-")++ Author @ 0.s ! <ResRusU.sg>! <ResRusU.masc>) }} ;n = Author @ 0.n ;g = Author @ 0.g } ;"С (наилучшими пожелани�ми, &-)Author_0" ;
lin GoBankrupt : Letter.Sentence = \ NounPhrase @ 0 -> {s = table ResRusU.DepNum {(ResRusU.depnum)(ResRusU.cnum (ResRusU.sg)) (ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> NounPhrase @ 0.s ++ table ResRusU.Num {(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "обанкротило�ь" ;(ResRusU.masc)=> "обанкротил��" }! (NounPhrase @ 0.g);(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "обанкротили�ь" }! (NounPhrase @ 0.g)}! (NounPhrase @ 0.n)}}}}} ;"NounPhrase_0 обанкротил��" ;
lincat Heading = {s : Str ;n : ResRusU.Num ;g : ResRusU.Gen }= {s = str @ 0 ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"Heading" ;
lin HelloRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResRusU.Num {(ResRusU.sg)=> "Здрав�твуй" ;(ResRusU.pl)=> "Здрав�твуйте" }! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Здрав�твуй Recipient_0" ;
lin Honour : Letter.Mode = \ -> {s = table ResRusU.DepNum {(ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ "имеем" ++ ("че�ть" ++ ("�ообщить" ++ "вам" ++ ("," ++ "что")))} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ "имеем" ++ ("че�ть" ++ ("�ообщить" ++ "тебе" ++ ("," ++ "что")))}}} ;(ResRusU.depnum)=> table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ "имеем" ++ ("че�ть" ++ ("�ообщить" ++ "вам" ++ ("," ++ "что")))} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�" ++ "имею" ++ ("че�ть" ++ ("�ообщить" ++ "тебе" ++ ("," ++ "что")))}}} ;(ResRusU.cnum (ResRusU.sg)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�" ++ "имею" ++ ("че�ть" ++ ("�ообщить" ++ "вам" ++ ("," ++ "что")))} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�" ++ "имею" ++ ("че�ть" ++ ("�ообщить" ++ "тебе" ++ ("," ++ "что")))}}}}} ;"(� имею)че�ть (�ообщить тебе), что" ;
lin ILoveYou : Letter.Sentence = \ -> {s = table ResRusU.DepNum {(ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ ("ва�" ++ "любим")} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ ("теб�" ++ "любим")}}} ;(ResRusU.depnum)=> table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мы" ++ ("ва�" ++ "любим")} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�" ++ ("теб�" ++ "люблю")}}} ;(ResRusU.cnum (ResRusU.sg)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�" ++ ("ва�" ++ "люблю")} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�" ++ ("теб�" ++ "люблю")}}}}} ;"� теб� люблю" ;
lin InformalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("друже�ким" ++ ("приветом," ++ "&-")) ++ Author @ 0.s ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> "С" ++ ("друже�ким" ++ ("приветом," ++ "&-")) ++ Author @ 0.s ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("друже�ким" ++ ("приветом," ++ "&-")) ++ Author @ 0.s ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> "С" ++ ("друже�ким" ++ ("приветом," ++ "&-")) ++ Author @ 0.s ! <ResRusU.sg>! <ResRusU.masc>}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"(С друже�ким приветом, &-)Author_0" ;
lin JustHello : Letter.Heading = \ Recipient @ 0 -> {s = table ResRusU.Num {(ResRusU.sg)=> "Здрав�твуй" ;(ResRusU.pl)=> "Здрав�твуйте" }! (Recipient @ 0.n);n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Здрав�твуй" ;
lincat Letter = {s : Str }= {s = str @ 0 } ;"Letter" ;
lincat Message = {s : (ResRusU.DepNum => (ResRusU.DepGen => (ResRusU.Num => (ResRusU.Gen => Str)))) }= {s = table ResRusU.DepNum {(ResRusU.depnum)(ResRusU.cnum (ResRusU.sg)) (ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> 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 {(ResRusU.depnum)(ResRusU.cnum (ResRusU.sg)) (ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }}}}} ;"Mode" ;
lin ModeSent : Letter.Message = \ Mode @ 0, Sentence @ 1 -> {s = table ResRusU.DepNum {(ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.masc>}} ;(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.masc>}} ;(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.pl>> ! <ResRusU.depgen>! <ResRusU.sg>! <ResRusU.masc>}}} ;(ResRusU.cnum (ResRusU.sg)) => table ResRusU.DepGen {(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.fem>> ! <ResRusU.sg>! <ResRusU.masc>}} ;(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.fem>;(ResRusU.masc)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.masc>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.pl>! <ResRusU.masc>} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>> ! <ResRusU.sg>! <ResRusU.fem>++ Sentence @ 1.s ! <ResRusU.cnum <ResRusU.sg>> ! <ResRusU.cgen <ResRusU.masc>Line truncated
lin Mother : Letter.Author = \ -> {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мама" }} ;n = <ResRusU.cnum <ResRusU.sg>> ;g = <ResRusU.cgen <ResRusU.fem>> } ;"мама" ;
lin Name : Letter.Author = \ String @ 0 -> {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> String @ 0.s }} ;n = <ResRusU.cnum <ResRusU.sg>> ;g = <ResRusU.cgen <ResRusU.masc>> } ;"String_0" ;
lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"String_0" ;
lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResRusU.sg>;g = <ResRusU.fem>} ;"String_0" ;
lincat NounPhrase = {s : Str ;n : ResRusU.Num ;g : ResRusU.Gen }= {s = str @ 0 ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"NounPhrase" ;
lin OurCustomers : Letter.NounPhrase = \ -> {s = "наши" ++ "клиенты" ;n = <ResRusU.pl>;g = <ResRusU.masc>} ;"наши клиенты" ;
lin PlainRec : Letter.Heading = \ Recipient @ 0 -> {s = Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"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 {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }}} ;"Position" ;
lin President : Letter.Author = \ -> {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "президент" }} ;n = <ResRusU.cnum <ResRusU.sg>> ;g = <ResRusU.cgen <ResRusU.masc>> } ;"президент" ;
lin ProjectManager : Letter.Position = \ -> {s = table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "менеджерами" ++ "проектов" } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "менеджером" ++ "проекта" }}} ;"менеджером проекта" ;
lincat Recipient = {s : Str ;n : ResRusU.Num ;g : ResRusU.Gen }= {s = str @ 0 ;n = <ResRusU.sg>;g = <ResRusU.masc>} ;"Recipient" ;
lin Regret : Letter.Mode = \ -> {s = table ResRusU.DepNum {(ResRusU.depnum)=> table ResRusU.DepGen {(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "вы" ++ ("вынуждены" ++ ("�ообщить" ++ ("," ++ "что")))} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�" ++ ("вынужден" ++ ("�ообщить" ++ ("," ++ "что")))}} ;(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "вы" ++ ("вынуждены" ++ ("�ообщить" ++ ("," ++ "что")))} ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�" ++ ("вынуждена" ++ ("�ообщить" ++ ("," ++ "что")))}} ;(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "�" ++ ("вынужден" ++ ("�ообщить" ++ ("," ++ "что")));(ResRusU.masc)=> "�" ++ ("вынуждена" ++ ("�ообщить" ++ ("," ++ "что")))} ;(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "вы" ++ ("вынуждены" ++ ("�ообщить" ++ ("," ++ "что")))}}} ;(ResRusU.cnum (ResRusU.sg)) => table ResRusU.DepGen {(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> "�" ++ ("вынужден" ++ ("�ообщить" ++ ("," ++ "что")));(ResRusU.masc)=> "�" ++ ("вынуждена" ++ ("�ообщить" ++ ("," ++ "что")))}} ;(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�" ++ ("вынужден" ++ ("�ообщить" ++ ("," ++ "что")))}} ;(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�" ++ ("вынуждена" ++ ("�ообщить" ++ ("," ++ "что")))}}} ;(ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "вы" ++ ("вынуждены" ++ ("�ообщить" ++ ("," ++ "что")))}}}}} ;"� вынуждена �ообщить , что" ;
lin Senior : Letter.Position = \ -> {s = table ResRusU.Num {(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�таршим" ++ ("научным" ++ "�отрудником")} ;(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "�таршими" ++ ("научными" ++ "�отрудниками")}}} ;"�таршим научным �отрудником" ;
lincat Sentence = {s : (ResRusU.DepNum => (ResRusU.DepGen => (ResRusU.Num => (ResRusU.Gen => Str)))) }= {s = table ResRusU.DepNum {(ResRusU.depnum)(ResRusU.cnum (ResRusU.sg)) (ResRusU.cnum (ResRusU.pl)) => table ResRusU.DepGen {(ResRusU.depgen)(ResRusU.cgen (ResRusU.masc)) (ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> str @ 0 }}}}} ;"Sentence" ;
lin Spouse : Letter.Author = \ -> {s = table ResRusU.Num {(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "твой" ++ "муж" ;(ResRusU.masc)=> "тво�" ++ "жена" } ;(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)=> "ваши" ++ "жены" ;(ResRusU.fem)=> "ваши" ++ "мужь�" }} ;n = <ResRusU.depnum>;g = <ResRusU.depgen>} ;"тво� жена" ;
concrete Hebrew of Letter=open ResHebU in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;lincat Author={s:(ResHebU.Num=>(ResHebU.Gen=>Str));n:ResHebU.DepNum;g:ResHebU.DepGen}={s=table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>str@0}};n=<ResHebU.depnum>;g=<ResHebU.depgen>};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResHebU.DepNum{(ResHebU.depnum)(ResHebU.cnum(ResHebU.sg))(ResHebU.cnum(ResHebU.pl))=>table ResHebU.DepGen{(ResHebU.depgen)(ResHebU.cgen(ResHebU.masc))(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>"קודמת"++("לתפקיד"++("של"++Position@0.s!<ResHebU.sg>!<ResHebU.fem>));(ResHebU.masc)=>"קודמת"++("לתפקיד"++("של"++Position@0.s!<ResHebU.sg>!<ResHebU.masc>))};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"קודמת�"++("לתפקיד"++("של"++Position@0.s!<ResHebU.pl>!<ResHebU.masc>));(ResHebU.fem)=>"קודמתן"++("לתפקיד"++("של"++Position@0.s!<ResHebU.pl>!<ResHebU.fem>))}}}}};"קודמת לתפקיד של Position_0";
lin ColleagueHe:Letter.Recipient=\->{s="עמית";n=<ResHebU.sg>;g=<ResHebU.masc>};"עמית";
lin ColleagueShe:Letter.Recipient=\->{s="עמיתה";n=<ResHebU.sg>;g=<ResHebU.fem>};"עמיתה";
lin ColleaguesHe:Letter.Recipient=\->{s="עמיתי�";n=<ResHebU.pl>;g=<ResHebU.masc>};"עמיתי�";
lin ColleaguesShe:Letter.Recipient=\->{s="עמיתות";n=<ResHebU.pl>;g=<ResHebU.fem>};"עמיתות";
lin Company:Letter.NounPhrase=\->{s="חברתןו";n=<ResHebU.sg>;g=<ResHebU.fem>};"חברתןו";
lin Competitor:Letter.NounPhrase=\->{s="המתחרה"++("הגרוע"++("ביותר"++"שלןו"));n=<ResHebU.sg>;g=<ResHebU.masc>};"המתחרה הגרוע ביותר שלןו";
lin DarlingHe:Letter.Recipient=\->{s="�הובי";n=<ResHebU.sg>;g=<ResHebU.masc>};"�הובי";
lin DarlingShe:Letter.Recipient=\->{s="�הובתי";n=<ResHebU.sg>;g=<ResHebU.fem>};"�הובתי";
lin Dean:Letter.Author=\->{s=table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"דיקן"}};n=<ResHebU.cnum<ResHebU.sg>>;g=<ResHebU.cgen<ResHebU.masc>>};"דיקן";
lin DearRec:Letter.Heading=\Recipient@0->{s=Recipient@0.s++table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>"יקרות";(ResHebU.masc)=>"יקרי�"}!(Recipient@0.g);(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)=>"יקר";(ResHebU.fem)=>"יקרה"}!(Recipient@0.g)}!(Recipient@0.n);n=Recipient@0.n;g=Recipient@0.g};"Recipient_0 יקר";
lincat Ending={s:(ResHebU.Num=>(ResHebU.Gen=>Str));n:ResHebU.DepNum;g:ResHebU.DepGen}={s=table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>str@0}};n=<ResHebU.depnum>;g=<ResHebU.depgen>};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{s=table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>",בכבוד"++("רב"++"&-")++Author@0.s!<ResHebU.pl>!<ResHebU.fem>;(ResHebU.masc)=>",בכבוד"++("רב"++"&-")++Author@0.s!<ResHebU.pl>!<ResHebU.masc>};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>",בכבוד"++("רב"++"&-")++Author@0.s!<ResHebU.sg>!<ResHebU.fem>;(ResHebU.masc)=>",בכבוד"++("רב"++"&-")++Author@0.s!<ResHebU.sg>!<ResHebU.masc>}};n=Author@0.n;g=Author@0.g};"(,בכבוד רב &-)Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResHebU.DepNum{(ResHebU.depnum)(ResHebU.cnum(ResHebU.sg))(ResHebU.cnum(ResHebU.pl))=>table ResHebU.DepGen{(ResHebU.depgen)(ResHebU.cgen(ResHebU.masc))(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>NounPhrase@0.s++(table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)=>"פשט";(ResHebU.fem)=>"פשטה"}!(NounPhrase@0.g);(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"פשטו"}!(NounPhrase@0.g)}!(NounPhrase@0.n)++"רגל")}}}}};"NounPhrase_0 פשט רגל";
lincat Heading={s:Str;n:ResHebU.Num;g:ResHebU.Gen}={s=str@0;n=<ResHebU.sg>;g=<ResHebU.masc>};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{s=table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>"שלו�"}!(Recipient@0.n)++Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"שלו� Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResHebU.DepNum{(ResHebU.cnum(ResHebU.pl))=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"הןןו"++("מתכבדות"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"הןןו"++("מתכבדות"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"הןןו"++("מתכבדות"++("להודיע"++("לך"++"ש")))}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"הןןו"++("מתכבדי�"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"הןןו"++("מתכבדי�"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"הןןו"++("מתכבדי�"++("להודיע"++("לך"++"ש")))}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)=>"הןןו"++("מתכבדות"++("להודיע"++("לך"++"ש")));(ResHebU.fem)=>"הןןו"++("מתכבדי�"++("להודיע"++("לך"++"ש")))};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"הןןו"++("מתכבדות"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"הןןו"++("מתכבדי�"++("להודיע"++("לכן"++"ש")))}}};(ResHebU.depnum)=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"הןןו"++("מתכבדות"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"הןןו"++("מתכבדות"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"הןןי"++("מתכבדת"++("להודיע"++("לך"++"ש")))}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"הןןו"++("מתכבדי�"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"הןןו"++("מתכבדי�"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"הןןי"++("מתכבד"++("להודיע"++("לך"++"ש")))}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>"הןןי"++("מתכבד"++("להודיע"++("לך"++"ש")));(ResHebU.masc)=>"הןןי"++("מתכבדת"++("להודיע"++("לך"++"ש")))};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"הןןו"++("מתכבדות"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"הןןו"++("מתכבדי�"++("להודיע"++("לכן"++"ש")))}}};(ResHebU.cnum(ResHebU.sg))=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"הןןי"++("מתכבד"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"הןןי"++("מתכבד"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"הןןי"++("מתכבד"++("להודיע"++("לך"++"ש")))}};(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"הןןי"++("מתכבדת"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"הןןי"++("מתכבדת"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"הןןי"++("מתכבדת"++("להודיע"++("לך"++"ש")))}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>"הןןי"++("מתכבד"++("להודיע"++("לך"++"ש")));(ResHebU.masc)=>"הןןי"++("מתכבדת"++("להודיע"++("לך"++"ש")))};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>"הןןי"++("מתכבד"++("להודיע"++("לכן"++"ש")));(ResHebU.masc)=>"הןןי"++("מתכבדת"++("להודיע"++("לכ�"++"ש")))}}}}};"הןןי מתכבדת להודיע לך ש";
lin ILoveYou:Letter.Sentence=\->{s=table ResHebU.DepNum{(ResHebU.cnum(ResHebU.pl))=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("�והבות"++"�תכ�");(ResHebU.fem)=>"�ןחןו"++("�והבות"++"�תכן")};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןחןו"++("�והבות"++"�ותך")}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("�והבי�"++"�תכ�");(ResHebU.fem)=>"�ןחןו"++("�והבי�"++"�תכן")};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןחןו"++("�והבי�"++"�ותך")}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("�והבות"++"�ותך");(ResHebU.fem)=>"�ןחןו"++("�והבי�"++"�ותך")};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("�והבות"++"�תכ�");(ResHebU.fem)=>"�ןחןו"++("�והבי�"++"�תכן")}}};(ResHebU.depnum)=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("�והבות"++"�תכ�");(ResHebU.fem)=>"�ןחןו"++("�והבות"++"�תכן")};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןי"++("�והבת"++"�ותך")}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("�והבי�"++"�תכ�");(ResHebU.fem)=>"�ןחןו"++("�והבי�"++"�תכן")};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןי"++("�והב"++"�ותך")}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>"�ןי"++("�והב"++"�ותך");(ResHebU.masc)=>"�ןי"++("�והבת"++"�ותך")};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("�והבות"++"�תכ�");(ResHebU.fem)=>"�ןחןו"++("�והבי�"++"�תכן")}}};(ResHebU.cnum(ResHebU.sg))=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןי"++("�והב"++"�תכ�");(ResHebU.fem)=>"�ןי"++("�והב"++"�תכן")};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןי"++("�והב"++"�ותך")}};(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןי"++("�והבת"++"�תכ�");(ResHebU.fem)=>"�ןי"++("�והבת"++"�תכן")};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןי"++("�והבת"++"�ותך")}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>"�ןי"++("�והב"++"�ותך");(ResHebU.masc)=>"�ןי"++("�והבת"++"�ותך")};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>"�ןי"++("�והב"++"�תכן");(ResHebU.masc)=>"�ןי"++("�והבת"++"�תכ�")}}}}};"�ןי �והבת �ותך";
lin InformalEnding:Letter.Ending=\Author@0->{s=table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>",בברכה"++"&-"++Author@0.s!<ResHebU.pl>!<ResHebU.fem>;(ResHebU.masc)=>",בברכה"++"&-"++Author@0.s!<ResHebU.pl>!<ResHebU.masc>};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>",בברכה"++"&-"++Author@0.s!<ResHebU.sg>!<ResHebU.fem>;(ResHebU.masc)=>",בברכה"++"&-"++Author@0.s!<ResHebU.sg>!<ResHebU.masc>}};n=Author@0.n;g=Author@0.g};"(,בברכה &-)Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{s=table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>"שלו�"}!(Recipient@0.n);n=Recipient@0.n;g=Recipient@0.g};"שלו�";
lincat Letter={s:Str}={s=str@0};"Letter";
lincat Message={s:(ResHebU.DepNum=>(ResHebU.DepGen=>(ResHebU.Num=>(ResHebU.Gen=>Str))))}={s=table ResHebU.DepNum{(ResHebU.depnum)(ResHebU.cnum(ResHebU.sg))(ResHebU.cnum(ResHebU.pl))=>table ResHebU.DepGen{(ResHebU.depgen)(ResHebU.cgen(ResHebU.masc))(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>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{(ResHebU.depnum)(ResHebU.cnum(ResHebU.sg))(ResHebU.cnum(ResHebU.pl))=>table ResHebU.DepGen{(ResHebU.depgen)(ResHebU.cgen(ResHebU.masc))(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResHebU.DepNum{(ResHebU.cnum(ResHebU.pl))=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.pl>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.pl>!<ResHebU.fem>;(ResHebU.masc)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.pl>!<ResHebU.masc>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.pl>!<ResHebU.masc>};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.sg>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.sg>!<ResHebU.fem>;(ResHebU.masc)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.sg>!<ResHebU.masc>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.sg>!<ResHebU.masc>}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.pl>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.pl>!<ResHebU.fem>;(ResHebU.masc)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.pl>!<ResHebU.masc>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.pl>!<ResHebU.masc>};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.sg>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.sg>!<ResHebU.fem>;(ResHebU.masc)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.sg>!<ResHebU.masc>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.sg>!<ResHebU.masc>}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.depgen>!<ResHebU.pl>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.depgen>!<ResHebU.pl>!<ResHebU.fem>;(ResHebU.masc)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.depgen>!<ResHebU.pl>!<ResHebU.masc>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.depgen>!<ResHebU.pl>!<ResHebU.masc>};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.depgen>!<ResHebU.sg>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.depgen>!<ResHebU.sg>!<ResHebU.fem>;(ResHebU.masc)=>Mode@0.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.depgen>!<ResHebU.sg>!<ResHebU.masc>++Sentence@1.s!<ResHebU.cnum<ResHebU.pl>>!<ResHebU.depgen>!<ResHebU.sg>!<ResHebU.masc>}}};(ResHebU.cnum(ResHebU.sg))=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.pl>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.pl>!<ResHebU.fem>;(ResHebU.masc)=>Mode@0.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.pl>!<ResHebU.masc>++Sentence@1.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.pl>!<ResHebU.masc>};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.sg>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.sg>!<ResHebU.fem>;(ResHebU.masc)=>Mode@0.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.sg>!<ResHebU.masc>++Sentence@1.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.fem>>!<ResHebU.sg>!<ResHebU.masc>}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.pl>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.pl>!<ResHebU.fem>;(ResHebU.masc)=>Mode@0.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.pl>!<ResHebU.masc>++Sentence@1.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.pl>!<ResHebU.masc>};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.sg>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.sg>!<ResHebU.fem>;(ResHebU.masc)=>Mode@0.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.sg>!<ResHebU.masc>++Sentence@1.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.cgen<ResHebU.masc>>!<ResHebU.sg>!<ResHebU.masc>}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.depgen>!<ResHebU.pl>!<ResHebU.fem>++Sentence@1.s!<ResHebU.cnum<ResHebU.sg>>!<ResHebU.depgen>!<ResHebU.pl>!<ResHebU.fem>;(ResHebU.masc)=>Mode@Line truncated
lin Mother:Letter.Author=\->{s=table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�מ�"}};n=<ResHebU.cnum<ResHebU.sg>>;g=<ResHebU.cgen<ResHebU.fem>>};"�מ�";
lin Name:Letter.Author=\String@0->{s=table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>String@0.s}};n=<ResHebU.cnum<ResHebU.sg>>;g=<ResHebU.cgen<ResHebU.masc>>};"String_0";
lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResHebU.sg>;g=<ResHebU.masc>};"String_0";
lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResHebU.sg>;g=<ResHebU.fem>};"String_0";
lincat NounPhrase={s:Str;n:ResHebU.Num;g:ResHebU.Gen}={s=str@0;n=<ResHebU.sg>;g=<ResHebU.masc>};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{s="לקוחותיןו";n=<ResHebU.pl>;g=<ResHebU.masc>};"לקוחותיןו";
lin PlainRec:Letter.Heading=\Recipient@0->{s=Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"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{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>str@0}}};"Position";
lin President:Letter.Author=\->{s=table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"ןשי�"}};n=<ResHebU.cnum<ResHebU.sg>>;g=<ResHebU.cgen<ResHebU.masc>>};"ןשי�";
lin ProjectManager:Letter.Position=\->{s=table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>"מןהלות"++"פרוייקט";(ResHebU.masc)=>"מןהלי"++"פרוייקט"};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)=>"מןהל"++"פרוייקט";(ResHebU.fem)=>"מןהלת"++"פרוייקט"}}};"מןהל פרוייקט";
lincat Recipient={s:Str;n:ResHebU.Num;g:ResHebU.Gen}={s=str@0;n=<ResHebU.sg>;g=<ResHebU.masc>};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResHebU.DepNum{(ResHebU.cnum(ResHebU.pl))=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("מצטערות"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"�ןחןו"++("מצטערות"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןחןו"++("מצטערות"++("להודיע"++("לך"++"ש")))}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("מצטערי�"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"�ןחןו"++("מצטערי�"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןחןו"++("מצטערי�"++("להודיע"++("לך"++"ש")))}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("מצטערות"++("להודיע"++("לך"++"ש")));(ResHebU.fem)=>"�ןחןו"++("מצטערי�"++("להודיע"++("לך"++"ש")))};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("מצטערות"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"�ןחןו"++("מצטערי�"++("להודיע"++("לכן"++"ש")))}}};(ResHebU.depnum)=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("מצטערות"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"�ןחןו"++("מצטערות"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןי"++("מצטערת"++("להודיע"++("לך"++"ש")))}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("מצטערי�"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"�ןחןו"++("מצטערי�"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןי"++("מצטער"++("להודיע"++("לך"++"ש")))}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>"�ןי"++("מצטער"++("להודיע"++("לך"++"ש")));(ResHebU.masc)=>"�ןי"++("מצטערת"++("להודיע"++("לך"++"ש")))};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןחןו"++("מצטערות"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"�ןחןו"++("מצטערי�"++("להודיע"++("לכן"++"ש")))}}};(ResHebU.cnum(ResHebU.sg))=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןי"++("מצטער"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"�ןי"++("מצטער"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןי"++("מצטער"++("להודיע"++("לך"++"ש")))}};(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"�ןי"++("מצטערת"++("להודיע"++("לכ�"++"ש")));(ResHebU.fem)=>"�ןי"++("מצטערת"++("להודיע"++("לכן"++"ש")))};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"�ןי"++("מצטערת"++("להודיע"++("לך"++"ש")))}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>"�ןי"++("מצטער"++("להודיע"++("לך"++"ש")));(ResHebU.masc)=>"�ןי"++("מצטערת"++("להודיע"++("לך"++"ש")))};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>"�ןי"++("מצטער"++("להודיע"++("לכן"++"ש")));(ResHebU.masc)=>"�ןי"++("מצטערת"++("להודיע"++("לכ�"++"ש")))}}}}};"�ןי מצטערת להודיע לך ש";
lin Senior:Letter.Position=\->{s=table ResHebU.Num{(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"חבר"++"בכיר"};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"חברי�"++"בכירי�"}}};"חבר בכיר";
lincat Sentence={s:(ResHebU.DepNum=>(ResHebU.DepGen=>(ResHebU.Num=>(ResHebU.Gen=>Str))))}={s=table ResHebU.DepNum{(ResHebU.depnum)(ResHebU.cnum(ResHebU.sg))(ResHebU.cnum(ResHebU.pl))=>table ResHebU.DepGen{(ResHebU.depgen)(ResHebU.cgen(ResHebU.masc))(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{s=table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>"בעליכן";(ResHebU.masc)=>"ןשותיכ�"};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.masc)=>"�ישתך";(ResHebU.fem)=>"בעלך"}};n=<ResHebU.depnum>;g=<ResHebU.depgen>};"�ישתך";
}
resource ResRusU = {
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 ;
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 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 = {} ;
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 Finnish of Letter = open ResFin in {
flags modulesize = n42 ;
flags startcat = Letter ;
flags lexer = textlit ;
flags unlexer = textlit ;
lincat Author = {s : (ResFin.Num => (ResFin.Gen => Str)) ;n : ResFin.DepNum ;g : ResFin.DepGen }= {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }} ;n = <ResFin.depnum>;g = <ResFin.depgen>} ;"Author" ;
lin BePromoted : Letter.Sentence = \ Position @ 0 -> {s = table ResFin.DepNum {(ResFin.depnum)(ResFin.cnum (ResFin.sg)) (ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> "sinut" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! <ResFin.sg>! <ResFin.fem>) ;(ResFin.masc)=> "sinut" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! <ResFin.sg>! <ResFin.masc>) } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> "teidät" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! <ResFin.pl>! <ResFin.fem>) ;(ResFin.masc)=> "teidät" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! <ResFin.pl>! <ResFin.masc>) }}}}} ;"(sinut on)ylennetty Position_0" ;
lin ColleagueHe : Letter.Recipient = \ -> {s = "kollega" ;n = <ResFin.sg>;g = <ResFin.masc>} ;"kollega" ;
lin ColleagueShe : Letter.Recipient = \ -> {s = "kollega" ;n = <ResFin.sg>;g = <ResFin.fem>} ;"kollega" ;
lin ColleaguesHe : Letter.Recipient = \ -> {s = "kollegat" ;n = <ResFin.pl>;g = <ResFin.masc>} ;"kollegat" ;
lin ColleaguesShe : Letter.Recipient = \ -> {s = "kollegat" ;n = <ResFin.pl>;g = <ResFin.fem>} ;"kollegat" ;
lin Company : Letter.NounPhrase = \ -> {s = "yrityksemme" ;n = <ResFin.sg>;g = <ResFin.fem>} ;"yrityksemme" ;
lin Competitor : Letter.NounPhrase = \ -> {s = "pahin" ++ "kilpailijamme" ;n = <ResFin.sg>;g = <ResFin.masc>} ;"pahin kilpailijamme" ;
lin DarlingHe : Letter.Recipient = \ -> {s = "kulta" ;n = <ResFin.sg>;g = <ResFin.masc>} ;"kulta" ;
lin DarlingShe : Letter.Recipient = \ -> {s = "kulta" ;n = <ResFin.sg>;g = <ResFin.fem>} ;"kulta" ;
lin Dean : Letter.Author = \ -> {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "dekaani" }} ;n = <ResFin.cnum <ResFin.sg>> ;g = <ResFin.cgen <ResFin.masc>> } ;"dekaani" ;
lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakas" }! (Recipient @ 0.g);(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakkaat" }! (Recipient @ 0.g)}! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"rakas Recipient_0" ;
lincat Ending = {s : (ResFin.Num => (ResFin.Gen => Str)) ;n : ResFin.DepNum ;g : ResFin.DepGen }= {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }} ;n = <ResFin.depnum>;g = <ResFin.depgen>} ;"Ending" ;
lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> "parhain" ++ ("terveisin" ++ "&-")++ Author @ 0.s ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> "parhain" ++ ("terveisin" ++ "&-")++ Author @ 0.s ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> "parhain" ++ ("terveisin" ++ "&-")++ Author @ 0.s ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> "parhain" ++ ("terveisin" ++ "&-")++ Author @ 0.s ! <ResFin.sg>! <ResFin.masc>}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"(parhain terveisin &-)Author_0" ;
lin GoBankrupt : Letter.Sentence = \ NounPhrase @ 0 -> {s = table ResFin.DepNum {(ResFin.depnum)(ResFin.cnum (ResFin.sg)) (ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> NounPhrase @ 0.s ++ (table ResFin.Num {(ResFin.sg)=> "on" ;(ResFin.pl)=> "ovat" }! (NounPhrase @ 0.n)++ (table ResFin.Num {(ResFin.pl)=> "menneet" ;(ResFin.sg)=> "mennyt" }! (NounPhrase @ 0.n)++ "konkurssiin")) }}}}} ;"NounPhrase_0 on mennyt konkurssiin" ;
lincat Heading = {s : Str ;n : ResFin.Num ;g : ResFin.Gen }= {s = str @ 0 ;n = <ResFin.sg>;g = <ResFin.masc>} ;"Heading" ;
lin HelloRec : Letter.Heading = \ Recipient @ 0 -> {s = "Terve" ++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Terve Recipient_0" ;
lin Honour : Letter.Mode = \ -> {s = table ResFin.DepNum {(ResFin.depnum)=> table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "meillä" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "teille" ++ "että")) } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "minulla" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "sinulle" ++ "että")) }}} ;(ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "meillä" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "sinulle" ++ "että")) } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "meillä" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "teille" ++ "että")) }}} ;(ResFin.cnum (ResFin.sg)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "minulla" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "sinulle" ++ "että")) } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "minulla" ++ "on" ++ ("kunnia" ++ ("ilmoittaa" ++ "teille" ++ "että")) }}}}} ;"(minulla on)kunnia (ilmoittaa sinulle)että" ;
lin ILoveYou : Letter.Sentence = \ -> {s = table ResFin.DepNum {(ResFin.depnum)=> table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastamme" ++ "teitä" } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastan" ++ "sinua" }}} ;(ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastamme" ++ "sinua" } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastamme" ++ "teitä" }}} ;(ResFin.cnum (ResFin.sg)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastan" ++ "sinua" } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "rakastan" ++ "teitä" }}}}} ;"rakastan sinua" ;
lin InformalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> "terveisin" ++ "&-" ++ Author @ 0.s ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> "terveisin" ++ "&-" ++ Author @ 0.s ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> "terveisin" ++ "&-" ++ Author @ 0.s ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> "terveisin" ++ "&-" ++ Author @ 0.s ! <ResFin.sg>! <ResFin.masc>}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"(terveisin &-)Author_0" ;
lin JustHello : Letter.Heading = \ Recipient @ 0 -> {s = "Terve" ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Terve" ;
lincat Letter = {s : Str }= {s = str @ 0 } ;"Letter" ;
lincat Message = {s : (ResFin.DepNum => (ResFin.DepGen => (ResFin.Num => (ResFin.Gen => Str)))) }= {s = table ResFin.DepNum {(ResFin.depnum)(ResFin.cnum (ResFin.sg)) (ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> 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 {(ResFin.depnum)(ResFin.cnum (ResFin.sg)) (ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }}}}} ;"Mode" ;
lin ModeSent : Letter.Message = \ Mode @ 0, Sentence @ 1 -> {s = table ResFin.DepNum {(ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.masc>}} ;(ResFin.cgen (ResFin.masc)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.masc>}} ;(ResFin.depgen)=> table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.pl>> ! <ResFin.depgen>! <ResFin.sg>! <ResFin.masc>}}} ;(ResFin.cnum (ResFin.sg)) => table ResFin.DepGen {(ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.fem>> ! <ResFin.sg>! <ResFin.masc>}} ;(ResFin.cgen (ResFin.masc)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.pl>! <ResFin.masc>} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.fem>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.fem>;(ResFin.masc)=> Mode @ 0.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.masc>++ Sentence @ 1.s ! <ResFin.cnum <ResFin.sg>> ! <ResFin.cgen <ResFin.masc>> ! <ResFin.sg>! <ResFin.masc>}} ;(ResFin.depgen)=> table ResLine truncated
lin Mother : Letter.Author = \ -> {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "äiti" }} ;n = <ResFin.cnum <ResFin.sg>> ;g = <ResFin.cgen <ResFin.fem>> } ;"äiti" ;
lin Name : Letter.Author = \ String @ 0 -> {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> String @ 0.s }} ;n = <ResFin.cnum <ResFin.sg>> ;g = <ResFin.cgen <ResFin.masc>> } ;"String_0" ;
lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResFin.sg>;g = <ResFin.masc>} ;"String_0" ;
lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResFin.sg>;g = <ResFin.fem>} ;"String_0" ;
lincat NounPhrase = {s : Str ;n : ResFin.Num ;g : ResFin.Gen }= {s = str @ 0 ;n = <ResFin.sg>;g = <ResFin.masc>} ;"NounPhrase" ;
lin OurCustomers : Letter.NounPhrase = \ -> {s = "asiakkaamme" ;n = <ResFin.pl>;g = <ResFin.masc>} ;"asiakkaamme" ;
lin PlainRec : Letter.Heading = \ Recipient @ 0 -> {s = Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"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 {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }}} ;"Position" ;
lin President : Letter.Author = \ -> {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "presidentti" }} ;n = <ResFin.cnum <ResFin.sg>> ;g = <ResFin.cgen <ResFin.masc>> } ;"presidentti" ;
lin ProjectManager : Letter.Position = \ -> {s = table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "projektipäälliköiksi" } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "projektipäälliköksi" }}} ;"projektipäälliköksi" ;
lincat Recipient = {s : Str ;n : ResFin.Num ;g : ResFin.Gen }= {s = str @ 0 ;n = <ResFin.sg>;g = <ResFin.masc>} ;"Recipient" ;
lin Regret : Letter.Mode = \ -> {s = table ResFin.DepNum {(ResFin.depnum)=> table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "meidän" ++ ("on" ++ ("valitettavasti" ++ "ilmoitettava")++ "että")} ;(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "minun" ++ ("on" ++ ("valitettavasti" ++ "ilmoitettava")++ "että")}}} ;(ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "meidän" ++ ("on" ++ ("valitettavasti" ++ "ilmoitettava")++ "että")}}} ;(ResFin.cnum (ResFin.sg)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "minun" ++ ("on" ++ ("valitettavasti" ++ "ilmoitettava")++ "että")}}}}} ;"minun (on valitettavasti ilmoitettava)että" ;
lin Senior : Letter.Position = \ -> {s = table ResFin.Num {(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "vanhemmaksi" ++ "tutkijaksi" } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "vanhemmiksi" ++ "tutkijoiksi" }}} ;"vanhemmaksi tutkijaksi" ;
lincat Sentence = {s : (ResFin.DepNum => (ResFin.DepGen => (ResFin.Num => (ResFin.Gen => Str)))) }= {s = table ResFin.DepNum {(ResFin.depnum)(ResFin.cnum (ResFin.sg)) (ResFin.cnum (ResFin.pl)) => table ResFin.DepGen {(ResFin.depgen)(ResFin.cgen (ResFin.masc)) (ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> str @ 0 }}}}} ;"Sentence" ;
lin Spouse : Letter.Author = \ -> {s = table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> "miehenne" ;(ResFin.masc)=> "vaimonne" } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> "miehesi" ;(ResFin.masc)=> "vaimosi" }} ;n = <ResFin.depnum>;g = <ResFin.depgen>} ;"vaimosi" ;
concrete Russian of Letter=open ResRusU in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;lincat Author={s:(ResRusU.Num=>(ResRusU.Gen=>Str));n:ResRusU.DepNum;g:ResRusU.DepGen}={s=table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>str@0}};n=<ResRusU.depnum>;g=<ResRusU.depgen>};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResRusU.DepNum{(ResRusU.depnum)(ResRusU.cnum(ResRusU.sg))(ResRusU.cnum(ResRusU.pl))=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>"вы"++"были"++("назначены"++Position@0.s!<ResRusU.pl>!<ResRusU.fem>);(ResRusU.masc)=>"вы"++"были"++("назначены"++Position@0.s!<ResRusU.pl>!<ResRusU.masc>)};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)=>"ты"++"был"++("назначен"++Position@0.s!<ResRusU.sg>!<ResRusU.masc>);(ResRusU.fem)=>"ты"++"была"++("назначена"++Position@0.s!<ResRusU.sg>!<ResRusU.fem>)}}}}};"(ты был)назначен Position_0";
lin ColleagueHe:Letter.Recipient=\->{s="коллега";n=<ResRusU.sg>;g=<ResRusU.masc>};"коллега";
lin ColleagueShe:Letter.Recipient=\->{s="коллега";n=<ResRusU.sg>;g=<ResRusU.fem>};"коллега";
lin ColleaguesHe:Letter.Recipient=\->{s="коллеги";n=<ResRusU.pl>;g=<ResRusU.masc>};"коллеги";
lin ColleaguesShe:Letter.Recipient=\->{s="коллеги";n=<ResRusU.pl>;g=<ResRusU.fem>};"коллеги";
lin Company:Letter.NounPhrase=\->{s="наше"++"предпри�тие";n=<ResRusU.sg>;g=<ResRusU.fem>};"наше предпри�тие";
lin Competitor:Letter.NounPhrase=\->{s="наш"++"конкурент";n=<ResRusU.sg>;g=<ResRusU.masc>};"наш конкурент";
lin DarlingHe:Letter.Recipient=\->{s="любимый";n=<ResRusU.sg>;g=<ResRusU.masc>};"любимый";
lin DarlingShe:Letter.Recipient=\->{s="любима�";n=<ResRusU.sg>;g=<ResRusU.fem>};"любима�";
lin Dean:Letter.Author=\->{s=table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"декан"}};n=<ResRusU.cnum<ResRusU.sg>>;g=<ResRusU.cgen<ResRusU.masc>>};"декан";
lin DearRec:Letter.Heading=\Recipient@0->{s=table ResRusU.Num{(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>"Дорога�";(ResRusU.masc)=>"Дорогой"}!(Recipient@0.g);(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"Дорогие"}!(Recipient@0.g)}!(Recipient@0.n)++Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"Дорогой Recipient_0";
lincat Ending={s:(ResRusU.Num=>(ResRusU.Gen=>Str));n:ResRusU.DepNum;g:ResRusU.DepGen}={s=table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>str@0}};n=<ResRusU.depnum>;g=<ResRusU.depgen>};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{s=table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>"С"++("наилучшими"++("пожелани�ми,"++"&-")++Author@0.s!<ResRusU.pl>!<ResRusU.fem>);(ResRusU.masc)=>"С"++("наилучшими"++("пожелани�ми,"++"&-")++Author@0.s!<ResRusU.pl>!<ResRusU.masc>)};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>"С"++("наилучшими"++("пожелани�ми,"++"&-")++Author@0.s!<ResRusU.sg>!<ResRusU.fem>);(ResRusU.masc)=>"С"++("наилучшими"++("пожелани�ми,"++"&-")++Author@0.s!<ResRusU.sg>!<ResRusU.masc>)}};n=Author@0.n;g=Author@0.g};"С (наилучшими пожелани�ми, &-)Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResRusU.DepNum{(ResRusU.depnum)(ResRusU.cnum(ResRusU.sg))(ResRusU.cnum(ResRusU.pl))=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>NounPhrase@0.s++table ResRusU.Num{(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>"обанкротило�ь";(ResRusU.masc)=>"обанкротил��"}!(NounPhrase@0.g);(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"обанкротили�ь"}!(NounPhrase@0.g)}!(NounPhrase@0.n)}}}}};"NounPhrase_0 обанкротил��";
lincat Heading={s:Str;n:ResRusU.Num;g:ResRusU.Gen}={s=str@0;n=<ResRusU.sg>;g=<ResRusU.masc>};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{s=table ResRusU.Num{(ResRusU.sg)=>"Здрав�твуй";(ResRusU.pl)=>"Здрав�твуйте"}!(Recipient@0.n)++Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"Здрав�твуй Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResRusU.DepNum{(ResRusU.cnum(ResRusU.pl))=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"мы"++"имеем"++("че�ть"++("�ообщить"++"вам"++(","++"что")))};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"мы"++"имеем"++("че�ть"++("�ообщить"++"тебе"++(","++"что")))}}};(ResRusU.depnum)=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"мы"++"имеем"++("че�ть"++("�ообщить"++"вам"++(","++"что")))};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�"++"имею"++("че�ть"++("�ообщить"++"тебе"++(","++"что")))}}};(ResRusU.cnum(ResRusU.sg))=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�"++"имею"++("че�ть"++("�ообщить"++"вам"++(","++"что")))};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�"++"имею"++("че�ть"++("�ообщить"++"тебе"++(","++"что")))}}}}};"(� имею)че�ть (�ообщить тебе), что";
lin ILoveYou:Letter.Sentence=\->{s=table ResRusU.DepNum{(ResRusU.cnum(ResRusU.pl))=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"мы"++("ва�"++"любим")};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"мы"++("теб�"++"любим")}}};(ResRusU.depnum)=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"мы"++("ва�"++"любим")};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�"++("теб�"++"люблю")}}};(ResRusU.cnum(ResRusU.sg))=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�"++("ва�"++"люблю")};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�"++("теб�"++"люблю")}}}}};"� теб� люблю";
lin InformalEnding:Letter.Ending=\Author@0->{s=table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>"С"++("друже�ким"++("приветом,"++"&-"))++Author@0.s!<ResRusU.pl>!<ResRusU.fem>;(ResRusU.masc)=>"С"++("друже�ким"++("приветом,"++"&-"))++Author@0.s!<ResRusU.pl>!<ResRusU.masc>};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>"С"++("друже�ким"++("приветом,"++"&-"))++Author@0.s!<ResRusU.sg>!<ResRusU.fem>;(ResRusU.masc)=>"С"++("друже�ким"++("приветом,"++"&-"))++Author@0.s!<ResRusU.sg>!<ResRusU.masc>}};n=Author@0.n;g=Author@0.g};"(С друже�ким приветом, &-)Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{s=table ResRusU.Num{(ResRusU.sg)=>"Здрав�твуй";(ResRusU.pl)=>"Здрав�твуйте"}!(Recipient@0.n);n=Recipient@0.n;g=Recipient@0.g};"Здрав�твуй";
lincat Letter={s:Str}={s=str@0};"Letter";
lincat Message={s:(ResRusU.DepNum=>(ResRusU.DepGen=>(ResRusU.Num=>(ResRusU.Gen=>Str))))}={s=table ResRusU.DepNum{(ResRusU.depnum)(ResRusU.cnum(ResRusU.sg))(ResRusU.cnum(ResRusU.pl))=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>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{(ResRusU.depnum)(ResRusU.cnum(ResRusU.sg))(ResRusU.cnum(ResRusU.pl))=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResRusU.DepNum{(ResRusU.cnum(ResRusU.pl))=>table ResRusU.DepGen{(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.pl>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.pl>!<ResRusU.fem>;(ResRusU.masc)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.pl>!<ResRusU.masc>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.pl>!<ResRusU.masc>};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.sg>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.sg>!<ResRusU.fem>;(ResRusU.masc)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.sg>!<ResRusU.masc>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.sg>!<ResRusU.masc>}};(ResRusU.cgen(ResRusU.masc))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.pl>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.pl>!<ResRusU.fem>;(ResRusU.masc)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.pl>!<ResRusU.masc>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.pl>!<ResRusU.masc>};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.sg>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.sg>!<ResRusU.fem>;(ResRusU.masc)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.sg>!<ResRusU.masc>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.sg>!<ResRusU.masc>}};(ResRusU.depgen)=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.depgen>!<ResRusU.pl>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.depgen>!<ResRusU.pl>!<ResRusU.fem>;(ResRusU.masc)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.depgen>!<ResRusU.pl>!<ResRusU.masc>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.depgen>!<ResRusU.pl>!<ResRusU.masc>};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.depgen>!<ResRusU.sg>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.depgen>!<ResRusU.sg>!<ResRusU.fem>;(ResRusU.masc)=>Mode@0.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.depgen>!<ResRusU.sg>!<ResRusU.masc>++Sentence@1.s!<ResRusU.cnum<ResRusU.pl>>!<ResRusU.depgen>!<ResRusU.sg>!<ResRusU.masc>}}};(ResRusU.cnum(ResRusU.sg))=>table ResRusU.DepGen{(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.pl>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.pl>!<ResRusU.fem>;(ResRusU.masc)=>Mode@0.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.pl>!<ResRusU.masc>++Sentence@1.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.pl>!<ResRusU.masc>};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.sg>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.sg>!<ResRusU.fem>;(ResRusU.masc)=>Mode@0.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.sg>!<ResRusU.masc>++Sentence@1.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.fem>>!<ResRusU.sg>!<ResRusU.masc>}};(ResRusU.cgen(ResRusU.masc))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.pl>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.pl>!<ResRusU.fem>;(ResRusU.masc)=>Mode@0.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.pl>!<ResRusU.masc>++Sentence@1.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.pl>!<ResRusU.masc>};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.sg>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.sg>!<ResRusU.fem>;(ResRusU.masc)=>Mode@0.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.sg>!<ResRusU.masc>++Sentence@1.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.cgen<ResRusU.masc>>!<ResRusU.sg>!<ResRusU.masc>}};(ResRusU.depgen)=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.depgen>!<ResRusU.pl>!<ResRusU.fem>++Sentence@1.s!<ResRusU.cnum<ResRusU.sg>>!<ResRusU.depgen>!<ResRusU.pl>!<ResRusU.fem>;(ResRusU.masc)=>Mode@Line truncated
lin Mother:Letter.Author=\->{s=table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"мама"}};n=<ResRusU.cnum<ResRusU.sg>>;g=<ResRusU.cgen<ResRusU.fem>>};"мама";
lin Name:Letter.Author=\String@0->{s=table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>String@0.s}};n=<ResRusU.cnum<ResRusU.sg>>;g=<ResRusU.cgen<ResRusU.masc>>};"String_0";
lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResRusU.sg>;g=<ResRusU.masc>};"String_0";
lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResRusU.sg>;g=<ResRusU.fem>};"String_0";
lincat NounPhrase={s:Str;n:ResRusU.Num;g:ResRusU.Gen}={s=str@0;n=<ResRusU.sg>;g=<ResRusU.masc>};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{s="наши"++"клиенты";n=<ResRusU.pl>;g=<ResRusU.masc>};"наши клиенты";
lin PlainRec:Letter.Heading=\Recipient@0->{s=Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"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{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>str@0}}};"Position";
lin President:Letter.Author=\->{s=table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"президент"}};n=<ResRusU.cnum<ResRusU.sg>>;g=<ResRusU.cgen<ResRusU.masc>>};"президент";
lin ProjectManager:Letter.Position=\->{s=table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"менеджерами"++"проектов"};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"менеджером"++"проекта"}}};"менеджером проекта";
lincat Recipient={s:Str;n:ResRusU.Num;g:ResRusU.Gen}={s=str@0;n=<ResRusU.sg>;g=<ResRusU.masc>};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResRusU.DepNum{(ResRusU.depnum)=>table ResRusU.DepGen{(ResRusU.cgen(ResRusU.masc))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"вы"++("вынуждены"++("�ообщить"++(","++"что")))};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�"++("вынужден"++("�ообщить"++(","++"что")))}};(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"вы"++("вынуждены"++("�ообщить"++(","++"что")))};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�"++("вынуждена"++("�ообщить"++(","++"что")))}};(ResRusU.depgen)=>table ResRusU.Num{(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>"�"++("вынужден"++("�ообщить"++(","++"что")));(ResRusU.masc)=>"�"++("вынуждена"++("�ообщить"++(","++"что")))};(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"вы"++("вынуждены"++("�ообщить"++(","++"что")))}}};(ResRusU.cnum(ResRusU.sg))=>table ResRusU.DepGen{(ResRusU.depgen)=>table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>"�"++("вынужден"++("�ообщить"++(","++"что")));(ResRusU.masc)=>"�"++("вынуждена"++("�ообщить"++(","++"что")))}};(ResRusU.cgen(ResRusU.masc))=>table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�"++("вынужден"++("�ообщить"++(","++"что")))}};(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�"++("вынуждена"++("�ообщить"++(","++"что")))}}};(ResRusU.cnum(ResRusU.pl))=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"вы"++("вынуждены"++("�ообщить"++(","++"что")))}}}}};"� вынуждена �ообщить , что";
lin Senior:Letter.Position=\->{s=table ResRusU.Num{(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�таршим"++("научным"++"�отрудником")};(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"�таршими"++("научными"++"�отрудниками")}}};"�таршим научным �отрудником";
lincat Sentence={s:(ResRusU.DepNum=>(ResRusU.DepGen=>(ResRusU.Num=>(ResRusU.Gen=>Str))))}={s=table ResRusU.DepNum{(ResRusU.depnum)(ResRusU.cnum(ResRusU.sg))(ResRusU.cnum(ResRusU.pl))=>table ResRusU.DepGen{(ResRusU.depgen)(ResRusU.cgen(ResRusU.masc))(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{s=table ResRusU.Num{(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>"твой"++"муж";(ResRusU.masc)=>"тво�"++"жена"};(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)=>"ваши"++"жены";(ResRusU.fem)=>"ваши"++"мужь�"}};n=<ResRusU.depnum>;g=<ResRusU.depgen>};"тво� жена";
}
resource ResFin = {
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 ;
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 Swedish of Letter = open ResSve in {
flags modulesize = n42 ;
flags startcat = Letter ;
flags lexer = textlit ;
flags unlexer = textlit ;
lincat Author = {s : (ResSve.Num => (ResSve.Sex => Str)) ;n : ResSve.DepNum ;x : ResSve.Sex }= {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }} ;n = <ResSve.depnum>;x = <ResSve.masc>} ;"Author" ;
lin BePromoted : Letter.Sentence = \ Position @ 0 -> {s = table ResSve.DepNum {(ResSve.depnum)(ResSve.cnum (ResSve.sg)) (ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "du" ++ ("har" ++ "blivit" ++ ("befordrad" ++ ("till" ++ Position @ 0.s ! <ResSve.sg>! <ResSve.fem>))) ;(ResSve.masc)=> "du" ++ ("har" ++ "blivit" ++ ("befordrad" ++ ("till" ++ Position @ 0.s ! <ResSve.sg>! <ResSve.masc>))) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> "ni" ++ ("har" ++ "blivit" ++ ("befordrade" ++ ("till" ++ Position @ 0.s ! <ResSve.pl>! <ResSve.fem>))) ;(ResSve.masc)=> "ni" ++ ("har" ++ "blivit" ++ ("befordrade" ++ ("till" ++ Position @ 0.s ! <ResSve.pl>! <ResSve.masc>))) }}}}} ;"du (har blivit)befordrad till Position_0" ;
lin ColleagueHe : Letter.Recipient = \ -> {s = "kollega" ;n = <ResSve.sg>;x = <ResSve.masc>} ;"kollega" ;
lin ColleagueShe : Letter.Recipient = \ -> {s = "kollega" ;n = <ResSve.sg>;x = <ResSve.fem>} ;"kollega" ;
lin ColleaguesHe : Letter.Recipient = \ -> {s = "kollegor" ;n = <ResSve.pl>;x = <ResSve.masc>} ;"kollegor" ;
lin ColleaguesShe : Letter.Recipient = \ -> {s = "kollegor" ;n = <ResSve.pl>;x = <ResSve.fem>} ;"kollegor" ;
lin Company : Letter.NounPhrase = \ -> {s = "vårt" ++ "företag" ;n = <ResSve.sg>;g = <ResSve.ett>} ;"vårt företag" ;
lin Competitor : Letter.NounPhrase = \ -> {s = "vår" ++ ("värsta" ++ "konkurrent");n = <ResSve.sg>;g = <ResSve.en>} ;"vår värsta konkurrent" ;
lin DarlingHe : Letter.Recipient = \ -> {s = "älskling" ;n = <ResSve.sg>;x = <ResSve.masc>} ;"älskling" ;
lin DarlingShe : Letter.Recipient = \ -> {s = "älskling" ;n = <ResSve.sg>;x = <ResSve.fem>} ;"älskling" ;
lin Dean : Letter.Author = \ -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "Dekanus" }} ;n = <ResSve.cnum <ResSve.sg>> ;x = <ResSve.masc>} ;"Dekanus" ;
lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "Kära" ;(ResSve.masc)=> "Käre" }! (Recipient @ 0.x);(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "Kära" }! (Recipient @ 0.x)}! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Käre Recipient_0" ;
lincat Ending = {s : (ResSve.Num => (ResSve.Sex => Str)) ;n : ResSve.DepNum ;x : ResSve.Sex }= {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }} ;n = <ResSve.depnum>;x = <ResSve.masc>} ;"Ending" ;
lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("vänlig" ++ ("hälsning" ++ "&-")) ++ Author @ 0.s ! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> "Med" ++ ("vänlig" ++ ("hälsning" ++ "&-")) ++ Author @ 0.s ! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("vänlig" ++ ("hälsning" ++ "&-")) ++ Author @ 0.s ! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> "Med" ++ ("vänlig" ++ ("hälsning" ++ "&-")) ++ Author @ 0.s ! <ResSve.sg>! <ResSve.masc>}} ;n = Author @ 0.n ;x = Author @ 0.x } ;"(Med vänlig hälsning &-)Author_0" ;
lin GoBankrupt : Letter.Sentence = \ NounPhrase @ 0 -> {s = table ResSve.DepNum {(ResSve.depnum)(ResSve.cnum (ResSve.sg)) (ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> NounPhrase @ 0.s ++ ("har" ++ ("gått" ++ ("i" ++ "konkurs")))}}}}} ;"NounPhrase_0 har gått i konkurs" ;
lincat Heading = {s : Str ;n : ResSve.Num ;x : ResSve.Sex }= {s = str @ 0 ;n = <ResSve.sg>;x = <ResSve.masc>} ;"Heading" ;
lin HelloRec : Letter.Heading = \ Recipient @ 0 -> {s = "Hej" ++ Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Hej Recipient_0" ;
lin Honour : Letter.Mode = \ -> {s = table ResSve.DepNum {(ResSve.cnum (ResSve.sg)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("er" ++ "att")) }}} ;(ResSve.depnum)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("er" ++ "att")) }}} ;(ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("har" ++ ("äran" ++ ("att" ++ "meddela")) ++ ("er" ++ "att")) }}}}} ;"jag (har äran att meddela)dig att" ;
lin ILoveYou : Letter.Sentence = \ -> {s = table ResSve.DepNum {(ResSve.cnum (ResSve.sg)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("älskar" ++ "dig")} ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("älskar" ++ "er")}}} ;(ResSve.depnum)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("älskar" ++ "dig")} ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("älskar" ++ "er")}}} ;(ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("älskar" ++ "dig")} ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("älskar" ++ "er")}}}}} ;"jag älskar dig" ;
lin InformalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("hälsningar" ++ "&-")++ Author @ 0.s ! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> "Med" ++ ("hälsningar" ++ "&-")++ Author @ 0.s ! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("hälsningar" ++ "&-")++ Author @ 0.s ! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> "Med" ++ ("hälsningar" ++ "&-")++ Author @ 0.s ! <ResSve.sg>! <ResSve.masc>}} ;n = Author @ 0.n ;x = Author @ 0.x } ;"(Med hälsningar &-)Author_0" ;
lin JustHello : Letter.Heading = \ Recipient @ 0 -> {s = "Hej" ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Hej" ;
lincat Letter = {s : Str }= {s = str @ 0 } ;"Brev" ;
lincat Message = {s : (ResSve.DepNum => (ResSve.Sex => (ResSve.Num => (ResSve.Sex => Str)))) }= {s = table ResSve.DepNum {(ResSve.depnum)(ResSve.cnum (ResSve.sg)) (ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> 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 {(ResSve.depnum)(ResSve.cnum (ResSve.sg)) (ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }}}}} ;"Mode" ;
lin ModeSent : Letter.Message = \ Mode @ 0, Sentence @ 1 -> {s = table ResSve.DepNum {(ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.fem)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>}} ;(ResSve.masc)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.pl>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.masc>}}} ;(ResSve.cnum (ResSve.sg)) => table ResSve.Sex {(ResSve.fem)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>}} ;(ResSve.masc)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.cnum <ResSve.sg>> ! <ResSve.masc>! <ResSve.sg>! <ResSve.masc>}}} ;(ResSve.depnum)=> table ResSve.Sex {(ResSve.fem)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.fem>! <ResSve.sg>! <ResSve.masc>}} ;(ResSve.masc)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.pl>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.pl>! <ResSve.masc>} ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>++ Sentence @ 1.s ! <ResSve.depnum>! <ResSve.masc>! <ResSve.sg>! <ResSve.fem>;(ResSve.masc)=> Mode @ 0.s ! <ResSve.depnum>! <ResSve.masc>Line truncated
lin Mother : Letter.Author = \ -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "Mamma" }} ;n = <ResSve.cnum <ResSve.sg>> ;x = <ResSve.fem>} ;"Mamma" ;
lin Name : Letter.Author = \ String @ 0 -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> String @ 0.s }} ;n = <ResSve.cnum <ResSve.sg>> ;x = <ResSve.masc>} ;"String_0" ;
lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResSve.sg>;x = <ResSve.masc>} ;"String_0" ;
lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResSve.sg>;x = <ResSve.fem>} ;"String_0" ;
lincat NounPhrase = {s : Str ;n : ResSve.Num ;g : ResSve.Gen }= {s = str @ 0 ;n = <ResSve.sg>;g = <ResSve.en>} ;"NounPhrase" ;
lin OurCustomers : Letter.NounPhrase = \ -> {s = "våra" ++ "kunder" ;n = <ResSve.pl>;g = <ResSve.en>} ;"våra kunder" ;
lin PlainRec : Letter.Heading = \ Recipient @ 0 -> {s = Recipient @ 0.s ;n = Recipient @ 0.n ;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 {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }}} ;"Position" ;
lin President : Letter.Author = \ -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "Presidenten" }} ;n = <ResSve.cnum <ResSve.sg>> ;x = <ResSve.masc>} ;"Presidenten" ;
lin ProjectManager : Letter.Position = \ -> {s = table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "projektchef" } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "projektchefer" }}} ;"projektchef" ;
lincat Recipient = {s : Str ;n : ResSve.Num ;x : ResSve.Sex }= {s = str @ 0 ;n = <ResSve.sg>;x = <ResSve.masc>} ;"Recipient" ;
lin Regret : Letter.Mode = \ -> {s = table ResSve.DepNum {(ResSve.cnum (ResSve.sg)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("er" ++ "att")) }}} ;(ResSve.depnum)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("er" ++ "att")) }}} ;(ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("måste" ++ ("tyvärr" ++ "meddela")++ ("er" ++ "att")) }}}}} ;"jag (måste tyvärr meddela)dig att" ;
lin Senior : Letter.Position = \ -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "äldre" ++ "forskare" }}} ;"äldre forskare" ;
lincat Sentence = {s : (ResSve.DepNum => (ResSve.Sex => (ResSve.Num => (ResSve.Sex => Str)))) }= {s = table ResSve.DepNum {(ResSve.depnum)(ResSve.cnum (ResSve.sg)) (ResSve.cnum (ResSve.pl)) => table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> str @ 0 }}}}} ;"Sentence" ;
lin Spouse : Letter.Author = \ -> {s = table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.masc)=> "din" ++ "hustru" ;(ResSve.fem)=> "din" ++ "man" } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)=> "era" ++ "hustrur" ;(ResSve.fem)=> "era" ++ "män" }} ;n = <ResSve.depnum>;x = <ResSve.masc>} ;"din hustru" ;
concrete Finnish of Letter=open ResFin in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;lincat Author={s:(ResFin.Num=>(ResFin.Gen=>Str));n:ResFin.DepNum;g:ResFin.DepGen}={s=table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>str@0}};n=<ResFin.depnum>;g=<ResFin.depgen>};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResFin.DepNum{(ResFin.depnum)(ResFin.cnum(ResFin.sg))(ResFin.cnum(ResFin.pl))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>"sinut"++"on"++("ylennetty"++Position@0.s!<ResFin.sg>!<ResFin.fem>);(ResFin.masc)=>"sinut"++"on"++("ylennetty"++Position@0.s!<ResFin.sg>!<ResFin.masc>)};(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>"teidät"++"on"++("ylennetty"++Position@0.s!<ResFin.pl>!<ResFin.fem>);(ResFin.masc)=>"teidät"++"on"++("ylennetty"++Position@0.s!<ResFin.pl>!<ResFin.masc>)}}}}};"(sinut on)ylennetty Position_0";
lin ColleagueHe:Letter.Recipient=\->{s="kollega";n=<ResFin.sg>;g=<ResFin.masc>};"kollega";
lin ColleagueShe:Letter.Recipient=\->{s="kollega";n=<ResFin.sg>;g=<ResFin.fem>};"kollega";
lin ColleaguesHe:Letter.Recipient=\->{s="kollegat";n=<ResFin.pl>;g=<ResFin.masc>};"kollegat";
lin ColleaguesShe:Letter.Recipient=\->{s="kollegat";n=<ResFin.pl>;g=<ResFin.fem>};"kollegat";
lin Company:Letter.NounPhrase=\->{s="yrityksemme";n=<ResFin.sg>;g=<ResFin.fem>};"yrityksemme";
lin Competitor:Letter.NounPhrase=\->{s="pahin"++"kilpailijamme";n=<ResFin.sg>;g=<ResFin.masc>};"pahin kilpailijamme";
lin DarlingHe:Letter.Recipient=\->{s="kulta";n=<ResFin.sg>;g=<ResFin.masc>};"kulta";
lin DarlingShe:Letter.Recipient=\->{s="kulta";n=<ResFin.sg>;g=<ResFin.fem>};"kulta";
lin Dean:Letter.Author=\->{s=table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"dekaani"}};n=<ResFin.cnum<ResFin.sg>>;g=<ResFin.cgen<ResFin.masc>>};"dekaani";
lin DearRec:Letter.Heading=\Recipient@0->{s=table ResFin.Num{(ResFin.sg)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"rakas"}!(Recipient@0.g);(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"rakkaat"}!(Recipient@0.g)}!(Recipient@0.n)++Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"rakas Recipient_0";
lincat Ending={s:(ResFin.Num=>(ResFin.Gen=>Str));n:ResFin.DepNum;g:ResFin.DepGen}={s=table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>str@0}};n=<ResFin.depnum>;g=<ResFin.depgen>};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{s=table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>"parhain"++("terveisin"++"&-")++Author@0.s!<ResFin.pl>!<ResFin.fem>;(ResFin.masc)=>"parhain"++("terveisin"++"&-")++Author@0.s!<ResFin.pl>!<ResFin.masc>};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>"parhain"++("terveisin"++"&-")++Author@0.s!<ResFin.sg>!<ResFin.fem>;(ResFin.masc)=>"parhain"++("terveisin"++"&-")++Author@0.s!<ResFin.sg>!<ResFin.masc>}};n=Author@0.n;g=Author@0.g};"(parhain terveisin &-)Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResFin.DepNum{(ResFin.depnum)(ResFin.cnum(ResFin.sg))(ResFin.cnum(ResFin.pl))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>NounPhrase@0.s++(table ResFin.Num{(ResFin.sg)=>"on";(ResFin.pl)=>"ovat"}!(NounPhrase@0.n)++(table ResFin.Num{(ResFin.pl)=>"menneet";(ResFin.sg)=>"mennyt"}!(NounPhrase@0.n)++"konkurssiin"))}}}}};"NounPhrase_0 on mennyt konkurssiin";
lincat Heading={s:Str;n:ResFin.Num;g:ResFin.Gen}={s=str@0;n=<ResFin.sg>;g=<ResFin.masc>};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{s="Terve"++Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"Terve Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResFin.DepNum{(ResFin.depnum)=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"meillä"++"on"++("kunnia"++("ilmoittaa"++"teille"++"että"))};(ResFin.sg)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"minulla"++"on"++("kunnia"++("ilmoittaa"++"sinulle"++"että"))}}};(ResFin.cnum(ResFin.pl))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"meillä"++"on"++("kunnia"++("ilmoittaa"++"sinulle"++"että"))};(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"meillä"++"on"++("kunnia"++("ilmoittaa"++"teille"++"että"))}}};(ResFin.cnum(ResFin.sg))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"minulla"++"on"++("kunnia"++("ilmoittaa"++"sinulle"++"että"))};(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"minulla"++"on"++("kunnia"++("ilmoittaa"++"teille"++"että"))}}}}};"(minulla on)kunnia (ilmoittaa sinulle)että";
lin ILoveYou:Letter.Sentence=\->{s=table ResFin.DepNum{(ResFin.depnum)=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"rakastamme"++"teitä"};(ResFin.sg)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"rakastan"++"sinua"}}};(ResFin.cnum(ResFin.pl))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"rakastamme"++"sinua"};(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"rakastamme"++"teitä"}}};(ResFin.cnum(ResFin.sg))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"rakastan"++"sinua"};(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"rakastan"++"teitä"}}}}};"rakastan sinua";
lin InformalEnding:Letter.Ending=\Author@0->{s=table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>"terveisin"++"&-"++Author@0.s!<ResFin.pl>!<ResFin.fem>;(ResFin.masc)=>"terveisin"++"&-"++Author@0.s!<ResFin.pl>!<ResFin.masc>};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>"terveisin"++"&-"++Author@0.s!<ResFin.sg>!<ResFin.fem>;(ResFin.masc)=>"terveisin"++"&-"++Author@0.s!<ResFin.sg>!<ResFin.masc>}};n=Author@0.n;g=Author@0.g};"(terveisin &-)Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{s="Terve";n=Recipient@0.n;g=Recipient@0.g};"Terve";
lincat Letter={s:Str}={s=str@0};"Letter";
lincat Message={s:(ResFin.DepNum=>(ResFin.DepGen=>(ResFin.Num=>(ResFin.Gen=>Str))))}={s=table ResFin.DepNum{(ResFin.depnum)(ResFin.cnum(ResFin.sg))(ResFin.cnum(ResFin.pl))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>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{(ResFin.depnum)(ResFin.cnum(ResFin.sg))(ResFin.cnum(ResFin.pl))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResFin.DepNum{(ResFin.cnum(ResFin.pl))=>table ResFin.DepGen{(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.fem>>!<ResFin.pl>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.fem>>!<ResFin.pl>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.fem>>!<ResFin.pl>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.fem>>!<ResFin.pl>!<ResFin.masc>};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.fem>>!<ResFin.sg>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.fem>>!<ResFin.sg>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.fem>>!<ResFin.sg>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.fem>>!<ResFin.sg>!<ResFin.masc>}};(ResFin.cgen(ResFin.masc))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.masc>>!<ResFin.pl>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.masc>>!<ResFin.pl>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.masc>>!<ResFin.pl>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.masc>>!<ResFin.pl>!<ResFin.masc>};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.masc>>!<ResFin.sg>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.masc>>!<ResFin.sg>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.masc>>!<ResFin.sg>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.cgen<ResFin.masc>>!<ResFin.sg>!<ResFin.masc>}};(ResFin.depgen)=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.depgen>!<ResFin.pl>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.depgen>!<ResFin.pl>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.depgen>!<ResFin.pl>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.depgen>!<ResFin.pl>!<ResFin.masc>};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.depgen>!<ResFin.sg>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.depgen>!<ResFin.sg>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.pl>>!<ResFin.depgen>!<ResFin.sg>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.pl>>!<ResFin.depgen>!<ResFin.sg>!<ResFin.masc>}}};(ResFin.cnum(ResFin.sg))=>table ResFin.DepGen{(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.fem>>!<ResFin.pl>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.fem>>!<ResFin.pl>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.fem>>!<ResFin.pl>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.fem>>!<ResFin.pl>!<ResFin.masc>};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.fem>>!<ResFin.sg>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.fem>>!<ResFin.sg>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.fem>>!<ResFin.sg>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.fem>>!<ResFin.sg>!<ResFin.masc>}};(ResFin.cgen(ResFin.masc))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.masc>>!<ResFin.pl>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.masc>>!<ResFin.pl>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.masc>>!<ResFin.pl>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.masc>>!<ResFin.pl>!<ResFin.masc>};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.masc>>!<ResFin.sg>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.masc>>!<ResFin.sg>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.masc>>!<ResFin.sg>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.sg>>!<ResFin.cgen<ResFin.masc>>!<ResFin.sg>!<ResFin.masc>}};(ResFin.depgen)=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.depgen>!<ResFin.pl>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.sg>>!<ResFin.depgen>!<ResFin.pl>!<ResFin.fem>;(ResFin.masc)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.depgen>!<ResFin.pl>!<ResFin.masc>++Sentence@1.s!<ResFin.cnum<ResFin.sg>>!<ResFin.depgen>!<ResFin.pl>!<ResFin.masc>};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!<ResFin.cnum<ResFin.sg>>!<ResFin.depgen>!<ResFin.sg>!<ResFin.fem>++Sentence@1.s!<ResFin.cnum<ResFin.sg>Line truncated
lin Mother:Letter.Author=\->{s=table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"äiti"}};n=<ResFin.cnum<ResFin.sg>>;g=<ResFin.cgen<ResFin.fem>>};"äiti";
lin Name:Letter.Author=\String@0->{s=table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>String@0.s}};n=<ResFin.cnum<ResFin.sg>>;g=<ResFin.cgen<ResFin.masc>>};"String_0";
lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResFin.sg>;g=<ResFin.masc>};"String_0";
lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResFin.sg>;g=<ResFin.fem>};"String_0";
lincat NounPhrase={s:Str;n:ResFin.Num;g:ResFin.Gen}={s=str@0;n=<ResFin.sg>;g=<ResFin.masc>};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{s="asiakkaamme";n=<ResFin.pl>;g=<ResFin.masc>};"asiakkaamme";
lin PlainRec:Letter.Heading=\Recipient@0->{s=Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"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{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>str@0}}};"Position";
lin President:Letter.Author=\->{s=table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"presidentti"}};n=<ResFin.cnum<ResFin.sg>>;g=<ResFin.cgen<ResFin.masc>>};"presidentti";
lin ProjectManager:Letter.Position=\->{s=table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"projektipäälliköiksi"};(ResFin.sg)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"projektipäälliköksi"}}};"projektipäälliköksi";
lincat Recipient={s:Str;n:ResFin.Num;g:ResFin.Gen}={s=str@0;n=<ResFin.sg>;g=<ResFin.masc>};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResFin.DepNum{(ResFin.depnum)=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"meidän"++("on"++("valitettavasti"++"ilmoitettava")++"että")};(ResFin.sg)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"minun"++("on"++("valitettavasti"++"ilmoitettava")++"että")}}};(ResFin.cnum(ResFin.pl))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"meidän"++("on"++("valitettavasti"++"ilmoitettava")++"että")}}};(ResFin.cnum(ResFin.sg))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"minun"++("on"++("valitettavasti"++"ilmoitettava")++"että")}}}}};"minun (on valitettavasti ilmoitettava)että";
lin Senior:Letter.Position=\->{s=table ResFin.Num{(ResFin.sg)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"vanhemmaksi"++"tutkijaksi"};(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"vanhemmiksi"++"tutkijoiksi"}}};"vanhemmaksi tutkijaksi";
lincat Sentence={s:(ResFin.DepNum=>(ResFin.DepGen=>(ResFin.Num=>(ResFin.Gen=>Str))))}={s=table ResFin.DepNum{(ResFin.depnum)(ResFin.cnum(ResFin.sg))(ResFin.cnum(ResFin.pl))=>table ResFin.DepGen{(ResFin.depgen)(ResFin.cgen(ResFin.masc))(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{s=table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>"miehenne";(ResFin.masc)=>"vaimonne"};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>"miehesi";(ResFin.masc)=>"vaimosi"}};n=<ResFin.depnum>;g=<ResFin.depgen>};"vaimosi";
}
resource ResSve = {
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 ;
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 French of Letter = open ResFra in {
flags modulesize = n42 ;
flags startcat = Letter ;
flags lexer = textlit ;
flags unlexer = textlit ;
lincat Author = {s : (ResFra.Num => (ResFra.Gen => Str)) ;n : ResFra.DepNum ;g : ResFra.DepGen }= {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }} ;n = <ResFra.depnum>;g = <ResFra.depgen>} ;"Author" ;
lin BePromoted : Letter.Sentence = \ Position @ 0 -> {s = table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.sg)) (ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> "vous" ++ ("avez" ++ "été")++ ("promues" ++ Position @ 0.s ! <ResFra.pl>! <ResFra.fem>) ;(ResFra.masc)=> "vous" ++ ("avez" ++ "été")++ ("promus" ++ Position @ 0.s ! <ResFra.pl>! <ResFra.masc>) } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)=> "tu" ++ ("as" ++ "été")++ ("promu" ++ Position @ 0.s ! <ResFra.sg>! <ResFra.masc>) ;(ResFra.fem)=> "tu" ++ ("as" ++ "été")++ ("promue" ++ Position @ 0.s ! <ResFra.sg>! <ResFra.fem>) }}}}} ;"(tu as été)promu Position_0" ;
lin ColleagueHe : Letter.Recipient = \ -> {s = "collègue" ;n = <ResFra.sg>;g = <ResFra.masc>} ;"collègue" ;
lin ColleagueShe : Letter.Recipient = \ -> {s = "collègue" ;n = <ResFra.sg>;g = <ResFra.fem>} ;"collègue" ;
lin ColleaguesHe : Letter.Recipient = \ -> {s = "collègues" ;n = <ResFra.pl>;g = <ResFra.masc>} ;"collègues" ;
lin ColleaguesShe : Letter.Recipient = \ -> {s = "collègues" ;n = <ResFra.pl>;g = <ResFra.fem>} ;"collègues" ;
lin Company : Letter.NounPhrase = \ -> {s = "notre" ++ "entreprise" ;n = <ResFra.sg>;g = <ResFra.fem>} ;"notre entreprise" ;
lin Competitor : Letter.NounPhrase = \ -> {s = "notre" ++ ("pire" ++ "compétiteur");n = <ResFra.sg>;g = <ResFra.masc>} ;"notre pire compétiteur" ;
lin DarlingHe : Letter.Recipient = \ -> {s = "chéri" ;n = <ResFra.sg>;g = <ResFra.masc>} ;"chéri" ;
lin DarlingShe : Letter.Recipient = \ -> {s = "chérie" ;n = <ResFra.sg>;g = <ResFra.fem>} ;"chérie" ;
lin Dean : Letter.Author = \ -> {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "le" ++ "doyen" }} ;n = <ResFra.cnum <ResFra.sg>> ;g = <ResFra.cgen <ResFra.masc>> } ;"le doyen" ;
lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)=> "cher" ;(ResFra.fem)=> "chère" }! (Recipient @ 0.g);(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)=> "chers" ;(ResFra.fem)=> "chères" }! (Recipient @ 0.g)}! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"cher Recipient_0" ;
lincat Ending = {s : (ResFra.Num => (ResFra.Gen => Str)) ;n : ResFra.DepNum ;g : ResFra.DepGen }= {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }} ;n = <ResFra.depnum>;g = <ResFra.depgen>} ;"Ending" ;
lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> "avec" ++ (table ResFra.Num {(ResFra.sg)=> "mes" ;(ResFra.pl)=> "nos" }! (table ResFra.DepNum {(ResFra.cnum (ResFra.pl)) => <ResFra.pl>;(ResFra.depnum)(ResFra.cnum (ResFra.sg)) => <ResFra.sg>}! (Author @ 0.n)) ++ ("salutations" ++ ("distinguées" ++ "&-")++ Author @ 0.s ! <ResFra.sg>! <ResFra.fem>));(ResFra.masc)=> "avec" ++ (table ResFra.Num {(ResFra.sg)=> "mes" ;(ResFra.pl)=> "nos" }! (table ResFra.DepNum {(ResFra.cnum (ResFra.pl)) => <ResFra.pl>;(ResFra.depnum)(ResFra.cnum (ResFra.sg)) => <ResFra.sg>}! (Author @ 0.n)) ++ ("salutations" ++ ("distinguées" ++ "&-")++ Author @ 0.s ! <ResFra.sg>! <ResFra.masc>))} ;(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> "avec" ++ (table ResFra.Num {(ResFra.sg)=> "mes" ;(ResFra.pl)=> "nos" }! (table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.pl)) => <ResFra.pl>;(ResFra.cnum (ResFra.sg)) => <ResFra.sg>}! (Author @ 0.n)) ++ ("salutations" ++ ("distinguées" ++ "&-")++ Author @ 0.s ! <ResFra.pl>! <ResFra.fem>));(ResFra.masc)=> "avec" ++ (table ResFra.Num {(ResFra.sg)=> "mes" ;(ResFra.pl)=> "nos" }! (table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.pl)) => <ResFra.pl>;(ResFra.cnum (ResFra.sg)) => <ResFra.sg>}! (Author @ 0.n)) ++ ("salutations" ++ ("distinguées" ++ "&-")++ Author @ 0.s ! <ResFra.pl>! <ResFra.masc>))}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"avec mes (salutations distinguées &-)Author_0" ;
lin GoBankrupt : Letter.Sentence = \ NounPhrase @ 0 -> {s = table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.sg)) (ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> NounPhrase @ 0.s ++ (table ResFra.Num {(ResFra.sg)=> "a" ;(ResFra.pl)=> "ont" }! (NounPhrase @ 0.n)++ ("fait" ++ "banqueroute")) }}}}} ;"NounPhrase_0 a fait banqueroute" ;
lincat Heading = {s : Str ;n : ResFra.Num ;g : ResFra.Gen }= {s = str @ 0 ;n = <ResFra.sg>;g = <ResFra.masc>} ;"Heading" ;
lin HelloRec : Letter.Heading = \ Recipient @ 0 -> {s = "Bonjour" ++ Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Bonjour Recipient_0" ;
lin Honour : Letter.Mode = \ -> {s = table ResFra.DepNum {(ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "avons" ++ ("l'honneur" ++ "de" ++ ("vous" ++ "informer" ++ "que")) } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "avons" ++ ("l'honneur" ++ "de" ++ ("t'informer" ++ "que")) }}} ;(ResFra.depnum)=> table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "avons" ++ ("l'honneur" ++ "de" ++ ("vous" ++ "informer" ++ "que")) } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "j'ai" ++ ("l'honneur" ++ "de" ++ ("t'informer" ++ "que")) }}} ;(ResFra.cnum (ResFra.sg)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "j'ai" ++ ("l'honneur" ++ "de" ++ ("vous" ++ "informer" ++ "que")) } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "j'ai" ++ ("l'honneur" ++ "de" ++ ("t'informer" ++ "que")) }}}}} ;"j'ai (l'honneur de)t'informer que" ;
lin ILoveYou : Letter.Sentence = \ -> {s = table ResFra.DepNum {(ResFra.cnum (ResFra.sg)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ ("vous" ++ "aime")} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "t'aime" }}} ;(ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ ("vous" ++ "aimons")} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "t'aimons" }}} ;(ResFra.depnum)=> table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "t'aime" } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ ("vous" ++ "aimons")}}}}} ;"je t'aime" ;
lin InformalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> "Amicalement" ++ "&-" ++ Author @ 0.s ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> "Amicalement" ++ "&-" ++ Author @ 0.s ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> "Amicalement" ++ "&-" ++ Author @ 0.s ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> "Amicalement" ++ "&-" ++ Author @ 0.s ! <ResFra.sg>! <ResFra.masc>}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"(Amicalement &-)Author_0" ;
lin JustHello : Letter.Heading = \ Recipient @ 0 -> {s = "Bonjour" ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"Bonjour" ;
lincat Letter = {s : Str }= {s = str @ 0 } ;"Letter" ;
lincat Message = {s : (ResFra.DepNum => (ResFra.DepGen => (ResFra.Num => (ResFra.Gen => Str)))) }= {s = table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.sg)) (ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> 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 {(ResFra.depnum)(ResFra.cnum (ResFra.sg)) (ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }}}}} ;"Mode" ;
lin ModeSent : Letter.Message = \ Mode @ 0, Sentence @ 1 -> {s = table ResFra.DepNum {(ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.masc>}} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.masc>}} ;(ResFra.depgen)=> table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.pl>> ! <ResFra.depgen>! <ResFra.sg>! <ResFra.masc>}}} ;(ResFra.cnum (ResFra.sg)) => table ResFra.DepGen {(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.fem>> ! <ResFra.sg>! <ResFra.masc>}} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.pl>! <ResFra.masc>} ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.fem>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.fem>;(ResFra.masc)=> Mode @ 0.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.masc>++ Sentence @ 1.s ! <ResFra.cnum <ResFra.sg>> ! <ResFra.cgen <ResFra.masc>> ! <ResFra.sg>! <ResFra.masc>}} ;(ResFra.depgen)=> table ResLine truncated
lin Mother : Letter.Author = \ -> {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "maman" }} ;n = <ResFra.cnum <ResFra.sg>> ;g = <ResFra.cgen <ResFra.fem>> } ;"maman" ;
lin Name : Letter.Author = \ String @ 0 -> {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> String @ 0.s }} ;n = <ResFra.cnum <ResFra.sg>> ;g = <ResFra.cgen <ResFra.masc>> } ;"String_0" ;
lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResFra.sg>;g = <ResFra.masc>} ;"String_0" ;
lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResFra.sg>;g = <ResFra.fem>} ;"String_0" ;
lincat NounPhrase = {s : Str ;n : ResFra.Num ;g : ResFra.Gen }= {s = str @ 0 ;n = <ResFra.sg>;g = <ResFra.masc>} ;"NounPhrase" ;
lin OurCustomers : Letter.NounPhrase = \ -> {s = "nos" ++ "clients" ;n = <ResFra.pl>;g = <ResFra.masc>} ;"nos clients" ;
lin PlainRec : Letter.Heading = \ Recipient @ 0 -> {s = Recipient @ 0.s ;n = Recipient @ 0.n ;g = Recipient @ 0.g } ;"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 {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }}} ;"Position" ;
lin President : Letter.Author = \ -> {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "le" ++ "président" }} ;n = <ResFra.cnum <ResFra.sg>> ;g = <ResFra.cgen <ResFra.masc>> } ;"le président" ;
lin ProjectManager : Letter.Position = \ -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "chef" ++ ("de" ++ "projet")} ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "chefs" ++ ("de" ++ "projets")}}} ;"chef de projet" ;
lincat Recipient = {s : Str ;n : ResFra.Num ;g : ResFra.Gen }= {s = str @ 0 ;n = <ResFra.sg>;g = <ResFra.masc>} ;"Recipient" ;
lin Regret : Letter.Mode = \ -> {s = table ResFra.DepNum {(ResFra.depnum)=> table ResFra.DepGen {(ResFra.depgen)=> table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> "je" ++ "suis" ++ ("désolé" ++ ("d'informer" ++ "que")) ;(ResFra.masc)=> "je" ++ "suis" ++ ("désolée" ++ ("d'informer" ++ "que")) } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)=> "nous" ++ "sommes" ++ ("désolées" ++ ("d'informer" ++ "que")) ;(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolés" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("désolé" ++ ("d'informer" ++ "que")) } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolés" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("désolée" ++ ("d'informer" ++ "que")) } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolées" ++ ("d'informer" ++ "que")) }}} ;(ResFra.cnum (ResFra.sg)) => table ResFra.DepGen {(ResFra.depgen)=> table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> "je" ++ "suis" ++ ("désolé" ++ ("d'informer" ++ "que")) ;(ResFra.masc)=> "je" ++ "suis" ++ ("désolée" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("désolé" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("désolée" ++ ("d'informer" ++ "que")) }}} ;(ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)=> table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)=> "nous" ++ "sommes" ++ ("désolées" ++ ("d'informer" ++ "que")) ;(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolés" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolées" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("désolés" ++ ("d'informer" ++ "que")) }}}}} ;"(je suis)désolée d'informer que" ;
lin Senior : Letter.Position = \ -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "responsable" ++ "scientifique" } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "responsables" ++ "scientifiques" }}} ;"responsable scientifique" ;
lincat Sentence = {s : (ResFra.DepNum => (ResFra.DepGen => (ResFra.Num => (ResFra.Gen => Str)))) }= {s = table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.sg)) (ResFra.cnum (ResFra.pl)) => table ResFra.DepGen {(ResFra.depgen)(ResFra.cgen (ResFra.masc)) (ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> str @ 0 }}}}} ;"Sentence" ;
lin Spouse : Letter.Author = \ -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)=> "ta" ++ "femme" ;(ResFra.fem)=> "ton" ++ "mari" } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)=> "vos" ++ "femmes" ;(ResFra.fem)=> "vos" ++ "maris" }} ;n = <ResFra.depnum>;g = <ResFra.depgen>} ;"ta femme" ;
concrete Swedish of Letter=open ResSve in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;lincat Author={s:(ResSve.Num=>(ResSve.Sex=>Str));n:ResSve.DepNum;x:ResSve.Sex}={s=table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>str@0}};n=<ResSve.depnum>;x=<ResSve.masc>};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResSve.DepNum{(ResSve.depnum)(ResSve.cnum(ResSve.sg))(ResSve.cnum(ResSve.pl))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>"du"++("har"++"blivit"++("befordrad"++("till"++Position@0.s!<ResSve.sg>!<ResSve.fem>)));(ResSve.masc)=>"du"++("har"++"blivit"++("befordrad"++("till"++Position@0.s!<ResSve.sg>!<ResSve.masc>)))};(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>"ni"++("har"++"blivit"++("befordrade"++("till"++Position@0.s!<ResSve.pl>!<ResSve.fem>)));(ResSve.masc)=>"ni"++("har"++"blivit"++("befordrade"++("till"++Position@0.s!<ResSve.pl>!<ResSve.masc>)))}}}}};"du (har blivit)befordrad till Position_0";
lin ColleagueHe:Letter.Recipient=\->{s="kollega";n=<ResSve.sg>;x=<ResSve.masc>};"kollega";
lin ColleagueShe:Letter.Recipient=\->{s="kollega";n=<ResSve.sg>;x=<ResSve.fem>};"kollega";
lin ColleaguesHe:Letter.Recipient=\->{s="kollegor";n=<ResSve.pl>;x=<ResSve.masc>};"kollegor";
lin ColleaguesShe:Letter.Recipient=\->{s="kollegor";n=<ResSve.pl>;x=<ResSve.fem>};"kollegor";
lin Company:Letter.NounPhrase=\->{s="vÃ¥rt"++"företag";n=<ResSve.sg>;g=<ResSve.ett>};"vårt företag";
lin Competitor:Letter.NounPhrase=\->{s="vÃ¥r"++("värsta"++"konkurrent");n=<ResSve.sg>;g=<ResSve.en>};"vår värsta konkurrent";
lin DarlingHe:Letter.Recipient=\->{s="älskling";n=<ResSve.sg>;x=<ResSve.masc>};"älskling";
lin DarlingShe:Letter.Recipient=\->{s="älskling";n=<ResSve.sg>;x=<ResSve.fem>};"älskling";
lin Dean:Letter.Author=\->{s=table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"Dekanus"}};n=<ResSve.cnum<ResSve.sg>>;x=<ResSve.masc>};"Dekanus";
lin DearRec:Letter.Heading=\Recipient@0->{s=table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>"Kära";(ResSve.masc)=>"Käre"}!(Recipient@0.x);(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"Kära"}!(Recipient@0.x)}!(Recipient@0.n)++Recipient@0.s;n=Recipient@0.n;x=Recipient@0.x};"Käre Recipient_0";
lincat Ending={s:(ResSve.Num=>(ResSve.Sex=>Str));n:ResSve.DepNum;x:ResSve.Sex}={s=table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>str@0}};n=<ResSve.depnum>;x=<ResSve.masc>};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{s=table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>"Med"++("vänlig"++("hälsning"++"&-"))++Author@0.s!<ResSve.pl>!<ResSve.fem>;(ResSve.masc)=>"Med"++("vänlig"++("hälsning"++"&-"))++Author@0.s!<ResSve.pl>!<ResSve.masc>};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>"Med"++("vänlig"++("hälsning"++"&-"))++Author@0.s!<ResSve.sg>!<ResSve.fem>;(ResSve.masc)=>"Med"++("vänlig"++("hälsning"++"&-"))++Author@0.s!<ResSve.sg>!<ResSve.masc>}};n=Author@0.n;x=Author@0.x};"(Med vänlig hälsning &-)Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResSve.DepNum{(ResSve.depnum)(ResSve.cnum(ResSve.sg))(ResSve.cnum(ResSve.pl))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>NounPhrase@0.s++("har"++("gÃ¥tt"++("i"++"konkurs")))}}}}};"NounPhrase_0 har gått i konkurs";
lincat Heading={s:Str;n:ResSve.Num;x:ResSve.Sex}={s=str@0;n=<ResSve.sg>;x=<ResSve.masc>};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{s="Hej"++Recipient@0.s;n=Recipient@0.n;x=Recipient@0.x};"Hej Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResSve.DepNum{(ResSve.cnum(ResSve.sg))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"jag"++("har"++("äran"++("att"++"meddela"))++("dig"++"att"))};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"jag"++("har"++("äran"++("att"++"meddela"))++("er"++"att"))}}};(ResSve.depnum)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"jag"++("har"++("äran"++("att"++"meddela"))++("dig"++"att"))};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"vi"++("har"++("äran"++("att"++"meddela"))++("er"++"att"))}}};(ResSve.cnum(ResSve.pl))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"vi"++("har"++("äran"++("att"++"meddela"))++("dig"++"att"))};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"vi"++("har"++("äran"++("att"++"meddela"))++("er"++"att"))}}}}};"jag (har äran att meddela)dig att";
lin ILoveYou:Letter.Sentence=\->{s=table ResSve.DepNum{(ResSve.cnum(ResSve.sg))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"jag"++("älskar"++"dig")};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"jag"++("älskar"++"er")}}};(ResSve.depnum)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"jag"++("älskar"++"dig")};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"vi"++("älskar"++"er")}}};(ResSve.cnum(ResSve.pl))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"vi"++("älskar"++"dig")};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"vi"++("älskar"++"er")}}}}};"jag älskar dig";
lin InformalEnding:Letter.Ending=\Author@0->{s=table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>"Med"++("hälsningar"++"&-")++Author@0.s!<ResSve.pl>!<ResSve.fem>;(ResSve.masc)=>"Med"++("hälsningar"++"&-")++Author@0.s!<ResSve.pl>!<ResSve.masc>};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>"Med"++("hälsningar"++"&-")++Author@0.s!<ResSve.sg>!<ResSve.fem>;(ResSve.masc)=>"Med"++("hälsningar"++"&-")++Author@0.s!<ResSve.sg>!<ResSve.masc>}};n=Author@0.n;x=Author@0.x};"(Med hälsningar &-)Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{s="Hej";n=Recipient@0.n;x=Recipient@0.x};"Hej";
lincat Letter={s:Str}={s=str@0};"Brev";
lincat Message={s:(ResSve.DepNum=>(ResSve.Sex=>(ResSve.Num=>(ResSve.Sex=>Str))))}={s=table ResSve.DepNum{(ResSve.depnum)(ResSve.cnum(ResSve.sg))(ResSve.cnum(ResSve.pl))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>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{(ResSve.depnum)(ResSve.cnum(ResSve.sg))(ResSve.cnum(ResSve.pl))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResSve.DepNum{(ResSve.cnum(ResSve.pl))=>table ResSve.Sex{(ResSve.fem)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.cnum<ResSve.pl>>!<ResSve.fem>!<ResSve.pl>!<ResSve.fem>++Sentence@1.s!<ResSve.cnum<ResSve.pl>>!<ResSve.fem>!<ResSve.pl>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.cnum<ResSve.pl>>!<ResSve.fem>!<ResSve.pl>!<ResSve.masc>++Sentence@1.s!<ResSve.cnum<ResSve.pl>>!<ResSve.fem>!<ResSve.pl>!<ResSve.masc>};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.cnum<ResSve.pl>>!<ResSve.fem>!<ResSve.sg>!<ResSve.fem>++Sentence@1.s!<ResSve.cnum<ResSve.pl>>!<ResSve.fem>!<ResSve.sg>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.cnum<ResSve.pl>>!<ResSve.fem>!<ResSve.sg>!<ResSve.masc>++Sentence@1.s!<ResSve.cnum<ResSve.pl>>!<ResSve.fem>!<ResSve.sg>!<ResSve.masc>}};(ResSve.masc)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.cnum<ResSve.pl>>!<ResSve.masc>!<ResSve.pl>!<ResSve.fem>++Sentence@1.s!<ResSve.cnum<ResSve.pl>>!<ResSve.masc>!<ResSve.pl>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.cnum<ResSve.pl>>!<ResSve.masc>!<ResSve.pl>!<ResSve.masc>++Sentence@1.s!<ResSve.cnum<ResSve.pl>>!<ResSve.masc>!<ResSve.pl>!<ResSve.masc>};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.cnum<ResSve.pl>>!<ResSve.masc>!<ResSve.sg>!<ResSve.fem>++Sentence@1.s!<ResSve.cnum<ResSve.pl>>!<ResSve.masc>!<ResSve.sg>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.cnum<ResSve.pl>>!<ResSve.masc>!<ResSve.sg>!<ResSve.masc>++Sentence@1.s!<ResSve.cnum<ResSve.pl>>!<ResSve.masc>!<ResSve.sg>!<ResSve.masc>}}};(ResSve.cnum(ResSve.sg))=>table ResSve.Sex{(ResSve.fem)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.cnum<ResSve.sg>>!<ResSve.fem>!<ResSve.pl>!<ResSve.fem>++Sentence@1.s!<ResSve.cnum<ResSve.sg>>!<ResSve.fem>!<ResSve.pl>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.cnum<ResSve.sg>>!<ResSve.fem>!<ResSve.pl>!<ResSve.masc>++Sentence@1.s!<ResSve.cnum<ResSve.sg>>!<ResSve.fem>!<ResSve.pl>!<ResSve.masc>};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.cnum<ResSve.sg>>!<ResSve.fem>!<ResSve.sg>!<ResSve.fem>++Sentence@1.s!<ResSve.cnum<ResSve.sg>>!<ResSve.fem>!<ResSve.sg>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.cnum<ResSve.sg>>!<ResSve.fem>!<ResSve.sg>!<ResSve.masc>++Sentence@1.s!<ResSve.cnum<ResSve.sg>>!<ResSve.fem>!<ResSve.sg>!<ResSve.masc>}};(ResSve.masc)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.cnum<ResSve.sg>>!<ResSve.masc>!<ResSve.pl>!<ResSve.fem>++Sentence@1.s!<ResSve.cnum<ResSve.sg>>!<ResSve.masc>!<ResSve.pl>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.cnum<ResSve.sg>>!<ResSve.masc>!<ResSve.pl>!<ResSve.masc>++Sentence@1.s!<ResSve.cnum<ResSve.sg>>!<ResSve.masc>!<ResSve.pl>!<ResSve.masc>};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.cnum<ResSve.sg>>!<ResSve.masc>!<ResSve.sg>!<ResSve.fem>++Sentence@1.s!<ResSve.cnum<ResSve.sg>>!<ResSve.masc>!<ResSve.sg>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.cnum<ResSve.sg>>!<ResSve.masc>!<ResSve.sg>!<ResSve.masc>++Sentence@1.s!<ResSve.cnum<ResSve.sg>>!<ResSve.masc>!<ResSve.sg>!<ResSve.masc>}}};(ResSve.depnum)=>table ResSve.Sex{(ResSve.fem)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.depnum>!<ResSve.fem>!<ResSve.pl>!<ResSve.fem>++Sentence@1.s!<ResSve.depnum>!<ResSve.fem>!<ResSve.pl>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.depnum>!<ResSve.fem>!<ResSve.pl>!<ResSve.masc>++Sentence@1.s!<ResSve.depnum>!<ResSve.fem>!<ResSve.pl>!<ResSve.masc>};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.depnum>!<ResSve.fem>!<ResSve.sg>!<ResSve.fem>++Sentence@1.s!<ResSve.depnum>!<ResSve.fem>!<ResSve.sg>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.depnum>!<ResSve.fem>!<ResSve.sg>!<ResSve.masc>++Sentence@1.s!<ResSve.depnum>!<ResSve.fem>!<ResSve.sg>!<ResSve.masc>}};(ResSve.masc)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.depnum>!<ResSve.masc>!<ResSve.pl>!<ResSve.fem>++Sentence@1.s!<ResSve.depnum>!<ResSve.masc>!<ResSve.pl>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.depnum>!<ResSve.masc>!<ResSve.pl>!<ResSve.masc>++Sentence@1.s!<ResSve.depnum>!<ResSve.masc>!<ResSve.pl>!<ResSve.masc>};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!<ResSve.depnum>!<ResSve.masc>!<ResSve.sg>!<ResSve.fem>++Sentence@1.s!<ResSve.depnum>!<ResSve.masc>!<ResSve.sg>!<ResSve.fem>;(ResSve.masc)=>Mode@0.s!<ResSve.depnum>!<ResSve.masc>!<ResSve.sg>!<ResSve.masc>++Sentence@1.s!<ResSve.depnum>!<ResSve.masc>!<ResSve.sg>!<ResSve.masc>}}}}};"Mode_0 Sentence_1";
lin Mother:Letter.Author=\->{s=table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"Mamma"}};n=<ResSve.cnum<ResSve.sg>>;x=<ResSve.fem>};"Mamma";
lin Name:Letter.Author=\String@0->{s=table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>String@0.s}};n=<ResSve.cnum<ResSve.sg>>;x=<ResSve.masc>};"String_0";
lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResSve.sg>;x=<ResSve.masc>};"String_0";
lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResSve.sg>;x=<ResSve.fem>};"String_0";
lincat NounPhrase={s:Str;n:ResSve.Num;g:ResSve.Gen}={s=str@0;n=<ResSve.sg>;g=<ResSve.en>};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{s="vÃ¥ra"++"kunder";n=<ResSve.pl>;g=<ResSve.en>};"våra kunder";
lin PlainRec:Letter.Heading=\Recipient@0->{s=Recipient@0.s;n=Recipient@0.n;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{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>str@0}}};"Position";
lin President:Letter.Author=\->{s=table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"Presidenten"}};n=<ResSve.cnum<ResSve.sg>>;x=<ResSve.masc>};"Presidenten";
lin ProjectManager:Letter.Position=\->{s=table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"projektchef"};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"projektchefer"}}};"projektchef";
lincat Recipient={s:Str;n:ResSve.Num;x:ResSve.Sex}={s=str@0;n=<ResSve.sg>;x=<ResSve.masc>};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResSve.DepNum{(ResSve.cnum(ResSve.sg))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"jag"++("mÃ¥ste"++("tyvärr"++"meddela")++("dig"++"att"))};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"jag"++("mÃ¥ste"++("tyvärr"++"meddela")++("er"++"att"))}}};(ResSve.depnum)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"jag"++("mÃ¥ste"++("tyvärr"++"meddela")++("dig"++"att"))};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"vi"++("mÃ¥ste"++("tyvärr"++"meddela")++("er"++"att"))}}};(ResSve.cnum(ResSve.pl))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"vi"++("mÃ¥ste"++("tyvärr"++"meddela")++("dig"++"att"))};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"vi"++("mÃ¥ste"++("tyvärr"++"meddela")++("er"++"att"))}}}}};"jag (måste tyvärr meddela)dig att";
lin Senior:Letter.Position=\->{s=table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"äldre"++"forskare"}}};"äldre forskare";
lincat Sentence={s:(ResSve.DepNum=>(ResSve.Sex=>(ResSve.Num=>(ResSve.Sex=>Str))))}={s=table ResSve.DepNum{(ResSve.depnum)(ResSve.cnum(ResSve.sg))(ResSve.cnum(ResSve.pl))=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{s=table ResSve.Num{(ResSve.sg)=>table ResSve.Sex{(ResSve.masc)=>"din"++"hustru";(ResSve.fem)=>"din"++"man"};(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)=>"era"++"hustrur";(ResSve.fem)=>"era"++"män"}};n=<ResSve.depnum>;x=<ResSve.masc>};"din hustru";
}
resource ResFra = {
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 ;
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 English of Letter = open ResEng in {
flags modulesize = n42 ;
flags startcat = Letter ;
flags lexer = textlit ;
flags unlexer = textlit ;
lincat Author = {s : (ResEng.Num => (ResEng.Sex => Str)) ;n : ResEng.DepNum ;x : ResEng.Sex }= {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }} ;n = <ResEng.depnum>;x = <ResEng.masc>} ;"Author" ;
lin BePromoted : Letter.Sentence = \ Position @ 0 -> {s = table ResEng.DepNum {(ResEng.depnum)(ResEng.cnum (ResEng.sg)) (ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! <ResEng.sg>! <ResEng.masc>}}}}} ;"(you have been promoted to)Position_0" ;
lin ColleagueHe : Letter.Recipient = \ -> {s = "colleague" ;n = <ResEng.sg>;x = <ResEng.masc>} ;"colleague" ;
lin ColleagueShe : Letter.Recipient = \ -> {s = "colleague" ;n = <ResEng.sg>;x = <ResEng.fem>} ;"colleague" ;
lin ColleaguesHe : Letter.Recipient = \ -> {s = "colleagues" ;n = <ResEng.pl>;x = <ResEng.masc>} ;"colleagues" ;
lin ColleaguesShe : Letter.Recipient = \ -> {s = "colleagues" ;n = <ResEng.pl>;x = <ResEng.fem>} ;"colleagues" ;
lin Company : Letter.NounPhrase = \ -> {s = "our" ++ "company" ;n = <ResEng.sg>} ;"our company" ;
lin Competitor : Letter.NounPhrase = \ -> {s = "our" ++ ("worst" ++ "competitor");n = <ResEng.sg>} ;"our worst competitor" ;
lin DarlingHe : Letter.Recipient = \ -> {s = "darling" ;n = <ResEng.sg>;x = <ResEng.masc>} ;"darling" ;
lin DarlingShe : Letter.Recipient = \ -> {s = "darling" ;n = <ResEng.sg>;x = <ResEng.fem>} ;"darling" ;
lin Dean : Letter.Author = \ -> {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "the" ++ "Dean" }} ;n = <ResEng.cnum <ResEng.sg>> ;x = <ResEng.masc>} ;"the Dean" ;
lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = "Dear" ++ Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Dear Recipient_0" ;
lincat Ending = {s : (ResEng.Num => (ResEng.Sex => Str)) ;n : ResEng.DepNum ;x : ResEng.Sex }= {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }} ;n = <ResEng.depnum>;x = <ResEng.masc>} ;"Ending" ;
lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> "Sincerely" ++ ("yours" ++ "&-")++ Author @ 0.s ! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> "Sincerely" ++ ("yours" ++ "&-")++ Author @ 0.s ! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "Sincerely" ++ ("yours" ++ "&-")++ Author @ 0.s ! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> "Sincerely" ++ ("yours" ++ "&-")++ Author @ 0.s ! <ResEng.sg>! <ResEng.masc>}} ;n = Author @ 0.n ;x = Author @ 0.x } ;"(Sincerely yours &-)Author_0" ;
lin GoBankrupt : Letter.Sentence = \ NounPhrase @ 0 -> {s = table ResEng.DepNum {(ResEng.depnum)(ResEng.cnum (ResEng.sg)) (ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> NounPhrase @ 0.s ++ (table ResEng.Num {(ResEng.sg)=> "has" ;(ResEng.pl)=> "have" }! (NounPhrase @ 0.n)++ ("gone" ++ "bankrupt")) }}}}} ;"NounPhrase_0 has gone bankrupt" ;
lincat Heading = {s : Str ;n : ResEng.Num ;x : ResEng.Sex }= {s = str @ 0 ;n = <ResEng.sg>;x = <ResEng.masc>} ;"Heading" ;
lin HelloRec : Letter.Heading = \ Recipient @ 0 -> {s = "Hello" ++ Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Hello Recipient_0" ;
lin Honour : Letter.Mode = \ -> {s = table ResEng.DepNum {(ResEng.depnum)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("have" ++ ("the" ++ ("honour" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))) } ;(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("have" ++ ("the" ++ ("honour" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))) }}} ;(ResEng.cnum (ResEng.sg)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("have" ++ ("the" ++ ("honour" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))) }}} ;(ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("have" ++ ("the" ++ ("honour" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))) }}}}} ;"I have the honour to inform you that" ;
lin ILoveYou : Letter.Sentence = \ -> {s = table ResEng.DepNum {(ResEng.depnum)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("love" ++ "you")} ;(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("love" ++ "you")}}} ;(ResEng.cnum (ResEng.sg)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("love" ++ "you")}}} ;(ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("love" ++ "you")}}}}} ;"I love you" ;
lin InformalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> "With" ++ ("best" ++ ("regards" ++ "&-")) ++ Author @ 0.s ! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> "With" ++ ("best" ++ ("regards" ++ "&-")) ++ Author @ 0.s ! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "With" ++ ("best" ++ ("regards" ++ "&-")) ++ Author @ 0.s ! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> "With" ++ ("best" ++ ("regards" ++ "&-")) ++ Author @ 0.s ! <ResEng.sg>! <ResEng.masc>}} ;n = Author @ 0.n ;x = Author @ 0.x } ;"(With best regards &-)Author_0" ;
lin JustHello : Letter.Heading = \ Recipient @ 0 -> {s = "Hello" ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Hello" ;
lincat Letter = {s : Str }= {s = str @ 0 } ;"Letter" ;
lincat Message = {s : (ResEng.DepNum => (ResEng.Sex => (ResEng.Num => (ResEng.Sex => Str)))) }= {s = table ResEng.DepNum {(ResEng.depnum)(ResEng.cnum (ResEng.sg)) (ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> 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 {(ResEng.depnum)(ResEng.cnum (ResEng.sg)) (ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }}}}} ;"Mode" ;
lin ModeSent : Letter.Message = \ Mode @ 0, Sentence @ 1 -> {s = table ResEng.DepNum {(ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.fem)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>}} ;(ResEng.masc)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.pl>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.masc>}}} ;(ResEng.cnum (ResEng.sg)) => table ResEng.Sex {(ResEng.fem)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>}} ;(ResEng.masc)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.cnum <ResEng.sg>> ! <ResEng.masc>! <ResEng.sg>! <ResEng.masc>}}} ;(ResEng.depnum)=> table ResEng.Sex {(ResEng.fem)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.fem>! <ResEng.sg>! <ResEng.masc>}} ;(ResEng.masc)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.pl>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.pl>! <ResEng.masc>} ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>++ Sentence @ 1.s ! <ResEng.depnum>! <ResEng.masc>! <ResEng.sg>! <ResEng.fem>;(ResEng.masc)=> Mode @ 0.s ! <ResEng.depnum>! <ResEng.masc>Line truncated
lin Mother : Letter.Author = \ -> {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "Mom" }} ;n = <ResEng.cnum <ResEng.sg>> ;x = <ResEng.fem>} ;"Mom" ;
lin Name : Letter.Author = \ String @ 0 -> {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> String @ 0.s }} ;n = <ResEng.cnum <ResEng.sg>> ;x = <ResEng.masc>} ;"String_0" ;
lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResEng.sg>;x = <ResEng.masc>} ;"String_0" ;
lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = <ResEng.sg>;x = <ResEng.fem>} ;"String_0" ;
lincat NounPhrase = {s : Str ;n : ResEng.Num }= {s = str @ 0 ;n = <ResEng.sg>} ;"NounPhrase" ;
lin OurCustomers : Letter.NounPhrase = \ -> {s = "our" ++ "customers" ;n = <ResEng.pl>} ;"our customers" ;
lin PlainRec : Letter.Heading = \ Recipient @ 0 -> {s = Recipient @ 0.s ;n = Recipient @ 0.n ;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 {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }}} ;"Position" ;
lin President : Letter.Author = \ -> {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "the" ++ "President" }} ;n = <ResEng.cnum <ResEng.sg>> ;x = <ResEng.masc>} ;"the President" ;
lin ProjectManager : Letter.Position = \ -> {s = table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "a" ++ ("project" ++ "manager")} ;(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "project" ++ "managers" }}} ;"a project manager" ;
lincat Recipient = {s : Str ;n : ResEng.Num ;x : ResEng.Sex }= {s = str @ 0 ;n = <ResEng.sg>;x = <ResEng.masc>} ;"Recipient" ;
lin Regret : Letter.Mode = \ -> {s = table ResEng.DepNum {(ResEng.depnum)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("am" ++ ("sorry" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))} ;(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("are" ++ ("sorry" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))}}} ;(ResEng.cnum (ResEng.sg)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "I" ++ ("am" ++ ("sorry" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))}}} ;(ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "we" ++ ("are" ++ ("sorry" ++ ("to" ++ ("inform" ++ ("you" ++ "that")))))}}}}} ;"I am sorry to inform you that" ;
lin Senior : Letter.Position = \ -> {s = table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "a" ++ ("senior" ++ "fellow")} ;(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "senior" ++ "fellows" }}} ;"a senior fellow" ;
lincat Sentence = {s : (ResEng.DepNum => (ResEng.Sex => (ResEng.Num => (ResEng.Sex => Str)))) }= {s = table ResEng.DepNum {(ResEng.depnum)(ResEng.cnum (ResEng.sg)) (ResEng.cnum (ResEng.pl)) => table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> str @ 0 }}}}} ;"Sentence" ;
lin Spouse : Letter.Author = \ -> {s = table ResEng.Num {(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "your" ++ "husband" ;(ResEng.masc)=> "your" ++ "wife" } ;(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> "your" ++ "husbands" ;(ResEng.masc)=> "your" ++ "wives" }} ;n = <ResEng.depnum>;x = <ResEng.masc>} ;"your wife" ;
concrete French of Letter=open ResFra in{flags coding=utf8;flags modulesize=n42;flags startcat=Letter;flags lexer=textlit;flags unlexer=textlit;lincat Author={s:(ResFra.Num=>(ResFra.Gen=>Str));n:ResFra.DepNum;g:ResFra.DepGen}={s=table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>str@0}};n=<ResFra.depnum>;g=<ResFra.depgen>};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResFra.DepNum{(ResFra.depnum)(ResFra.cnum(ResFra.sg))(ResFra.cnum(ResFra.pl))=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>"vous"++("avez"++"été")++("promues"++Position@0.s!<ResFra.pl>!<ResFra.fem>);(ResFra.masc)=>"vous"++("avez"++"été")++("promus"++Position@0.s!<ResFra.pl>!<ResFra.masc>)};(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)=>"tu"++("as"++"été")++("promu"++Position@0.s!<ResFra.sg>!<ResFra.masc>);(ResFra.fem)=>"tu"++("as"++"été")++("promue"++Position@0.s!<ResFra.sg>!<ResFra.fem>)}}}}};"(tu as été)promu Position_0";
lin ColleagueHe:Letter.Recipient=\->{s="collègue";n=<ResFra.sg>;g=<ResFra.masc>};"collègue";
lin ColleagueShe:Letter.Recipient=\->{s="collègue";n=<ResFra.sg>;g=<ResFra.fem>};"collègue";
lin ColleaguesHe:Letter.Recipient=\->{s="collègues";n=<ResFra.pl>;g=<ResFra.masc>};"collègues";
lin ColleaguesShe:Letter.Recipient=\->{s="collègues";n=<ResFra.pl>;g=<ResFra.fem>};"collègues";
lin Company:Letter.NounPhrase=\->{s="notre"++"entreprise";n=<ResFra.sg>;g=<ResFra.fem>};"notre entreprise";
lin Competitor:Letter.NounPhrase=\->{s="notre"++("pire"++"compétiteur");n=<ResFra.sg>;g=<ResFra.masc>};"notre pire compétiteur";
lin DarlingHe:Letter.Recipient=\->{s="chéri";n=<ResFra.sg>;g=<ResFra.masc>};"chéri";
lin DarlingShe:Letter.Recipient=\->{s="chérie";n=<ResFra.sg>;g=<ResFra.fem>};"chérie";
lin Dean:Letter.Author=\->{s=table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"le"++"doyen"}};n=<ResFra.cnum<ResFra.sg>>;g=<ResFra.cgen<ResFra.masc>>};"le doyen";
lin DearRec:Letter.Heading=\Recipient@0->{s=table ResFra.Num{(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)=>"cher";(ResFra.fem)=>"chère"}!(Recipient@0.g);(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)=>"chers";(ResFra.fem)=>"chères"}!(Recipient@0.g)}!(Recipient@0.n)++Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"cher Recipient_0";
lincat Ending={s:(ResFra.Num=>(ResFra.Gen=>Str));n:ResFra.DepNum;g:ResFra.DepGen}={s=table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>str@0}};n=<ResFra.depnum>;g=<ResFra.depgen>};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{s=table ResFra.Num{(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>"avec"++(table ResFra.Num{(ResFra.sg)=>"mes";(ResFra.pl)=>"nos"}!(table ResFra.DepNum{(ResFra.cnum(ResFra.pl))=><ResFra.pl>;(ResFra.depnum)(ResFra.cnum(ResFra.sg))=><ResFra.sg>}!(Author@0.n))++("salutations"++("distinguées"++"&-")++Author@0.s!<ResFra.sg>!<ResFra.fem>));(ResFra.masc)=>"avec"++(table ResFra.Num{(ResFra.sg)=>"mes";(ResFra.pl)=>"nos"}!(table ResFra.DepNum{(ResFra.cnum(ResFra.pl))=><ResFra.pl>;(ResFra.depnum)(ResFra.cnum(ResFra.sg))=><ResFra.sg>}!(Author@0.n))++("salutations"++("distinguées"++"&-")++Author@0.s!<ResFra.sg>!<ResFra.masc>))};(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>"avec"++(table ResFra.Num{(ResFra.sg)=>"mes";(ResFra.pl)=>"nos"}!(table ResFra.DepNum{(ResFra.depnum)(ResFra.cnum(ResFra.pl))=><ResFra.pl>;(ResFra.cnum(ResFra.sg))=><ResFra.sg>}!(Author@0.n))++("salutations"++("distinguées"++"&-")++Author@0.s!<ResFra.pl>!<ResFra.fem>));(ResFra.masc)=>"avec"++(table ResFra.Num{(ResFra.sg)=>"mes";(ResFra.pl)=>"nos"}!(table ResFra.DepNum{(ResFra.depnum)(ResFra.cnum(ResFra.pl))=><ResFra.pl>;(ResFra.cnum(ResFra.sg))=><ResFra.sg>}!(Author@0.n))++("salutations"++("distinguées"++"&-")++Author@0.s!<ResFra.pl>!<ResFra.masc>))}};n=Author@0.n;g=Author@0.g};"avec mes (salutations distinguées &-)Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResFra.DepNum{(ResFra.depnum)(ResFra.cnum(ResFra.sg))(ResFra.cnum(ResFra.pl))=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>NounPhrase@0.s++(table ResFra.Num{(ResFra.sg)=>"a";(ResFra.pl)=>"ont"}!(NounPhrase@0.n)++("fait"++"banqueroute"))}}}}};"NounPhrase_0 a fait banqueroute";
lincat Heading={s:Str;n:ResFra.Num;g:ResFra.Gen}={s=str@0;n=<ResFra.sg>;g=<ResFra.masc>};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{s="Bonjour"++Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"Bonjour Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResFra.DepNum{(ResFra.cnum(ResFra.pl))=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"nous"++"avons"++("l'honneur"++"de"++("vous"++"informer"++"que"))};(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"nous"++"avons"++("l'honneur"++"de"++("t'informer"++"que"))}}};(ResFra.depnum)=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"nous"++"avons"++("l'honneur"++"de"++("vous"++"informer"++"que"))};(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"j'ai"++("l'honneur"++"de"++("t'informer"++"que"))}}};(ResFra.cnum(ResFra.sg))=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"j'ai"++("l'honneur"++"de"++("vous"++"informer"++"que"))};(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"j'ai"++("l'honneur"++"de"++("t'informer"++"que"))}}}}};"j'ai (l'honneur de)t'informer que";
lin ILoveYou:Letter.Sentence=\->{s=table ResFra.DepNum{(ResFra.cnum(ResFra.sg))=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"je"++("vous"++"aime")};(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"je"++"t'aime"}}};(ResFra.cnum(ResFra.pl))=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"nous"++("vous"++"aimons")};(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"nous"++"t'aimons"}}};(ResFra.depnum)=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"je"++"t'aime"};(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"nous"++("vous"++"aimons")}}}}};"je t'aime";
lin InformalEnding:Letter.Ending=\Author@0->{s=table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>"Amicalement"++"&-"++Author@0.s!<ResFra.pl>!<ResFra.fem>;(ResFra.masc)=>"Amicalement"++"&-"++Author@0.s!<ResFra.pl>!<ResFra.masc>};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>"Amicalement"++"&-"++Author@0.s!<ResFra.sg>!<ResFra.fem>;(ResFra.masc)=>"Amicalement"++"&-"++Author@0.s!<ResFra.sg>!<ResFra.masc>}};n=Author@0.n;g=Author@0.g};"(Amicalement &-)Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{s="Bonjour";n=Recipient@0.n;g=Recipient@0.g};"Bonjour";
lincat Letter={s:Str}={s=str@0};"Letter";
lincat Message={s:(ResFra.DepNum=>(ResFra.DepGen=>(ResFra.Num=>(ResFra.Gen=>Str))))}={s=table ResFra.DepNum{(ResFra.depnum)(ResFra.cnum(ResFra.sg))(ResFra.cnum(ResFra.pl))=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>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{(ResFra.depnum)(ResFra.cnum(ResFra.sg))(ResFra.cnum(ResFra.pl))=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResFra.DepNum{(ResFra.cnum(ResFra.pl))=>table ResFra.DepGen{(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.fem>>!<ResFra.pl>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.fem>>!<ResFra.pl>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.fem>>!<ResFra.pl>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.fem>>!<ResFra.pl>!<ResFra.masc>};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.fem>>!<ResFra.sg>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.fem>>!<ResFra.sg>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.fem>>!<ResFra.sg>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.fem>>!<ResFra.sg>!<ResFra.masc>}};(ResFra.cgen(ResFra.masc))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.masc>>!<ResFra.pl>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.masc>>!<ResFra.pl>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.masc>>!<ResFra.pl>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.masc>>!<ResFra.pl>!<ResFra.masc>};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.masc>>!<ResFra.sg>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.masc>>!<ResFra.sg>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.masc>>!<ResFra.sg>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.cgen<ResFra.masc>>!<ResFra.sg>!<ResFra.masc>}};(ResFra.depgen)=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.depgen>!<ResFra.pl>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.depgen>!<ResFra.pl>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.depgen>!<ResFra.pl>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.depgen>!<ResFra.pl>!<ResFra.masc>};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.depgen>!<ResFra.sg>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.depgen>!<ResFra.sg>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.pl>>!<ResFra.depgen>!<ResFra.sg>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.pl>>!<ResFra.depgen>!<ResFra.sg>!<ResFra.masc>}}};(ResFra.cnum(ResFra.sg))=>table ResFra.DepGen{(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.fem>>!<ResFra.pl>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.fem>>!<ResFra.pl>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.fem>>!<ResFra.pl>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.fem>>!<ResFra.pl>!<ResFra.masc>};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.fem>>!<ResFra.sg>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.fem>>!<ResFra.sg>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.fem>>!<ResFra.sg>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.fem>>!<ResFra.sg>!<ResFra.masc>}};(ResFra.cgen(ResFra.masc))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.masc>>!<ResFra.pl>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.masc>>!<ResFra.pl>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.masc>>!<ResFra.pl>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.masc>>!<ResFra.pl>!<ResFra.masc>};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.masc>>!<ResFra.sg>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.masc>>!<ResFra.sg>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.masc>>!<ResFra.sg>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.sg>>!<ResFra.cgen<ResFra.masc>>!<ResFra.sg>!<ResFra.masc>}};(ResFra.depgen)=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.depgen>!<ResFra.pl>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.sg>>!<ResFra.depgen>!<ResFra.pl>!<ResFra.fem>;(ResFra.masc)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.depgen>!<ResFra.pl>!<ResFra.masc>++Sentence@1.s!<ResFra.cnum<ResFra.sg>>!<ResFra.depgen>!<ResFra.pl>!<ResFra.masc>};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!<ResFra.cnum<ResFra.sg>>!<ResFra.depgen>!<ResFra.sg>!<ResFra.fem>++Sentence@1.s!<ResFra.cnum<ResFra.sg>Line truncated
lin Mother:Letter.Author=\->{s=table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"maman"}};n=<ResFra.cnum<ResFra.sg>>;g=<ResFra.cgen<ResFra.fem>>};"maman";
lin Name:Letter.Author=\String@0->{s=table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>String@0.s}};n=<ResFra.cnum<ResFra.sg>>;g=<ResFra.cgen<ResFra.masc>>};"String_0";
lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResFra.sg>;g=<ResFra.masc>};"String_0";
lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResFra.sg>;g=<ResFra.fem>};"String_0";
lincat NounPhrase={s:Str;n:ResFra.Num;g:ResFra.Gen}={s=str@0;n=<ResFra.sg>;g=<ResFra.masc>};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{s="nos"++"clients";n=<ResFra.pl>;g=<ResFra.masc>};"nos clients";
lin PlainRec:Letter.Heading=\Recipient@0->{s=Recipient@0.s;n=Recipient@0.n;g=Recipient@0.g};"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{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>str@0}}};"Position";
lin President:Letter.Author=\->{s=table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"le"++"président"}};n=<ResFra.cnum<ResFra.sg>>;g=<ResFra.cgen<ResFra.masc>>};"le président";
lin ProjectManager:Letter.Position=\->{s=table ResFra.Num{(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"chef"++("de"++"projet")};(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"chefs"++("de"++"projets")}}};"chef de projet";
lincat Recipient={s:Str;n:ResFra.Num;g:ResFra.Gen}={s=str@0;n=<ResFra.sg>;g=<ResFra.masc>};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResFra.DepNum{(ResFra.depnum)=>table ResFra.DepGen{(ResFra.depgen)=>table ResFra.Num{(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>"je"++"suis"++("désolé"++("d'informer"++"que"));(ResFra.masc)=>"je"++"suis"++("désolée"++("d'informer"++"que"))};(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)=>"nous"++"sommes"++("désolées"++("d'informer"++"que"));(ResFra.fem)=>"nous"++"sommes"++("désolés"++("d'informer"++"que"))}};(ResFra.cgen(ResFra.masc))=>table ResFra.Num{(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"je"++"suis"++("désolé"++("d'informer"++"que"))};(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"nous"++"sommes"++("désolés"++("d'informer"++"que"))}};(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"je"++"suis"++("désolée"++("d'informer"++"que"))};(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"nous"++"sommes"++("désolées"++("d'informer"++"que"))}}};(ResFra.cnum(ResFra.sg))=>table ResFra.DepGen{(ResFra.depgen)=>table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>"je"++"suis"++("désolé"++("d'informer"++"que"));(ResFra.masc)=>"je"++"suis"++("désolée"++("d'informer"++"que"))}};(ResFra.cgen(ResFra.masc))=>table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"je"++"suis"++("désolé"++("d'informer"++"que"))}};(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"je"++"suis"++("désolée"++("d'informer"++"que"))}}};(ResFra.cnum(ResFra.pl))=>table ResFra.DepGen{(ResFra.depgen)=>table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)=>"nous"++"sommes"++("désolées"++("d'informer"++"que"));(ResFra.fem)=>"nous"++"sommes"++("désolés"++("d'informer"++"que"))}};(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"nous"++"sommes"++("désolées"++("d'informer"++"que"))}};(ResFra.cgen(ResFra.masc))=>table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"nous"++"sommes"++("désolés"++("d'informer"++"que"))}}}}};"(je suis)désolée d'informer que";
lin Senior:Letter.Position=\->{s=table ResFra.Num{(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"responsable"++"scientifique"};(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"responsables"++"scientifiques"}}};"responsable scientifique";
lincat Sentence={s:(ResFra.DepNum=>(ResFra.DepGen=>(ResFra.Num=>(ResFra.Gen=>Str))))}={s=table ResFra.DepNum{(ResFra.depnum)(ResFra.cnum(ResFra.sg))(ResFra.cnum(ResFra.pl))=>table ResFra.DepGen{(ResFra.depgen)(ResFra.cgen(ResFra.masc))(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{s=table ResFra.Num{(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)=>"ta"++"femme";(ResFra.fem)=>"ton"++"mari"};(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)=>"vos"++"femmes";(ResFra.fem)=>"vos"++"maris"}};n=<ResFra.depnum>;g=<ResFra.depgen>};"ta femme";
}
resource ResEng = {
flags modulesize = n4 ;
param DepNum = depnum | cnum ResEng.Num ;
param Kas = nom | acc ;
param Num = sg | pl ;
param Sex = masc | fem ;
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;lincat Author={s:(ResEng.Num=>(ResEng.Sex=>Str));n:ResEng.DepNum;x:ResEng.Sex}={s=table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>str@0}};n=<ResEng.depnum>;x=<ResEng.masc>};"Author";
lin BePromoted:Letter.Sentence=\Position@0->{s=table ResEng.DepNum{(ResEng.depnum)(ResEng.cnum(ResEng.sg))(ResEng.cnum(ResEng.pl))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>"you"++("have"++("been"++("promoted"++"to")))++Position@0.s!<ResEng.pl>!<ResEng.fem>;(ResEng.masc)=>"you"++("have"++("been"++("promoted"++"to")))++Position@0.s!<ResEng.pl>!<ResEng.masc>};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>"you"++("have"++("been"++("promoted"++"to")))++Position@0.s!<ResEng.sg>!<ResEng.fem>;(ResEng.masc)=>"you"++("have"++("been"++("promoted"++"to")))++Position@0.s!<ResEng.sg>!<ResEng.masc>}}}}};"(you have been promoted to)Position_0";
lin ColleagueHe:Letter.Recipient=\->{s="colleague";n=<ResEng.sg>;x=<ResEng.masc>};"colleague";
lin ColleagueShe:Letter.Recipient=\->{s="colleague";n=<ResEng.sg>;x=<ResEng.fem>};"colleague";
lin ColleaguesHe:Letter.Recipient=\->{s="colleagues";n=<ResEng.pl>;x=<ResEng.masc>};"colleagues";
lin ColleaguesShe:Letter.Recipient=\->{s="colleagues";n=<ResEng.pl>;x=<ResEng.fem>};"colleagues";
lin Company:Letter.NounPhrase=\->{s="our"++"company";n=<ResEng.sg>};"our company";
lin Competitor:Letter.NounPhrase=\->{s="our"++("worst"++"competitor");n=<ResEng.sg>};"our worst competitor";
lin DarlingHe:Letter.Recipient=\->{s="darling";n=<ResEng.sg>;x=<ResEng.masc>};"darling";
lin DarlingShe:Letter.Recipient=\->{s="darling";n=<ResEng.sg>;x=<ResEng.fem>};"darling";
lin Dean:Letter.Author=\->{s=table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"the"++"Dean"}};n=<ResEng.cnum<ResEng.sg>>;x=<ResEng.masc>};"the Dean";
lin DearRec:Letter.Heading=\Recipient@0->{s="Dear"++Recipient@0.s;n=Recipient@0.n;x=Recipient@0.x};"Dear Recipient_0";
lincat Ending={s:(ResEng.Num=>(ResEng.Sex=>Str));n:ResEng.DepNum;x:ResEng.Sex}={s=table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>str@0}};n=<ResEng.depnum>;x=<ResEng.masc>};"Ending";
lin FormalEnding:Letter.Ending=\Author@0->{s=table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>"Sincerely"++("yours"++"&-")++Author@0.s!<ResEng.pl>!<ResEng.fem>;(ResEng.masc)=>"Sincerely"++("yours"++"&-")++Author@0.s!<ResEng.pl>!<ResEng.masc>};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>"Sincerely"++("yours"++"&-")++Author@0.s!<ResEng.sg>!<ResEng.fem>;(ResEng.masc)=>"Sincerely"++("yours"++"&-")++Author@0.s!<ResEng.sg>!<ResEng.masc>}};n=Author@0.n;x=Author@0.x};"(Sincerely yours &-)Author_0";
lin GoBankrupt:Letter.Sentence=\NounPhrase@0->{s=table ResEng.DepNum{(ResEng.depnum)(ResEng.cnum(ResEng.sg))(ResEng.cnum(ResEng.pl))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>NounPhrase@0.s++(table ResEng.Num{(ResEng.sg)=>"has";(ResEng.pl)=>"have"}!(NounPhrase@0.n)++("gone"++"bankrupt"))}}}}};"NounPhrase_0 has gone bankrupt";
lincat Heading={s:Str;n:ResEng.Num;x:ResEng.Sex}={s=str@0;n=<ResEng.sg>;x=<ResEng.masc>};"Heading";
lin HelloRec:Letter.Heading=\Recipient@0->{s="Hello"++Recipient@0.s;n=Recipient@0.n;x=Recipient@0.x};"Hello Recipient_0";
lin Honour:Letter.Mode=\->{s=table ResEng.DepNum{(ResEng.depnum)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"I"++("have"++("the"++("honour"++("to"++("inform"++("you"++"that"))))))};(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"we"++("have"++("the"++("honour"++("to"++("inform"++("you"++"that"))))))}}};(ResEng.cnum(ResEng.sg))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"I"++("have"++("the"++("honour"++("to"++("inform"++("you"++"that"))))))}}};(ResEng.cnum(ResEng.pl))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"we"++("have"++("the"++("honour"++("to"++("inform"++("you"++"that"))))))}}}}};"I have the honour to inform you that";
lin ILoveYou:Letter.Sentence=\->{s=table ResEng.DepNum{(ResEng.depnum)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"I"++("love"++"you")};(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"we"++("love"++"you")}}};(ResEng.cnum(ResEng.sg))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"I"++("love"++"you")}}};(ResEng.cnum(ResEng.pl))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"we"++("love"++"you")}}}}};"I love you";
lin InformalEnding:Letter.Ending=\Author@0->{s=table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>"With"++("best"++("regards"++"&-"))++Author@0.s!<ResEng.pl>!<ResEng.fem>;(ResEng.masc)=>"With"++("best"++("regards"++"&-"))++Author@0.s!<ResEng.pl>!<ResEng.masc>};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>"With"++("best"++("regards"++"&-"))++Author@0.s!<ResEng.sg>!<ResEng.fem>;(ResEng.masc)=>"With"++("best"++("regards"++"&-"))++Author@0.s!<ResEng.sg>!<ResEng.masc>}};n=Author@0.n;x=Author@0.x};"(With best regards &-)Author_0";
lin JustHello:Letter.Heading=\Recipient@0->{s="Hello";n=Recipient@0.n;x=Recipient@0.x};"Hello";
lincat Letter={s:Str}={s=str@0};"Letter";
lincat Message={s:(ResEng.DepNum=>(ResEng.Sex=>(ResEng.Num=>(ResEng.Sex=>Str))))}={s=table ResEng.DepNum{(ResEng.depnum)(ResEng.cnum(ResEng.sg))(ResEng.cnum(ResEng.pl))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>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{(ResEng.depnum)(ResEng.cnum(ResEng.sg))(ResEng.cnum(ResEng.pl))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>str@0}}}}};"Mode";
lin ModeSent:Letter.Message=\Mode@0,Sentence@1->{s=table ResEng.DepNum{(ResEng.cnum(ResEng.pl))=>table ResEng.Sex{(ResEng.fem)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.cnum<ResEng.pl>>!<ResEng.fem>!<ResEng.pl>!<ResEng.fem>++Sentence@1.s!<ResEng.cnum<ResEng.pl>>!<ResEng.fem>!<ResEng.pl>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.cnum<ResEng.pl>>!<ResEng.fem>!<ResEng.pl>!<ResEng.masc>++Sentence@1.s!<ResEng.cnum<ResEng.pl>>!<ResEng.fem>!<ResEng.pl>!<ResEng.masc>};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.cnum<ResEng.pl>>!<ResEng.fem>!<ResEng.sg>!<ResEng.fem>++Sentence@1.s!<ResEng.cnum<ResEng.pl>>!<ResEng.fem>!<ResEng.sg>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.cnum<ResEng.pl>>!<ResEng.fem>!<ResEng.sg>!<ResEng.masc>++Sentence@1.s!<ResEng.cnum<ResEng.pl>>!<ResEng.fem>!<ResEng.sg>!<ResEng.masc>}};(ResEng.masc)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.cnum<ResEng.pl>>!<ResEng.masc>!<ResEng.pl>!<ResEng.fem>++Sentence@1.s!<ResEng.cnum<ResEng.pl>>!<ResEng.masc>!<ResEng.pl>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.cnum<ResEng.pl>>!<ResEng.masc>!<ResEng.pl>!<ResEng.masc>++Sentence@1.s!<ResEng.cnum<ResEng.pl>>!<ResEng.masc>!<ResEng.pl>!<ResEng.masc>};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.cnum<ResEng.pl>>!<ResEng.masc>!<ResEng.sg>!<ResEng.fem>++Sentence@1.s!<ResEng.cnum<ResEng.pl>>!<ResEng.masc>!<ResEng.sg>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.cnum<ResEng.pl>>!<ResEng.masc>!<ResEng.sg>!<ResEng.masc>++Sentence@1.s!<ResEng.cnum<ResEng.pl>>!<ResEng.masc>!<ResEng.sg>!<ResEng.masc>}}};(ResEng.cnum(ResEng.sg))=>table ResEng.Sex{(ResEng.fem)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.cnum<ResEng.sg>>!<ResEng.fem>!<ResEng.pl>!<ResEng.fem>++Sentence@1.s!<ResEng.cnum<ResEng.sg>>!<ResEng.fem>!<ResEng.pl>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.cnum<ResEng.sg>>!<ResEng.fem>!<ResEng.pl>!<ResEng.masc>++Sentence@1.s!<ResEng.cnum<ResEng.sg>>!<ResEng.fem>!<ResEng.pl>!<ResEng.masc>};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.cnum<ResEng.sg>>!<ResEng.fem>!<ResEng.sg>!<ResEng.fem>++Sentence@1.s!<ResEng.cnum<ResEng.sg>>!<ResEng.fem>!<ResEng.sg>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.cnum<ResEng.sg>>!<ResEng.fem>!<ResEng.sg>!<ResEng.masc>++Sentence@1.s!<ResEng.cnum<ResEng.sg>>!<ResEng.fem>!<ResEng.sg>!<ResEng.masc>}};(ResEng.masc)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.cnum<ResEng.sg>>!<ResEng.masc>!<ResEng.pl>!<ResEng.fem>++Sentence@1.s!<ResEng.cnum<ResEng.sg>>!<ResEng.masc>!<ResEng.pl>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.cnum<ResEng.sg>>!<ResEng.masc>!<ResEng.pl>!<ResEng.masc>++Sentence@1.s!<ResEng.cnum<ResEng.sg>>!<ResEng.masc>!<ResEng.pl>!<ResEng.masc>};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.cnum<ResEng.sg>>!<ResEng.masc>!<ResEng.sg>!<ResEng.fem>++Sentence@1.s!<ResEng.cnum<ResEng.sg>>!<ResEng.masc>!<ResEng.sg>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.cnum<ResEng.sg>>!<ResEng.masc>!<ResEng.sg>!<ResEng.masc>++Sentence@1.s!<ResEng.cnum<ResEng.sg>>!<ResEng.masc>!<ResEng.sg>!<ResEng.masc>}}};(ResEng.depnum)=>table ResEng.Sex{(ResEng.fem)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.depnum>!<ResEng.fem>!<ResEng.pl>!<ResEng.fem>++Sentence@1.s!<ResEng.depnum>!<ResEng.fem>!<ResEng.pl>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.depnum>!<ResEng.fem>!<ResEng.pl>!<ResEng.masc>++Sentence@1.s!<ResEng.depnum>!<ResEng.fem>!<ResEng.pl>!<ResEng.masc>};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.depnum>!<ResEng.fem>!<ResEng.sg>!<ResEng.fem>++Sentence@1.s!<ResEng.depnum>!<ResEng.fem>!<ResEng.sg>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.depnum>!<ResEng.fem>!<ResEng.sg>!<ResEng.masc>++Sentence@1.s!<ResEng.depnum>!<ResEng.fem>!<ResEng.sg>!<ResEng.masc>}};(ResEng.masc)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.depnum>!<ResEng.masc>!<ResEng.pl>!<ResEng.fem>++Sentence@1.s!<ResEng.depnum>!<ResEng.masc>!<ResEng.pl>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.depnum>!<ResEng.masc>!<ResEng.pl>!<ResEng.masc>++Sentence@1.s!<ResEng.depnum>!<ResEng.masc>!<ResEng.pl>!<ResEng.masc>};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!<ResEng.depnum>!<ResEng.masc>!<ResEng.sg>!<ResEng.fem>++Sentence@1.s!<ResEng.depnum>!<ResEng.masc>!<ResEng.sg>!<ResEng.fem>;(ResEng.masc)=>Mode@0.s!<ResEng.depnum>!<ResEng.masc>!<ResEng.sg>!<ResEng.masc>++Sentence@1.s!<ResEng.depnum>!<ResEng.masc>!<ResEng.sg>!<ResEng.masc>}}}}};"Mode_0 Sentence_1";
lin Mother:Letter.Author=\->{s=table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"Mom"}};n=<ResEng.cnum<ResEng.sg>>;x=<ResEng.fem>};"Mom";
lin Name:Letter.Author=\String@0->{s=table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>String@0.s}};n=<ResEng.cnum<ResEng.sg>>;x=<ResEng.masc>};"String_0";
lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResEng.sg>;x=<ResEng.masc>};"String_0";
lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=<ResEng.sg>;x=<ResEng.fem>};"String_0";
lincat NounPhrase={s:Str;n:ResEng.Num}={s=str@0;n=<ResEng.sg>};"NounPhrase";
lin OurCustomers:Letter.NounPhrase=\->{s="our"++"customers";n=<ResEng.pl>};"our customers";
lin PlainRec:Letter.Heading=\Recipient@0->{s=Recipient@0.s;n=Recipient@0.n;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{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>str@0}}};"Position";
lin President:Letter.Author=\->{s=table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"the"++"President"}};n=<ResEng.cnum<ResEng.sg>>;x=<ResEng.masc>};"the President";
lin ProjectManager:Letter.Position=\->{s=table ResEng.Num{(ResEng.sg)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"a"++("project"++"manager")};(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"project"++"managers"}}};"a project manager";
lincat Recipient={s:Str;n:ResEng.Num;x:ResEng.Sex}={s=str@0;n=<ResEng.sg>;x=<ResEng.masc>};"Recipient";
lin Regret:Letter.Mode=\->{s=table ResEng.DepNum{(ResEng.depnum)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"I"++("am"++("sorry"++("to"++("inform"++("you"++"that")))))};(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"we"++("are"++("sorry"++("to"++("inform"++("you"++"that")))))}}};(ResEng.cnum(ResEng.sg))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"I"++("am"++("sorry"++("to"++("inform"++("you"++"that")))))}}};(ResEng.cnum(ResEng.pl))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"we"++("are"++("sorry"++("to"++("inform"++("you"++"that")))))}}}}};"I am sorry to inform you that";
lin Senior:Letter.Position=\->{s=table ResEng.Num{(ResEng.sg)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"a"++("senior"++"fellow")};(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"senior"++"fellows"}}};"a senior fellow";
lincat Sentence={s:(ResEng.DepNum=>(ResEng.Sex=>(ResEng.Num=>(ResEng.Sex=>Str))))}={s=table ResEng.DepNum{(ResEng.depnum)(ResEng.cnum(ResEng.sg))(ResEng.cnum(ResEng.pl))=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>str@0}}}}};"Sentence";
lin Spouse:Letter.Author=\->{s=table ResEng.Num{(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>"your"++"husband";(ResEng.masc)=>"your"++"wife"};(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>"your"++"husbands";(ResEng.masc)=>"your"++"wives"}};n=<ResEng.depnum>;x=<ResEng.masc>};"your wife";
}
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;
}
+1 -1
View File
@@ -30,7 +30,7 @@ For the actual use, type then
and select "Letter" from the "New" menu.
Copyright (c) 2001-2004 Janna Khegai, Aarne Ranta
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.
+212
View File
@@ -0,0 +1,212 @@
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 =>["מןהלי פרוייקט"]}
}
} ;
+3 -2
View File
@@ -1,13 +1,14 @@
-- to make a multilingual gfcm grammar for rapid loading. AR 29/1/2004
-- to run: gf2+ <mkLetter.gfs
-- 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 | wf Letter.gfcm
pm -utf8 | wf Letter.gfcm
+8 -118
View File
@@ -35,124 +35,7 @@ now up to date for version 2.4.
<p>
<font size="1">
<i>December 9, 2005</i>.
<a href="http://www.cs.chalmers.se/~peb/software.html">
MCFG/GF library for Prolog</a>, by
<a href="http://www.cs.chalmers.se/~peb/">Peter Ljunglöf</a>.
This means that you can use GF grammars as parts of
Prolog programs (in the same way as in Java and Haskell
before).
<br>
<i>December 8, 2005</i>.
A structured <a href="doc/index.html">Documentation page</a> on GF.
<br>
<i>December 1, 2005</i>.
Publicly accessible
<a href="http://www.cs.chalmers.se/Cs/Research/Language-technology/darcs/GF/doc/darcs.html">
Darcs repository</a>
for latest sources and documents. The snapshots are no longer updated.
<br>
<i>September 22, 2005</i>.
<a href="http://www.cs.chalmers.se/~bringert/gf/downloads/snapshots/">
Snapshots</a>: latest source and linux binary packages, for testers
and developers. See
<a href="http://www.cs.chalmers.se/Cs/Research/Language-technology/darcs/GF/doc/gf-history.html">GF history</a> for the latest changes.
<br>
<b>Notice</b> (1/12):
Use the
<a href="http://www.cs.chalmers.se/Cs/Research/Language-technology/darcs/GF/doc/darcs.html">
Darcs repository</a> instead!
<br>
<i>July 1, 2005</i>. GF 2.3 released.
Download from
<a href="http://sourceforge.net/project/showfiles.php?group_id=132285">SourceForge</a>.
The <a href="doc/gf-history.html">GF history</a> lists changes.
The source package on SourceForge also contains a new GUI and some new grammars.
<br>
<i>June 3, 2005</i>. Started a page on
<a href="doc/gf-history.html">history of changes</a>.
These changes will appear soon in releases.
<br>
<i>May 17, 2005</i>. Version 2.2 released. See
<a href="doc/gf2.2-highlights.html">highlights</a>.
Download from
<a href="http://sourceforge.net/project/showfiles.php?group_id=132285">SourceForge</a>.
<br>
<i>May 12, 2005</i>. GF now has a mailing list, to which you can register
<a href="https://lists.sourceforge.net/lists/listinfo/gf-tools-users">here</a>.
GF also has a project page on SourceForge,
<a
href="https://sourceforge.net/projects/gf-tools">
https://sourceforge.net/projects/gf-tools</a>,
but this page does not yet have much content.
<br>
<i>May 9, 2005</i>.
PhD Thesis by
<a href="http://www.cs.chalmers.se/~krijo">Kristofer Johannisson</a>:
<a href="http://www.cs.chalmers.se/~krijo/thesis/thesisA4.pdf">
Formal and Informal Software Specifications</a>.
<br>
<i>March 15, 2005</i>.
Master's thesis by
<a href="http://www.cs.chalmers.se/~bringert/">Björn Bringert</a> on
<a
href="http://www.dtek.chalmers.se/~d00bring/publ/exjobb/embedded-grammars.pdf">
Embedded grammars</a>:
GF grammars that can be used as parts of Java programs. And a
<a
href="http://www.cs.chalmers.se/~bringert/misc/tramdemo.avi">demo film</a>
of a multimodal dialogue system built with embedded grammars.
<br>
<i>November 9, 2004</i>.
PhD Thesis by
<a href="http://www.cs.chalmers.se/~peb">Peter Ljunglöf</a>:
<a href="http://www.cs.chalmers.se/~peb/pubs/p04-PhD-thesis.pdf">
Expressivity and Complexity of the Grammatical Framework</a>.
<br>
<i>November 8, 2004</i>. GF 2.1 released.
Here are the <a
href="doc/gf2-highlights.html">highlights</a>.
Software available on the <a href="../GF2.0/download/gf-download.html">GF 2.1 Download
Page</a>.
Main novelties in 2.1:
multiple inheritance of grammar modules,
speech recognition grammar generation,
lots of bug fixes.
Version 2.0 still available
on the <a href="../GF2.0/download-2.0/gf-download.html">GF 2.0 Download Page</a>.
If you need something from the previous version of the web page, it is
still available:
<a href="http://www.cs.chalmers.se/~aarne/GF1">
GF 1.2</a>.
</font>
<a href="doc/old-news.html">News 2004-2005</a>.
</p><h2>What is GF?</h2>
@@ -279,6 +162,13 @@ information on compiler requirements.
<p>
The publicly accessible
<a href="http://www.cs.chalmers.se/Cs/Research/Language-technology/darcs/GF/doc/darcs.html">
Darcs repository</a>
has the latest sources and documents.
<p>
For Java programmers: GF grammars can be embedded in Java programs by using the
<a href="http://www.cs.chalmers.se/~bringert/gf/gf-java.html">
Embedded GF Interpreter</a>.
+1 -1
View File
@@ -210,7 +210,7 @@ optionsOfCommand co = case co of
CPrintMultiGrammar -> both "utf8 utf8id" "printer"
CPrintSourceGrammar -> both "utf8" "printer"
CHelp _ -> opts "all defs filter length lexer unlexer printer transform depth number"
CHelp _ -> opts "all alts atoms coding defs filter length lexer unlexer printer probs transform depth number"
CImpure ICEditSession -> both "f" "file"
CImpure ICTranslateSession -> both "f langs" "cat"