参考视频:方舟·编译技术入门与实战 以及 西交冯博琴老师的相关视频
编译的过程包括 词法分析(分析程序符号)、语法分析(分析语法单位)、中间代码生成、代码优化和目标代码生成。该架构自1960s之后基本未变。
一、编译过程各部分的任务
(1)词法分析:输入源程序,扫描分解源程序字符串,识别五类符号,包括定义符、标识符、运算符、界符和常数,转为单词符号。
(2)语法分析:在词法分析基础上,将单词符号转为语法单位(如短句、子句、句子、程序段、程序等),并确定整个输入串在语法上是否正确。语法分析主要做三件重要事情:一是程序入口在哪;二是中间怎么处理;三是得到的结果是什么。
(3)中间代码生成:有时也称之为语义分析,它对语法分析所识别出的各类语法单位,分析其含义,并进行初步翻译(即产生中间代码)。
(4)代码优化:主要针对中间代码进行加工变换,希望产生更高效,即节省空间和时间,的目标代码。
(5)目标代码生成:将中间代码转换为特定机器上的目标代码。
💡 学习的方法:建立知识地图🗺️
对一个新领域的探索,需要快速建立知识地图。
有限的时间,有限的注意力和有限的体力,要求我们在尽可能短的时间内高质量获取知识。
编译器整体架构和前端设计 (from Prof. Cooper, Rice University)
编译器的前端部分包括词法分析器、解释器和语义阐述器(非必需?),前端输出为中间代码或中间表示 Intermediate Representation (IR),传给优化器,优化后的 IR 再传给后端,得到目标代码。
二、词法分析知识地图
来自 Rice University 的 Cooper 教授 COMP 412 课程的课件,如何构造出一个 Scanner。
术语解释:
- RE - 正则表达式
- NFA - 非确定性有限自动机
- DFA - 确定性有限自动机
- minimal DFA - 最小DFA
- Scanner - 词法分析器