在C语言中利用有限状态自动机模拟编译器去除代码中/**/类注释的程序实现

来源:互联网 发布:天气预报数据库 编辑:程序博客网 时间:2024/06/05 05:17

 

C语言中实现去除/**/类注释的有限状态自动机为:

 

按照上图,实现代码如下:(编译器:C-Free 5.0)

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#define NULL 0main() {enum {x1 = 0,x2 = 1,x3 = 2,x4 = 3,x5 = 4,} state;FILE *fp_in, *fp_out;char ch, temp;state = x1;fp_in = fopen("编辑前代码.txt", "r");fp_out = fopen("编译后代码.txt", "w");if((fp_in = fopen("编译前代码.txt", "r")) == NULL) {printf("打开编译前代码.txt文件失败!");getchar();exit(1);}if((fp_out = fopen("编辑后代码.txt", "w")) == NULL) {printf("打开编译后代码.txt文件失败!");getchar();exit(1);}ch = fgetc(fp_in);do {switch(state) {            case 0: if(ch == '/') {                    state = x2;                    temp = ch;                    }                    else fputc(ch, fp_out);                    break;            case 1: if(ch == '*') state = x3;                    else {                        state = x1;                        fputc(temp, fp_out);fputc(ch, fp_out);                    }                    break;            case 2: if(ch == '*') state = x4;break;case 3: if(ch == '/') state = x5;        else if(ch == '*') state = x4;        else state = x3;break;case 4: if(ch == '/') state = x2;        else state = x1;        break;             default: break;}ch = fgetc(fp_in);}while(ch != EOF);printf("编译完成!\n");}


 

运行结果:

1.程序处理之前:

2.程序处理之后:

 

有限状态自动机使编程变地很简单!