Skip to content

编译原理的一些基本概念

编译和解释之区别

编译式直接将代码编译成机器码,通常不可跨平台运行;而如Java类语言具有虚拟机来将字节码翻译成机器码,具有跨平台能力。

编译器的结构

分析部分

搜集源程序的信息,构建符号表;分析定位程序中的语法和语义错误。称为编译器的前端。

综合部分

根据符号表和中间表示构造目标程序。称为编译器的后端。

编译器的前端是机器无关的,亦即:不涉及具体的指令集。

符号表的管理

记录源程序中变量的名字,收集其作用域、类型(函数名还包括参数类型等信息);在整个编译过程均可使用。

编译器的趟

以文件为输入输出单位的编译过程的个数,每趟可以执行一个或若干个步骤。

“步骤”偏向于逻辑组织方式,“趟”与具体实现相关。

程序设计语言的基础概念

静态/动态

静态指在编译过程可以确定解决的某个问题,比如为某一静态的变量分配一块内存。

c
int a = 10;

动态指允许在程序运行时做出决定。

c
int *p = malloc(sizeof(int));

作用域的概念

参数的传递

按值传递、按指针传递和按引用传递。

词法分析器的作用

输入源代码,处理后输出词法单元。词法单元还拥有一些属性,方便下一步编译。