学习编译的过程

作为一名半路出家的程序员,得多补基础,所以在网上买了课学习,这就是学习的笔记
编译
其实就是把源代码变成目标代码的过程。如果源代码编译后要在操作系统上运行,那目标代码就是汇编代码,我们再通过汇编和链接的过程形成可执行文件,然后通过加载器加载到操作系统里执行。如果编译后是在解释器里执行,那目标代码就可以不是汇编代码,而是一种解释器可以理解的中间形式的代码即可。
学习编译的过程
1.词法分析,将源代码转化为token,以c语言为例,一个foo的函数,将其解析成token,去掉空格,换行。


int foo(int a){
  int b = a + 3;
  return b;
}

学习编译的过程
2.语法分析
这一步就是将上一步解析出来的token进行分析成抽象语法树,即将token不断的分解直到每一个叶子节点都是token上的实际的代码
学习编译的过程
3.语意分析
语义分析的重要特点,就是做上下文相关的分析,确定语法树里的变量引用自哪个变量,确定函数的作用域,以及检查数据类型是否正确。
语义分析获得的一些信息(引用消解信息、类型信息等),会附加到 AST 上。这样的 AST 叫做带有标注信息的 AST(Annotated AST/Decorated AST),用于更全面地反映源代码的含义。
学习编译的过程

总结起来,在语义分析阶段,编译器会做语义理解和语义检查这两方面的工作。词法分析、语法分析和语义分析,统称编译器的前端,它完成的是对源代码的理解工作。

上一篇:JDT操作AST重构if块


下一篇:2021-10-19