编译原理试验参考指导书最终版
编译办法 实验指引书 柴本成 赵晨 编写 浙江万里学院 .01 目 录 实验一 有限自动机构造与实现1 实验二 词法分析器设计3 实验三 语法分析-递归下降分析器5 实验四 LL(1)文法预测分析表实现6 附 录9 附录一 实验成果提交与检查9 附录二 实验报告参照格式9 附录三 Visual C++上机环境简介10 附录四 参照程序13 实验一 有限自动机构造与实现 一、 实验目 1、 对的理解正规式和正规集以及有限自动机定义; 2、 纯熟掌握用状态转换图表达有限自动机办法。 二、 实验预习提示 1、 正规表达式就是一种形式化表达法,它可以表达单词符号构造,从而精准地定义单词符号集。正规表达式简称为正规式,它表达集合即为正规集。 2、 状态转换图是一张当输入不同内容时选取不同分析途径有向图。一种状态转换图可用于辨认一定字符串。 3、 有限自动机(FA)是更普通化状态转换图,可用来辨认正规集;分为DFA和NFA两种。 三、 实验内容 构造辨认如下字符串状态转换图,并将其编程实现。 1、 辨认标记符(以字母开始由字母和数字构成字符串,规定长度不超过10); 参照程序: #include #include //字符串解决头文献 //判断一种字符是不是字母 bool Isletter(char ch) { if(ch>= a return false; } //判断一种字符串是不是标记符 bool IsId(char *str) { if(!Isletter(str[0]))return false; int l=strlen(str);//计算字符串长度 for(int i=1;i ->|| |ε -> -> |ε -> + -> - -> > -> >= 3. “超前搜索”办法 词法分析时,经常会用到超前搜索办法。如当前待分析字符串为“a>+”,当前字符为’>’,此时,分析器究竟是将其分析为不不大于关系运算符还是不不大于等于关系运算符呢?显然,只有懂得下一种字符是什么才干下结论。于是分析器读入下一种字符’+’,这时可知应将’>’解释为不不大于运算符。但此时,超前读了一种字符’+’,因此要回退一种字符,词法分析器才干正常运营。在分析标记符,无符号整数等时也有类似状况。 三、实验过程和指引 (一)准备: 1. 阅读课本关于章节,花一周时间明确语言语法,写出基本保存字、标记符、常数、运算符、分隔符和程序例。 2. 初步编制好程序。 3. 准备好多组测试数据。 (二)上课上机: 将源代码拷贝到机上调试,发现错误,再修改完善。 第二次上机调试通过。 (2,”main”) (5,”(“) (5,”)“) (5,”{“) (1,”int”) (2,”a”) (5,”,”) (2,”b”) (5,”;”) (2,”a”) (4,”=”) (3,”10”) (5,”;”) (2,”b”) (4,”=”) (2,”a”) (4,”+”) (3,”20”) (5,”;”) (5,”}“) (三)程序规定: 程序输入/输出示例: 如源程序为C语言。输入如下一段: main() { int a,b; a = 10; b = a + 20; } 规定输出如右图。 详细规定如下: 1. 辨认保存字:if、int、for、while、do、return、break、 continue等 2. 其她都辨以为标记符; 3. 常数为无符号整形数; 4. 运算符涉及:+、-、*、/、=、>、=、<=、!= 5. 分隔符涉及:,、;、{、}、(、) (四)程序思路(仅供参照): 1. 定义某些:定义常量、变量、数据构造。 2. 初始化:从文献将源程序所有输入到字符缓冲区中。 3. 取单词前:去掉多余空白。 4. 取单词后:去掉多余空白(可选,看着办)。 5. 取单词:运用实验一成果读出单词每一种字符, 构成单词,分析类型。(核心是如何判断取单词结束?取到单词是什么类型单词?) 6. 显示成果。 (五)练习该实验目和思路: 程序开始变得复杂起来,也许是人们此前编过程序中最复杂,但相对于后来程序来说还是简朴。因而要认真把