编译原理:实验三自动机程序的设计与实现

您所在的位置:网站首页 自动机的作用 编译原理:实验三自动机程序的设计与实现

编译原理:实验三自动机程序的设计与实现

#编译原理:实验三自动机程序的设计与实现| 来源: 网络整理| 查看: 265

一、实验目的 编写程序实现自动机对词法分析单词的识别程序 二、实验重难点 自动机的程序实现及识别 三、实验内容与要求 1、FA的程序表示; 2、FA的识别。 四、实验学时 4课时 五、实验设备与环境 Visual C++ 6.0 六、实验过程 1.给出附录中自动机的图形化表示。

在这里插入图片描述

该自动机的初态是 0 ;终态集是 3 。输入附录中给出的代码,并进行调试运行及测试: ⑴测试用例1: aab ; ⑵运行结果:

在这里插入图片描述

⑶测试用例2:: bba ; ⑷运行结果: 在这里插入图片描述

构造正规式00(0|1)*11相应的DFA。 ⑴与该正规式等价的NFA为:

在这里插入图片描述

⑵与该正规式等价的最小化DFA为:

在这里插入图片描述

⑶编写程序实现该DFA: ①程序代码:

#include int in(int s, int z) { if (s==z) { printf("arrive at the end state 4\n"); return 1; } else return 0; } int step(int s, char t) { if (t=='0') { switch(s) { case 0: return 1; case 1:return 2; case 2:return 2; case 4:return 2; } } else if(t=='1') { switch(s) { case 2:return 4; case 4:return 4; } } } int realize(char *input) { int z=4; int s,i; // s=s0; for (int i=0;input[i]!='\n';i++) { printf("%2d",s); s = step(s,input[i]); } if (in(s,z)) return 1; else return 0; } main() { int i; int a; char input[40]; printf("FA=({0,1,2,4},{0,1},M,0,{4})\n"); printf("M:\n"); printf("M(0,0)=1 "); printf("M(1,0)=2 "); printf("M(2,0)=2 M(2,1=4\n)"); printf("M(4,0)=2 M(4,1=4\n)"); printf("please enter your string which is to be checked:\n"); lop: for(i=0;input[i-1]!='\n';i++) scanf("%c",&input[i]); for(i=0;input[i-1]!='\n';i++) if(input[i]!='0'&&input[i]!='1'&&input[i]!='\n') { printf("input error,enter again please;\n"); goto lop; } printf("the status sequence is:\n"); a=realize(input); if(a==1) printf("\nSo this string can be identified\n"); else printf("\nSo this string can not be identified\n"); printf("press enter to exit the program\n"); getchar(); }

②测试运行结果:

在这里插入图片描述

教师评语: 是否完成实验程序的预备设计? 是: 不是: 程序能否正常运行? 是: 不是: 有无测试数据及结果分析 是: 不是: 是否在本次规定时间完成所有项目? 是: 不是: 实验成绩等级: 教师签名: N0: 时间:

附录: FA = ({0,1,2,3},{a,b},M,0,{3}) M: M(0,a)=1 M(0,b)=2 M(1,a)=3 M(1,b)=2 M(2,a)=1 M(2,b)=3 M(3,a)=3 M(3,b)=3 参考程序:

#include int in(int s, int z) { if (s==z) { printf("arrive at the end state 3\n"); return 1; } else return 0; } int step(int s, char t) { if (t=='a') { switch(s) { case 0;return 1; case 1:return 3; case 2:return 1; case 3:return 3; } } else if(t=='b') { switch(s) { case 0:return 2; case 1:return 2; case 2:return 3; case 3:return 3; } } } int realize(char *input) { int z=3; int s,i; s=s0; for (int i=0;input[i]!='\n';i++) { printf("%2d",s); s = step(s,input[i]); } if (in(s,z)) return 1; else return 0; } main() { int i; int a; char input[40]; printf("FA=({0,1,2,3},{a,b},M,0,{3})\n"); printf("M:\n"); printf("M(0,a)=1 M(0,b=2\n)"); printf("M(1,a)=3 M(1,b=2\n)"); printf("M(2,a)=1 M(2,b=3\n)"); printf("M(3,a)=1 M(3,b=3\n)"); printf("please enter your string which is to be checked:\n"); lop: for(i=0;input[i-1]!='\n';i++) scanf("%c",&input[i]); for(i=0;input[i-1]!='\n';i++) if(input[i]!='a'&&input[i]!='b'&&input[i]!='\n') { printf("input error,enter again please;\n"); goto lop; } printf("the status sequence is:\n"); a=realize(input); if(a==1) printf("\nSo this string can be identified\n"); else printf("\nSo this string can not be identified\n"); printf("press enter to exit the program\n"); getchar(); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3