- 14
- 0
- 约2.65千字
- 约 7页
- 2020-06-16 发布于广东
- 举报
—
PAGE
PAGE 5
欢迎下载
内蒙古工业大学信息工程学院
实 验 报 告
课程名称: _____编译原理 _____ _
实验名称:无符号数的有穷自动机的实现
实验类型: 验证性□ 综合性□ 设计性□
实验室名称: 电力大楼九楼东
班级: 计12-1班 学号: 201220201006
姓名: 初旭 组别:
同组人: 成绩:
实验日期: 2015年6月2日
实验一 无符号数的有穷自动机的实现
(一)实验目的
无符号数的有穷自动机的实现目的是使学生掌握文法的形式描述,穷自动机的概念。将文法转换成有穷自动机的方法,理解出错处理程序思想,如何用状态矩阵实现一个穷自动机的机内表示。
(二)实验内容
1.无符号数的BNF描述
(0)无符号数 à d 余留无符号数 | .十进制数 | e 指数部分
(1)余留无符号数àd 余留无符号数|.十进制数 | e 指数部分|ε
(2)十进制小数 à d 余留十进制小数
(3)余留十进制小数 e 指数部分 | d 余留十进制小数 | ε
(4)指数部分 à d 余留整指数 | + 整指数 | - 整指数
(5)整指数 à d 余留整指数
(6)余留整指数 à d 余留整指数 | ε
2.将G[无符号数]文法转换成有穷自动机。
3.构造状态矩阵;将有穷自动机的状S1 S2 ……Sn及输入的字a1 a2 ……am
4.用状态矩阵设计出一个词法分析程序。
5.扫描无符号数,根据文法给出无符号数出错的位置。
(三)实验原理
1)无符号数的文法描述如下:
0.无符号数 à d 余留无符号数 | . 十进制数 | e 指数部分
1.余留无符号数 à d 余留无符号数 | . 十进制数 | e 指数部分 | ε
2.十进制小数 à d 余留十进制小数
3.余留十进制小数 e 指数部分 | d 余留十进制小数 | ε
4.指数部分 à d 余留整指数 | + 整指数 | - 整指数
5.整指数 à d 余留整指数
6.余留整指数 à d 余留整指数 | ε
2)无符号数的有穷自动机实现的思想
用0表示无符号数; 用1表示余留无符号数;
用2表示十进制小数;用3表示余留十进制小数;
用4表示指数部分; 用5表示整指数;
用6表示余留整指数。
输入无符号数序列,从左到右扫描,遇到“#”号结束扫描。设一个字符数组,接收输入的无符号数,对输入的无符号数逐一进行分析,用一个中间变量接收当前字符。当前字符值发生错误时,输出错误信息;当前字符值正确时,分析下一个字符,反复判断,直至分析完毕。
无符号数的有穷自动机(Z表示结束符)
(四)程序清单
#includestdio.h
void main()
{
char wfh[50];
int i,zf,flag,num;
char ch1,ch2;
while(1)
{
printf(Please Inpput Number:);
scanf (%s,wfh);
strcat(wfh,$);
i=0;
zf=0;
flag=0;
num=0;
while (wfh[i]!=$){
ch1=wfh[i];
ch2=wfh[i+1];
if (ch1=0ch1=9){
if((ch2=0ch2=9)||ch2==.||ch2==e||ch2==$)
zf=1;
else
zf=0;
}
if(ch1==.){
flag++;
if((ch2=0ch2=9||ch2==$)(flag==1||num=1))
zf=1;
else
zf=0;
}
if(ch1==e){
num++;
if(ch2=0ch2=9||ch2==+||ch2==-||ch2==$)
zf=1;
else
zf=0;
}
if(ch1==+||ch1==-){
num++;
if(i==0)break;
if(ch2=0ch2=9||ch2==$)
zf=1;
else
zf=0;
}
if(zf==0)break;
i++;
}
if(zf==0)
printf(Input number are error !\n);
else
printf(INput number are right !\n);
}
}
(五) 程序运行结果测试
(六)设计体会
通过这次实验,加强了对这部分知识的巩固,也起到了对考试复习的作用。编译原理程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都有不止一个高级语言的编译程序,从功能上看,一个编译程序就是一个语言翻译程序。因此,学好编译原理这门课程对于计算机专业的学生有重要意义。通过
原创力文档

文档评论(0)