Annotation of 43BSDReno/share/doc/usd/26.eqn/e3, revision 1.1.1.1

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.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.