《编译原理课程设计》
项目名称 PL/0
语言的扩充
学 院 计算机学院
专业班级 软件工程
0604
班
学 号 3106007038
姓 名 蔡超凡
指导教师 黄剑锋
1
报告成绩
2009 年 1 月 3 日
目录
《编译原理课程设计》.................................................................................1
一. 课程设计目的.....................................................................................3
二. 课程设计要求.....................................................................................3
1. 基本内容...........................................................................................................................................3
2. 选做内容...........................................................................................................................................3
3.本人在课程设计中已实现的功能....................................................................................................3
三. 课程设计环境与工具.............................................................................4
四. 结构设计说明.....................................................................................4
1) PL/0 编译程序的结构图...................................................................................................................4
2) PL/0 编译程序的过程或函数的功能表...........................................................................................4
3) PL/0 编译程序的总体流程图...........................................................................................................5
4) 词法分析...........................................................................................................................................5
5) 语法分析...........................................................................................................................................6
6) 语义分析...........................................................................................................................................9
7) 中间代码生成...................................................................................................................................9
8) 语法错误处理...................................................................................................................................9
五. 设计过程........................................................................................11
(一) 实验内容......................................................................................................................................11
1.
增加单词:保留字
ELSE
,
REPEAT
,
DOWHILE
,
RETURN.................................................11
2.
修改单词:不等号
#
改为
<>....................................................................................................13
(二) 课程设计内容..............................................................................................................................14
1.
增加运算符
+=
,
-=
,
++
,
--...................................................................................................14
2.
扩充语句
REPEAT DOWHILE....................................................................................................20
3.
增加
Pascal
的
FOR
语句
:...........................................................................................................21
4.
增加类型:字符类型 和 实数类型
............................................................................................23
六. 运行界面........................................................................................30
七. 调试测试........................................................................................31
1. ELSE 的测试...................................................................................................................................31
2. += -= ++ --的测试...........................................................................................................................31
3. REPEAT-DOWHILE 语句的测试..................................................................................................31
4. FOR 语句的测试.............................................................................................................................32
5. 字符型和实数型测试.....................................................................................................................32
6. 综合测试.........................................................................................................................................32
2
八. 课程设计总结...................................................................................34
一.课程设计目的
在分析理解一个教学型编译程序(如 PL/0)的基础上,对其词法分析程
序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编
译过程的基本原理和基本实现方法的目的。
二.课程设计要求
1. 基本内容
(1)扩充赋值运算:+= 和 -=
(2)扩充语句 REPEAT
<语句序列>
DOWHILE <条件>
其中,<条件>是循环条件,即条件成立时,重复执行循环体的<语句序
列>
2. 选做内容
(1)增加运算:++ 和 --。
(2)增加类型:① 字符类型; ② 实数类型。
(3)扩充函数:① 有返回值和返回语句;② 有参数函数。
(4)增加一维数组类型(可增加指令)。
(5)其他典型语言设施。
3.本人在课程设计中已实现的功能
(1)增加单词:保留字 ELSE,REPEAT,DOWHILE,RETURN
运算符 +=,-=,++,--
(2)修改单词:不等号# 改为 <>
(3)增加条件语句的 ELSE 子句
(4)扩充赋值运算:+= 和 -=
(5)扩充语句 REPEAT
3
<语句序列>
DOWHILE <条件>
(6)增加运算:++ 和 --(包括前后++、--运算)
(7)增加类型:① 字符类型;② 实数类型。
(8)其他典型语言设施:FOR TO 语句,FOR DOWNTO 语句;
三.课程设计环境与工具
(1)计算机及操作系统:PC 机,WindowsXP
(2)实现工具:C++Builder6
(3)教学型编译程序:PL/0
四.结构设计说明
1) PL/0 编译程序的结构图
2) PL/0 编译程序的过程或函数的功能表
过程或函数名 简要功能说明
pl0
主程序
error
出错处理,打印出错位置和错误编码
getsym
词法分析,读取一个单词
getch
漏掉空格,读取一个字符
gen
生成目标代码,并送入目标程序区
test
测试当前单词符号是否合法
block
分程序分析处理过程
enter
登录名字表
position(函数) 查找标识符在名字表中的位置
constdeclaration
常量定义处理
4
Pl0 源 程 序
词法分析程序
语法分析程序
代码生产程序
目 标 程 序
表
格
管
理
程
序
出
错
处
理
程
序
vardeclaration
变量说明处理
listode
列出目标代码清单
statement
语句处理
expression
表达式处理
term
项处理
factor
因子处理
condition
条件处理
interpret
对目标代码的解释执行程序
base(函数) 通过静态链求出数据区的基地址
3) PL/0 编译程序的总体流程图
4) 词法分析
词法分析是编译的第一个阶段,它的主要任务是从左向右逐个字符地对源
程序进 行扫描, 产生一个个单 词序列用于语 法分析。 PL/0 词法分析程 序
GETSYM 的功能是为语法分析提供单词用的,是语法分析的基础,把输入的字
符串形式的源程序分割成一个个单词符号。经过词法分析程序分析出来的单词,
对语言固有的单词只给出类别存放在全程变量 SYM 中,而对用户定义的单词
(标识符或常数)既给出类别又给值,其类别放在 SYM 中,值放在全程变量
ID 或全程变量 NUM 中,全部单词种类由编译程序定义的纯量类型 SYMBOL 给
出,称为语法词汇表。
词法分析器的分析过程:调用 GETSYM 时,它通过 GETCH 过程从源程序
中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼
启动
置初值
调用 getsym 取单词
调用 block 过程
是否为源程序结束符
源程序是否有错误
调用解释过程 interpret 解
释执行目标执行目标程序
结束
出错
打印错误
N
N
Y
Y
5