|
|
1.1 root 1: .\" @(#)e3 6.1 (Berkeley) 5/22/86
2: .\"
3: .NH
4: Language Design
5: .PP
6: The fundamental principle upon which we based our language design
7: is that the language should be easy to use
8: by people (for example, secretaries) who know neither mathematics nor typesetting.
9: .PP
10: This principle implies
11: several things.
12: First,
13: ``normal'' mathematical conventions about operator precedence,
14: parentheses, and the like cannot be used,
15: for to give special meaning to such characters means
16: that the user has to understand what he or she
17: is typing.
18: Thus the language should not assume, for instance,
19: that parentheses are always balanced,
20: for they are not in
21: the half-open interval $(a,b]$.
22: Nor should it assume that
23: that $sqrt{a+b}$ can be replaced by
24: $(a+b) sup roman \(12$,
25: or that $1/(1-x)$ is better written as $1 over 1-x$
26: (or
27: vice versa).
28: .PP
29: Second, there should be relatively few rules,
30: keywords,
31: special symbols and operators, and the like.
32: This keeps the language easy to learn and remember. Furthermore, there should be few exceptions to
33: the rules that do exist:
34: if something works in one situation,
35: it should work everywhere.
36: If a variable can have a subscript,
37: then a subscript can have a subscript, and so on without limit.
38: .PP
39: Third, ``standard'' things should happen automatically.
40: Someone who types ``x=y+z+1'' should get ``$x=y+z+1$''.
41: Subscripts and superscripts should automatically
42: be printed in an appropriately smaller size,
43: with no special intervention.
44: Fraction bars have to be made the right length and positioned at the
45: right height.
46: And so on.
47: Indeed a mechanism for overriding default actions has to exist,
48: but its application is the exception, not the rule.
49: .PP
50: We assume
51: that the typist has a reasonable picture
52: (a two-dimensional representation)
53: of the desired final form, as might be handwritten
54: by the author of a paper.
55: We also assume that
56: the input is typed on a computer terminal much like an ordinary typewriter.
57: This implies an input alphabet
58: of perhaps 100 characters,
59: none of them special.
60: .PP
61: A secondary, but still important, goal in our design
62: was that the system should be easy to implement,
63: since neither of the authors had any desire to make
64: a long-term project of it.
65: Since our design was not firm,
66: it was also necessary that the program be easy to change
67: at any time.
68: .PP
69: To make the program easy to build and to change,
70: and to guarantee regularity
71: (``it should work everywhere''),
72: the language is defined by a
73: context-free grammar, described in Section 5.
74: The compiler for the language was built using a compiler-compiler.
75: .PP
76: A priori,
77: the grammar/compiler-compiler approach seemed the right thing to do.
78: Our subsequent experience leads us to believe
79: that any other course would have been folly.
80: The original language was designed in a few days.
81: Construction of a working system
82: sufficient to try significant examples
83: required perhaps a person-month.
84: Since then, we have spent a modest amount of additional time
85: over several years
86: tuning, adding facilities,
87: and occasionally changing the language as users
88: make criticisms and suggestions.
89: .PP
90: We also decided quite early that
91: we would let
92: .UC TROFF
93: do our work for us whenever possible.
94: .UC TROFF
95: is quite a powerful program, with
96: a macro facility, text and arithmetic variables, numerical computation and testing,
97: and conditional branching.
98: Thus we have been able to avoid writing
99: a lot of mundane but tricky software.
100: For example, we store no text strings,
101: but simply pass them on to
102: .UC TROFF .
103: Thus we avoid having to write a storage management package.
104: Furthermore, we have been able to isolate ourselves
105: from most details of the particular device and character set
106: currently in use.
107: For example, we let
108: .UC TROFF
109: compute the widths of all strings of characters;
110: we need know nothing about them.
111: .PP
112: A third design goal is special to our environment.
113: Since our program is only useful for typesetting mathematics,
114: it is necessary that it interface cleanly with the underlying typesetting language
115: for the benefit of users
116: who want to set intermingled mathematics and text
117: (the usual case).
118: The standard mode of operation
119: is that when a document is typed,
120: mathematical expressions are input as part of the text,
121: but marked by user settable delimiters.
122: The program reads this input and treats as comments
123: those things which are not mathematics,
124: simply passing them through untouched.
125: At the same time it converts the mathematical input
126: into the necessary
127: .UC TROFF
128: commands.
129: The resulting ioutput is passed directly to
130: .UC TROFF
131: where the comments and the mathematical parts both become
132: text and/or
133: .UC TROFF
134: commands.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.