A program which takes a formal description of a grammar (e.g. in bnf) and outputs source code for a parser which will recognise valid strings obeying that grammar and perform associated actions. unix's yacc is a well known example.