- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实验指导书
PAGE 2
PAGE 3
《编译原理》上机指导
前 言
《编译原理》是计算机专业的重要专业课之一,主要介绍程序设计语言编译构造的基本原理和基本实现方法。由于这门课程相对抽象且内容复杂,一直是最难学的一门课程。编译原理是一门理论性和实践性较强的课程,在学习过程中,实验非常重要,只有通过上机实验,才能使学生对比较抽象的课程内容产生一个具体的感性认识。但是,目前国内市场上很少有较详细且比较适合我校实际的实验指导书。为此,我们特编了这份指导书,希望能对我校的《编译原理》教学工作有所帮助。
由于这门课实验难度较大,所以希望任课教师在实验前安排好学生的预习工作。在上机前要求学生写好实验预习报告。
本书中c程序均在Turbo c 2.0下调试通过。
由于编者水平有限,本书中必然存在着不少缺点,在此恳请大家给予批评和指正,我们将尽力纠正。如对本书有批评指正,请Email至houhf72@163.com。
在此特对关心支持编写本书的院系领导表示感谢。
目 录
实验一 源程序的输入和扫描 1
实验二 词法分析 2
实验三 递归下降分析法8
实验四 LL(1)分析法14
实验五 算符优先法处理算术表达式与赋值语句19
实验六 逆波兰式的产生及计算31
实验七 LR(1)分析法36
附录一 实验报告样例41
附录二 词法分析器生成工具FLEX简介45
附录三 语法分析器生成工具YACC简介51
编译原理实验指导书
PAGE 38
PAGE 37
实验一 源程序的输入和扫描
一、实验目的:编制一个源程序的输入过程,从键盘、文件或文本框输入若干行语句,依次存入输入缓冲区(字符型数据);并编制一个扫描子程序,该子程序中每次调用能依次从存放源程序的输入缓冲区中读出一个有效字符。
二、估计实验时间:1.课余准备2小时以上;2.上机一次2小时;3.完成实验报告2小时。
三、实验过程和指导:
(一)准备:确定开发工具,如TC、VC、VC++、Delphi等;花一周时间熟悉开发工具。花一周时间确定被处理的语言的语法特点(初步确定,也可使用现成语言如Pascal、C等)。写好实验报告,编好程序。
(二)上机:安装所需的开发工具,输入或拷贝程序,调试。
1.主程序的部分伪代码:从输入设备接收所有输入到缓冲区
1.主程序的部分伪代码:
从输入设备接收所有输入到缓冲区
While 读入一字符成功
显示该字符
end while
2.读入一字符的部分伪代码:
if 缓冲区非空 then
读出该字符
改变缓冲区指针
返回该字符
else
返回结束标记
end if
如源程序为C语言。输入如下一段:
main()
{
int a,b ,c;
a = 10; b=20;
c=a+b;
}
要求输出与输入相同。
要点:读字符的子程序作为单独一个过程(函数),每调用它一次只返回缓冲区里的一个字符,主程序连续调用它就得到完整的输出。(见右图)
(四)练习该实验的目的和思路:
1.程序非常简单,但要明白该程序的作用,为什么要设计成独立的子函数?要将它和在以后的实验中进行比较,可得出这样处理的目的。
2.通过练习,掌握字符处理的方法。
四、实验报告要求:
1.写出编程思路、源代码;
2.写出上机调试时发现的问题,以及解决的过程;
3.写出你所使用的测试数据;
4.谈谈你的体会。
五、上交:
1.实验报告;
2.程序源文件(通过网络提交)。
#includestdio.h
#includestdio.h
void main()
{
char ch;
while(1)
{
ch=getchar();
printf(%c,ch);
}
}
实验二 词法分析
一、实验目的:
通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)
二、实验预习提示
词法分析器的功能和输出格式
词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。本实验中,采用的是一类符号一种别码的方式。
单词的BNF表示
标识符- 字母字母数字串
字母数字串-字母字母数字串|数字字母数字串|
下划线字母数字串|ε
无符号整数- 数字数字串
数字串- 数字数字串 |ε
加法
文档评论(0)