编译原理的一些基本概念
编译和解释之区别
编译式直接将代码编译成机器码,通常不可跨平台运行;而如Java类语言具有虚拟机来将字节码翻译成机器码,具有跨平台能力。
编译器的结构
分析部分
搜集源程序的信息,构建符号表;分析定位程序中的语法和语义错误。称为编译器的前端。
综合部分
根据符号表和中间表示构造目标程序。称为编译器的后端。
编译器的前端是机器无关的,亦即:不涉及具体的指令集。
符号表的管理
记录源程序中变量的名字,收集其作用域、类型(函数名还包括参数类型等信息);在整个编译过程均可使用。
编译器的趟
以文件为输入输出单位的编译过程的个数,每趟可以执行一个或若干个步骤。
“步骤”偏向于逻辑组织方式,“趟”与具体实现相关。
程序设计语言的基础概念
静态/动态
静态指在编译过程可以确定解决的某个问题,比如为某一静态的变量分配一块内存。
c
int a = 10;
1
动态指允许在程序运行时做出决定。
c
int *p = malloc(sizeof(int));
1
作用域的概念
参数的传递
按值传递、按指针传递和按引用传递。
词法分析器的作用
输入源代码,处理后输出词法单元。词法单元还拥有一些属性,方便下一步编译。