符3、voidGetSym:词法分析读取一个单词4、voidGENFCTXi
tYi
tZ:生成目标代码并送入目标程序区5、voidTESTSYMSETS1SYMSETS2i
tN:测试当前单词符号是否合法6、voidENTEROBJECTSKi
tLEVi
tTXi
tDX:登录名字表7、i
tPOSITIONALFAIDi
tTX:查找标识符在名字表中的位置8、voidCo
stDeclaratio
i
tLEVi
tTXi
tDX:常量说明处理9、voidVarDeclaratio
i
tLEVi
tTXi
tDX:变量说明处理10、voidCharDeclaratio
i
tLEVi
tTXi
tDX:字符说明处理11、voidRealDeclaratio
i
tLEVi
tTXi
tDX:实数说明处理12、voidListCodei
tCX0:列出目标代码清单13、voidFACTORSYMSETFSYSi
tLEVi
tTX:因子处理14、voidTERMSYMSETFSYSi
tLEVi
tTX:项处理15、voidEXPRESSIONSYMSETFSYSi
tLEVi
tTX:表达式处理16、voidCONDITIONSYMSETFSYSi
tLEVi
tTX:条件处理17、voidSTATEMENTSYMSETFSYSi
tLEVi
tTX:语句部分处理18、voidBlocki
tLEVi
tTXSYMSETFSYS:分程序分析处理过程19、i
tBASEi
tLi
tBi
tS:通过静态链求出数据区的基地址20、voidI
terpret:对目标代码的解释执行程序21、void__fastcallTForm1Butto
Ru
ClickTObjectSe
der:进行编译,RUN
f(3)PL0编译程序的总流程图
五、主要成分描述
1、符号表
在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,符号表中所登记的信息在编译的不同阶段都要用到。
f在语义分析中,符号表所登记的内容将用于语义检查(如检查一个名字的使用和原先的说明是否一致)和产生中间代码。在目标代码生成阶段,当对符号名进行地址分配时,符号表是地址分配的依据。对一个多遍扫描的编译程序,不同遍所用的符号表也往往各有不同。因为每遍所关心的信息各有差异。一张符号表的每一项(或称入口才包含两大栏(或称区段、字域)即名字栏NAME信,息栏INFORMATION)信息栏包含许多子栏和标志位,用来记录相应名字和种种不同属性,由于查填符号表一般是通过匹配名字来寮现的,因此,名字栏也称主栏。主栏的内容称为关键字(keyword)。
2、运行时存储组织和管理
由于编译时目标程序运行的数据空间大小已经规定,所以存储组织属于静态存储。源程序的标识符存放在TABLE表中,目标代码存放在CODE中,S是由解释程序定义的一维整型数组,是程序运行时的数据存储空间。解释程序还定义了4个寄存器:1)P:程序地址寄存器:指向下一条要执行的目标程序的地址(相当目标程序CODE数组的下标)。2)I:指令寄存器:存放着当前正在解释的下一条目标指令。3)T:栈顶寄存器:由于每个过程当r