编译程序的功能是把某高级语言书写的源程序翻译成与之等价的低级语言(汇编语言或机器语言)的目标程序。其过程很复杂,可分成6个阶段;
①词法分析阶段:
其任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个的“单词”符号。
词法分析所依据的是语言的词法规则,即描述单词结构的规则。
词法规则可用3型文法(正规文法)或正规式来描述,有限自动机能识别正规文法所定义的语言和正规式所表示的集合。
②语法分析阶段。
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”、“语
句”和“程序”等,可以发现所有的语法错误。
在词法分析的基础上将单词符合序列分解成各类语法单位。
语法分析所依据的是语言的语法规则,即描述程序结构的规则。
词法分析和语法分析本质上都是对源程序的结构进行分析。
③语义分析阶段。
是审查源程序有无语义错误,为代码生成阶段收集类型信息。
比如语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象
④中间代码生成阶段。
在进行了上述的语法分析和语义分析阶段工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫
做中间语言或中间代码。所谓"中间代码"是一种简单、含义明确的记号系统。
语义分析和中间代码生成所依据的是语言的语义规则。一般采用语法指导翻译规则和中间代码生成规则。
⑤代码优化阶段
是对前阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高级,即省时间和省空间。
⑥目标代码生成阶段。
是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
这是编译的最后阶段,它的工作与硬件系统的结构和指令的含义有关。