注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

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

OC/C/C++ 水墨上仙 1975次浏览 已收录 手机上查看

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


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明C++编写的用于去除C、C++、Java等语言的注释的代码片段
喜欢 (0)
[开心洋葱]
分享 (0)
关于作者:
水墨上仙
……
加载中……