summaryrefslogtreecommitdiff
path: root/examples/letter/Letter.gf
blob: 537750cb0990e7540f5dc7d334f030425b99e9fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
abstract Letter = {

--1 An Abstract Syntax for Business and Love Letters
--
-- This file defines the abstract syntax of a grammar set whose concrete syntax
-- has so far been written to five languages: English, Finnish, French, Russian,
-- and Swedish. 
--
-- The main category of the grammar is $Letter$. The other categories are
-- parts of the letter.

flags startcat=Letter ;

cat 
  Letter ; 
  Recipient ; Author ; 
  Message ; 
  Heading ; Ending ; 
  Mode ; Sentence ; NounPhrase ; Position ;

-- There is just one top-level letter structure.

fun
  MkLetter : Heading -> Message -> Ending -> Letter ;

-- The heading consists of a greeting of the recipient. The $JustHello$
-- function will actually suppress the name (and title) of the recipient,
-- but the $Recipient$ argument keeps track of the gender and number.

  DearRec   : Recipient -> Heading ; 
  PlainRec  : Recipient -> Heading ;
  HelloRec  : Recipient -> Heading ;
  JustHello : Recipient -> Heading ;

-- A message is a sentence with of without a *mode*, which is either 
-- regret or honour.

  ModeSent  : Mode -> Sentence -> Message ;
  PlainSent : Sentence -> Message ;

  Honour, Regret : Mode ;

-- The ending is either formal or informal. It does not currently depend on
-- the heading: making it so would eliminate formality mismatches between
-- the heading and the ending.

  FormalEnding   : Author -> Ending ;
  InformalEnding : Author -> Ending ;

-- The recipient is either a colleague, colleagues, or darling.
-- It can also be a named person. The gender distinction is made
-- because there are things in the body of the letter that depend on it.

  ColleagueHe, ColleagueShe   : Recipient ;
  ColleaguesHe, ColleaguesShe : Recipient ;
  DarlingHe, DarlingShe       : Recipient ;

  NameHe, NameShe : String -> Recipient ;

-- For the author, there is likewise a fixed set of titles, plus the named author.
-- Gender distinctions could be useful even here, for the same reason as with
-- $Recipient$. Notice that the rendering of $Spouse$ will depend on the
-- gender of the recipient.

  President, Mother, Spouse, Dean : Author ;
  Name      : String -> Author ;

-- As for the message body, no much choice is yet available: one can say that
-- the recipient is promoted to some position, that someone has gone bankrupt,
-- or that the author loves the recipient.

  BePromoted : Position -> Sentence ;
  GoBankrupt : NounPhrase -> Sentence ;
  ILoveYou   : Sentence ;

  Competitor   : NounPhrase ;
  Company      : NounPhrase ;
  OurCustomers : NounPhrase ;

  Senior : Position ;
  ProjectManager : Position ;

}