第 1 页 共 31 页 刘勇彬 3105006882 计算机三班
一、 实验目的与要求
目的:在分析理解一个教学型编译程序(如 PL/0)的基础上,对其词法分析程序、
语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理
和基本实现方法的目的。
要求:对 PL/0 作以下修改扩充
基本内容:
增加单词:保留字 ELSE,FOR,TO,DOWNTO,RETURN
运算符 +=,-=,++,--
修改单词:不等号# 改为 <>
增加条件语句的 ELSE 子句
二、 实验环境与工具
(1)计算机及操作系统:PC 机,WindowsXP
(2)程序设计语言:C++Builder6
(3)教学型编译程序:PL/0
..
三、 设计方案
(1)编译过程的流程:
PL/0 编译过程采用一趟扫描方式,以语法分析程序为核心,词法分析程序
和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就调用词
法分析程序,而当语法分析正确需生成相应的目标代码时,则调用代码生成程
序.此外,用表格管理程序建立变量,常量和过程标识符的说明与引用之间的信
息联系.用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错
的位置和错误性质.当源程序编译正确时,PL/0 编译程序自动调用解释执行程
序,对目标代码进行解释执行,并按用户程序要求输入数据和输出运行结果.
功能模块描述:
(1) 符号表:
符号表为一维数组TABLE,表项为一结构体,包括标识符的名称,类型和表达标
识符信息的联合体。类型分三类:常量,变量,过程。当类型为常量时,只需把常
量的值填入表中,即赋值给联合体。当类型为变量时,需把该标识符的层次,地址
信息填入表中,当为过程时,还需要整个过程的大小的信息。TX为TABLE表的指
针,DX为局部变量在说明层中的相对位置,程序中每一层的DX从4开始,DX0-DX3
分别分配给返回值单元,静态链,动态链和程序返回地址,此后每识别一个变量DX
加1。
struct {
ALFA NAME;