A compiler-compiler is a program that produces compilers (or parts of them), often in a generic and reusable way to be able to produce many differing compilers. The main job of a compiler-compiler is to generate a parser, which is a component of a compiler that reads and interprets the input code according to the defined grammar.
Common Compiler-Compilers:
Yacc (Yet Another Compiler Compiler): Often used with the Lex lexical analyzer generator to create parsers for C-like languages.
Bison: A GNU tool similar to Yacc but with extensions and additional features.
ANTLR (Another Tool for Language Recognition): A powerful tool for generating parsers in multiple target languages, such as Java, C#, Python, and others.
CUP (Constructor of Useful Parsers): Another parser generator for Java, similar to Yacc.