《编译原理》课程.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理》课程.doc

《编译原理》课程 实验报告(临时) 华东理工大学软件与管理信息学院 2006年9月22日 一.实验题目 二.实验成员 组长名字写在第一个,每个同学完成的基本任务是什么。 三.实验内容 本学期的编译实验内容是使用编译构造工具实现一个扩充PL0语言的编译器。 扩充PL0语言是在PL0语言的基础上增加对整型一维数组的支持、扩充IF-THEN-ELSE条件语句、增加REPEAT语句、支持带参数的过程和增加注释,如下所示: (1)整型一维数组,数组的定义格式为: VAR 数组标识名(下界:上界) 其中上界和下界可以是整数或者常量标识名。 访问数组元素的时候,数组下标是整型的表达式,包括整数、常量或者变量和它们的组合。例如,假设a是常量,b是整型变量,c是数组,这些访问方式都应该可以使用:c(1),c(a),c(b),c(b+c(1))。 (2)扩充条件语句,格式为: 条件语句::= IF 条件THEN 语句[ELSE 语句] (3)增加REPEAT语句,格式为: 重复语句 ::= REPEAT 语句 UNTIL 条件 (4) 支持带参数(传值参数)的过程,定义和调用形式如下: 过程首部::= PROCEDURE 标识符 [‘(’形式参数{, 形式参数}‘)’] ; 过程调用语句 ::= CALL 标识符[‘(’传值参数 {,传值参数 }‘)’] (5) 注释 单行注释以 { 开始,以 } 结束,注释内容不包括 {和 }. 完整的扩充PL0语言的EBNF范式见实验提供的文档所示。下文所说的PL0语言,如果不加说明,就是特指扩充PL0语言。 本实验实现的PL0语言编译器,输入是PL0源语言程序,输出是一个栈式机的汇编语言(PCODE)程序,然后解释执行。如图1所示。 PL0语言编译器的设计实现过程分两个阶段: 词法分析和语法分析,即PL0p1 语义分析和代码生成,即PL0p2。 这两部分的顺序如图2所示,具体的实验要求描述见后面。 词法分析和语法分析(PL0p1) PL0p1的输入是PL0源程序,语法分析程序在分析过程中先调用词法分析程序,然后判断是否合法的PL0程序,输出结果是接受或者拒绝。首先扫描PL0源语言程序,从而识别出标识符、保留字、整数等符号,并返回类别码信息。这一部分的重点是掌握词法分析程序生成器flex的用法。接着在词法分析的基础上进行语法分析,重点是掌握语法分析程序生成器bison的用法。主要任务是把PL0的EBNF文法写成bison可识别的格式。程序最终能识别出符合语法规则的PL0程序,并对不符合语法规则的PL0程序报错。 语义分析和代码生成(PL0p2) 功能是在语法分析程序中添加语义分析功能,审查程序是否有语义错误,并为被识别的语句生成相应的汇编代码,实验中采用的汇编代码是PCODE。 为了支持带参数的过程和一维数组,可能需要增加新的指令,但是由于对实现方法没有严格要求,需要大家自己思考并实现自己的设计。并且在实验报告中写出自己的实现方法来。 四.实验要求 实验环境要求 实验的运行环境是Windows操作系统下的Visual C++ 6.0,编程语言是C或者C++,使用flex(是一种用来生成代码扫描器的工具际上是使用最广泛的Yacc-like分析器生成器,使用它可以生成解释器,编译器,协议实现等多种程序Lex和YACC的源程序框架 提交实验 PL0实验需要提交所有的源程序文件和VC6工程文件,包括词法文件(pl0.l)和语法文件(pl0.y)。注意必须提交工程文件。提交的工程应能用VC6打开。 请大家按照如下目录结构整理自己的程序和文档: 实验报告统一交给科代表。每一组上交时,建立一个第几组的文件夹,然后把所有上交的资料都放在里面。文件夹中应当有一个文档readme(在文档中请写明每个同学的姓名、班级、学号、Email、电话号码等个人信息,以便遇到问题时老师可以及时与你联系)。 此外,文档中还要写明程序实现的功能,主要数据结构的设计,重要算法的流程,以及实验中遇到的问题和解决方法。如果对实验做了扩展,在文档还要详细说明扩展实现的功能及实现方法。 Base目录中应当包含实现了基本要求的程序代码。其中的Source子目录中是程序代码,这个目录中应包括程序运行需要的所有文件(包括那些不需要你修改的文件)。Test目录中应包括我们给出的所有测试文件及其标准输出。无论你是否对程序进行扩展,这个目录的内容都是必须要有的。 Extension目录是可选的。如果你对程序进行了扩展,请将扩展版本的源代码和测试文件放在这个目录中。其中的Source子目录中是扩展后的程序代码。Test子目录中是你针对扩展部分提供的测试文件及相应的输出。此外,还请提供一个测试文档test,说明你

文档评论(0)

tangtianxu1 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档