1
一、概述:
源语言:源程序是 PL0 语言编写的程序,PL0 语言可以看成是 Pascal 语言的子集。
目标语言:目标语言是一个假想栈式计算机的汇编语言,与具体的计算机无关。
实现工具(平台):Borland C++Builder 6.0
运行平台:Windows7 旗舰版
二、结构设计说明
编译程序概述
PL/0 的编译过程采用一趟扫描方式,以语法语义分析程序为核心,词法分析程序和
代码生成程序都作为一个独立的过程,当语法分析需要读入单词时就调用词法分析程序,
而当语法分析正确需生成相应的目标代码时,则调用代码生成程序。此外,用表格管理程
序建立变量、常量和过程标识符的说明与引用之间的信息联系。用出错处理程序对词法和
语法分析遇到的错误给出在源程序中出错的位置和错误性质。当源程序编译正确时 ,
PL/0 编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序的要求
输入数据和输出运行结果。
其编译和解释执行的结构图如下所示:
各功能模块描述
1.词法分析
PL0 词法分析程序 GETSYM 是一个独立个过程,为语法语义分析提供单词。
1.1 可以从三个方面理解词法分析程序:读入,中间处理,输出。
1.1.1 读入:调用 GetCh()函数,由全局变量 CH 返回一个字符给 GETSYM 程序。具
体实现是 GetCh()函数从源程序读取一行字符存放在 LINE 数组,每次
将 LINE 数组的一个元素赋值给 CH,由 CH 返回,直到 LINE 数组读取
完毕,重复读取一行字符。
1.1.2 中间处理:识别保留字,识别标识符,识别数字并拼数,拼复合词。保留字、
标识符以字母开头,中间可以有数字,但不可以有下划线,用户定义的
标识符出现下划线会使程序出现死循环。