En cuanto a la búsqueda de constantes, nuestra SD Source Code Search Engine (SCSE) puede hacerlo de la estantería. SCSE proporciona una interfaz GUI para buscar en grandes conjuntos de archivos de lenguaje de programación mixtos, utilizando un lenguaje de consulta que comprende la sintaxis léxica de cada idioma con precisión.
Una consulta típica:
'for' ... I=index* '=' N<10
encontrarán para palabras clave cerca de un I dentifier cuyo nombre debe comenzar con la secuencia índice seguido inmediatamente por un operador = seguido de un N umber cuyo valor es inferior a 10. Debido a que SCSE entiende la estructura del lenguaje, no le molestan el espacio en blanco o las restricciones de formato. También coincidirá con los valores hexadecimales para N; entiende el formato diferente para literales y ofrece consultas en términos del valor real del número, en lugar de como una cadena.
Dada esta consulta, la GUI encontrará todas las coincidencias en todos sus archivos y mostrará un conjunto de visitas; un clic en un golpe le lleva el código fuente con la línea de golpe resaltada.
Para encontrar todas las constantes que no son cero, se escribe la siguiente consulta muy simple:
N>0
Lo que realmente quiere son todas las constantes que no están definidos en una especie de constante definición. Por lo que desea quitar cualquier-definiciones constantes de la lista de resultados, que se lleva a cabo mediante el uso de la "consulta de resta" operador:
N>0 - 'const' 'int' I '=' N
Esto encuentra constantes distintas de cero, y se eliminarán los que también se corresponde con la declaración const .
Sus otros sueños requieren un motor mucho más sofisticado. En esencia, desea analizar el código C++ (su regla de tres) o extender el lenguaje C++ con algunas características nuevas, y luego implementar esas características utilizando las capacidades estándar de C++. Puede lograr esto usando program transformation system que puede manipular C++.
Nuestra DMS Software Reengineering Tookit puede hacerlo. Tiene un completo C++ front end que analiza C++ a las estructuras de datos del compilador interno y crea tablas de símbolos completas (y puede regenerar el código fuente de C++ con todos los detalles de sus estructuras internas). Usando esa interfaz y las capacidades de coincidencia de patrones integradas de DMS, podría implementar su verificación de regla de tres.
Para las extensiones de idioma, puede modificar la interfaz de DMS C++ modificando su gramática para incluir las construcciones adicionales que considere ideales. Luego, puede escribir transformaciones de programa que busquen dichos constructos y transformarlos en el código deseado. (Esta idea fue llamada intentional programming por Charles Simyoni de MS fama, pero es solo un caso especial de transformación de programa.)
DMS se ha utilizado para llevar a cabo transformaciones automáticas masivas en aplicaciones C++ reales. Podría hacer su tarea con bastante facilidad desde un punto de vista técnico. Sin embargo, comprender la definición de C++ y cómo encaja todo, y cómo DMS admite las transformaciones, requiere una sofisticación considerable al estilo del compilador. Lo que sugieres que hagas no es una tarde o una semana de trabajo. Tomaría una inversión significativa en educación y esfuerzo. Pero mucho menos que intentar hacer con solo comenzar con YACC.
-WeffC++ hará 2. para usted. – James
posible duplicado de [¿Qué herramientas de análisis estático C++ de código abierto están disponibles?] (Http: // stackoverflow.com/questions/141498/what-open-source-c-static-analysis-tools-are-available) –