Lexical Analysis(词法分析)
- 词法分析的目的是将程序文本划分为单词,或者我们在编译器中所说的,标记
- 利用程序文本中的空格,分号等符号来识别程序文本
Parsing(解析)
- 解析的实际工作是将单词组合到别的更高级别的结构中
- eg
利用词法分析出 if,else ,== ,x==y是条件,z是变量等标记 ,将标记放入 if-then-else 解析树种if x==y then z=1;else z=2;
Semantic Analysis(语义分析)
- 编译器词义分析非常有限,并且编译器也不知道程序是做什么的
- 变量绑定等操作
Optimization(优化)
- 通过修改程序,使得程序使用的资源更少,执行的时间更少
- eg “我吃了许许多多的草莓”改成 ”我吃了许多草莓“
x=y*0 改为 x=0(只在x,y整数下有小,浮点数下是错误的)
Code Generation(代码生成)
- 将结构树翻译成汇编等机器代码
编译过程的变迁
- 早期在 词法分析,解析,优化和代码生成中占据编译器大量时间,随着技术改进,目前时间主要花费在语义分析和优化的过程中
- 编译过程时间消耗占比,上是以前,下是现在