您的位置:首页 > 编程语言 > C语言/C++

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

2012-11-15 22:54 806 查看
C语言中实现去除/**/类注释的有限状态自动机为:



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

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

#define NULL 0

main() {
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.程序处理之后:



有限状态自动机使编程变地很简单!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: