From 19c57dbd29577ca06d05dbdd07f605e852169360 Mon Sep 17 00:00:00 2001 From: aarne Date: Thu, 22 Dec 2005 18:01:35 +0000 Subject: [PATCH] Hebrew Letter; news on index --- bin/jgf | 2 +- doc/gf-quickstart.html | 6 +- doc/old-news.html | 122 +++++++ examples/letter/Letter.gfcm | 639 +++++++++++++++++---------------- examples/letter/README | 2 +- examples/letter/letter.HebU.gf | 212 +++++++++++ examples/letter/mkLetter.gfs | 5 +- index.html | 126 +------ src/GF/Shell/ShellCommands.hs | 2 +- 9 files changed, 676 insertions(+), 440 deletions(-) create mode 100644 doc/old-news.html create mode 100644 examples/letter/letter.HebU.gf diff --git a/bin/jgf b/bin/jgf index 042b10f31..c4825ff58 100644 --- a/bin/jgf +++ b/bin/jgf @@ -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 diff --git a/doc/gf-quickstart.html b/doc/gf-quickstart.html index 696fcfd2b..40e860f45 100644 --- a/doc/gf-quickstart.html +++ b/doc/gf-quickstart.html @@ -29,9 +29,9 @@ When you have downloaded and installed GF:
  1. Copy the files -Paleolithic.gf, -PaleolithicEng.gf, and -PaleolithicIta.gf. +Paleolithic.gf, +PaleolithicEng.gf, and +PaleolithicIta.gf.
  2. Start GF with the command
    diff --git a/doc/old-news.html b/doc/old-news.html
    new file mode 100644
    index 000000000..ae5169484
    --- /dev/null
    +++ b/doc/old-news.html
    @@ -0,0 +1,122 @@
    +
    +
    +
    +
    +

    GF News 2004-2005

    + +December 9, 2005. + +MCFG/GF library for Prolog, by +Peter Ljunglöf. +This means that you can use GF grammars as parts of +Prolog programs (in the same way as in Java and Haskell +before). + +
    + +December 8, 2005. +A structured Documentation page on GF. + +
    + +December 1, 2005. +Publicly accessible + +Darcs repository +for latest sources and documents. The snapshots are no longer updated. + +
    + +September 22, 2005. + +Snapshots: latest source and linux binary packages, for testers +and developers. See +GF history for the latest changes. +
    +Notice (1/12): +Use the + +Darcs repository instead! + +
    + +July 1, 2005. GF 2.3 released. +Download from +SourceForge. +The GF history lists changes. +The source package on SourceForge also contains a new GUI and some new grammars. + +
    + +June 3, 2005. Started a page on +history of changes. +These changes will appear soon in releases. + +
    + +May 17, 2005. Version 2.2 released. See +highlights. +Download from +SourceForge. + +
    + +May 12, 2005. GF now has a mailing list, to which you can register +here. +GF also has a project page on SourceForge, + +https://sourceforge.net/projects/gf-tools, +but this page does not yet have much content. + +
    + +May 9, 2005. +PhD Thesis by +Kristofer Johannisson: + +Formal and Informal Software Specifications. + +
    + + +March 15, 2005. +Master's thesis by +Björn Bringert on + +Embedded grammars: +GF grammars that can be used as parts of Java programs. And a +demo film +of a multimodal dialogue system built with embedded grammars. + +
    + + +November 9, 2004. +PhD Thesis by +Peter Ljunglöf: + +Expressivity and Complexity of the Grammatical Framework. + +
    + +November 8, 2004. GF 2.1 released. +Here are the highlights. +Software available on the GF 2.1 Download +Page. +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 GF 2.0 Download Page. +If you need something from the previous version of the web page, it is +still available: + +GF 1.2. + + +<7html> \ No newline at end of file diff --git a/examples/letter/Letter.gfcm b/examples/letter/Letter.gfcm index 9c6579af7..da77a7585 100644 --- a/examples/letter/Letter.gfcm +++ b/examples/letter/Letter.gfcm @@ -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 = ;g = } ;"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.masc)=> "вы" ++ "были" ++ ("назначены" ++ Position @ 0.s ! ! ) } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.masc)=> "ты" ++ "был" ++ ("назначен" ++ Position @ 0.s ! ! ) ;(ResRusU.fem)=> "ты" ++ "была" ++ ("назначена" ++ Position @ 0.s ! ! ) }}}}} ;"(ты был)назначен Position_0" ; -lin ColleagueHe : Letter.Recipient = \ -> {s = "коллега" ;n = ;g = } ;"коллега" ; -lin ColleagueShe : Letter.Recipient = \ -> {s = "коллега" ;n = ;g = } ;"коллега" ; -lin ColleaguesHe : Letter.Recipient = \ -> {s = "коллеги" ;n = ;g = } ;"коллеги" ; -lin ColleaguesShe : Letter.Recipient = \ -> {s = "коллеги" ;n = ;g = } ;"коллеги" ; -lin Company : Letter.NounPhrase = \ -> {s = "наше" ++ "предприятие" ;n = ;g = } ;"наше предприятие" ; -lin Competitor : Letter.NounPhrase = \ -> {s = "наш" ++ "конкурент" ;n = ;g = } ;"наш конкурент" ; -lin DarlingHe : Letter.Recipient = \ -> {s = "любимый" ;n = ;g = } ;"любимый" ; -lin DarlingShe : Letter.Recipient = \ -> {s = "любимая" ;n = ;g = } ;"любимая" ; -lin Dean : Letter.Author = \ -> {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "декан" }} ;n = > ;g = > } ;"декан" ; -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 = ;g = } ;"Ending" ; -lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("наилучшими" ++ ("пожеланиями," ++ "&-")++ Author @ 0.s ! ! ) ;(ResRusU.masc)=> "С" ++ ("наилучшими" ++ ("пожеланиями," ++ "&-")++ Author @ 0.s ! ! ) } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("наилучшими" ++ ("пожеланиями," ++ "&-")++ Author @ 0.s ! ! ) ;(ResRusU.masc)=> "С" ++ ("наилучшими" ++ ("пожеланиями," ++ "&-")++ Author @ 0.s ! ! ) }} ;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 = ;g = } ;"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.masc)=> "С" ++ ("дружеским" ++ ("приветом," ++ "&-")) ++ Author @ 0.s ! ! } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> "С" ++ ("дружеским" ++ ("приветом," ++ "&-")) ++ Author @ 0.s ! ! ;(ResRusU.masc)=> "С" ++ ("дружеским" ++ ("приветом," ++ "&-")) ++ Author @ 0.s ! ! }} ;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 ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }}} ;(ResRusU.cnum (ResRusU.sg)) => table ResRusU.DepGen {(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResRusU.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }}} ;(ResRusU.depnum)=> table ResRusU.DepGen {(ResRusU.cgen (ResRusU.fem)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! }} ;(ResRusU.cgen (ResRusU.masc)) => table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResRusU.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! }} ;(ResRusU.depgen)=> table ResRusU.Num {(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResRusU.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! } ;(ResRusU.sg)=> table ResRusU.Gen {(ResRusU.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResRusU.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! }}}}} ;"Mode_0 Sentence_1" ; -lin Mother : Letter.Author = \ -> {s = table ResRusU.Num {(ResRusU.sg)(ResRusU.pl)=> table ResRusU.Gen {(ResRusU.masc)(ResRusU.fem)=> "мама" }} ;n = > ;g = > } ;"мама" ; -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 = > ;g = > } ;"String_0" ; -lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = ;g = } ;"String_0" ; -lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = ;g = } ;"String_0" ; -lincat NounPhrase = {s : Str ;n : ResRusU.Num ;g : ResRusU.Gen }= {s = str @ 0 ;n = ;g = } ;"NounPhrase" ; -lin OurCustomers : Letter.NounPhrase = \ -> {s = "наши" ++ "клиенты" ;n = ;g = } ;"наши клиенты" ; -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 = > ;g = > } ;"президент" ; -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 = ;g = } ;"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 = ;g = } ;"твоя жена" ; +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=;g=};"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.masc)=>"קודמת"++("לתפקיד"++("של"++Position@0.s!!))};(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)=>"קודמתם"++("לתפקיד"++("של"++Position@0.s!!));(ResHebU.fem)=>"קודמתן"++("לתפקיד"++("של"++Position@0.s!!))}}}}};"קודמת לתפקיד של Position_0"; +lin ColleagueHe:Letter.Recipient=\->{s="עמית";n=;g=};"עמית"; +lin ColleagueShe:Letter.Recipient=\->{s="עמיתה";n=;g=};"עמיתה"; +lin ColleaguesHe:Letter.Recipient=\->{s="עמיתים";n=;g=};"עמיתים"; +lin ColleaguesShe:Letter.Recipient=\->{s="עמיתות";n=;g=};"עמיתות"; +lin Company:Letter.NounPhrase=\->{s="חברתןו";n=;g=};"חברתןו"; +lin Competitor:Letter.NounPhrase=\->{s="המתחרה"++("הגרוע"++("ביותר"++"שלןו"));n=;g=};"המתחרה הגרוע ביותר שלןו"; +lin DarlingHe:Letter.Recipient=\->{s="אהובי";n=;g=};"אהובי"; +lin DarlingShe:Letter.Recipient=\->{s="אהובתי";n=;g=};"אהובתי"; +lin Dean:Letter.Author=\->{s=table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"דיקן"}};n=>;g=>};"דיקן"; +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=;g=};"Ending"; +lin FormalEnding:Letter.Ending=\Author@0->{s=table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>",בכבוד"++("רב"++"&-")++Author@0.s!!;(ResHebU.masc)=>",בכבוד"++("רב"++"&-")++Author@0.s!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>",בכבוד"++("רב"++"&-")++Author@0.s!!;(ResHebU.masc)=>",בכבוד"++("רב"++"&-")++Author@0.s!!}};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=;g=};"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.masc)=>",בברכה"++"&-"++Author@0.s!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>",בברכה"++"&-"++Author@0.s!!;(ResHebU.masc)=>",בברכה"++"&-"++Author@0.s!!}};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!>!>!!++Sentence@1.s!>!>!!;(ResHebU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResHebU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResHebU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResHebU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResHebU.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResHebU.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResHebU.cnum(ResHebU.sg))=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResHebU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResHebU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResHebU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResHebU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResHebU.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResHebU.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResHebU.depnum)=>table ResHebU.DepGen{(ResHebU.cgen(ResHebU.fem))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResHebU.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResHebU.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!}};(ResHebU.cgen(ResHebU.masc))=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResHebU.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResHebU.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!}};(ResHebU.depgen)=>table ResHebU.Num{(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResHebU.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!};(ResHebU.sg)=>table ResHebU.Gen{(ResHebU.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResHebU.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!}}}}};"Mode_0 Sentence_1"; +lin Mother:Letter.Author=\->{s=table ResHebU.Num{(ResHebU.sg)(ResHebU.pl)=>table ResHebU.Gen{(ResHebU.masc)(ResHebU.fem)=>"אמא"}};n=>;g=>};"אמא"; +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=>;g=>};"String_0"; +lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=;g=};"String_0"; +lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=;g=};"String_0"; +lincat NounPhrase={s:Str;n:ResHebU.Num;g:ResHebU.Gen}={s=str@0;n=;g=};"NounPhrase"; +lin OurCustomers:Letter.NounPhrase=\->{s="לקוחותיןו";n=;g=};"לקוחותיןו"; +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=>;g=>};"ןשיא"; +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=;g=};"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=;g=};"אישתך"; } -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 = ;g = } ;"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.masc)=> "sinut" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! ! ) } ;(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> "teidt" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! ! ) ;(ResFin.masc)=> "teidt" ++ "on" ++ ("ylennetty" ++ Position @ 0.s ! ! ) }}}}} ;"(sinut on)ylennetty Position_0" ; -lin ColleagueHe : Letter.Recipient = \ -> {s = "kollega" ;n = ;g = } ;"kollega" ; -lin ColleagueShe : Letter.Recipient = \ -> {s = "kollega" ;n = ;g = } ;"kollega" ; -lin ColleaguesHe : Letter.Recipient = \ -> {s = "kollegat" ;n = ;g = } ;"kollegat" ; -lin ColleaguesShe : Letter.Recipient = \ -> {s = "kollegat" ;n = ;g = } ;"kollegat" ; -lin Company : Letter.NounPhrase = \ -> {s = "yrityksemme" ;n = ;g = } ;"yrityksemme" ; -lin Competitor : Letter.NounPhrase = \ -> {s = "pahin" ++ "kilpailijamme" ;n = ;g = } ;"pahin kilpailijamme" ; -lin DarlingHe : Letter.Recipient = \ -> {s = "kulta" ;n = ;g = } ;"kulta" ; -lin DarlingShe : Letter.Recipient = \ -> {s = "kulta" ;n = ;g = } ;"kulta" ; -lin Dean : Letter.Author = \ -> {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "dekaani" }} ;n = > ;g = > } ;"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 = ;g = } ;"Ending" ; -lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> "parhain" ++ ("terveisin" ++ "&-")++ Author @ 0.s ! ! ;(ResFin.masc)=> "parhain" ++ ("terveisin" ++ "&-")++ Author @ 0.s ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> "parhain" ++ ("terveisin" ++ "&-")++ Author @ 0.s ! ! ;(ResFin.masc)=> "parhain" ++ ("terveisin" ++ "&-")++ Author @ 0.s ! ! }} ;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 = ;g = } ;"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.masc)=> "terveisin" ++ "&-" ++ Author @ 0.s ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> "terveisin" ++ "&-" ++ Author @ 0.s ! ! ;(ResFin.masc)=> "terveisin" ++ "&-" ++ Author @ 0.s ! ! }} ;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 ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResFin.cgen (ResFin.masc)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResFin.depgen)=> table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }}} ;(ResFin.cnum (ResFin.sg)) => table ResFin.DepGen {(ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResFin.cgen (ResFin.masc)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResFin.depgen)=> table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResFin.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }}} ;(ResFin.depnum)=> table ResFin.DepGen {(ResFin.cgen (ResFin.fem)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! }} ;(ResFin.cgen (ResFin.masc)) => table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResFin.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! }} ;(ResFin.depgen)=> table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResFin.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResFin.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! }}}}} ;"Mode_0 Sentence_1" ; -lin Mother : Letter.Author = \ -> {s = table ResFin.Num {(ResFin.sg)(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "iti" }} ;n = > ;g = > } ;"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 = > ;g = > } ;"String_0" ; -lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = ;g = } ;"String_0" ; -lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = ;g = } ;"String_0" ; -lincat NounPhrase = {s : Str ;n : ResFin.Num ;g : ResFin.Gen }= {s = str @ 0 ;n = ;g = } ;"NounPhrase" ; -lin OurCustomers : Letter.NounPhrase = \ -> {s = "asiakkaamme" ;n = ;g = } ;"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 = > ;g = > } ;"presidentti" ; -lin ProjectManager : Letter.Position = \ -> {s = table ResFin.Num {(ResFin.pl)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "projektipllikiksi" } ;(ResFin.sg)=> table ResFin.Gen {(ResFin.masc)(ResFin.fem)=> "projektipllikksi" }}} ;"projektipllikksi" ; -lincat Recipient = {s : Str ;n : ResFin.Num ;g : ResFin.Gen }= {s = str @ 0 ;n = ;g = } ;"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)=> "meidn" ++ ("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)=> "meidn" ++ ("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 = ;g = } ;"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=;g=};"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.masc)=>"вы"++"были"++("назначены"++Position@0.s!!)};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.masc)=>"ты"++"был"++("назначен"++Position@0.s!!);(ResRusU.fem)=>"ты"++"была"++("назначена"++Position@0.s!!)}}}}};"(ты был)назначен Position_0"; +lin ColleagueHe:Letter.Recipient=\->{s="коллега";n=;g=};"коллега"; +lin ColleagueShe:Letter.Recipient=\->{s="коллега";n=;g=};"коллега"; +lin ColleaguesHe:Letter.Recipient=\->{s="коллеги";n=;g=};"коллеги"; +lin ColleaguesShe:Letter.Recipient=\->{s="коллеги";n=;g=};"коллеги"; +lin Company:Letter.NounPhrase=\->{s="наше"++"предприятие";n=;g=};"наше предприятие"; +lin Competitor:Letter.NounPhrase=\->{s="наш"++"конкурент";n=;g=};"наш конкурент"; +lin DarlingHe:Letter.Recipient=\->{s="любимый";n=;g=};"любимый"; +lin DarlingShe:Letter.Recipient=\->{s="любимая";n=;g=};"любимая"; +lin Dean:Letter.Author=\->{s=table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"декан"}};n=>;g=>};"декан"; +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=;g=};"Ending"; +lin FormalEnding:Letter.Ending=\Author@0->{s=table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>"С"++("наилучшими"++("пожеланиями,"++"&-")++Author@0.s!!);(ResRusU.masc)=>"С"++("наилучшими"++("пожеланиями,"++"&-")++Author@0.s!!)};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>"С"++("наилучшими"++("пожеланиями,"++"&-")++Author@0.s!!);(ResRusU.masc)=>"С"++("наилучшими"++("пожеланиями,"++"&-")++Author@0.s!!)}};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=;g=};"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.masc)=>"С"++("дружеским"++("приветом,"++"&-"))++Author@0.s!!};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>"С"++("дружеским"++("приветом,"++"&-"))++Author@0.s!!;(ResRusU.masc)=>"С"++("дружеским"++("приветом,"++"&-"))++Author@0.s!!}};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!>!>!!++Sentence@1.s!>!>!!;(ResRusU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResRusU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResRusU.cgen(ResRusU.masc))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResRusU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResRusU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResRusU.depgen)=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResRusU.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResRusU.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResRusU.cnum(ResRusU.sg))=>table ResRusU.DepGen{(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResRusU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResRusU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResRusU.cgen(ResRusU.masc))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResRusU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResRusU.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResRusU.depgen)=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResRusU.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResRusU.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResRusU.depnum)=>table ResRusU.DepGen{(ResRusU.cgen(ResRusU.fem))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResRusU.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResRusU.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!}};(ResRusU.cgen(ResRusU.masc))=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResRusU.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResRusU.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!}};(ResRusU.depgen)=>table ResRusU.Num{(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResRusU.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!};(ResRusU.sg)=>table ResRusU.Gen{(ResRusU.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResRusU.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!}}}}};"Mode_0 Sentence_1"; +lin Mother:Letter.Author=\->{s=table ResRusU.Num{(ResRusU.sg)(ResRusU.pl)=>table ResRusU.Gen{(ResRusU.masc)(ResRusU.fem)=>"мама"}};n=>;g=>};"мама"; +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=>;g=>};"String_0"; +lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=;g=};"String_0"; +lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=;g=};"String_0"; +lincat NounPhrase={s:Str;n:ResRusU.Num;g:ResRusU.Gen}={s=str@0;n=;g=};"NounPhrase"; +lin OurCustomers:Letter.NounPhrase=\->{s="наши"++"клиенты";n=;g=};"наши клиенты"; +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=>;g=>};"президент"; +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=;g=};"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=;g=};"твоя жена"; } -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 = ;x = } ;"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.masc)=> "du" ++ ("har" ++ "blivit" ++ ("befordrad" ++ ("till" ++ Position @ 0.s ! ! ))) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> "ni" ++ ("har" ++ "blivit" ++ ("befordrade" ++ ("till" ++ Position @ 0.s ! ! ))) ;(ResSve.masc)=> "ni" ++ ("har" ++ "blivit" ++ ("befordrade" ++ ("till" ++ Position @ 0.s ! ! ))) }}}}} ;"du (har blivit)befordrad till Position_0" ; -lin ColleagueHe : Letter.Recipient = \ -> {s = "kollega" ;n = ;x = } ;"kollega" ; -lin ColleagueShe : Letter.Recipient = \ -> {s = "kollega" ;n = ;x = } ;"kollega" ; -lin ColleaguesHe : Letter.Recipient = \ -> {s = "kollegor" ;n = ;x = } ;"kollegor" ; -lin ColleaguesShe : Letter.Recipient = \ -> {s = "kollegor" ;n = ;x = } ;"kollegor" ; -lin Company : Letter.NounPhrase = \ -> {s = "vrt" ++ "fretag" ;n = ;g = } ;"vrt fretag" ; -lin Competitor : Letter.NounPhrase = \ -> {s = "vr" ++ ("vrsta" ++ "konkurrent");n = ;g = } ;"vr vrsta konkurrent" ; -lin DarlingHe : Letter.Recipient = \ -> {s = "lskling" ;n = ;x = } ;"lskling" ; -lin DarlingShe : Letter.Recipient = \ -> {s = "lskling" ;n = ;x = } ;"lskling" ; -lin Dean : Letter.Author = \ -> {s = table ResSve.Num {(ResSve.sg)(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "Dekanus" }} ;n = > ;x = } ;"Dekanus" ; -lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResSve.Num {(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "Kra" ;(ResSve.masc)=> "Kre" }! (Recipient @ 0.x);(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "Kra" }! (Recipient @ 0.x)}! (Recipient @ 0.n)++ Recipient @ 0.s ;n = Recipient @ 0.n ;x = Recipient @ 0.x } ;"Kre 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 = ;x = } ;"Ending" ; -lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("vnlig" ++ ("hlsning" ++ "&-")) ++ Author @ 0.s ! ! ;(ResSve.masc)=> "Med" ++ ("vnlig" ++ ("hlsning" ++ "&-")) ++ Author @ 0.s ! ! } ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("vnlig" ++ ("hlsning" ++ "&-")) ++ Author @ 0.s ! ! ;(ResSve.masc)=> "Med" ++ ("vnlig" ++ ("hlsning" ++ "&-")) ++ Author @ 0.s ! ! }} ;n = Author @ 0.n ;x = Author @ 0.x } ;"(Med vnlig hlsning &-)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" ++ ("gtt" ++ ("i" ++ "konkurs")))}}}}} ;"NounPhrase_0 har gtt i konkurs" ; -lincat Heading = {s : Str ;n : ResSve.Num ;x : ResSve.Sex }= {s = str @ 0 ;n = ;x = } ;"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" ++ ("hlsningar" ++ "&-")++ Author @ 0.s ! ! ;(ResSve.masc)=> "Med" ++ ("hlsningar" ++ "&-")++ Author @ 0.s ! ! } ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> "Med" ++ ("hlsningar" ++ "&-")++ Author @ 0.s ! ! ;(ResSve.masc)=> "Med" ++ ("hlsningar" ++ "&-")++ Author @ 0.s ! ! }} ;n = Author @ 0.n ;x = Author @ 0.x } ;"(Med hlsningar &-)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 ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }} ;(ResSve.masc)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }}} ;(ResSve.cnum (ResSve.sg)) => table ResSve.Sex {(ResSve.fem)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }} ;(ResSve.masc)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }}} ;(ResSve.depnum)=> table ResSve.Sex {(ResSve.fem)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! } ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! }} ;(ResSve.masc)=> table ResSve.Num {(ResSve.pl)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! } ;(ResSve.sg)=> table ResSve.Sex {(ResSve.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResSve.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! }}}}} ;"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 = > ;x = } ;"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 = > ;x = } ;"String_0" ; -lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = ;x = } ;"String_0" ; -lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = ;x = } ;"String_0" ; -lincat NounPhrase = {s : Str ;n : ResSve.Num ;g : ResSve.Gen }= {s = str @ 0 ;n = ;g = } ;"NounPhrase" ; -lin OurCustomers : Letter.NounPhrase = \ -> {s = "vra" ++ "kunder" ;n = ;g = } ;"vra 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 = > ;x = } ;"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 = ;x = } ;"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" ++ ("mste" ++ ("tyvrr" ++ "meddela")++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "jag" ++ ("mste" ++ ("tyvrr" ++ "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" ++ ("mste" ++ ("tyvrr" ++ "meddela")++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("mste" ++ ("tyvrr" ++ "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" ++ ("mste" ++ ("tyvrr" ++ "meddela")++ ("dig" ++ "att")) } ;(ResSve.pl)=> table ResSve.Sex {(ResSve.masc)(ResSve.fem)=> "vi" ++ ("mste" ++ ("tyvrr" ++ "meddela")++ ("er" ++ "att")) }}}}} ;"jag (mste tyvrr 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" ++ "mn" }} ;n = ;x = } ;"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=;g=};"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.masc)=>"sinut"++"on"++("ylennetty"++Position@0.s!!)};(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>"teidät"++"on"++("ylennetty"++Position@0.s!!);(ResFin.masc)=>"teidät"++"on"++("ylennetty"++Position@0.s!!)}}}}};"(sinut on)ylennetty Position_0"; +lin ColleagueHe:Letter.Recipient=\->{s="kollega";n=;g=};"kollega"; +lin ColleagueShe:Letter.Recipient=\->{s="kollega";n=;g=};"kollega"; +lin ColleaguesHe:Letter.Recipient=\->{s="kollegat";n=;g=};"kollegat"; +lin ColleaguesShe:Letter.Recipient=\->{s="kollegat";n=;g=};"kollegat"; +lin Company:Letter.NounPhrase=\->{s="yrityksemme";n=;g=};"yrityksemme"; +lin Competitor:Letter.NounPhrase=\->{s="pahin"++"kilpailijamme";n=;g=};"pahin kilpailijamme"; +lin DarlingHe:Letter.Recipient=\->{s="kulta";n=;g=};"kulta"; +lin DarlingShe:Letter.Recipient=\->{s="kulta";n=;g=};"kulta"; +lin Dean:Letter.Author=\->{s=table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"dekaani"}};n=>;g=>};"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=;g=};"Ending"; +lin FormalEnding:Letter.Ending=\Author@0->{s=table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>"parhain"++("terveisin"++"&-")++Author@0.s!!;(ResFin.masc)=>"parhain"++("terveisin"++"&-")++Author@0.s!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>"parhain"++("terveisin"++"&-")++Author@0.s!!;(ResFin.masc)=>"parhain"++("terveisin"++"&-")++Author@0.s!!}};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=;g=};"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.masc)=>"terveisin"++"&-"++Author@0.s!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>"terveisin"++"&-"++Author@0.s!!;(ResFin.masc)=>"terveisin"++"&-"++Author@0.s!!}};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!>!>!!++Sentence@1.s!>!>!!;(ResFin.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFin.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResFin.cgen(ResFin.masc))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFin.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFin.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResFin.depgen)=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResFin.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResFin.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResFin.cnum(ResFin.sg))=>table ResFin.DepGen{(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFin.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFin.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResFin.cgen(ResFin.masc))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFin.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFin.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResFin.depgen)=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResFin.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResFin.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResFin.depnum)=>table ResFin.DepGen{(ResFin.cgen(ResFin.fem))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResFin.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResFin.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!}};(ResFin.cgen(ResFin.masc))=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResFin.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResFin.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!}};(ResFin.depgen)=>table ResFin.Num{(ResFin.pl)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResFin.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!};(ResFin.sg)=>table ResFin.Gen{(ResFin.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResFin.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!}}}}};"Mode_0 Sentence_1"; +lin Mother:Letter.Author=\->{s=table ResFin.Num{(ResFin.sg)(ResFin.pl)=>table ResFin.Gen{(ResFin.masc)(ResFin.fem)=>"äiti"}};n=>;g=>};"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=>;g=>};"String_0"; +lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=;g=};"String_0"; +lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=;g=};"String_0"; +lincat NounPhrase={s:Str;n:ResFin.Num;g:ResFin.Gen}={s=str@0;n=;g=};"NounPhrase"; +lin OurCustomers:Letter.NounPhrase=\->{s="asiakkaamme";n=;g=};"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=>;g=>};"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"}}};"projektipllikksi"; +lincat Recipient={s:Str;n:ResFin.Num;g:ResFin.Gen}={s=str@0;n=;g=};"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=;g=};"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 = ;g = } ;"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.masc)=> "vous" ++ ("avez" ++ "t")++ ("promus" ++ Position @ 0.s ! ! ) } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)=> "tu" ++ ("as" ++ "t")++ ("promu" ++ Position @ 0.s ! ! ) ;(ResFra.fem)=> "tu" ++ ("as" ++ "t")++ ("promue" ++ Position @ 0.s ! ! ) }}}}} ;"(tu as t)promu Position_0" ; -lin ColleagueHe : Letter.Recipient = \ -> {s = "collgue" ;n = ;g = } ;"collgue" ; -lin ColleagueShe : Letter.Recipient = \ -> {s = "collgue" ;n = ;g = } ;"collgue" ; -lin ColleaguesHe : Letter.Recipient = \ -> {s = "collgues" ;n = ;g = } ;"collgues" ; -lin ColleaguesShe : Letter.Recipient = \ -> {s = "collgues" ;n = ;g = } ;"collgues" ; -lin Company : Letter.NounPhrase = \ -> {s = "notre" ++ "entreprise" ;n = ;g = } ;"notre entreprise" ; -lin Competitor : Letter.NounPhrase = \ -> {s = "notre" ++ ("pire" ++ "comptiteur");n = ;g = } ;"notre pire comptiteur" ; -lin DarlingHe : Letter.Recipient = \ -> {s = "chri" ;n = ;g = } ;"chri" ; -lin DarlingShe : Letter.Recipient = \ -> {s = "chrie" ;n = ;g = } ;"chrie" ; -lin Dean : Letter.Author = \ -> {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "le" ++ "doyen" }} ;n = > ;g = > } ;"le doyen" ; -lin DearRec : Letter.Heading = \ Recipient @ 0 -> {s = table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)=> "cher" ;(ResFra.fem)=> "chre" }! (Recipient @ 0.g);(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)=> "chers" ;(ResFra.fem)=> "chres" }! (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 = ;g = } ;"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.depnum)(ResFra.cnum (ResFra.sg)) => }! (Author @ 0.n)) ++ ("salutations" ++ ("distingues" ++ "&-")++ Author @ 0.s ! ! ));(ResFra.masc)=> "avec" ++ (table ResFra.Num {(ResFra.sg)=> "mes" ;(ResFra.pl)=> "nos" }! (table ResFra.DepNum {(ResFra.cnum (ResFra.pl)) => ;(ResFra.depnum)(ResFra.cnum (ResFra.sg)) => }! (Author @ 0.n)) ++ ("salutations" ++ ("distingues" ++ "&-")++ Author @ 0.s ! ! ))} ;(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.cnum (ResFra.sg)) => }! (Author @ 0.n)) ++ ("salutations" ++ ("distingues" ++ "&-")++ Author @ 0.s ! ! ));(ResFra.masc)=> "avec" ++ (table ResFra.Num {(ResFra.sg)=> "mes" ;(ResFra.pl)=> "nos" }! (table ResFra.DepNum {(ResFra.depnum)(ResFra.cnum (ResFra.pl)) => ;(ResFra.cnum (ResFra.sg)) => }! (Author @ 0.n)) ++ ("salutations" ++ ("distingues" ++ "&-")++ Author @ 0.s ! ! ))}} ;n = Author @ 0.n ;g = Author @ 0.g } ;"avec mes (salutations distingues &-)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 = ;g = } ;"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.masc)=> "Amicalement" ++ "&-" ++ Author @ 0.s ! ! } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> "Amicalement" ++ "&-" ++ Author @ 0.s ! ! ;(ResFra.masc)=> "Amicalement" ++ "&-" ++ Author @ 0.s ! ! }} ;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 ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResFra.depgen)=> table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }}} ;(ResFra.cnum (ResFra.sg)) => table ResFra.DepGen {(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! > ! ! ++ Sentence @ 1.s ! > ! > ! ! }} ;(ResFra.depgen)=> table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResFra.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }}} ;(ResFra.depnum)=> table ResFra.DepGen {(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! ;(ResFra.masc)=> Mode @ 0.s ! ! > ! ! ++ Sentence @ 1.s ! ! > ! ! }} ;(ResFra.depgen)=> table ResFra.Num {(ResFra.pl)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResFra.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! } ;(ResFra.sg)=> table ResFra.Gen {(ResFra.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResFra.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! }}}}} ;"Mode_0 Sentence_1" ; -lin Mother : Letter.Author = \ -> {s = table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "maman" }} ;n = > ;g = > } ;"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 = > ;g = > } ;"String_0" ; -lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = ;g = } ;"String_0" ; -lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = ;g = } ;"String_0" ; -lincat NounPhrase = {s : Str ;n : ResFra.Num ;g : ResFra.Gen }= {s = str @ 0 ;n = ;g = } ;"NounPhrase" ; -lin OurCustomers : Letter.NounPhrase = \ -> {s = "nos" ++ "clients" ;n = ;g = } ;"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" ++ "prsident" }} ;n = > ;g = > } ;"le prsident" ; -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 = ;g = } ;"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" ++ ("dsol" ++ ("d'informer" ++ "que")) ;(ResFra.masc)=> "je" ++ "suis" ++ ("dsole" ++ ("d'informer" ++ "que")) } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)=> "nous" ++ "sommes" ++ ("dsoles" ++ ("d'informer" ++ "que")) ;(ResFra.fem)=> "nous" ++ "sommes" ++ ("dsols" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("dsol" ++ ("d'informer" ++ "que")) } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("dsols" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("dsole" ++ ("d'informer" ++ "que")) } ;(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("dsoles" ++ ("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" ++ ("dsol" ++ ("d'informer" ++ "que")) ;(ResFra.masc)=> "je" ++ "suis" ++ ("dsole" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("dsol" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "je" ++ "suis" ++ ("dsole" ++ ("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" ++ ("dsoles" ++ ("d'informer" ++ "que")) ;(ResFra.fem)=> "nous" ++ "sommes" ++ ("dsols" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.fem)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("dsoles" ++ ("d'informer" ++ "que")) }} ;(ResFra.cgen (ResFra.masc)) => table ResFra.Num {(ResFra.sg)(ResFra.pl)=> table ResFra.Gen {(ResFra.masc)(ResFra.fem)=> "nous" ++ "sommes" ++ ("dsols" ++ ("d'informer" ++ "que")) }}}}} ;"(je suis)dsole 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 = ;g = } ;"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=;x=};"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.masc)=>"du"++("har"++"blivit"++("befordrad"++("till"++Position@0.s!!)))};(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>"ni"++("har"++"blivit"++("befordrade"++("till"++Position@0.s!!)));(ResSve.masc)=>"ni"++("har"++"blivit"++("befordrade"++("till"++Position@0.s!!)))}}}}};"du (har blivit)befordrad till Position_0"; +lin ColleagueHe:Letter.Recipient=\->{s="kollega";n=;x=};"kollega"; +lin ColleagueShe:Letter.Recipient=\->{s="kollega";n=;x=};"kollega"; +lin ColleaguesHe:Letter.Recipient=\->{s="kollegor";n=;x=};"kollegor"; +lin ColleaguesShe:Letter.Recipient=\->{s="kollegor";n=;x=};"kollegor"; +lin Company:Letter.NounPhrase=\->{s="vårt"++"företag";n=;g=};"vrt fretag"; +lin Competitor:Letter.NounPhrase=\->{s="vår"++("värsta"++"konkurrent");n=;g=};"vr vrsta konkurrent"; +lin DarlingHe:Letter.Recipient=\->{s="älskling";n=;x=};"lskling"; +lin DarlingShe:Letter.Recipient=\->{s="älskling";n=;x=};"lskling"; +lin Dean:Letter.Author=\->{s=table ResSve.Num{(ResSve.sg)(ResSve.pl)=>table ResSve.Sex{(ResSve.masc)(ResSve.fem)=>"Dekanus"}};n=>;x=};"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};"Kre 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=;x=};"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.masc)=>"Med"++("vänlig"++("hälsning"++"&-"))++Author@0.s!!};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>"Med"++("vänlig"++("hälsning"++"&-"))++Author@0.s!!;(ResSve.masc)=>"Med"++("vänlig"++("hälsning"++"&-"))++Author@0.s!!}};n=Author@0.n;x=Author@0.x};"(Med vnlig hlsning &-)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 gtt i konkurs"; +lincat Heading={s:Str;n:ResSve.Num;x:ResSve.Sex}={s=str@0;n=;x=};"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.masc)=>"Med"++("hälsningar"++"&-")++Author@0.s!!};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>"Med"++("hälsningar"++"&-")++Author@0.s!!;(ResSve.masc)=>"Med"++("hälsningar"++"&-")++Author@0.s!!}};n=Author@0.n;x=Author@0.x};"(Med hlsningar &-)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!>!!!++Sentence@1.s!>!!!;(ResSve.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResSve.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}};(ResSve.masc)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResSve.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResSve.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResSve.cnum(ResSve.sg))=>table ResSve.Sex{(ResSve.fem)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResSve.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResSve.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}};(ResSve.masc)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResSve.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResSve.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResSve.depnum)=>table ResSve.Sex{(ResSve.fem)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResSve.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResSve.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!}};(ResSve.masc)=>table ResSve.Num{(ResSve.pl)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResSve.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!};(ResSve.sg)=>table ResSve.Sex{(ResSve.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResSve.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!}}}}};"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=>;x=};"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=>;x=};"String_0"; +lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=;x=};"String_0"; +lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=;x=};"String_0"; +lincat NounPhrase={s:Str;n:ResSve.Num;g:ResSve.Gen}={s=str@0;n=;g=};"NounPhrase"; +lin OurCustomers:Letter.NounPhrase=\->{s="våra"++"kunder";n=;g=};"vra 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=>;x=};"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=;x=};"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 (mste tyvrr 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=;x=};"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 = ;x = } ;"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.masc)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! ! } ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! ! ;(ResEng.masc)=> "you" ++ ("have" ++ ("been" ++ ("promoted" ++ "to")))++ Position @ 0.s ! ! }}}}} ;"(you have been promoted to)Position_0" ; -lin ColleagueHe : Letter.Recipient = \ -> {s = "colleague" ;n = ;x = } ;"colleague" ; -lin ColleagueShe : Letter.Recipient = \ -> {s = "colleague" ;n = ;x = } ;"colleague" ; -lin ColleaguesHe : Letter.Recipient = \ -> {s = "colleagues" ;n = ;x = } ;"colleagues" ; -lin ColleaguesShe : Letter.Recipient = \ -> {s = "colleagues" ;n = ;x = } ;"colleagues" ; -lin Company : Letter.NounPhrase = \ -> {s = "our" ++ "company" ;n = } ;"our company" ; -lin Competitor : Letter.NounPhrase = \ -> {s = "our" ++ ("worst" ++ "competitor");n = } ;"our worst competitor" ; -lin DarlingHe : Letter.Recipient = \ -> {s = "darling" ;n = ;x = } ;"darling" ; -lin DarlingShe : Letter.Recipient = \ -> {s = "darling" ;n = ;x = } ;"darling" ; -lin Dean : Letter.Author = \ -> {s = table ResEng.Num {(ResEng.sg)(ResEng.pl)=> table ResEng.Sex {(ResEng.masc)(ResEng.fem)=> "the" ++ "Dean" }} ;n = > ;x = } ;"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 = ;x = } ;"Ending" ; -lin FormalEnding : Letter.Ending = \ Author @ 0 -> {s = table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> "Sincerely" ++ ("yours" ++ "&-")++ Author @ 0.s ! ! ;(ResEng.masc)=> "Sincerely" ++ ("yours" ++ "&-")++ Author @ 0.s ! ! } ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "Sincerely" ++ ("yours" ++ "&-")++ Author @ 0.s ! ! ;(ResEng.masc)=> "Sincerely" ++ ("yours" ++ "&-")++ Author @ 0.s ! ! }} ;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 = ;x = } ;"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.masc)=> "With" ++ ("best" ++ ("regards" ++ "&-")) ++ Author @ 0.s ! ! } ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> "With" ++ ("best" ++ ("regards" ++ "&-")) ++ Author @ 0.s ! ! ;(ResEng.masc)=> "With" ++ ("best" ++ ("regards" ++ "&-")) ++ Author @ 0.s ! ! }} ;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 ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }} ;(ResEng.masc)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }}} ;(ResEng.cnum (ResEng.sg)) => table ResEng.Sex {(ResEng.fem)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }} ;(ResEng.masc)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! } ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! > ! ! ! ++ Sentence @ 1.s ! > ! ! ! }}} ;(ResEng.depnum)=> table ResEng.Sex {(ResEng.fem)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! } ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! }} ;(ResEng.masc)=> table ResEng.Num {(ResEng.pl)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! } ;(ResEng.sg)=> table ResEng.Sex {(ResEng.fem)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! ;(ResEng.masc)=> Mode @ 0.s ! ! ! ! ++ Sentence @ 1.s ! ! ! ! }}}}} ;"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 = > ;x = } ;"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 = > ;x = } ;"String_0" ; -lin NameHe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = ;x = } ;"String_0" ; -lin NameShe : Letter.Recipient = \ String @ 0 -> {s = String @ 0.s ;n = ;x = } ;"String_0" ; -lincat NounPhrase = {s : Str ;n : ResEng.Num }= {s = str @ 0 ;n = } ;"NounPhrase" ; -lin OurCustomers : Letter.NounPhrase = \ -> {s = "our" ++ "customers" ;n = } ;"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 = > ;x = } ;"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 = ;x = } ;"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 = ;x = } ;"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=;g=};"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.masc)=>"vous"++("avez"++"été")++("promus"++Position@0.s!!)};(ResFra.sg)=>table ResFra.Gen{(ResFra.masc)=>"tu"++("as"++"été")++("promu"++Position@0.s!!);(ResFra.fem)=>"tu"++("as"++"été")++("promue"++Position@0.s!!)}}}}};"(tu as t)promu Position_0"; +lin ColleagueHe:Letter.Recipient=\->{s="collègue";n=;g=};"collgue"; +lin ColleagueShe:Letter.Recipient=\->{s="collègue";n=;g=};"collgue"; +lin ColleaguesHe:Letter.Recipient=\->{s="collègues";n=;g=};"collgues"; +lin ColleaguesShe:Letter.Recipient=\->{s="collègues";n=;g=};"collgues"; +lin Company:Letter.NounPhrase=\->{s="notre"++"entreprise";n=;g=};"notre entreprise"; +lin Competitor:Letter.NounPhrase=\->{s="notre"++("pire"++"compétiteur");n=;g=};"notre pire comptiteur"; +lin DarlingHe:Letter.Recipient=\->{s="chéri";n=;g=};"chri"; +lin DarlingShe:Letter.Recipient=\->{s="chérie";n=;g=};"chrie"; +lin Dean:Letter.Author=\->{s=table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"le"++"doyen"}};n=>;g=>};"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=;g=};"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.depnum)(ResFra.cnum(ResFra.sg))=>}!(Author@0.n))++("salutations"++("distinguées"++"&-")++Author@0.s!!));(ResFra.masc)=>"avec"++(table ResFra.Num{(ResFra.sg)=>"mes";(ResFra.pl)=>"nos"}!(table ResFra.DepNum{(ResFra.cnum(ResFra.pl))=>;(ResFra.depnum)(ResFra.cnum(ResFra.sg))=>}!(Author@0.n))++("salutations"++("distinguées"++"&-")++Author@0.s!!))};(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.cnum(ResFra.sg))=>}!(Author@0.n))++("salutations"++("distinguées"++"&-")++Author@0.s!!));(ResFra.masc)=>"avec"++(table ResFra.Num{(ResFra.sg)=>"mes";(ResFra.pl)=>"nos"}!(table ResFra.DepNum{(ResFra.depnum)(ResFra.cnum(ResFra.pl))=>;(ResFra.cnum(ResFra.sg))=>}!(Author@0.n))++("salutations"++("distinguées"++"&-")++Author@0.s!!))}};n=Author@0.n;g=Author@0.g};"avec mes (salutations distingues &-)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=;g=};"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.masc)=>"Amicalement"++"&-"++Author@0.s!!};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>"Amicalement"++"&-"++Author@0.s!!;(ResFra.masc)=>"Amicalement"++"&-"++Author@0.s!!}};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!>!>!!++Sentence@1.s!>!>!!;(ResFra.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFra.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResFra.cgen(ResFra.masc))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFra.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFra.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResFra.depgen)=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResFra.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResFra.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResFra.cnum(ResFra.sg))=>table ResFra.DepGen{(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFra.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFra.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResFra.cgen(ResFra.masc))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFra.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!;(ResFra.masc)=>Mode@0.s!>!>!!++Sentence@1.s!>!>!!}};(ResFra.depgen)=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResFra.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResFra.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResFra.depnum)=>table ResFra.DepGen{(ResFra.cgen(ResFra.fem))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResFra.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResFra.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!}};(ResFra.cgen(ResFra.masc))=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResFra.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!!>!!++Sentence@1.s!!>!!;(ResFra.masc)=>Mode@0.s!!>!!++Sentence@1.s!!>!!}};(ResFra.depgen)=>table ResFra.Num{(ResFra.pl)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResFra.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!};(ResFra.sg)=>table ResFra.Gen{(ResFra.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResFra.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!}}}}};"Mode_0 Sentence_1"; +lin Mother:Letter.Author=\->{s=table ResFra.Num{(ResFra.sg)(ResFra.pl)=>table ResFra.Gen{(ResFra.masc)(ResFra.fem)=>"maman"}};n=>;g=>};"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=>;g=>};"String_0"; +lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=;g=};"String_0"; +lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=;g=};"String_0"; +lincat NounPhrase={s:Str;n:ResFra.Num;g:ResFra.Gen}={s=str@0;n=;g=};"NounPhrase"; +lin OurCustomers:Letter.NounPhrase=\->{s="nos"++"clients";n=;g=};"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=>;g=>};"le prsident"; +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=;g=};"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)dsole 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=;g=};"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=;x=};"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.masc)=>"you"++("have"++("been"++("promoted"++"to")))++Position@0.s!!};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>"you"++("have"++("been"++("promoted"++"to")))++Position@0.s!!;(ResEng.masc)=>"you"++("have"++("been"++("promoted"++"to")))++Position@0.s!!}}}}};"(you have been promoted to)Position_0"; +lin ColleagueHe:Letter.Recipient=\->{s="colleague";n=;x=};"colleague"; +lin ColleagueShe:Letter.Recipient=\->{s="colleague";n=;x=};"colleague"; +lin ColleaguesHe:Letter.Recipient=\->{s="colleagues";n=;x=};"colleagues"; +lin ColleaguesShe:Letter.Recipient=\->{s="colleagues";n=;x=};"colleagues"; +lin Company:Letter.NounPhrase=\->{s="our"++"company";n=};"our company"; +lin Competitor:Letter.NounPhrase=\->{s="our"++("worst"++"competitor");n=};"our worst competitor"; +lin DarlingHe:Letter.Recipient=\->{s="darling";n=;x=};"darling"; +lin DarlingShe:Letter.Recipient=\->{s="darling";n=;x=};"darling"; +lin Dean:Letter.Author=\->{s=table ResEng.Num{(ResEng.sg)(ResEng.pl)=>table ResEng.Sex{(ResEng.masc)(ResEng.fem)=>"the"++"Dean"}};n=>;x=};"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=;x=};"Ending"; +lin FormalEnding:Letter.Ending=\Author@0->{s=table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>"Sincerely"++("yours"++"&-")++Author@0.s!!;(ResEng.masc)=>"Sincerely"++("yours"++"&-")++Author@0.s!!};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>"Sincerely"++("yours"++"&-")++Author@0.s!!;(ResEng.masc)=>"Sincerely"++("yours"++"&-")++Author@0.s!!}};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=;x=};"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.masc)=>"With"++("best"++("regards"++"&-"))++Author@0.s!!};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>"With"++("best"++("regards"++"&-"))++Author@0.s!!;(ResEng.masc)=>"With"++("best"++("regards"++"&-"))++Author@0.s!!}};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!>!!!++Sentence@1.s!>!!!;(ResEng.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResEng.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}};(ResEng.masc)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResEng.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResEng.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResEng.cnum(ResEng.sg))=>table ResEng.Sex{(ResEng.fem)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResEng.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResEng.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}};(ResEng.masc)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResEng.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!>!!!++Sentence@1.s!>!!!;(ResEng.masc)=>Mode@0.s!>!!!++Sentence@1.s!>!!!}}};(ResEng.depnum)=>table ResEng.Sex{(ResEng.fem)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResEng.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResEng.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!}};(ResEng.masc)=>table ResEng.Num{(ResEng.pl)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResEng.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!};(ResEng.sg)=>table ResEng.Sex{(ResEng.fem)=>Mode@0.s!!!!++Sentence@1.s!!!!;(ResEng.masc)=>Mode@0.s!!!!++Sentence@1.s!!!!}}}}};"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=>;x=};"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=>;x=};"String_0"; +lin NameHe:Letter.Recipient=\String@0->{s=String@0.s;n=;x=};"String_0"; +lin NameShe:Letter.Recipient=\String@0->{s=String@0.s;n=;x=};"String_0"; +lincat NounPhrase={s:Str;n:ResEng.Num}={s=str@0;n=};"NounPhrase"; +lin OurCustomers:Letter.NounPhrase=\->{s="our"++"customers";n=};"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=>;x=};"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=;x=};"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=;x=};"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; } diff --git a/examples/letter/README b/examples/letter/README index 734b5eb32..936fab377 100644 --- a/examples/letter/README +++ b/examples/letter/README @@ -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. diff --git a/examples/letter/letter.HebU.gf b/examples/letter/letter.HebU.gf new file mode 100644 index 000000000..f69fac703 --- /dev/null +++ b/examples/letter/letter.HebU.gf @@ -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 =>["מןהלי פרוייקט"]} + } + } ; diff --git a/examples/letter/mkLetter.gfs b/examples/letter/mkLetter.gfs index 52dd0dc7a..61da928d7 100644 --- a/examples/letter/mkLetter.gfs +++ b/examples/letter/mkLetter.gfs @@ -1,13 +1,14 @@ -- to make a multilingual gfcm grammar for rapid loading. AR 29/1/2004 --- to run: gf2+ - - - -December 9, 2005. - -MCFG/GF library for Prolog, by -Peter Ljunglf. -This means that you can use GF grammars as parts of -Prolog programs (in the same way as in Java and Haskell -before). - -
    - -December 8, 2005. -A structured Documentation page on GF. - -
    - -December 1, 2005. -Publicly accessible - -Darcs repository -for latest sources and documents. The snapshots are no longer updated. - -
    - -September 22, 2005. - -Snapshots: latest source and linux binary packages, for testers -and developers. See -GF history for the latest changes. -
    -Notice (1/12): -Use the - -Darcs repository instead! - -
    - -July 1, 2005. GF 2.3 released. -Download from -SourceForge. -The GF history lists changes. -The source package on SourceForge also contains a new GUI and some new grammars. - -
    - -June 3, 2005. Started a page on -history of changes. -These changes will appear soon in releases. - -
    - -May 17, 2005. Version 2.2 released. See -highlights. -Download from -SourceForge. - -
    - -May 12, 2005. GF now has a mailing list, to which you can register -here. -GF also has a project page on SourceForge, - -https://sourceforge.net/projects/gf-tools, -but this page does not yet have much content. - -
    - -May 9, 2005. -PhD Thesis by -Kristofer Johannisson: - -Formal and Informal Software Specifications. - -
    - - -March 15, 2005. -Master's thesis by -Bjrn Bringert on - -Embedded grammars: -GF grammars that can be used as parts of Java programs. And a -demo film -of a multimodal dialogue system built with embedded grammars. - -
    - - -November 9, 2004. -PhD Thesis by -Peter Ljunglf: - -Expressivity and Complexity of the Grammatical Framework. - -
    - -November 8, 2004. GF 2.1 released. -Here are the highlights. -Software available on the GF 2.1 Download -Page. -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 GF 2.0 Download Page. -If you need something from the previous version of the web page, it is -still available: - -GF 1.2. -
    - +News 2004-2005.

    What is GF?

    @@ -279,6 +162,13 @@ information on compiler requirements.

    +The publicly accessible + +Darcs repository +has the latest sources and documents. + +

    + For Java programmers: GF grammars can be embedded in Java programs by using the Embedded GF Interpreter. diff --git a/src/GF/Shell/ShellCommands.hs b/src/GF/Shell/ShellCommands.hs index 27e027c50..47c27bb24 100644 --- a/src/GF/Shell/ShellCommands.hs +++ b/src/GF/Shell/ShellCommands.hs @@ -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"