编译系统设计_实验大纲
编译系统设计实验指导书 1实验目的 设计并实现一个Pascal-语言的编译系统(Pascal-语法见教材附录),掌握编译原理的各个环节词法分析、语法分析、语义 分析、代码生成,以及实现所需的数据结构语法树、符号表等。通过这样的实验,提高学生协作编程的能力,加深对编译技术 的理解,编译原理是一门综合各个学科知识的课程,编译系统设计让学生在实践中综合理解计算机学科知识。 2实验需求 2.1需求概述 Pascal-语法定义 见网站文法”。 生成代码 生成MIPS目标代码,代码在MIPS模拟器上运行,或者生成TM目标码,代码在TM虚拟机运行。也可以生成汇编代码, 直接在PC上运行。 运行环境 Windows系统环境或者Linux环境。 输入 输入为符合Pascal-语法规则程序示例。 输出 MIPS指令代码或TM代码或者汇编代码。 2.2要实现的编译器各个环节 编译器包含词法分析、语法分析、语义分析、代码生成、代码优化、运行环境等阶段和环节,是一个复杂的系统,本实验针 对前四个阶段进行,不包括代码优化阶段。 词法分析 可以考虑用词法分析生成器LEX来生成。实验者提供Pascal-的词法规则脚本文件。 语法分析 语法分析器考虑用语法分析器生成工具YACC来实现。实验者提供Pascal-语法规则的YACC脚本文件。具备错误恢复能力。 语义分析 根据附录中的Pascal-语法规则写出语义分析程序。 代码生成 生成MIPS指令代码或者TM目标码或者汇编代码。 运行环境 基于堆栈的运行环境,支持局部函数。 符号表 用hash table实现符号表。给出hash函数设计及其实现。 3设计指导 3.1系统体系结构 编译系统体系结构如下 源代码 符号表 错误处 理器 目标代码 图1编译系统体系结构 本次实验不要求有代码优化阶段。错误处理有简单的处理即可。 3.2模块概述 3. 2. 1词法分析程序 在这个阶段编译器实际阅读源程序(通常以字符流的形式表示)。词法分析程序从左到右读入字符,按照源语言规定的词法 规则,识别出一个个的单词(token)。即这个模块的输入是Pascal-源程序,输出是单词流。 3. 2. 2语法分析程序 语法分析程序从词法识别程序中获取记号形式的源代码,并完成定义程序结构的语法分析syntax analysis或者parsing. 本模块的输入是单词流,输出是语法树。 3. 2. 3语义分析程序 语义分析的一个重要组成部分是类型推理和类型检查,其输入是语法树,输出是带语义信息的语法树和带语义信息的符号表。 3. 2. 4代码生成程序 编译器在完成语法分析和语义分析以后,就可以进行代码生成。可以直接生成tm目标码;也可以生成三地址码后生成汇编 代码或者直接生成汇编代码。 3. 2. 5符号表 符号表是编译系统的重要的数据结构。从词法分析到代码生成都和它有关系。 3. 2. 6错误处理 本实验对错误处理不仅要求能及时报错并指出错误所在位置,还要求能够恢复错误状态,继续编译运行,直至程序处理完毕。 4文档要求和评分标准 本实验有一定的规模,实现上有一定的复杂度,推荐3人一组最多不得超过4人,完成一个完整的系统。系统设计开发完 成后,需要经过现场运行验收才算通过,并将设计文档上传到指定的服务器。 1、设计文档包括 0实验报告封面见下页 1 总体设计报告同一个组里各同学该报告相同,报告里要注明组内分工, 2 模块设计报告 3 其他设计开发文档如测试报告,开发体会、小结等, 4 源代码文件。 要求每组将设计文档打包为一个文件文件名为“学号姓名.rar” 2、设计文档包括最终成绩由平时实验分30和Pascal-编译器实验得分70构成。 3、Pascal-编译器实验具体的评分标准如下 1 实验最后得分由两部分构成实验报告和文档的规范性35,又分为词法分析设计、语法分析设计、语义分析设计、 运行环境设计、代码生成设计、符号表设计和其他文档设计七个部分,各占5;实验的正确性和合理性65,根据运行情 况来判断实验的正确性和合理性,又划分为5个子模块词法分析、语法分析、语义分析和符号表、运行环境和代码生成。 2 报告及时提交,则根据报告的质量给相应得分;未及时提交,则在报告质量分级基础上降一级,未提交报告或报告为 抄袭,相应的报告得分为“不及格”。 3 总体报告得分各小组成员相同,在总体报告中应给出各成员负责的模块,详细报告根据各人的任务单独给分。 4 多人协作完成一个完整的系统,经验收功能完善且几乎没有错误,则组内各成员验收得分都为优;如某模块功能不完 善或有较多错误,则对负责该模块的成员进行扣分。 5 多人协作完成一个系统,但最后系统无法联合运行,则按各人完成他负责的模块进行处理。 6 若程序编写工作基本完成,但无法运行或无法进行测试,则根据程序质量给验收得分为60-79 若基本上末编写程序或程序纯属抄袭,验收得分为“不及格”。 课程名称 姓 名 学 院 系 专 业 学 号 指导教师 本科实验报告