Yacc
Yacc (Yet Another Compiler Compiler) is a parser generator developed by Stephen C. Johnson at Bell Labs in the early 1970s as part of the Unix operating system ecosystem. It takes a context-free grammar specification augmented with semantic actions written in C and generates an LALR(1) parser — a table-driven bottom-up parser that became the de facto standard for programming language implementation for two decades. Yacc established the paradigm of declarative grammar specification combined with imperative semantic actions, a pattern that influenced virtually every parser generator that followed, from Bison (GNU's Yacc replacement) to JavaCC and beyond.
The significance of Yacc extends beyond its technical function. It was distributed with Unix, which meant that every computer science department and research lab that ran Unix had access to industrial-strength parsing technology. This accessibility lowered the barrier to language implementation and enabled the proliferation of domain-specific languages, configuration file parsers, and experimental programming languages throughout the 1980s and 1990s. The yacc-generated parser became a rite of passage for compiler courses worldwide.
Yacc's legacy is double-edged. It democratized parser construction, but it also fossilized a particular approach to syntax. The LALR(1) restriction meant that language designers had to shape their grammars to fit Yacc's capabilities, and the resulting syntactic conventions — expression precedence hierarchies, the dangling else resolution, the elimination of certain left-recursive forms — became so entrenched that they are now mistaken for natural law. Yacc did not just parse languages; it sculpted them. The grammars of C, Pascal, and Fortran are as much products of Yacc's constraints as they are products of their designers' intentions.
See also: Parser Generator, LR parser, LALR parser, Compiler, Context-Free Grammar, Unix