正文

用状态机实现对代码中注释的清除2008-07-03 14:11:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/zhaoyg/36443.html

分享到:

之前写了一个同样功能的一段程序http://blog.programfan.com/article.asp?id=34327这次模仿别人的思路,我自己又重新写了一个用状态机实现的。相比之前我写的那个,这次的代码明显短了很多。/*用状态机实现对代码中注释的清除.Visual C++ 2005 编译08.6.26zhaoyg*/ #include <stdio.h>#include <string.h> #define SCREEN void initialize_fsm(char fsm[7][256]); int main(){ int ch , temp = 0 ; int state = 0; char fsm[7][256];  FILE *pfin ; pfin = fopen("sweep-comments.txt","r");  #ifdef SCREEN  #define OUT stdout #else  FILE *pfout;  pfout = fopen("result.txt","w");  #define OUT pfout #endif  initialize_fsm(fsm);  #pragma region FSM ///尝试#pragma region功能. Visual C++ 2005  while ((ch = fgetc(pfin)) !=EOF) {  state = fsm[state][ch];   if ( state != 2  && ch !='*' && temp == '/')   fputc(temp,OUT);   temp = ch;   switch(state)  {   /*0,5,6执行同一个动作*/   case 5:   case 6:   case 0:     fputc(ch,OUT);     break;   case 7:     state = 0;     break;  }   if(state != 1)   temp=0; } #pragma endregion} void initialize_fsm(char fsm[7][256]){ int lenth = sizeof(char)*256;  memset(fsm[0],0,lenth); memset(fsm[1],0,lenth); memset(fsm[2],2,lenth); memset(fsm[3],3,lenth); memset(fsm[4],3,lenth); memset(fsm[5],5,lenth); memset(fsm[6],5,lenth);  fsm[0]['"'] = 5; fsm[0]['/'] = 1; fsm[1]['/'] = 2; fsm[1]['*'] = 3; fsm[2]['\n'] = 0; fsm[3]['*'] = 4; fsm[4]['/'] = 7; fsm[5]['\\'] = 6; fsm[5]['"'] = 0;}

阅读(3334) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册