RE:从零开始的编译器编写 01 编译器综述 木灵的炼金工作室

算是又开一个新坑了(笑)
距离上次写编译器也有好久了,那么不如就来复习一下。

我们可以来简单实现一个C编译器。

首先,

什么是编译器

之前看到有人说:如果开发出了让计算机自动生成程序的程序,那么程序员都将失业。
我:???这玩意儿早有了,这玩意儿叫编译器。

编译器就是将由某种语言编写的程序翻译成另一种语言的程序。
编译器分为编译器和解释器,解释器是在线的,类似于“口译”,而编译器是离线的,类似于“复述”或“笔译”。

如果希望实现编译器,我们就要知道:

编译器做了什么

  1. 将源程序抽象化,将源程序中的符号翻译成计算机可以看懂的符号。这个过程称为词法分析,词法分析产生的“计算机可以看懂的”符号称为词素。
  2. 根据词法分析的结果,将若干个词素由一定的模式进行逻辑上的检查和组合,并生成整个程序的逻辑结构。这个过程称为语法分析。
  3. 通过词法分析,我们只是在形式上得到了整个程序的逻辑框架,我们需要使用一些固定的规则对这个框架进行充实,最终输出中间代码或目标语言的程序。这个过程称为语义分析。
  4. 某些编译器会优化目标语言,最终生成目标代码。

与自然语言的翻译相比较:
词法分析可以认为是查字典,并得出这个词的类型和意义。
语法分析是根据若干个词的类型来生成一句抽象话(不是”你再骂!”),并判断这句话是否符合语法规范。
语义分析则是将词汇的意义回代入上述的抽象语言中,形成具体的语句。

某些编译器也存在着预处理部分,比如C语言编译器会将宏的处理过程放入预处理器中。


Copyright AmachiInori 2017-2021. All Right Reserved.
Powered By Jekyll.
amachi.com.cn