¿Fuente de analizadores para lenguajes de programación?

Estoy desempolvando un antiguo proyecto mío que calcula una serie de métricas simples sobre grandes proyectos de software. Una de las métricas es la longitud de los archivos / clases / métodos. Actualmente, mi código "adivina" donde los límites de clase / método se basan en un algoritmo muy burdo (atraviese el archivo, mantenga una "profundidad actual" y ajústelo cada vez que encuentre corchetes sin comillas; cuando regrese al nivel en que comenzó una clase o método , considéralo salido). Sin embargo, hay muchos problemas con este procedimiento, y una forma "simple" de detectar cuándo ha cambiado su profundidad no siempre es efectiva.

Para que esto dé resultados precisos, necesito usar la forma canónica (en cada idioma) de detectar definiciones de funciones, definiciones de clase y cambios de profundidad. Esto equivale a escribir un analizador simple para generar árboles de análisis que contengan al menos estos elementos para cada idioma al que quiero que se aplique mi proyecto.

Obviamente, los analizadores se han escrito para todos estos idiomas antes, por lo que parece que no debería tener que duplicar ese esfuerzo (aunque escribir analizadores es divertido).¿Hay algún proyecto de código abierto que recopile bibliotecas de analizadores listas para usar para un montón de idiomas de origen? ¿O debería estar usando ANTLR para hacer el mío desde cero? (Nota: estaría encantado de transferir el proyecto a otro idioma para hacer uso de un excelente recurso existente, por lo que si conoce uno, no importa en qué idioma esté escrito).

Respuestas a la pregunta(2)

Su respuesta a la pregunta