编译原理实验手册1.新4版.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实验手册1.新4版

PAGE  PAGE 18 兰州大学计算机科学与技术专业 编译原理实验手册(V1.4) 第一节 概述 一、实验目的 编译原理是一门实践性很强的课程,但由于课时所限,只能在课堂上讲授一些通用的原理和方法。而为了真正学好这门课程,必须自己动手构造出一个编译器,才能对书里讲到的原理、方法和技术有较全面的体会,才能对学生以后的程序设计和解决实际问题的能力有所帮助。 实际的编译程序是十分复杂的,有时由多达十几万条指令组成。为此,编译原理的实践教学,采用简化编译过程的办法,选择最关键的三个环节──词法分析、语法分析、语义分析和中间代码产生,每个环节作为一个实践课题,逐步深入,扩展功能,直至得到一个简单实用的编译器。本实验不涉及到优化。 二、实验内容 任何一个实用的高级语言,其语法都比较复杂,如选其作为源语言,很难实践全过程。故本试验将定义一个简化的语言──PASCAL语言的一个子集作为源语言,分三个课题、一步步地构造出它的编译程序。所有试验项目前后贯穿这一条主线进行。本实验共进行6周,每周3学时,共18学时。本实验主要包括以下三个课题: 词法分析:以源程序为输入,输出单词符号流; 语法分析:以源语言的文法为依据,调用词法分析器,使用递归下降分析法或算符优先分析法或LR(1)分析法,构造能识别源语言各种语法结构的语法分析器;(语发单元,语法树碑) 语义分析和中间代码产生:使用语法制导翻译技术,对源语言程序进行简单的翻译,输出四元式序列。 在本节的第三部分给出了PASCAL语言两个子集的文法,对这些文法稍加变换,即可获得用于语法分析的LL(1)文法或LR(1)文法。学生可以直接选择一个作为编译器的源语言,也可以对这些文法进行改造,以获得能力更为强大的源语言。学生也可以自己设计源语言,来完成这些题目;唯一的要求是源语言必须包含三种基本的程序设计结构(顺序、选择、循环)和至少两种不同的数据类型。 本实验要求: 所有的输入输出均采用文件形式。 独立完成。 语言不限,开发工具不限;但必须有可运行的程序和规范的注释。 三、PASCAL语言子集的文法 由于Pascal语言结构严谨,层次清晰,语法与C语言接近,也便于理解,因此本实验抽取Pascal语言的一个子集,稍加改造,作为源语言,姑且命名为LittleP。一个LittleP程序由一系列全局数据声明和一个主程序体组成。所有数据采用静态存储分配,没有I/O,只支持一种基本数据类型:无符号整数。 Procedure,procedurehead,procedurebody,variable,declare,compound, Statment,definition,list,empty,variablename,style,statement,Block, condition,cycle,arithmeticexpression,relationexpression,term,add,muti, factor,num,identifier,letter,digit,endue赋予 LittleP的文法: 〈程序〉→〈程序首部〉〈程序体〉. 〈程序首部〉→ program〈程序名〉;   〈程序体〉→〈变量声明〉〈复合语句〉 〈变量声明〉→ var〈变量定义列表〉|〈空〉 变量定义列表 → 〈变量定义〉〈变量定义列表〉|〈变量定义〉; 〈变量定义〉→〈变量名列表〉: 类型 ; 变量名列表 → 〈变量名〉|〈变量名〉,〈变量名列表〉 类型 → integer 〈复合语句〉→ begin〈语句块〉end 〈语句块〉→〈语句〉|〈语句〉 ;〈语句块〉 〈语句〉→〈赋值语句〉|〈条件语句〉|〈循环语句〉|〈复合语句〉|〈空〉 〈赋值语句〉→〈左部〉:= 〈右部〉 〈左部〉→〈变量名〉 〈右部〉→〈算术表达式〉 〈条件语句〉→ if〈关系表达式〉then〈语句〉else〈语句〉 〈循环语句〉→ while〈关系表达式〉do〈语句〉 关系表达式 →〈算术表达式〉〈关系运算符〉〈算术表达式〉 算术表达式 → 〈项〉| 〈算术表达式〉〈加运算符〉〈项〉 项 → 〈因子〉| 〈项〉〈乘运算符〉〈因子〉 〈因子〉→〈变量名〉|(〈算术表达式〉) |〈整数〉 〈程序名〉→〈标识符〉 〈变量名〉→〈标识符〉 〈标识符〉→〈字母〉|〈标识符〉〈字母〉|〈标识符〉〈数字〉 〈整数〉→〈数字〉|〈整数〉〈数字〉 〈关系运算符〉→ | = | = | = | | 〈加运算符〉→ + | - 〈乘运算符〉→ * | / 〈字母〉→ a|b|…|x|y|z 〈数字〉→ 1|2|3|4|5|6|7|8|9|0 2.在此基础上加以扩充,可得功能较强的一个 LittleP 语言的超集:LittleP+。

文档评论(0)

ajiangyoulin1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档