| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
mx3y
10年前发布

C++编写的用于去除C、C++、Java等语言的注释的代码片段

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;  }