L语言编译器技术课程设计报告书Word文档格式.docx

上传人:b****1 文档编号:13065471 上传时间:2022-10-04 格式:DOCX 页数:51 大小:169.09KB
下载 相关 举报
L语言编译器技术课程设计报告书Word文档格式.docx_第1页
第1页 / 共51页
L语言编译器技术课程设计报告书Word文档格式.docx_第2页
第2页 / 共51页
L语言编译器技术课程设计报告书Word文档格式.docx_第3页
第3页 / 共51页
L语言编译器技术课程设计报告书Word文档格式.docx_第4页
第4页 / 共51页
L语言编译器技术课程设计报告书Word文档格式.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

L语言编译器技术课程设计报告书Word文档格式.docx

《L语言编译器技术课程设计报告书Word文档格式.docx》由会员分享,可在线阅读,更多相关《L语言编译器技术课程设计报告书Word文档格式.docx(51页珍藏版)》请在冰豆网上搜索。

L语言编译器技术课程设计报告书Word文档格式.docx

1.扫描器设计

该扫描器是一个子程序,其输入是源程序字符串,每调用一次输出一个单词符号。

为了避免超前搜索,提高运行效率,简化扫描器的设计,假设程序设计语言中,基本字不能用作一般标识符,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。

2.语法分析器设计

以算法优先分析方法为例,设计一个算符优先语法分析程序。

算符优先分析属于自下

而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“#”结尾)

,如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。

当然,也可采用预测分析等方法设计语法分析器,具体方法自定。

3.语法制导翻译程序设计

采用语法制导翻译方法,实现算术表达式、赋值语句和基本控制语句等的翻译。

本语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列。

4.目标代码生成器设计

50

将程序设计语言的中间代码程序翻译为目标代码程序,其输入是四元式序列,输出是一个汇编代码文件。

三、进度计划

序号

设计内容

完成时间

备注

1

任务布置,资料查询,方案制定

第一周周一

2

算法设计,程序实现

第一周周二至第二周周四

3

撰写报告,软件验收

第二周周五

4

四、设计成果要求

1.完成规定的课程设计任务,所设计软件功能符合要求;

2.完成课程设计报告,要求格式规范,内容具体而翔实,应体现自身所做的工作,注重对设计思路的归纳和对问题解决过程的总结。

五、考核方式

1.平时成绩+验收答辩+实验报告;

2.五级分制。



指导教师:

2011 年 12月 12

词法分析

1目 的

通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;

加深对课堂教学的理解;

提高词法分析方法的实践能力;

掌握词法分析器作为子程序以及一遍的处理过程。

源程序

词法分析程序

符号表文件

token文件

2任 务

(1)能对任何L语言源程序进行分析;

(2)采用问答方式输入源程序文件名,然后进行词法分析;

(3)分割单词并转换成机内表示形式,形成token文件(单词序列)、符号表文件;

(4)删除空格等无用符号;

(5)错误处理

l给出的错误信息包括:

总的出错个数,每个错误所在行号,错误编号及说明;

l只处理以下两种错误,其它可不必考虑

1.非法字符:

删除,即,不写入token文件

2.错误单词

a)包括三种形式:

i.数字开头的数字、字母串,如:

3a56

ii.实数中出现两个小数点,如:

3.14.15

iii.实数的小数部分出现字母,如:

5.26B78

b)处理方式:

截去后面出错部分,使其成为一个正确单词(即:

常数)。

如:

3a56转换为3,3.14.15转换为3.14,5.26B78转换为5.26

3数据结构

3.1输入

L源程序,为文本文件。

3.2输出

一个单词序列文件(即:

token文件)和一个符号表文件,并输出错误信息。

(1)token文件结构

typedefstructtoken

{

intlabel;

//单词序号

charname[30];

//单词本身intcode;

//单词的机内码

intaddr;

//地址,单词为保留字时为-1,为标识符或常数时为大于0的数值,即在符号表中的入口地址。

}token;

单词的机内码表示:

单词

编码

and

or

11

21

:

=

31

begin

program

12

22

32

bool

real

13

+

23

<

33

do

then

14

-

24

34

else

5

true

15

*

25

>

35

end

6

var

16

/

26

36

false

7

while

17

.

27

37

if

8

标识符

18

28

integer

9

整数

19

29

not

10

实数

20

30

(2)符号表文件结构

符号表用来存放L语言源程序中出现的标识符和常数,文件结构如下:

typedefstructsymble

}symble;

intnumber;

//序号inttype;

//类型

//名字

4词法分析程序流程图

(1)token表生成的主要流程如下:

vt.syn为19时往symp.txt中存入整数,为20symp.txt中存入实数(小数),为-1时显示错误,其他值时symp.txt中存入字符串,包括关键字与标识符

(2)symple表的生成:

由于他是与token表同时生成的,基本流程大致相同,因此用文字叙述与上面流程的差异

A.以字母开头时,为关键字时st.type等于-2,为标识符时为18

B.以数字开头时,小数时st.type为20,整数时为19

C.为#时,st.type为0

D.其他情况均为-1

当st.type为18时往symple.txt中存入标识符,为19时往symple.txt中存入整数,为20时往symple.txt中存入实数(小数)

5.实验算法思想(包含主程序的示意图)

输入字符串

(1)主程序的示意图如下图所示:

调用scanner函数进行分析

判断是什么类型

分类型写入token文件中(symp.txt)

是标志符,整数,实数则分析类型后写入symple文件中

是否结束

结束

返回

6.实验结果

目标代码生成

实践目标代码的生成方法。

四元式序列文件

编写一个目标代码生成程序,将L语言的中间代码程序翻译为目标代码程序(汇编语言程序),如下图:

目标代码生成程序

目标代码程序

目标机说明:

l以8086微处理机为目标机,生成8086汇编指令

l8086是16位微处理器,数据总线为16位,地址总线为20位,可寻址1MB的空间

l8086有8个16位通用寄存器和一个标志寄存器。

这8个寄存器AX-DI都可以用作累加器。

其中,BX和BP(基地址指针)寄存器通常用于指定数据区的基址,称为基址寄存器,SI和DI大多用来表示相对基址的偏移量,称为变址寄存器

l8086的地址空间是分段的,每段64KB

l简单起见,本实验不涉及段间寻址,数据与代码都放在一个段内

l实验中选用以下寻址功能,圆括号表示取其内容:

n寄存器寻址:

MOVAX,BX;

功能:

AX←(BX)

n直接寻址:

MOVAX,DATA;

AX←(DATA)

l常用指令:

n传送指令:

r表示寄存器,m表示内存单元MOVr,r/mr←(r/m),r/m表示r或mMOVr/m,rr/m←(r)

MOV r/m,imm r/m←imm,imm是立即数

n运算指令:

包括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

nCMP只影响标志位,不影响操作数的大小

n转移指令:

Z是标志位,S是符号位,O是溢出位

指令码

意义

条件

JZ,JE

结果为0或相等则转

Z=1,(A)=(B)

JNZ,JNE

结果不为0或不相等则

Z=0,(A)≠(B)

JNL,JGE

大于等于转

(S∨O)=0,(A)≥(B)

JL,JNGE

小于转

(S∨O)=1,(A)<

(B)

JG,JNLE

大于转

(S∨O∨Z)=0,(A)>

JMP

无条件转移

3.数据结构

四元式序列文件和符号表文件,其结构与语法/语义分析程序的输出一致。

一个汇编代码文件,并无特殊数据结构。

4.程序参考结构:

将中间代码程序(四元式序列)翻译成汇编程序可按以下步骤进行:

(1)划分基本块

(2)对每个基本块生成基本块的目标代码

划分基本块

生成目

标代码

为了划分和记录基本块,对四元式结构作以下修改:

typedefstructGenStruct

charop[4];

intcode;

intaddr1;

intaddr2;

intresult;

intout_port;

//记录该四元式是否为一个基本块的入口,是则为1,否则为0。

}GenStruct;

5.寄存器分配策略

主要采用四个通用寄存器:

ax,bx,cx,dx,其中,ax,cx的作用固定,ax用作累加器,

cx用作循环计数器,在四元式翻译时直接应用不再分配。

所以分配策略只用于bx与dx,具体算法如下:

if(bx未被使用或已分配给了变量a){

bx分配给变量a;

}

else{

if(dx未被使用或已分配给了变量a){

dx分配给变量a;

其它策略;

注:

a为变量在符号表的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

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

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