Biblioteca para analizar y analizar el código fuente

Quiero analizar el código fuente escrito en varios idiomas. Entonces, la biblioteca debería decirme al menos qué líneas son comentarios y cuáles no. Óptimamente, también podría decirme cosas más específicas, como declaraciones de variables, palabras clave específicas del idioma, etc.

Por lo tanto, en realidad es similar a un resaltador de sintaxis específico del idioma, solo que no resalta el código fuente, sino que lo anota e imprime algo como la salida JSON.

Encontré markdown-it para Markdown, pero bueno, lo necesitaría para muchos lenguajes, como Shell, JavaScript, Python, Scala, Go…

Existen herramientas para cada uno de esos idiomas, pero no creo que haya una genérica, a menos que use un resaltador de sintaxis genérico para este propósito, que podría ser sencillo. Por ejemplo, si el resaltador produce HTML con clases CSS que indican qué partes son palabras clave, comentarios, etc., entonces eso es exactamente lo que desea, ¿verdad?

Respuestas (2)

No sé si cubre todos los idiomas que necesita o emite todos los metadatos que necesita, pero Doxygen podría ser suficiente. Puede generar XML que incluye cosas como funciones y declaraciones de variables.

No creo que Doxygen esté relacionado con la pregunta. Genera documentación, pero no analiza el código fuente. Ni siquiera es una biblioteca, sino un programa separado.
Tienes razón, no es una biblioteca, me lo perdí. Pero analiza el código fuente. Podría ser posible usarlo como una biblioteca, no lo sé.
¿Qué tipo de análisis hace? ¿Puede identificar qué líneas son comentarios, declaraciones y similares? ¿Podrías ampliar tu respuesta explicando todo esto?
Con base en la documentación que produce, su análisis incluye clases/interfaces y sus relaciones de herencia, archivos #include, variables miembro y métodos (incluidas las firmas de tipo completas) y gráficos de llamada de función/método. No estoy seguro exactamente de lo que contiene la salida xml. No puedo encontrar ninguna documentación sobre eso específicamente. Probablemente lo mejor sea verificar el esquema: github.com/doxygen/doxygen/tree/master/templates/xml

Nuestro kit de herramientas de reingeniería de software DMS es una herramienta de transformación y análisis de programas de propósito general parametrizada por definiciones de lenguaje explícitas. Hasta la fecha hay unos 40 idiomas (sin contar los dialectos) definidos para DMS.

Para cada lenguaje definido por una gramática explícita (sí, manejamos C++17 de esta manera), DMS puede analizar la fuente y producir un árbol de sintaxis abstracto. [Sí, puede exportarlo como XML (JSON también sería fácil) si lo desea, pero es más fácil realizar otros análisis con otros mecanismos proporcionados por DMS, lo que significa que no tiene que exportarlos. A partir de ahí, etiquetar comentarios frente a declaraciones frente a encabezados de función frente a código es bastante fácil de entender.

DMS se puede configurar para extraer mucha más información que solo esto.

Cuando trabaja para la empresa que fabrica el producto, es una práctica normal incluir explícitamente una divulgación al principio o al final de la publicación (aunque esté en su perfil y lo insinúe con el uso de "nosotros").
Es política oficial de Stack Overflow que la frase "Nuestro"... es una divulgación adecuada. Eso se resolvió hace muchos años.
Bastante justo, creo que los estándares de este sitio deberían ser más altos que los predeterminados de la red. Así que hice una meta publicación: softwarerecs.meta.stackexchange.com/questions/2700