删除C/C++中的注释-有限状态机(C语言实现)
2010-10-30 21:17
609 查看
前段时间写了一个删除c/c++源程序中的注释的程序,结构比较复杂,现在考虑用有限状态机来解决。代码没有考虑字符串、嵌套下的情况,若要考虑,还需进行少许修改。代码如下
#include <stdio.h> enum { CODE, COMMENT1, //“/**/”型注释 COMMENT2, //“//”型注释 }g_state=CODE; enum Input{ CH, //其他字符 CH1, // "/*" or "*/" CH2, // "//" RT, // "/n" }; Input alter(char ch, FILE *file) { char temp; if(ch=='/') { temp = fgetc(file); if(temp=='/') return CH2; else if(temp=='*') return CH1; else { fseek(file, -1, 1); return CH; } } else if(ch=='*') { temp = fgetc(file); if(temp=='/') return CH1; else { fseek(file, -1, 1); return CH; } } else if(ch=='/n') return RT; else return CH; } int main() { FILE *infile = fopen("infile.cpp", "r"); FILE *outfile = fopen("outfile.cpp", "w"); Input input; if(infile==NULL) { printf("cannot open infile!"); return -1; } char ch; ch = fgetc(infile); while(ch!=EOF) { input = alter(ch, infile); switch(g_state) { case CODE: if(input==CH || input==RT) fputc(ch, outfile); else if(input==CH1) g_state = COMMENT1; else if(input==CH2) g_state = COMMENT2; else ; break; case COMMENT1: if(input==CH1) g_state = CODE; break; case COMMENT2: if(input==RT) { fputc('/n', outfile); g_state = CODE; break; } } ch = fgetc(infile); } printf("complete!"); getchar(); fclose(infile); fclose(outfile); return 0; }
相关文章推荐
- 删除源文件注释语句----有限状态机算法实现
- 删除C/C++文件中的注释(c实现)
- 怎样删除C++代码中的注释——有限状态机思想的使用
- C语言注释转化为C++注释(C语言实现)
- 删除c 或 c++源文件注释程序(c++实现)
- c语言实现注释转换(c转为c++)
- C语言实现代码注释的自动删除
- 用C语言实现 C到C++的注释转换
- 实现C++注释转换为标准C语言注释
- C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现
- C语言实现有限状态机
- C语言实现有限状态机
- 平衡二叉树(可重复key)插入删除(c/c++实现)
- 用C++可变参数模板实现类似C语言的printf
- C语言写的简单贪吃蛇程序,实现WASD控制蛇运动,输入输出流为C++
- c语言原生实现MD5 不含c++的任何api
- Java 删除c/c++/java代码注释的代码片段
- c++:删除文件注释和将文件里面的行注释换成块注释
- c语言:顺序表的实现(一) 创建,插入,删除,查找,输出等基本操作实现
- 将C/C++代码中的注释删除