概述
作为系统软件,编译器的设计与实现是非常复杂的。对于一个相对复杂的系统,通常的解决方法是将系统分解成若干较小且便于处理的小系统,分别实现后将其组织成一个完整的复杂系统,这就是"分治法"的思想。实际上,计算机科学家正是运用这种思想来设计与实现编译器、操作系统、网络通信协议等复杂的大型系统软件的。1
工作过程编译器的翻译过程是非常复杂的,但就过程本身而言,与自然语言翻译却有不少相近之处。例如,把英语句子翻译为汉语句子时,通常需要经过下列几个步骤:
1)对句子中的每个英语单词进行识别。
2)对句子的语法结构进行分析。
3)分析句子的基本含义,进行初步翻译。
4)修饰译文,使之更加符合汉语的表达习惯。
5)将译文整理书写记录。
编译器的工作过程与自然语言翻译过程比较类似,亦可划分为五个阶段:词法分析、语法分析、语义分析与中间表示生成、代码优化、代码生成。
1.词法分析词法分析的任务就是对输入的源程序进行扫描分析,识别出一个个的单词(Token),并进行归类。这里的"单词"可以理解为源程序中具有独立含义的不可分割的字符序列,与自然语言中的单词概念有一定区别。一般而言,根据程序设计语言的特点,单词可以分为五类:关键字、标识符、常量、运算符、界符。以一个C语言的条件语句为例:
if(aa&&10==0)aa=100;
词法分析的结果是识别出如下的单词符号:
|| ||
2.语法分析语法分析的任务就是在词法分析的基础上,根据程序设计语言的语法规则(文法),把单词流分解成各类语法单位(语法范畴),如"语句"、"表达式"等。理论上讲,通过语法分析,编译器可以准确无误地判断输入源程序是否满足语言的语法规则。例如,语法分析可以判断如下语句是错误的。
ifaa%%10==9aa=100; for(i