YACC (Yet Another Compiler Compiler)
Together with LEX, YACC allows you to describe a grammar in
LALR(1) (Look Ahead Left-to-Right parse, single token look-ahead) notation and YACC
generates C code for a program to parse it incorporating your action stub code. The
project is now called CUP. Similar tools exist to generate Java source code.