资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
编译原理实验指导书专业:计算机各专业学号:姓名:2012 年 月前言“编译原理”是一门研究设计和构造编译程序原理和方法的课程,是计算机各专业的一门 重要专业基础课。编译原理这门课程蕴含着计算机学科中解决问题的思路、形式化问题和解 决问题的方法,对应用软件和系统软件的设计与开发有一定的启发和指导作用。编译程序构 造的原理和技术在软件工程、逆向工程、软件再工程、语言转换及其他领域中都有着广泛的 应用。通过本课程的实验教学,使学生加深对编译系统的结构、工作流程及编译程序各组成 部分设计原理的理解,使他们能够掌握和应用常用的编译技术和方法,为今后从事应用软件 和系统软件的开发打下一定的理论和实践基础。编译原理实验指导书围绕着实验教学目标,详细阐述了各实验的原理和步骤。希望同 学们能够充分利用实验条件,认真完成实验,从实验中得到应有的锻炼和培养。实验要求为了顺利完成编译原理课程实验,学生应做到:(1)熟练掌握一种高级程序设计语言。(2)实验前,认真学习教材以及实验指导书的相关内容,提前做好实验准备。(3)每次实验先分析后编程,在实验报告中应写明自己的编程思路和设计流程。(4)实验结束一周后提交实验报告。实验报告内容应包括:实验目的、实验内容、设计 思路和流程框图,源程序(含注释)清单、测试结果以及实验总结。(5)遵守机房纪律,服从辅导教师指挥,爱护实验设备。实验的验收将分为两个部分。第一部分是上机操作,随机抽查程序运行和即时提问; 第二部分是提交书面的实验报告。此外杜绝抄袭现象,一经发现雷同,双方成绩均以0分计目录实验一 词法分析程序设计1实验二 递归下降语法分析程序设计5实验 1 词法分析程序设计【开发语言及实现平台或实验环境】C/C+/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 2005-2008【实验目的】(1)理解词法分析在编译程序中的作用(2)加深对有穷自动机模型的理解(3)掌握词法分析程序的实现方法和技术【实验内容】 对一个简单语言的子集编制一个一遍扫描的词法分析程序。【实验要求】(1)待分析的简单语言的词法1)关键字begin if then while do end2)运算符和界符:= + - * / = = ; ( ) #3)其他单词是标识符(ID)和整形常数(NUM),通过以下正规式定义:ID=letter(letter|digit)*NUM=digitdigit*4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和 关键字,词法分析阶段通常被忽略。2)各种单词符号对应的种别编码单词符号种别码单词符号种别码begin1:17if2.二18t hen320while421do523letter(letter digit)*10=24digitdigit*11=25+132614(27*15)28/16#03)词法分析程序的功能 输入:所给文法的源程序字符串输出:二元组(syn, token或sum)构成的序列。 syn 为单词种别码; token 为存放的单词自身字符串; sum 为整形常数。例如:对源程序 begin x:=9;if x0 then x:=2*x+1/3;end# 经词法分析后输出如下序 列:(1, begin) (10,x) (18, :=) (11,9) (26,;) (2,if)实验步骤 】1)根据图 1.1 构建主程序框架图 1.1 词法分析主程序示意图代码提示:main()p=0;printf( “n please input string:n”); do输入源程序字符串,送到缓冲区Progp+中 while(ch!=#);p=0;doscanne r();调用扫描子程序switch(syn)case 11:输出(数的二兀组)break;case 1:输出(关键字begin的二兀组)break;case -1:输出(错误);break; while(syn!=0);(2)关键字表置初值 关键字作为特殊标识符处理,把它们预先安排在一张表格中(关键字表),当扫描程序 识别标识符时,查关键字表。如能查到匹配的单词,则为关键字,否则为一般标识符。(3)编写扫描子程序代码提示:scanner()读下一个字符送入ch;while(ch= = )读下一个字符;if(ch 是字母或数字)while(ch 是字母或数字)ch=token; 读下一个字符;token与关键字表进行比较,确定yn的值;elseif(ch 是数字)syn=11;else swith(ch)/其他字符情况case:Default:syn=-1;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)加深对递归下降语法分析原理的理解(3)掌握递归下降语法分析的实现方法【实验内容】 编制一个递归下降分析程序,实现对词法分析程序提供的单词序列的语法检查和结构分析 【实验要求】(1)待分析的简单语言的词法同实验 1(2)待分析的简单语言的语法用扩充的 BNF 表示如下:1)程序:二begin语句串end2)语句串 : =语句;语句3)语句: =赋值语句4)赋值语句:=ID:=表达式5)表达式: =项+项|-项6)项:=因子*因子|/因子7)因子:=ID|NUM|(表达式)(3)语法分析程序的功能 输入单词串以”#”结束,如果是文法正确的句子,输出成功信息;否则输出错误信息。 例如:输入 begin a:=9; x:=2 * 3; b:=a + x end #输出 success输入 x:=a + b * c end #输出 error【实验步骤】(1)根据图2.1 递归下降分析程序示意图构建主程序框架图 2.1 递归下降分析程序示意图2)编写各语法单位分析函数 1)编写语句串及语句分析函数 代码提示:yucu()语句串分析函数调用statement。;/句分析函数while(syn=26) 读入下一个单词符号; 调用 statement();return;statement()if(syn=10) 读入下一个单词符号;if(syn=18)读入下一个单词符号;调用expression函数;表达式分析函数else出赋值号错误;kk=l出错标记else出语句号错误;kk=1;return;2)编写表达式分析过程3)编写项分析过程4)编写因子分析过程3)调试程序,验证输出结果【思考题】(1)你所编制的程序与实验1程序有何联系,如何应用实验 1。(2)将源程序放置在文本文件中,运用流操作实现对源程序的扫描和分解,编程实现 【参考文献】1胡伦骏、徐兰芳等,编译原理(第 2 版),电子工业出版社,246,2005.72王雷、刘志成等,编译原理课程设计,机械工业出版社,138,2005.3
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号