PL0E 是一个完整的编译器实现,它包括如下功能:
1. 词法分析 (Lexical Analysis) :输入源程序,对构成源程序的字符串进行扫描和分解,
识别出一个个的 token(亦称单词符号或简称符号),如基本字(begin、end、if、for、
while),标识符、常数、运算符和界符(标点符号、左右括号)。单词符号是语言的基
本组成成分,是人们理解和编写程序的基本要素。
2. 语法分析 (Syntax Analysis):根据语言的语法规则,由单词符号形成语法单位(如“短
语”、“句子”、“程序段”、“程序”等),由小到大,一层一层地逐步进行。通过语法分析,
检查源程序在语法上是否正确,把源程序分解成语法的正确成分,即程序语句。
3. 语义分析 (Semantic Analysis):编译程序的语义分析阶段要对源程序的语法结构进行
静态分析,检查源程序中的语义错误,并收集类型信息供后面的代码生成阶段使用。
4. 中间代码产生 (Intermediate Code Generation):中间代码是源程序的一种内部表示,
或称“中间语言”。这个中间语言使得编译器可以被分为前端 (Front End) 和后端 (Back
End)。编译器前端负责产生中间代码,而后端负责生成目标代码。这样对于一个新出现
的语言只需写出它的前端就可以了。中间代码也是编译器的前端和后端的分界点。
5. 代码优化 (Code Optimization):编译程序中优化阶段的任务是对前阶段产生的中间代
码进行变换或进行改造,目的是使生成的目标代码更为高效,即运行时间更短,占用的
空间更小。
6. 目标代码生成 (Target Code Generation):目标代码生成是编译的最后一个阶段。在生
成目标代码时要考虑以下几个问题:计算机的系统结构、指令系统、寄存器的分配以及
内存的组织等。