牛用--编译原理实验指导书1

上传人:飞*** 文档编号:5024108 上传时间:2017-08-27 格式:DOC 页数:59 大小:512KB
返回 下载 相关 举报
牛用--编译原理实验指导书1_第1页
第1页 / 共59页
牛用--编译原理实验指导书1_第2页
第2页 / 共59页
牛用--编译原理实验指导书1_第3页
第3页 / 共59页
牛用--编译原理实验指导书1_第4页
第4页 / 共59页
牛用--编译原理实验指导书1_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《牛用--编译原理实验指导书1》由会员分享,可在线阅读,更多相关《牛用--编译原理实验指导书1(59页珍藏版)》请在金锄头文库上搜索。

1、0编译原理上机指导牛冀平数学与计算机学院2011 年 9 月 实验指导书 1前 言编译原理是计算机专业的重要专业课之一,主要介绍程序设计语言编译构造的基本原理和基本实现方法。由于这门课程相对抽象且内容复杂,一直是最难学的一门课程。编译原理是一门理论性和实践性较强的课程,在学习过程中,实验非常重要,只有通过上机实验,才能使学生对比较抽象的课程内容产生一个具体的感性认识。但是,目前国内市场上很少有较详细且比较适合我校实际的实验指导书。为此,我们特编了这份指导书,希望能对我校的编译原理教学工作有所帮助。由于这门课实验难度较大,所以希望任课教师在实验前安排好学生的预习工作。在上机前要求学生写好实验预习

2、报告。本书中 c 程序均在 Turbo c 2.0 下调试通过。由于编者水平有限,本书中必然存在着不少缺点,在此恳请大家给予批评和指正,我们将尽力纠正。如对本书有批评指正,请 Email 至 。在此特对关心支持编写本书的院系领导表示感谢。2目 录实验一 源程序的输入和扫描 -1实验二 词法分析 -2实验三 递归下降分析法-8实验四 LL(1)分析法-14实验五 算符优先法处理算术表达式与赋值语句-19实验六 逆波兰式的产生及计算-31实验七 LR(1)分析法-36附录一 实验报告样例-41附录二 词法分析器生成工具 FLEX 简介-45附录三 语法分析器生成工具 YACC 简介-51实验一 源

3、程序的输入和扫描一、实验目的:编制一个源程序的输入过程,从键盘、文件或文本框输入若干行语句,依次存入输入缓冲区(字符型数据) ;并编制一个扫描子程序,该子程序中每次调用能依次从存放源程序的输入缓冲区中读出一个有效字符。二、估计实验时间:1.课余准备 2 小时以上;2.上机一次 2 小时;3.完成实验报告 2 小时。三、实验过程和指导:(一)准备:确定开发工具,如 TC、VC、VC+、Delphi 等;花一周时间熟悉开发工具。花一周时间确定被处理的语言的语法特点(初步确定,也可使用现成语言如 Pascal、C 等) 。写好实验报告,编好程序。(二)上机:安装所需的开发工具,输入或拷贝程序,调试。

4、(三)程序要求:如源程序为 C 语言。输入如下一段:main()int a,b ,c;a = 10; b=20;c=a+b;要求输出与输入相同。要点:读字符的子程序作为单独一个过程(函数) ,每调用它一次只返回缓冲区里的一个字符,主程序连续调用它就得到完整的输出。 (见右图)(四)练习该实验的目的和思路:1.程序非常简单,但要明白该程序的作用,为什么要设计成独立的子函数?要将它和在以后的实验中进行比较,可得出这样处理的目的。2.通过练习,掌握字符处理的方法。四、实验报告要求:1.写出编程思路、源代码;2.写出上机调试时发现的问题,以及解决的过程;3.写出你所使用的测试数据;4.谈谈你的体会。五

5、、上交:1.实验报告;2.程序源文件(通过网络提交) 。1.主程序的部分伪代码:从输入设备接收所有输入到缓冲区While 读入一字符成功显示该字符end while2.读入一字符的部分伪代码:if 缓冲区非空 then读出该字符改变缓冲区指针返回该字符else返回结束标记end if 实验指导书 1实验二 词法分析一、实验目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出

6、各个单词的内部编码及单词符号自身值。 (遇到错误时可显示“Error” ,然后跳过错误部分继续显示)二、实验预习提示1、 词法分析器的功能和输出格式词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值) 。本实验中,采用的是一类符号一种别码的方式。2、 单词的 BNF 表示- -|- - | - +- - =3、 “超前搜索”方法词法分析时,常常会用到超前搜索方法。如当前待分析字符串为“a+”,当前字符为,此时,分析器倒底是将其分析为大于关系运算符还是大于等于关系运算符呢?显然,只有知道下一个字符是什么才能下结论。于是分析器读入下

7、一个字符+ ,这时可知应将 解释为大于运算符。但此时,超前读了一个字符+ ,所以要回退一个字符,词法分析器才能正常运行。在分析标识符,无符号整数等时也有类似情况。4、模块结构2三、实验过程和指导:(一)准备:缓冲区扫描一个字符主函数 main()N输入文件名,判断能否打开文件Y缓冲区中是否还有字符Y结束取单词 扫描一个字符调用返回输出N 实验指导书 31.阅读课本有关章节,明确语言的语法,写出基本保留字、标识符、常数、运算符、分隔符和程序例。2.初步编制好程序。3.准备好多组测试数据。(二)上课上机:将源代码拷贝到机上调试,发现错误,再修改完善。第二次上机调试通过。(三)程序要求:程序输入/输

8、出示例:如源程序为 C 语言。输入如下一段:main()int a,b;a = 10;b = a + 20;要求输出如右图。要求:识别保留字:if、int、for、while、do、return、break、continue;单词种别码为 1。其他的都识别为标识符;单词种别码为 2。常数为无符号整形数;单词种别码为 3。运算符包括:+、-、*、/、=、=、#include #include #include #include #define NULL 0FILE *fp;char cbuffer;char *key8=if,else,for,while,do,return,break,cont

9、inue;char *border6=,;,(,);char *arithmetic4=+,-,*,/;char *relation6=,=, 实验指导书 5constsi-1=(char *)malloc(sizeof(searchchar);strcpy(constsi-1,searchchar);constnum+;return(i);case 6:for (i=0;i 实验指导书 7实验三:递归下降分析法一、实验目的:根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。二、实验预习提示1、递归下降分析法的功能词法分析器的

10、功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。2、递归下降分析法的前提改造文法:消除二义性、消除左递归、提取左因子,判断是否为 LL(1)文法,3、递归下降分析法实验设计思想及算法为 G 的每个非终结符号 U 构造一个递归过程,不妨命名为 U。U 的产生式的右边指出这个过程的代码结构:(1)若是终结符号,则和向前看符号对照,若匹配则向前进一个符号;否则出错。(2)若是非终结符号,则调用与此非终结符对应的过程。当 A 的右部有多个产生式时,可用选择结构实现。具体为:(1)对于每个非终结符号 U-u1|u2|un 处理的方法如下:U( )ch=当前符号;if(ch 可能是 u1 字的开

11、头) 处理 u1 的程序部分;else if(ch 可能是 u2 字的开头 )处理 u2 的程序部分;else error() (2)对于每个右部 u1-x1x2xn 的处理架构如下:处理 x1 的程序;处理 x2 的程序; 处理 xn 的程序;(3)如果右部为空,则不处理。(4)对于右部中的每个符号 xi如果 xi 为终结符号:if(xi= = 当前的符号 )NextChar();return;else出错处理如果 xi 为非终结符号,直接调用相应的过程 xi()说明: NextChar 为前进一个字符函数。四、实验过程和指导:(一)准备:1.阅读课本有关章节,2.考虑好设计方案;83.设计

12、出模块结构、测试数据,初步编制好程序。(二)上课上机:将源代码拷贝到机上调试,发现错误,再修改完善。第二次上机调试通过。(三)程序要求:程序输入/输出示例:对下列文法,用递归下降分析法对任意输入的符号串进行分析:(1)E-TG(2)G-+TG| TG (3)G-(4)T-FS(5)S-*FS|/FS(6)S-(7)F-(E)(8)F-i输出的格式如下:(1)递归下降分析程序,编制人: 姓名,学号,班级(2)输入一以#结束的符号串(包括 +*/()i#): 在此位置输入符号串例如: i+i*i#(3)输出结果: i+i*i#为合法符号串备注:输入一符号串如 i+i*#,要求输出为“非法的符号串

13、”。引用也要改变) 。注意:1.表达式中允许使用运算符(+-*/ ) 、分割符(括号) 、字符 I,结束符#;2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好) ;3.对学有余力的同学,可以详细的输出推导的过程,即详细列出每一步使用的产生式。(四)程序思路(仅供参考):0.定义部分:定义常量、变量、数据结构。1.初始化:从文件将输入符号串输入到字符缓冲区中。2.利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。(五)练习该实验的目的和思路:程序开始变得复杂起来,需要利用到程序设计语言的知识和大量编程技巧,递归下降分析法是一种较实用的分析法,通过这个

14、练习可大大提高软件开发能力。通过练习,掌握函数间相互调用的方法。(六)为了能设计好程序,注意以下事情:1.模块设计:将程序分成合理的多个模块(函数) ,每个模块做具体的同一事情。2.写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。3.编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。五、上交:1.程序源代码(上交软盘) ;2.已经测试通过的测试数据 3 组;3.实验报告:实验名称实验目的和要求(一)实验内容(1)功能描述:该程序具有什么功能?(2)程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;函数之间的调用关系图。(3)程序总体执行流程图(二)实验过程记录:出错次数、出错严重程度、解决办法摘要。(三)实验总结:你在编程过程中花时多少?多少时间在纸上设计?多少时间上机输入和调试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的程序的评价?你的收获有哪些?六、参考源程序:#include 实验指导书 9#in

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号