1.编译程序的结构
编译程序是很复杂的,但它可被分为相对独立的几个部分,每个部分承担专
门的工作,各部分间互相共享传送数据。把编译程序分解成较小的部分,不仅便
于开发、调试,而且便于编译程序的移植。一个典型的编译程序通常具有如图 1 的
结构。
图 1 编译器基本结构
1.1 词法分析
词法分析负责对源程序的字符串进行扫描和分解,根据构词法将字符流
(Character Stream)转化成单词流(Token Stream)。
例如对于 C--语句:
x = y + z – m * 10;
词法分析的结果是:
ID ASSIGN ID ADD ID SUB ID MUL NUM SEMI
构词的规则就是词法,例如标识符(ID)可定义为以字母开头,后面跟零个或
任意个字母或数字的序列。词法分析程序就根据词法构造有限自动机来识别每一
个单词,将产生的单词交给语法分析程序。
1.2 语法分析
语法分析模块的任务是根据文法规则把单词序列分解成各类语法单位,识别
出一个一个句子,例如对前面的语句进行语法分析可得到如图 2 的分析树。
如果输入单词不能构成语法树,则说明有语法错误。常见的语法分析方法分为
自顶向下分析和自底向上分析两大类。在 C--编译器中采用了一种自底向上的方法,
即 LR 方法。
符
号
表
管
理
词法分析器
语法分析器
语义分析器
优化器
代码生成器
单词
语法结构
中间语言
IR
IR
目标机器码
出
错
处
理