Kennt jemand einen Parser der aus einer xyz.java Datei
die Kommentare entfernt?
Also aus:
Tuwas.java
/\*
\* hier stehen Kommentare ...
\*
\*/
public class Tuwas{
public Tuwas(){
System.out.println("Constructor called."); //dieses Kommentar muss weg
// dieses Kommentar muss auch weg
}
...
}
Kennt jemand einen Parser der aus einer xyz.java Datei
die Kommentare entfernt?
Ich kenne zwar kein fix fertiges Tool, dass eine derartige „Verstümmelung“ des Sorucecodes vornimmt, schätze aber, dass es mit Perl in ca. 5 Minuten zu schaffen sein sollte, ein entsprechendes Skript zu schreiben - zumindest dann, wenn die Quelltexte nicht allzulange werden.
5 Minuten ? Nicht schlecht - da bist Du doch bestimmt fit in regulären
Ausdrücken. Die wollte ich mir nicht unbedingt neu überlegen und auf
geprüfte bzw. fertige Quellen zurückgreifen.
Mit einem Perl-Skript könnte ich auch was anfangen und es nach JAVA
umschreiben.
Also mein Angebot: Du machst das Perl-Skript ich die Portierung.
Bedingung: Der Code muss von Dir sein, falls ich Rückfragen habe.
Gruß Christian
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
#!/usr/bin/perl -w
use strict;
my $content = "";
if ($#ARGV )
{
$content=$content.$\_;
}
close(FILE);
# Innerhalb von Strings '//' durch '+((char)47)+((char)47)+' ersetzen
$content =~s/"([\w\s]\*?)\/\/([\w\s]\*?)"/"$1"+((char)47)+((char)47)+"$2"/g;
# Einzeilige Kommentare //xxx
$content =~s/\/\/.\*//g;
# Mehrzeilige Kommentare
# /\* ...
# ...
# \*/
$content =~s/\/\*.\*?\*\///sg;
open(OUT,"\>$ARGV[1]") or die "Cannot open for write: $!";
print OUT "$content";
close(OUT);
}
Ist aber mit Vorsicht zu geniessen, ich hab auf die Schnelle vermutlich nicht alle Möglichkeiten bedacht. ( ‚//‘ bzw. ‚/*‘ Kann leider auch innerhalb von Strings vorkommen, und ist dort eben kein Kommentar)
Das müsste auch ohne regulären Ausdruck recht simpel gehen… jedes Zeichen einlesen und direkt wieder rausschreiben in die neue Datei… dabei eben gewisse Zustände merken.,… wenn / und dann * kommt ein Flag „Kommentar“ setzen damit die Zeichen nicht rausgeschrieben werden und dies bei * und dann / wieder wegnehmen, genauso mit zwei / und dann beim zeilenumbruch wieder weg.
Ein zweites Flag könnte z.b. strings erkennen anhand von hochkommas (achtung bei escapes wie ") und dann nicht auskommentieren