Estoy desempolvando un viejo 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" dónde los límites de clase/método se basan en un algoritmo muy tosco (recorren el archivo, mantienen una "profundidad actual" y lo ajustan siempre que encuentres corchetes sin comillas; cuando vuelves al nivel una clase o método comenzó en , considere que salió). Sin embargo, hay muchos problemas con este procedimiento, y una forma "simple" de detectar cuándo ha cambiado su profundidad no siempre es efectivo.¿Fuente de analizadores para lenguajes de programación?
Para que esto dé resultados precisos, necesito usar la forma canónica (en cada idioma) de detectar definiciones de funciones, definiciones de clases y cambios de profundidad. Esto equivale a escribir un analizador simple para generar árboles de análisis sintáctico 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 anteriormente, por lo que parece que no debería duplicar ese esfuerzo (aunque escribir analizadores es divertido). ¿Existe algún proyecto de código abierto que recopile bibliotecas de analizador listas para usar para varios lenguajes de origen? ¿O debería simplemente usar ANTLR para crear el mío desde el principio? (Nota: estaría encantado de transferir el proyecto a otro idioma para hacer uso de un gran recurso existente, así que si conoce uno, no importa en qué idioma esté escrito)
Hay librerías de resaltado de sintaxis (los pygments vienen a la mente) que manejan muchos lenguajes diferentes. Me pregunto si alguno de ellos proporcionaría suficiente información para su caso. Sospecho que no, pero valdría la pena echarle un vistazo. – Ken