资源描述:
《牛用--编译原理实验指导书1》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《编译原理》上机指导牛冀平数学与计算机学院2011年9月冃IJ5《编译原理》是计算机专业的重要专业课之一,主要介绍程序设计语言编译构造的基木原理和基木实现方法。由于这门课程相对抽象且内容复杂,一直是最难学的一门课程。编译原理是一门理论性和实践性较强的课程,在学习过程中,实验非常重要,只有通过上机实验,才能使学生对比较抽象的课程内容产生一个具体的感性认识。但是,目前国内市场上很少有较详细且比较适合我校实际的实验指导书。为此,我们特编了这份指导书,希望能对我校的《编译原理》教学工作有所帮助。由于这门课实验难度较大,所以希望任课教师在实验前安排好学
2、生的预习工作。在上机前要求学生写好实验预习报告。木书中c程序均在Turboc2.0卜调试通过。由于编者水平有限,本书中必然存在着不少缺点,在此恳请大家给予批评和指正,我们将尽力纠正。如对本书有批评指正,请Email至houhf72@163.com。在此特对关心支持编写木书的院系领导表示感谢。实验一源程序的输入和扫描1实验二词法分析2实验三递归下降分析法8实验四LL(1)分析法14实验五算符优先法处理算术表达式与赋值语句19实验六逆波兰式白勺产生及计算31实验七LR(1)分析法36附录一实验报告样例41附录二词法分析器生成工具FLEX简介45附
3、录三语法分析器生成工具YACC简介511.主程序的部分伪代码:从输入设备接收所有输入到缓冲区While读入一字符成功显示该字符endwhile2.读入一字符的部分伪代码:if缓冲区非空then读出该字符改变缓冲区指针返回该字符else返冋结束标记endif实验一源程序的输入和扫描一、实验目的:编制一个源程序的输入过程,从键盘、文件或文本框输入若干行语句,依次存入输入缓冲区(字符型数据);并编制一个扌H描子程序,该子程序中每次调用能依次从存放源程序的输入缓冲区中读出一个有效字符。二、估计实验时间:1.课余准备2小时以上;2.上机一次2小时;3.
4、完成实验报告2小时。三、实验过程和指导:(-)准备:确定开发工具,如TC、VC、VC++、Delphi等;花一周时间熟悉开发工具。花一•周时间确立被处理的语言的语法特点(初步确泄,也可使用现成语言如Pascal、C等)。写好实验报告,编好程序。(-)上机:安装所需的开发工具,输入或拷贝程序,调试。(三)程序要求:如源程序为C语言。输入如下一段:main(){inta,b,c;a=10;b=20;c=a+b;}要求输出与输入相同。要点:读字符的子程序作为单独一个过程(函数),每调用它一次只返回缓冲区里的一个字符,主程序连续调用它就得到完整的输出
5、。(见右图)(四)练习该实验的目的和思路:1.程序非常简单,但要明白该程序的作用,为什么要设计成独立的子函数?耍将它和在以后的实验中进行比较,可得出这样处理的目的。2.通过练习,学握字符处理的方法。四、实验报告要求:1•写出编程思路、源代码;2.写出上机调试时发现的问题,以及解决的过程;3.写出你所使用的测试数据;4.谈谈你的体会。五、上交:1.实验报告;2.程序源文件(通过网络提交)。实验二词法分析一、实验目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词
6、法分析方法。编制一个读单词过程,从输入的源程序中,识别岀各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号白身值。(遇到错误吋可显示“Error”,然后跳过错误部分继续显示)二、实验预习提示1、词法分析器的功能和输出格式词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种別里,单词符号的局性值)。本实验中,采用的是一类符号一种別码的方式。2、单词的BNF表示v标识符>・>v字母〉v字母数字串〉v字母数字串>>v字母x字母数字串>lv数字x字
7、母数字串>1v下划线>v字母数字串>1£v无符号整数>・>v数字x数字串>V数字串》V数字X数字串〉I£V加法运算符>->+V减法运算符>>-V大于关系运算符>>>V人于等于关系运算符>>>=3、“超询搜索”方法词法分析时,常常会用到超前搜索方法。如当前待分析字符串为“Q+”,当前字符为此时,分析器倒底是将其分析为人于关系运算符还是人于等于关系运算符呢?显然,只有知道下一个字符是什么才能F结论。于是分析器读入卜•一个字符这时可知应将、'解释为人于运算符。但此时,超询读了一个字符所以要冋退一个字符,词法分析器才能正常运行。在分析标识符,无符号整
8、数等时也有类似情况。4、模块结构厂结束三、实验过程和指导:(―)准备:(2,"main")(5,,,(“)(5,,,)“)(5,(1,^inD(2,”a”)(5,