Estoy codificando una herramienta para analizar el código C++. No quiero terminar codificando la mitad de un compilador. Aunque soy consciente de Clang , eso es demasiado para mis propósitos.
Estaba analizando a mano, pero me he encontrado con demasiados estilos de codificación.
Busco una herramienta que analice el código C++, con un solo factor importante:
Debe poder poner toda la declaración de la función en una sola línea.
Entonces, cosas como
unsigned
int
myclass::
myfunc
(int x;
int y)
{
}
y todas sus muchas variaciones, deben convertirse
unsigned int myclass::myfunc(int x; int y)
{
}
Eso es todo lo que necesito para este proyecto en particular: la capacidad de encontrar cada función en un archivo y obtener su tipo de devolución.
Bueno si es Linux, pero puedo vivir con Windows.
La GUI sería buena, con la vista previa como una ventaja.
El modo por lotes sería bueno, incluida la capacidad de procesar recursivamente un directorio determinado.
Pero ninguno de esos bonitos son obligatorios, solo los single line for the function declaration requirement is
.
http://astyle.sourceforge.net/
aStyle - sin competencia. He estado usando esto por un tiempo ya que tiendo a escribir funciones en el bloc de notas ++ en mi camino al trabajo y luego embellecerlo con esto antes de incluirlo en proyectos; en mi opinión, realmente hace un gran trabajo.
GNU Indent puede manejar esto:
indent b.c
Aporte:
unsigned
int
myfunc
(int x;
int y)
{
}
Producción:
unsigned int myfunc (int x; int y)
{
}
No quiero terminar codificando la mitad de un compilador
No es tan complicado para la característica que está solicitando. Aquí hay un script de Perl para comenzar.
Las matrices keywords_nospace
y keywords_space
contienen las palabras/caracteres al final de las líneas que desea combinar. El primero es para combinar sin espacios y el segundo agrega espacios.
use strict;
use warnings;
open(my $in, "<", $ARGV[0]) or die "Can't open file: $!";
open(my $out, ">", "restructured_$ARGV[0]");
my $word;
my @keywords_nospace = ("::","myfunc");
my @keywords_space = ("unsigned","int",";");
while (<$in>) {
for $word (@keywords_nospace) {chomp if (/\Q$word\E$/i);} # removes trailing spaces and newline
for $word (@keywords_space)
{
if (/\Q$word\E$/i)
{
chomp; # Removes trailing spaces and newline
$_ = "$_ "; # Add a space at the end of the line
}
}
print $out $_;
}
Puede agregar tantas palabras clave como desee. Guárdelo en un .pl
archivo y ejecútelo en la línea de comando usando:
perl script_name.pl input.cpp
Esto debería crear un nuevo archivo en el directorio llamado restructured_input.cpp
. Lo probé en su función de ejemplo y obtuve el resultado deseado.
franco
Mawg dice que reincorpore a Monica
franco
\n
por[space]
, CTRL+A, CTRL+K luego CTRL+F para formatear, luego reemplace todo{
por\n{
y reemplace todo}
por\n}
esto se puede programar para revisar todos los archivos.franco
Mawg dice que reincorpore a Monica
franco
Ira Baxter
Ira Baxter
Mawg dice que reincorpore a Monica
Ira Baxter
Mawg dice que reincorpore a Monica