注释转换工具

该项目是一个C/C++语言的注释转换工具,利用状态机实现,可以在Linux/windows环境下运行,支持C++编译器和开发工具。该工具能够将/*...*/注释转化为//注释,并反之,同时处理单行、跨行和嵌套注释的转换。源码已封装为库方便使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注释转换工具

项目源码

项目简介 :

实现对一个C/C++语言程序源文件中注释的转换功能。

开发环境 : Linux/windows, c++, vs, vim, g++, gdb, make

主要技术 : 状态机,继承多态

实现思路 :

注释转换工具使用的主要的技术是状态机,通过对输入的文件流中的每个字符读取识别然后进入不同的状态进行处理,最终实现将输入文件流中的/**/注释转换为//。

主要代码摘录:

typedef enum
{
    NO_COMMENT_STATE,   //非注释状态
    C_COMMENT_STATE,    //c注释状态
    CPP_COMMENT_STATE,  //c++注释状态
    QUOTATION_STATE,    //引号状态
    END_STATE           //文本处理结束状态
}ENUM_STATE;

//状态机
typedef struct StateMachine
{
    FILE *inputfile;    //输入文件
    FILE *outputfile;   //输出文件
    ENUM_STATE state;   //当前状态
    ENUM_STATE pre_state;   //上一个状态
}StateMachine;

//注释转换的框架
int ConvertComment(FILE *inputfile, FILE *outputfile)
{
    if(inputfile==NULL || outputfile==NULL)
    {
        cout<<"argument is invalid."<<endl;
        return -1;
    }

    ///////////////////////////////////////////
    g_state.inputfile = inputfile;
    g_state.outputfile = outputfile;
    g_state.state = NO_COMMENT_STATE;

    char ch;
    while(g_state.state != END_STATE)
    {
        ch = fgetc(g_state.inputfile);
        EventPro(ch);
    }

    return 0;
}

//注释转换的核心过程
void EventPro(char ch)
{
    switch(g_state.state)
    {
    //根据当前状态机的状态调用对应的函数处理
    case NO_COMMENT_STATE:
        EventProAtNo(ch);
        break;
    case C_COMMENT_STATE:
        EventProAtC(ch);
        break;
    case CPP_COMMENT_STATE:
        EventProAtCpp(ch);
        break;
    case QUOTATION_STATE:
        EventProAtQuotation(ch);
        break;
    //case END_STATE:
    //  break;
    }
}

项目特点:

  1. 符合语法规则的前提下,支持c注释与c++注释相互转换。

  2. 支持单行注释,跨行注释和嵌套注释的转换。

  3. 将源码封装成库,进行加载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值