2011-03-08 9 views
5

This question formula la pregunta general. Estoy preguntando sobre VHDL en particular, ya que las herramientas que mencionan las respuestas de la pregunta son para Java y PL/SQL. No necesita ser perfecto, alguna interpretación manual estaría bien. Estoy haciendo esto para una tarea de confirmación automatizada.Herramienta para encontrar el código VHDL comentado

EDITAR 9/9/11: @phillipe señaló que la tarea de confirmación automatizada es inconsistente con la interpretación manual. Estoy tratando de alentar a otros ingenieros a deshacerse del código y ver que lo hicieron. Creo que una herramienta pesimista sería mejor para commits; si pierde un código que no es el fin del mundo. O podría hacerlo informar el número de tales líneas y enviarme un correo electrónico en lugar de detener la confirmación.

+2

¿Cuál es exactamente tu caso de uso? Si usa esta secuencia de comandos en un enlace de confirmación, no podrá realizar ninguna interpretación manual. – Philippe

Respuesta

1

Esto es lo que estoy usando hasta ahora

egrep "^\s*--.*[;,]$" *.vhd 

es decir, encontrar líneas que pueden tener espacios en blanco, a continuación, el texto, y al final en una; o, Encontré que las comas en los comentarios eran normales, pero esos dos personajes solían comentar el código, ya que solían usarse al final de las líneas de VHDL.

Utilizando lo que @Freddy Mallet sugirió en las referencias sobre palabras clave, se me ocurrió esto. Traté de usar palabras clave VHDL que no se usan comúnmente en inglés. Esto tendía a funcionar bien para el mismo código, pero tenía problemas en comentarios como "proceso para ...". Es posible que desee utilizar egrep -f y poner la expresión regular en un archivo.

egrep "^\s*--.*([;,]$|\s(architecture|array|assert|begin|block|case|component|downto|elsif|entity|generate|generic|inout|library|null|package|port|range|records|select|signal|type|until)\s)" src/*.vhd  
+1

¡Me gusta! Aquí hay una versión para Verilog (comentarios de una sola línea): 'egrep '^ \ s * //. * [;,] $' * .v'. Mi caparazón no estaba contento con '$', así que cambié a comillas simples. Por supuesto, esto no se aplica a los comentarios de bloque Verilog '/ ** /'. – toolic

3

Me parece que la respuesta ideal requiere que se aplique un programa de análisis que puede reconocer subseries langauge con el contenido de cada comentario. Si la tasa de error de sintaxis es pequeña en comparación con el tamaño del comentario, entonces tiene un código descompuesto.

Para hacer esto, necesita un analizador que esté dispuesto a analizar fragmentos de código incompletos. Los sistemas de transformación de programa que ofrecen transformaciones fuente a fuente (si ve esta estructura, reemplácela por esa estructura) tienen esta maquinaria incorporada; deben analizar los patrones de código que comprenden las transformaciones de fuente a fuente, que generalmente son formas de sentencias de lenguaje.

Nuestra DMS Software Reengineering Toolkit tiene exactamente esta propiedad. Como es habitual con DMS, tendría que configurarse para analizar VHDL (o Verilog) [esto es fácil, DMS tiene interfaces VHDL, Verilog y SystemVerilog completas), escanear el árbol de análisis, encontrar los comentarios adjuntos (DMS captura comentarios mientras analiza), y luego intentar analizar los comentarios utilizando el "Analizador de patrones" incorporado de DMS. Se necesita cierta contabilidad para contar los errores de sintaxis. Entonces esto es posible

Sospecho que no vale la pena el problema. Es probable que su hegeistografía regexp sea bastante buena, especialmente cuando está respaldada por un ser humano, si a ese humano no le importa tener que revisar los códigos de forma adicional.

Cuestiones relacionadas