C++编写的用于去除C、C++、Java等语言的注释的代码片段
2018-07-20 来源:open-open
C++编写的用于去除C、C++、Java等语言的注释的代码片段
// 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; }
标签: 代码
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
下一篇:Linux C 获取本机相关信息
最新资讯
热门推荐