目录
不生成目标程序。
解释的程序在运行时需要源代码或者等效的中间代码参与,而且来控制层在解释器上面。
将源程序编译成有目标计算机特征的目标程序。
在计算机直接运行目标程序就行,不需要源程序和编译程序参加。
看是否生成目标程序。
反编译:不能还原出原程序,只能还原到一个中间状态。通过反编译有助于我们理解设计者的一些思路。
语句
用来描述程序中运算步骤,控制结构,数据传输。
语法
程序的基本符号组成的程序,要符合各个语法的要求。
语义
概念:不同的语法结构表示出来的含义。
分类:静态语义、动态语义。
1、静态语义:程序在编译过程中就需要明确的语义。在编译的时候可以确定程序语法结构的含义。
2、动态语义:需要运行这个程序,才能确定语法结构的含义。也就是编译完成的程序仍会存在动态语义的错误。
语用
程序与使用者之间的关系。
四个必备部分:词法分析、语法分析、语义分析、目标代码生成
两个不必须项:中间代码生成、代码优化。如果编译器简单,就不会包含这两部分。
词法分析:主要是对源程序从前到后,从左到右进行逐个字符的扫描,识别出一个一个的单词。所以通过编译的程序也就是通过词法分析的程序一般不存在词法错误。
语法分析:在词法分析的基础上,按照看语法规则,去检查这些单词是否符合规范,在表达上形成一个正确的程序。所以通过编译的程序也就是通过语法分析的程序一般不存在语法错误。
语义分析:在语法分析的基础上,检查程序的静态语义,主要是对数据类型进行分析和检查。
中间代码生成:根据语义分析输出对应的中间代码。
代码优化:对中间代码进行适当的优化。
目标代码生成:根据目标计算机的指令特点生成对应的指令代码。这就将源程序编译成符合计算机特征的一些指令。
出错管理:贯穿整个编译过程中的错误管理。
符号表管理:主要记录源程序中各种符号的必要信息,以辅助我们进行语义的正确性检查,以及在编译过程中能够快速的进行查找、修改、插入等相关的操作。贯穿整个编译过程。