资源说明:"PL/0 源代码(C 语言版)"
PL/0 是一种编程语言,它是编译原理的经典示例。在本文档中,我们将详细介绍 PL/0 编译系统的 C 语言实现,包括头文件 pl0.h 中的重要定义和枚举类型。
定义
在头文件 pl0.h 中,我们定义了一些重要的常量和枚举类型。这些定义对 PL/0 编译系统的工作至关重要。
我们定义了 norw,表示保留字的个数,等于 13。接着,我们定义了 txmax,表示标识符表的容量,等于 100。nmax 定义了数字的最大位数,等于 14。al 定义了符号的最大长度,等于 10。amax 定义了地址的上界,等于 2047。levmax 定义了块嵌套的最大层数,等于 3。我们定义了 cxmax,表示虚拟机代码的最大数量,等于 200。
枚举类型
在 PL/0 编译系统中,我们定义了多种枚举类型。我们定义了枚举类型 symbol,表示符号的类型。该枚举类型包括 nul、ident、number、plus、minus、times、slash、oddsym、eql、neq、lss、leq、gtr、geq、lparen、rparen、comma、semicolon、period、becomes、beginsym、endsym、ifsym、thensym、whilesym、writesym、readsym、dosym、callsym、constsym、varsym 和 procsym 共 32 种符号类型。
我们定义了枚举类型 object,表示对象的类型。该枚举类型包括 constant、variable 和 procedure 共 3 种对象类型。
我们定义了枚举类型 fct,表示指令的类型。该枚举类型包括 lit、opr、lod、sto、cal、inte、jmp 和 jpc 共 8 种指令类型。
结构体
在 PL/0 编译系统中,我们定义了一个结构体 instruction,表示指令。该结构体包括功能码 f、层次差 l 和地址 a。
全局变量
在头文件 pl0.h 中,我们定义了一些全局变量。我们定义了 FILE * fas,表示输出名字表的文件指针。我们定义了 FILE * fa,表示输出虚拟机代码的文件指针。然后,我们定义了 FILE * fa1,表示输出源文件及其各行对应的首地址的文件指针。我们定义了 FILE * fa2,表示输出结果的文件指针。
我们还定义了一些 bool 变量,包括 tableswitch 和 listswitch,表示是否显示名字表和虚拟机代码。char 变量 ch 用于获取字符的缓冲区,getch 使用。enum symbol 变量 sym 用于表示当前符号。
char 变量 id[al+1] 用于存放当前 ident,多出一个字节用于存放 0。int 变量 num 用于存放当前 number。int 变量 cc 和 ll 用于 getch 使用的计数器,cc 表示当前字符(ch)的位置。int 变量 cx 用于虚拟机代码指针,取值范围[0,cxmax-1]。
char 变量 line[81] 用于读取行缓冲区。char 变量 a[al+1] 用于临时符号,多出一个字节用于存放 0。struct instruction 变量 code[cxmax] 用于存放虚拟机代码的数组。
char 变量 word[norw][al] 用于保留字,enum symbol 变量 wsym[norw] 用于保留字对应的符号值。enum symbol 变量 ssym[256] 用于单字符的符号值。char 变量 mn 用于存放保留字。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。