- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理》实验指导书研讨
《编译原理》实验指导书
实验目的和内容
编译原理实验的目的是使学生将编译理论运用到实际当中,实现一个简单语言集的词法、语法和语义分析程序,验证实际编译系统的实现方法,并加深对编译技术的认识。
实验内容共需实现编译器的词法、语法和语义分析程序三个组成部分。要求学生必须完成每个实验的基本题目要求,有余力的同学可尝试实验的扩展要求部分。
实验报告
要求每人针对所完成的实验内容上交一份实验报告,其中主要包括三方面内容:
1、实验设计:实验采用的实现方法和依据(如描述语言的文法及其机内表示,词分析的单词分类码表、状态转换图或状态矩阵等,语法分析中用到的分析表或优先矩阵等,语法制导翻译中文法的拆分和语义动作的设计编写等);具体的设计结果(应包括整体设计思想和实现算法,程序结构的描述,各部分主要功能的说明,法以及所用数据结构的介绍等)。
2、程序代码:实验实现的源程序清单,要求符合一般的程序书写风格,有详细的注释。
3、实验结果分析:自行编写若干源程序作为测试用例,对所生成的编译程序进行测试(编译程序的输入与输出以文件的形式给出);运行结果分析(至少包括一个正确和一个错误单词或语句的运行结果);以及改进设想等。
注意事项
1、电子版实验报告和源程序在最后一次机时后的一周内上交。(每个同学上交一个压缩文件,其命名格式为“学号_姓名.rar”,内含实验报告和一个命名为“源程序”的文件夹。注意提交的源程序应是经过调试、测试成功的较为通用的程序,并应有相应的注释、运行环境和使用方法简介。)
2、不接受不完整的实验报告和没有说明注释的源程序,或者说明与程序、运行结果不符合的作业。
特别鼓励:扩展题目
1、为亲身经历一个小型编译器的开发全过程,触摸一下与实际编译器开发相关的工作,大家可以自由组成3人左右的小组,推举组长,模拟一个团队分工协作开发大型软件的实战环境,融入软件工程的思想规范和一般理论方法,初步体验从系统分析设计、编码测试到交付维护的一个完整编译器软件的开发过程。要求组长为每个小组成员分配主要负责的任务,完成相应的分析设计员、程序员和测试员等角色的工作,并以小组为单位提交一份实验报告和源程序,在报告写明完成的部分1)任务概述2)系统的设计3)系统实现(包括框图,各.h.c文件说明,所有函数功能的说明数据结构各种表格说明以及函数调用关系图等)4)系统工作过程及运行说明(使用操作指南)5)源程序清单(要求有详细注释)和实例程序运行结果6)体会和讨论识别语言所有单词的词法分析程序设计复合语句 →语句end
语句 → 语句语句语句
语句 → 赋值语句赋值语句 → 变量:=算术表达式算术表达式 → 项算术表达式项算术表达式项项 → 因式 项因式 项因式因式 → 变量常数算术表达式变量 → 标识符标识符 → 标识符 字母 标识符 数字字母常数 → 整数 浮点数整数 → 数字 数字 整数浮点数 → ? 整数整数 ? 整数字母 → AB|C|…|X|Y|Z|a|b|c|…|x|y|z
数字 → 01|2|…|9
(2)在所给文法G[复合语句]的基础上,适当扩大分析对象,增加功能。如赋值语句的左部不再只局限于简单变量,还可以是下标变量等;右部的算术表达式中可以包括函数调用、数组元素等。除赋值语句外,还可进一步选择高级语言的其它语法结构类型,如流程控制语句、子程序结构语句、说明语句等。语法分析的结果以语法树的形式输出,并显示分析过程的信息(如分析栈、符号栈、当前应被归约的最左子串、归约后所得的符号等)。
(3)增强错误检查和处理能力。例如,当输入的源程序存在错误时,把所发现的每一处错误的性质(错误编码)和位置填入一张表中,以备以后输出之用;同时再跳过错误所在的语法范畴(如单词、表达式、语句等),继续对输入串的后续部分进行编译。至于对错误的具体处理措施应结合所采用的语法分析方法,以LR分析为例,可对LR分析表中的空白单元进行出错原因分析,填入一个指向出错处理子程序的指示字。
(4)选作:学习编译器的自动生成工具LEX、YACC(或其它类似工具)的使用方法,运用LEX和YACC编写并生成以下文法G[程序]所定义语言的词法和语法分析程序。
G[程序]:
程序 → PROGRAM标识符;分程序
分程序 → 变量说明BEGIN语句表END.变量说明 → VAR变量说明表;变量说明表 → 变量表:类型变量表:类型;变量说明表类型 → INTEGERREAL
变量表 → 变量变量变量表语句表 → 语句语句;语句表语句 → 赋值语句 条件语句 WHILE语句 复合语句赋值语句 → 变量:=算术表达式条件语句 → IF关系表达式THEN语句ELSE语句WHILE语句 → WHILE关系表达式DO语句复合语句 → BEGIN语句表END算术表达式 → 项算术表达式项
文档评论(0)