ANTLR, ANother Tool for Language Recognition, is a language tool that provides a framework for constructing recognizers, compilers, and translators from grammatical descriptions containing Java, C#, Python, or C++ actions.
ANTLR is popular because it is easy to understand, powerful, flexible, generates human-readable output, and comes with complete source.
For a short introduction see,
Getting Started with ANTLR.