ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:97.87KB ,
资源ID:4701457      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4701457.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译技术课程设计指导书.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译技术课程设计指导书.docx

1、编译技术课程设计指导书编译技术课 程 设 计 指 导 书题目:L语言编译器的设计与实现编写: 鲁 斌院系: 计 算 机 系2005年11月1日第一节 概 述1 课程设计的目的和任务编译技术是一门实践性很强的课程,只有通过实践,才能真正掌握。实际的编译程序是十分复杂的,有时由多达十几万条指令组成。为此,编译原理的实践教学,采用简化高级程序设计语言文法的办法,重点针对词法分析、语法分析、语义分析和中间代码生成以及目标代码生成等几个关键环节进行编程和调试训练。每个环节可作为一个独立的实践课题,分别编程调试,然后再连接在一起总调,从而实现一个完整的编译器。2 实践方法任何一个实用的高级语言,其语法都比

2、较复杂,如选其作为源语言,很难实践全过程,故本实践将定义一个简化的类PASCAL语言L语言作为源语言,设计调试出它的编译程序。因任务具有一定的难度和工作量,且时间有限,因此,分组进行实验,每组2人,分别承担词法分析/目标代码生成以及语法/语义分析两部分中的一个,具体分工由组内协商进行,并且整个代码的链接工作由承担词法分析任务的同学完成。可使用C、VC+等语言编程实现。3 实践报告的规范和要求每位学生完成承担任务后写出格式规范的实验报告,包括封面、任务说明、程序设计时考虑的算法和方法、流程图、主要代码说明、运行结果分析等。4 L语言定义程序定义:程序 program标识符程序体.程序体变量说明复

3、合句变量定义:变量说明 var变量定义|变量定义标识符表:类型;标识符表:类型;变量定义标识符表标识符,标识符表标识符语句定义:复合句 begin语句表end语句表执行句;语句表执行句执行句简单句结构句简单句赋值句赋值句变量:表达式变量标识符结构句复合句if句WHILE句if句 if布尔表达式then执行句| if布尔表达式then执行句else执行句while句 while布尔表达式do执行句表达式定义:表达式算术表达式布尔表达式算术表达式算术表达式项算术表达式项项项项因子项因子因子因子算术量(算术表达式)算术量标识符整数实数布尔表达式布尔表达式or布尔项布尔项布尔项布尔项and布尔因子布尔

4、因子布尔因子 not布尔因子布尔量布尔量布尔常数标识符(布尔表达式)关系表达式关系表达式标识符关系运算符标识符关系运算符| | | | |类型定义:类型名 integerbool | real单词定义:标识符字母标识符字母标识符数字整数数字整数数字实数整数.实数数字布尔常数 truefalse字符定义:字母 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz数字 01234567895 源程序书写格式规定(1) 单词必须在一行内写完,即:一个单词不能分两行写;(2) 源程序语句的书写采用自由格式,即:一行可写多个语句,一个语句也可分多行写;

5、(3) 源程序不含注释;(4) 语句以“;”结束,“end”前的一个语句的“;”不可以省略。第二节 词法分析6 目 的通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力;掌握词法分析器作为子程序以及一遍的处理过程。7 任 务(1) 能对任何L语言源程序进行分析;(2) 采用问答方式输入源程序文件名,然后进行词法分析;(3) 分割单词并转换成机内表示形式,形成token文件(单词序列)、符号表文件;(4) 删除空格等无用符号;(5) 错误处理 给出的错误信息包括:总的出错个数,每个错误所在行号,错误编号及说明; 只处理以下两种错误,其它可

6、不必考虑1. 非法字符:删除,即,不写入token文件2. 错误单词a) 包括三种形式:i. 数字开头的数字、字母串,如:3a56ii. 实数中出现两个小数点,如:3.14.15iii. 实数的小数部分出现字母,如:5.26B78b) 处理方式:截去后面出错部分,使其成为一个正确单词(即:常数)。如:3a56转换为3,3.14.15转换为3.14,5.26B78转换为5.268 数据结构8.1 输入L源程序,为文本文件。8.2 输出一个单词序列文件(即:token文件)和一个符号表文件,并输出错误信息。(1) token文件结构typedef struct tokenint label; /单

7、词序号char name30; /单词本身int code; /单词的机内码int addr; /地址,单词为保留字时为-1,为标识符或常数时为大于0的数值,即在符号表中的入口地址。 token;单词的机内码表示:单词编码单词编码单词编码单词编码and1or11(21:=31begin2program12)22=32bool3real13+23=33do4then14-2434else5true15*2535end6var16/2636false7while17.27=37if8标识符18,28integer9整数19:29not10实数20;30(2) 符号表文件结构符号表用来存放L语言源程

8、序中出现的标识符和常数,文件结构如下:typedef struct symble int number; /序号 int type; /类型 char name30; /名字 symble;9 词法分析程序流程图第三节 语法/语义分析10 目 的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。11 任 务在词法分析程序产生的token文件、符号表文件基础上,完成语法和语义分析,产生相应的中间代码四元式序列。在此,可把语法/语义分析作为独立的一遍进行处理。 采用如下四元式:操作码助记符四元式意 义:=( 51,

9、a, 0, r )ra+( 43, a, b, r )ra+b-( 45, a, b, r )ra-b*( 41, a, b, r )ra*b/( 48, a, b, r )rb/aj( 53, a, b, n )若ab转至第n个四元式j=( 54, a, b, n )若a( 57, a, b, n )若ab转至第n个四元式j=( 58, a, b, n )若a=b转至第n个四元式j =( 56, a, b, n )若a=b转至第n个四元式j( 52, 0, 0, n )转至第n个四元式j ( 55, a, b, n )若ab转至第n个四元式12 数据结构12.1 输入token文件、符号表文

10、件,其数据结构与词法分析产生的文件相同。12.2 输出 四元式序列文件,其纪录结构如下:typedef struct equint op; /四元式操作码int op1; /操作数在符号表中的入口地址int op2; /操作数在符号表中的入口地址int result; /结果变量在符号表中的入口地址 equ; 程序中可用数组Equ存放四元式序列,定义为:equ EquEQU_LEN 可用变量int LineOfEqu做指针,指向下一个即将产生的四元式 符号表文件的结构与输入相同,语法分析中对于符号表不做操作,只是在文件头部增加一个记录变量多少的数据。 13 程序结构说明为方便编程,将语言文法整

11、理如下:LS | S ; LSid := ESif B then SSif B then S else SSwhile B do SSbegin L end变量说明语句的文法:Svar D|DL : K ; | L : K ; DLi , L | iKinteger | bool | real其中,B表示布尔表达式,E表示算术表达式可采用递归下降分析法或其它方法进行语法分析。语法/语义分析程序可划分为三个模块,结构如下:parser为主程序模块,Declear为说明语句分析模块,L_begin为复合语句分析模块。其中L_begin结构图如下:经常使用的过程和函数: gen(int op,int

12、 a,int b, int r):生成一个四元式 NewTemp():产生一个临时变量,返回其在符号表中的入口地址 BackPatch(int addr, int addr2):回填函数,完成四元式转移目标的回填第四节 目标代码生成14 目 的实践目标代码的生成方法。15 任 务编写一个目标代码生成程序,将L语言的中间代码程序翻译为目标代码程序(汇编语言程序),如下图:目标机说明: 以8086微处理机为目标机,生成8086汇编指令 8086是16位微处理器,数据总线为16位,地址总线为20位,可寻址1MB的空间 8086有8个16位通用寄存器和一个标志寄存器。 这8个寄存器AX-DI都可以用作

13、累加器。其中,BX和BP(基地址指针)寄存器通常用于指定数据区的基址,称为基址寄存器,SI和DI大多用来表示相对基址的偏移量,称为变址寄存器 8086的地址空间是分段的,每段64KB 简单起见,本实验不涉及段间寻址,数据与代码都放在一个段内 实验中选用以下寻址功能,圆括号表示取其内容: 寄存器寻址: MOV AX,BX;功能:AX(BX) 直接寻址:MOV AX,DATA;功能:AX(DATA) 常用指令: 传送指令:r表示寄存器,m表示内存单元MOV r, r/m r(r/m), r/m表示r或mMOV r/m, r r/m(r)MOV r/m, imm r/mimm, imm是立即数 运算

14、指令:包括ADD,SUB,MUL,DIV,CMP等。下面以ADD为例说明其用法:ADD r, r/m r(r)+(r/m)ADD r/m, r/imm r/m(r/m)+(r)或imm CMP只影响标志位,不影响操作数的大小 转移指令:Z是标志位,S是符号位,O是溢出位指令码意义条件JZ, JE结果为0或相等则转Z=1,(A) = (B)JNZ, JNE结果不为0或不相等则转Z=0,(A)(B)JNL, JGE大于等于转(SO)=0,(A)(B)JL, JNGE小于转(SO)=1,(A)(B)JMP无条件转移16 数据结构16.1 输入四元式序列文件和符号表文件,其结构与语法/语义分析程序的输

15、出一致。16.2 输出一个汇编代码文件,并无特殊数据结构。17 程序参考结构:将中间代码程序(四元式序列)翻译成汇编程序可按以下步骤进行:(1) 划分基本块(2) 对每个基本块生成基本块的目标代码为了划分和记录基本块,对四元式结构作以下修改:typedef struct GenStructint label;char op4;int code;int addr1;int addr2;int result;int out_port; /记录该四元式是否为一个基本块的入口,是则为1,否则为0。 GenStruct;18 寄存器分配策略主要采用四个通用寄存器: ax, bx, cx, dx, 其中,ax, cx的作用固定,ax用作累加器,cx用作循环计数器,在四元式翻译时直接应用不再分配。所以分配策略只用于bx与dx,具体算法如下:if (bx未被使用或已分配给了变量a) bx分配给变量a;else if (dx未被使用或已分配给了变量a) dx分配给变量a;else 其它策略;注:a为变量在符号表的入口地址。19 代码生成器的模块结构及说明实现时,整个程序的四元式表和目标代码文件说明为全局数据。调用划分基本块模块之后,返回新的四元式序列(带入口标记)。先根据基本块的入口,再查找下一入口,两个入口之间就是该基本块。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1