hello frnds this is a snippet that removes comments of c, c++ , java files
removing comments of c,c++, java styles
// author :Rohith Gowda
// - remove C/C++ comments
// - assume no nested block comments
// Modifications
#include<iostream>
#include<fstream>
using namespace std;
void parse(ifstream &fin , ofstream &fout)
{
char curr, prev = '\0';
bool comment = false;
bool charLiteral = false;
bool stringLiteral = false;
while (fin.get(curr)) {
if (charLiteral) {
fout << curr;
if (curr == '\'' && prev != '\\') { // 'a' ends
charLiteral = false;
}
prev = (prev == '\\' && curr == '\\') ? '\0' : curr;
} else if (stringLiteral) {
fout << curr;
if (curr == '\"' && prev != '\\') { // "string" ends
stringLiteral = false;
}
prev = (prev == '\\' && curr == '\\') ? '\0' : curr;
} else if (comment) {
if (curr == '/' && prev == '*') { /* comment ends */
prev = '\0';
comment = false;
} else { /* comment text */
prev = curr;
}
} else if (prev == '/') {
if (curr == '/') { // end of line comment
fout << '\n';
prev = '\0';
while (fin.get() != '\n');
} else if (curr == '*') { /* comment starts */
prev = '\0';
comment = true;
} else { // normal code
fout << prev << curr;
prev = curr;
}
} else {
if (curr != '/') {
fout << curr;
}
charLiteral = (prev != '\\' && curr == '\'');
stringLiteral = (prev != '\\' && curr == '\"');
prev = (prev == '\\' && curr == '\\') ? '\0' : curr;
}
}
}
int main(int argc, char *argv[])
{
if (argc != 3) {
cerr << "Usage:\t" << argv[0] << " <input_file> <output_file>\n";
return 1;
}
ifstream fin(argv[1]);
ofstream fout(argv[2]);
if (!fin) {
cerr << "Error:\t\"" << argv[1] << "\" - no such file\n";
return 1;
}
parse(fin, fout);
fin.close();
fout.close();
return 0;
}
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.