欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

C++编写的用于去除C、C++、Java等语言的注释的代码片段,java片段,// author :R

来源: javaer 分享于  点击 14129 次 点评:33

C++编写的用于去除C、C++、Java等语言的注释的代码片段,java片段,// author :R


// 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;}
相关栏目:

用户点评