欢迎来到天天文库
浏览记录
ID:51017258
大小:148.60 KB
页数:16页
时间:2020-03-17
《《编译原理》实验指导书.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、《编译原理》实验指导书 一、实验目的 1、正确理解正规式和正规集以及有限自动机的定义; 2、熟练掌握用状态转换图表示有限自动机的方法。 二、实验预习提示 1、正规表达式就是一种形式化的表示法,它可以表示单词符号的结构,从而精确地定义单词符号集。 正规表达式简称为正规式,它表示的集合即为正规集。 2、状态转换图是一张当输入不同内容时选择不同分析路径的有向图。 一个状态转换图可用于识别一定的字符串。 3、有限自动机(FA)是更一般化的状态转换图,可用来识别正规集;分为DFA和NFA两种。 三、实验内容构造识别如下字符串的状态转换图,并
2、将其编程实现。 1、识别标识符(以字母开始由字母和数字构成的字符串,要求长度不超过10);参考程序#include#include//字符串处理的头文件//判断一个字符是不是字母boolIsletter(charch){if(ch>='a'&&ch<='z'
3、
4、ch>='A'&&ch<='Z')returntrue;returnfalse;}//判断一个字符是不是数字boolIsDigit(charch){if(ch>='0'&&ch<='9')returntrue;returnfalse;}//判断一个字符串是不是标识符boolIsId(char
5、*str){if(!Isletter(str[0]))returnfalse;intl=strlen(str);//计算字符串的长度--22--for(inti=1;i 2、识别实数(要求正负号可有可无,长度不超过20,不要求识别用科学记数法表示的实数)。 3、(选做)识别实数(包含科学计数法)。 四、实验要求 1、编程语言可用C/C++中任意一种; 2、自行设计测试数据对程序进行测试,对输入的字符串(以’#’作为结束符)如果能识别,则显示“接受”,否则,显示“不接受”; 3、写出从文件读入源代码,输出测试结果至文件保存。 4、书写实验
6、报告;实验报告的格式可参见附录《实验报告参考格式》。 --33--实验二词法分析器的设计 一、实验目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。 并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。 并依次输出各个单词的内部编码及单词符号自身值。 (遇到错误时可显示“Error”,然后跳过错误部分继续显示) 二、实验预习提示1.词法分析器的功能和输出格式词法分析器的功能是
7、输入源程序,输出单词符号。 词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。 本实验中,采用的是一类符号一种别码的方式。 2.单词的BNF表示->->
8、
9、
10、ε->->
11、ε->+->-->>->>=3.“超前搜索”方法词法分析时,常常会用到超前搜索方法。 如当前待分析字符串为“a>+”,当前字符为’>’,此时,分析器到底是将其分析为大于关系运算符还是大于等于关系运算符呢?显然,只有知道下一个字符是什么才能下结论。 于是分析器读入下一个字符’+’,这时可知应将’>’解释为大于运算符。 但此时,超前读了一个字符’+’
12、,所以要回退一个字符,词法分析器才能正常运行。 在分析标识符,无符号整数等时也有类似情况。 三、实验过程和指导(一)准备1.阅读课本有关章节,花一周时间明确语言的语法,写出基本保留字、标识符、常数、运算符、分隔符和程序例。 2.初步编制好程序。 3.准备好多组测试数据。 (二)上课上机--44--将源代码拷贝到机上调试,发现错误,再修改完善。 第二次上机调试通过。 (三)程序要求程序输入/输出示例如源程序为C语言。 输入如下一段main(){inta,b;a=10;b=a+20;}要求输出如右图。 具体要求如下1.识别保留字if、i
13、nt、for、while、do、return、break、continue等2.其他的都识别为标识符;3.常数为无符号整形数;4.运算符包括+、-、*、/、=、>、<、>=、<=、!=5.分隔符包括,、;、{、}、(、)(四)程序思路(仅供参考)1.定义部分定义常量、变量、数据结构。 2.初始化从文件将源程序全部输入到字符缓冲区中。 3.取单词前去掉多余空白。 4.取单词后去掉多余空白(可选,看着办)。 5.取单词利用实验一的成果读出单词的每一个字符,组成单词,分析类型。 (关键是如何判断取单词结束?取到的单词是什么类型的单词?)6.显示结
14、果。 (五)练习该实验的目的和思路程序开始变得复杂起来,可能是大家以前编过的程序中最复杂的,但相对于以后的
此文档下载收益归作者所有