UNIX Time-Sharing System: Language Development Tools
01 July 1978
Language Development Tools By S. C. J O H N S O N and M. E. LESK (Manuscript received December 27, 1977) The development of new programs on the UNIX* system is facilitated by tools for language design and implementation. These are frequently program generators, compiling into C, which provide advanced algorithms in a convenient form, while not restraining the user to a preconceived set of jobs. Two of the most important such tools are Yacc, a generator of LALR(1) parsers, and Lex, a generator of regular expression recognizers using deterministic finite automata. They have been used in a wide variety of applications, including compilers, desk calculators, typesetting languages, and pattern processors. I. INTRODUCTION On the U N I X system, an effort has been made to package language development aids for general use, so that all users can share the newest tools. As a result, these tools have been used to design pleasant, structured applications languages, as well as in their more traditional roles in compiler construction. The packaging is crucial, since if the underlying algorithms are not well packaged, the tools will not be used; applications programmers will rarely spend weeks learning theory in order to use a tool. Traditionally, algorithms have been packaged as system commands (such as sort), subroutines (such as sin), or as part of the supported features of a compiler or higher level language environment * UNIX is a t r a d e m a r k of Bell L a b o r a t o r i e s . 2155 (such as the heap allocation in Algol 68).