Ich codiere ein Tool zum Analysieren von C++-Code. Ich möchte nicht am Ende einen halben Compiler codieren. Obwohl mir Clang bekannt ist, ist das für meine Zwecke zu viel.
Ich habe von Hand geparst, bin aber auf einen zu vielen Codierungsstil gestoßen.
Ich suche ein Tool, das C++-Code analysiert, mit nur einem wichtigen Faktor:
Es muss in der Lage sein, die gesamte Funktionsdeklaration in einer einzigen Zeile unterzubringen.
Also Dinge wie
unsigned
int
myclass::
myfunc
(int x;
int y)
{
}
und all seinen vielen Variationen, werden sollte
unsigned int myclass::myfunc(int x; int y)
{
}
Das ist alles, was ich für dieses spezielle Projekt brauche - die Fähigkeit, jede Funktion in einer Datei zu finden und ihren Rückgabetyp zu erhalten.
Schön, wenn es Linux ist, aber ich kann mit Windows leben.
GUI wäre nett, mit Vorschau als Bonus.
Der Stapelmodus wäre schön, einschließlich der Möglichkeit, ein bestimmtes Verzeichnis rekursiv zu verarbeiten.
Aber keines dieser netten Elemente ist obligatorisch, nur die single line for the function declaration requirement is
.
http://astyle.sourceforge.net/
aStyle - keine Konkurrenz. Ich benutze das schon seit einiger Zeit, da ich auf dem Weg zur Arbeit eher Funktionen in Notepad++ schreibe und es dann vor dem Einbinden in Projekte damit verschönere - es macht meiner Meinung nach wirklich einen tollen Job.
GNU Indent kann damit umgehen:
indent b.c
Eingang:
unsigned
int
myfunc
(int x;
int y)
{
}
Ausgang:
unsigned int myfunc (int x; int y)
{
}
Ich möchte nicht am Ende einen halben Compiler codieren
Es ist nicht so kompliziert für die Funktion, die Sie anfordern. Hier ist ein Perl- Skript, um Ihnen den Einstieg zu erleichtern.
Die Arrays keywords_nospace
und keywords_space
enthalten die Wörter/Zeichen am Ende der Zeilen, die Sie kombinieren möchten. Die erste dient zum Kombinieren ohne Leerzeichen, und die zweite fügt Leerzeichen hinzu.
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 $_;
}
Sie können beliebig viele Schlüsselwörter hinzufügen. Speichern Sie in einer .pl
Datei und führen Sie sie in der Befehlszeile aus mit:
perl script_name.pl input.cpp
Dies sollte eine neue Datei im Verzeichnis mit dem Namen restructured_input.cpp
. Ich habe es an Ihrer Beispielfunktion getestet und die gewünschte Ausgabe erhalten.
Frank
Mawg sagt, Monica wieder einzusetzen
Frank
\n
durch[space]
, STRG+A, STRG+K, dann STRG+F zum Formatieren, dann ersetzen Sie alle{
durch\n{
und ersetzen Sie alle}
durch\n}
. Dies kann per Skript ausgeführt werden, um alle Dateien zu durchlaufen.Frank
Mawg sagt, Monica wieder einzusetzen
Frank
Ira Baxter
Ira Baxter
Mawg sagt, Monica wieder einzusetzen
Ira Baxter
Mawg sagt, Monica wieder einzusetzen