编译原理实验构造有穷状态自动机实验报告.doc
文本预览下载声明
西北师范大学计算机科学与工程学院学生实验报告
学 号 201171030117 专业 计算机科学与技术 姓名 来 煜 课程名称 计算机编译原理 班级 2011级计师(1)班 实验名称 从正则文法构造有穷状态自动机 课程类型 必修类 实验目标
1、掌握有穷状态自动机的概念;
2、掌握有穷状态自动机的存储及表示方法;
3、掌握有穷状态自动机与正则文法之间的联系。
实验要求
1、识别有穷状态自动机是确定的还是非确定的;
2、构造的有穷状态自动机以相应的五元组形式输出。
实验代码
#include string.h
#include stdio.h
#include stdlib.h
int main()
{
char p[30][30]; //存放文法
char q[30][30];
int line = 0;
int n;
int i, j;
int count =0;
int k,t = 0;
int flag = 0;
int l,m = 0;
char VN[30] = {\0}; //存放非终结符号
char VT[30] = {\0}; //存放终结符号
printf(请输入规则个数:);
scanf(%d,n);
line = n;
for(i = 0; i 30; i++) //给字符串数组p、q全部赋值为\0
for(j=0;j30;j++)
{
p[i][j]=\0;
q[i][j]=\0;
}
printf(请输入文法:\n);
for(i = 0; i line; i++)
{
scanf(%s,p[i]);
}
//把字符分为终结符号合非终结符号
l=0;
m=0;
for(i = 0;i line; i++)
{
for(j = 0;j 30(p[i][j] != \0);j++)
{
// 非终结符号放入数组VN中
if((p[i][j]=z p[i][j]=a)||(p[i][j]=9 p[i][j]=0))
{
flag = 0;
for(t=0; VN[t] != \0;t++)
{
if(VN[t] == p[i][j])
{
flag = 1;
break;
}
}
if(flag == 0)
{
VN[l] = p[i][j];
l++;
}
}
// 终结符号放入数组VT中
if(p[i][j]=Z p[i][j]=A)
{
flag = 0;
for(t = 0; t30(VT[t] != \0); t++)
显示全部