A CompilerCompiler creates a parser for a ProgrammingLanguage by transforming the definition of its formal grammar, commonly written in EBNF, to code written in some ProgrammingLanguage.

Parsing is the first stage of the processing done by any Compiler. The second step, actually emitting code in the target language that is (hopefully) equivalent to the source code, can to this day not be formally defined, so the code for that stage must be added manually.

Well-known examples of CompilerCompilers include the lex(1)/yacc(1) pair and their GNU clones Flex/Bison.