C3PO is a software synthesis tool that provides a solution for building maintainable, reliable and robust software infrastructures and/or compiler frontends from a set of attributed grammar rules in EBNF notation.
The LALR parser generator (LPG) is a tool for developing scanners and parsers written in Java, C++ or C. Input is specified by BNF rules. LPG supports backtracking (to resolve ambiguity), automatic AST generation and grammar inheritance.