PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ -> C Kommetare wandeln, Regulaeren Ausdruck verbessern?



403
26-04-2007, 03:48
Guten Morgen :)

Mit folgendem Quick and Dirty Regex
sed 's/\(.*\)/& \*\//g;s/\/\//\/\*/g' pattern
konnte ich bei diesem Pattern


// foo
// baz spam qnx
// grrr

alle // Kommentare durch /* Kommentar */ ersetzen.

Leider frisst der obige Ausdruck aber zuviel. Nur * wird z.B. auch
erwischt und das ist in C natuerlich Mist ;)

Folgendes Vorgehen habe ich mir ueberlegt. (kann redundant sein)

wenn schon /* oder */ dann skippe diese Line
wenn schon nur / oder * dann skippe diese Line
opt. wenn /*/* */*/ dann skippe diese Line
opt. wenn multilinecomment (suche nach \n\r) dann skippe diese Line

solange wie line matches // und nur //
s'////* bzw. */

Kann mir jemand einen kleinen Tip geben? Mir wurde schon empfohlen
eine State Machine in C zu schreiben, das waere dann die naechste
Aufgabe, momentan will ich erstmal den Regex weiter verbessern.

Gruss 403

Thomas Engelke
03-05-2007, 07:40
s#^\s*(.*)$#/* $1 */#

sollte es eigentlich bringen, korrekte Escapes im Pattern vorausgesetzt. Vielleicht ein wenig ineffektiv wegen dem gierigen \s* vorne. Schneller könnte noch

s#^\s*?(\S+.*)$#/* $1 */#

sein.