收藏 分享(赏)

天津科技大学 编译原理实验报告.doc

上传人:精品资料 文档编号:10836730 上传时间:2020-01-13 格式:DOC 页数:17 大小:105.50KB
下载 相关 举报
天津科技大学 编译原理实验报告.doc_第1页
第1页 / 共17页
天津科技大学 编译原理实验报告.doc_第2页
第2页 / 共17页
天津科技大学 编译原理实验报告.doc_第3页
第3页 / 共17页
天津科技大学 编译原理实验报告.doc_第4页
第4页 / 共17页
天津科技大学 编译原理实验报告.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、专业: 学号:姓名: 2009 年5月编译原理实验指导书前言“编译原理”是一门研究设计和构造编译程序原理和方法的课程,是计算机各专业的一门重要专业基础课。编译原理这门课程蕴含着计算机学科中解决问题的思路、形式化问题和解决问题的方法,对应用软件和系统软件的设计与开发有一定的启发和指导作用。编译程序构造的原理和技术在软件工程、逆向工程、软件再工程、语言转换及其他领域中都有着广泛的应用。通过本课程的实验教学,使学生加深对编译系统的结构、工作流程及编译程序各组成部分设计原理的理解,使他们能够掌握和应用常用的编译技术和方法,为今后从事应用软件和系统软件的开发打下一定的理论和实践基础。编译原理实验指导书围

2、绕着实验教学目标,详细阐述了各实验的原理和步骤。希望同学们能够充分利用实验条件,认真完成实验,从实验中得到应有的锻炼和培养。实验要求为了顺利完成编译原理课程实验,学生应做到: (1) 熟练掌握一种高级程序设计语言。(2) 实验前,认真学习教材以及实验指导书的相关内容,提前做好实验准备。(3) 每次实验先分析后编程,在实验报告中应写明自己的编程思路和设计流程。(4) 实验结束一周后提交实验报告。实验报告内容应包括:实验目的、实验内容、设计思路和流程框图,源程序(含注释)清单、测试结果以及实验总结。(5) 遵守机房纪律,服从辅导教师指挥,爱护实验设备。实验的验收将分为两个部分。第一部分是上机操作,

3、随机抽查程序运行和即时提问;第二部分是提交书面的实验报告。此外杜绝抄袭现象,一经发现雷同,双方成绩均以0分计算。目 录实验一 词法分析程序设计 1实验二 递归下降语法分析程序设计 51实验 1 词法分析程序设计【开发语言及实现平台或实验环境】C/C+/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 2005-2008【实验目的】(1)理解词法分析在编译程序中的作用(2)加深对有穷自动机模型的理解(3)掌握词法分析程序的实现方法和技术【实验内容】对一个简单语言的子集编制一个一遍扫描的词法分析程序。【实验要求】(1)待分析的简

4、单语言的词法1) 关键字begin if then while do end2) 运算符和界符:= + - * / = = 24digitdigit* 11 = 25+ 13 ; 26- 14 ( 27* 15 ) 28/ 16 # 0(3)词法分析程序的功能输入:所给文法的源程序字符串输出:二元组(syn,token 或 sum)构成的序列。syn 为单词种别码;token 为存放的单词自身字符串;sum 为整形常数。2例如:对源程序 begin x:=9;if x0 then x:=2*x+1/3;end# 经词法分析后输出如下序列:(1,begin)(10,x) (18,:=) (11,

5、9) (26,;) (2,if) 【实验步骤】(1)根据图 1.1 构建主程序框架图 1.1 词法分析主程序示意图代码提示:main()p=0;printf(“n please input string:n”);do输入源程序字符串,送到缓冲区 progp+中while(ch!=#);p=0;doscanner();/调用扫描子程序switch(syn)case 11:输出(数的二元组) ; break;case 1:输出(关键字 begin 的二元组) ; break;case 1:输出(错误) ;break; while(syn!=0);(2)关键字表置初值置初值调用扫描子程序输出串结束?

6、输出单词二元组是否结束3关键字作为特殊标识符处理,把它们预先安排在一张表格中(关键字表) ,当扫描程序识别标识符时,查关键字表。如能查到匹配的单词,则为关键字,否则为一般标识符。(3)编写扫描子程序代码提示:scanner().读下一个字符送入 ch;while(ch= = ) 读下一个字符 ;if(ch 是字母或数字 )while(ch 是字母或数字 )ch=token;读下一个字符 ;token 与关键字表进行比较,确定 syn 的值;elseif(ch 是数字 )syn=11;elseswith(ch)/其他字符情况case:.Default:syn=-1;(4)调试程序,验证输出结果。

7、4【思考题】(1)在编程过程中遇到了哪些问题,你是如何解决的。(2)源程序若存在注释,如何实现词法分析,在现有程序基础上进行扩充。【参考文献】1. 胡伦骏、徐兰芳等,编译原理(第 2 版) ,电子工业出版社,246,2005.72. 王雷、刘志成等,编译原理课程设计,机械工业出版社,138,2005.3实验 2 递归下降语法分析程序设计【开发语言及实现平台或实验环境】C/C+/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 2005-2008【实验目的】(1) 理解语法分析在编译程序中的作用,以及它与词法分析程序的关系(2

8、) 加深对递归下降语法分析原理的理解(3) 掌握递归下降语法分析的实现方法【实验内容】编制一个递归下降分析程序,实现对词法分析程序提供的单词序列的语法检查和结构分析。【实验要求】(1)待分析的简单语言的词法同实验 1(2)待分析的简单语言的语法用扩充的 BNF 表示如下:1):=beginend2) :=;3) :=4) :=ID:=5) :=+|-6) :=*|/7) :=ID|NUM|()(3)语法分析程序的功能输入单词串以”#” 结束,如果是文法正确的句子,输出成功信息;否则输出错误信息。例如:输入 begin a:=9; x:=2 * 3; b:=a + x end #输出 succe

9、ss输入 x:=a + b * c end #输出 error5【实验步骤】(1)根据图 2.1 递归下降分析程序示意图构建主程序框架图 2.1 递归下降分析程序示意图(2)编写各语法单位分析函数1)编写语句串及语句分析函数代码提示:yucu()/语句串分析函数调用 statement();/语句分析函数while(syn=26)读入下一个单词符号;调用 statement();return;statement()if(syn=10)读入下一个单词符号;if(syn=18)读入下一个单词符号;调用 expression 函数; /表达式分析函数else输出赋值号错误; kk=1/出错标记 el

10、se输出语句号错误; kk=1;return;2)编写表达式分析过程int expression()置初值调用 scanner 读下一个单词符号调用 lrparser结束6term();while(syn=13)|(syn=14)scanner();term();return 0;3)编写项分析过程int term()factor();while(syn=15)|(syn=16)scanner();factor();return 0;4)编写因子分析过程int factor()if(syn=10)|(syn=11)scanner();elseif(syn=27)scanner();expres

11、sion();if(syn=28)syn=scanner();elsecout#include#includeusing namespace std;char prog80, token8;char ch;int syn, p, m, n, sum, kk;char *rwtab6 = “begin“, “if“, “then“, “while“, “do“, “end“ ;int scanner(); /调用scanner函数int lrparscr(); /调用lrparscr函数int yucu(); /调用yucu函数int statement(); /调用statement函数int

12、 expression(); /调用expression函数int term(); /调用term函数int factor(); /调用factor函数void main()p = 0;cout = a /出现错误else switch (ch) /其他字符时case)syn = 21; /不等于tokenm+ = ch;else if (ch = =)syn = 22; /小于等于tokenm+ = ch; elsesyn = 23; /大于p-; /回退一个字符break;case:m = 0; tokenm+ = ch;ch = progp+; /读下一个单词符号并赋给chif (ch

13、= =)syn = 24; /大于等于12tokenm+ = ch;elsesyn = 20; /小于p-; /回退一个字符break;case:m = 0; tokenm+ = ch;ch = progp+; /读下一个单词符号并赋给chif (ch = =)syn = 18; /等于tokenm+ = ch;elsesyn = 17; /冒号:p-;break;case+:syn = 13; token0 = ch; break;case-:syn = 14; token0 = ch; break;case*:syn = 15; token0 = ch; break;case/:syn =

14、 16; token0 = ch; break;case=:syn = 25; token0 = ch; break;case;:syn = 26; token0 = ch; break;case(:syn = 27; token0 = ch; break;case):syn = 28; token0 = ch; break;case#:syn = 0; token0 = ch; break;casen:syn = -2; break;default: syn = -1; break;return syn;【运行结果】13【思考题】(1) 你所编制的程序与实验 1 程序有何联系,如何应用实验 1。答:语法分析程序用到了词法分析程序中的 scanner 函数(词法扫描程序) ,并将其作为其中一个模块,与其它函数共同完成语法分析任务,语法分析程序以词法分析程序提供的单词序列为来源,并对其进行语法检查和结构分析。编译程序对源程序字符串要先进行词法分析,然后进行语法分析、语义分析等后续工作。(2) 将源程序放置在文本文件中,运用流操作实现对源程序的扫描和分解,编程实现。【参考文献】1胡伦骏、徐兰芳等,编译原理(第 2 版) ,电子工业出版社,246,2005.72王雷、刘志成等,编译原理课程设计,机械工业出版社,138,2005.3

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报