ANTLR, ANother Tool for Language Recognition, is a tool similar to lex/yacc that provides a framework for constructing recognizers, compilers, and translators from grammatical descriptions containing CeePlusPlus, JavaLanguage, or SatherLanguage actions.
It is fully in the public domain.
For more information, see http://www.antlr.org/
Preliminary support for CsharpLanguage generation is available at the ANTLR web site.
See also JavaCompilerCompiler