compile
编译
五大组成部分
- 词法分析:将程序文本拆分成字符或
tokens
, 跟据语言词法规则分析并识别单词,并以相应的编码方式输出(四大类单词:标识符、关键字、常量、运算符)。 - 语法分析:根据语言的语法规则,识别单词之间的关系,并生成语法树,并进行语法检查。
- 语义分析:检查语义错误,如类型检查、作用域检查等,并生成中间代码(便于优化、编译程序的移植(LLVM),常用:四元式、三元式和逆波兰式等)。
- 优化:减少内存使用或使程序运行的更快。
- 代码生成,生成目标程序
编译程序中都需要包括表格管理(建表和查表)和错误处理模块。
概念
源程序是翻译程序的输入、目标程序是其输出;
汇编程序和编译程序都是翻译程序,前者是将汇编语言转为机器码,但后者是将高级语言转换。
解释程序(python):对源程序进行解释执行程序。
编译-解释程序(java):先编译后将源程序中间形式进行解释执行。
遍(PASS)
对源程序从头到尾扫描一次并做相应加工处理,生成新的源程序中间形式或目标程序,为一遍。扫描几次能够完成5个阶段就称为几遍。
分为单遍和多遍编译器。是否分遍,视具体情况而定(内存大小、语言复杂度等)。分遍后带来的主要缺点就是增加了不少重复性工作(如每一遍输入和输出都要进行文件的读写)。
前后端
前端与源语言有关,后端与目标机器有关。
前后处理器
前处理器:对源程序进行预处理,如C语言中的宏替换、文件包含等。
后处理器:对目标程序进行后处理,如汇编程序中的符号地址替换等。
cool
抽象、静态键入、复用(继承)、内存管理
语义分析
中间代码
四元式
分成四个部分:运算符、两个操作数(运算符左右两边)和结果(一般为编译程序引入的临时变量)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 yumooo!