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