注释转换工具
项目简介 :
实现对一个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;
}
}
项目特点:
符合语法规则的前提下,支持c注释与c++注释相互转换。
支持单行注释,跨行注释和嵌套注释的转换。
- 将源码封装成库,进行加载使用。