无符号数的有穷自动机的实现.docVIP

  • 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)

1亿VIP精品文档

相关文档