在进行编译器开发之前需要/推荐哪些知识

What knowledge is required/recommended before approaching compiler development?

本文关键字:知识 编译器 开发      更新时间:2023-10-16

在stackoverflow上有一个关于学习编写编译器的问题。我已经看过了,我认为这是我想要解决的问题。我认为(和其他许多人一样)这些知识对程序员来说是无价的。然而,我的技能主要是c++,我可以说我对语言的语法和一些基本算法和设计概念非常熟悉,但我绝不是一个经验丰富的程序员。我唯一的编程经验来自大学水平的学术教科书和完成入门/中级课程(300级课程)。因此,我的问题出现了。

只有c++语言的一般知识,没有汇编知识,一本针对编译器的理论和工作原理以及这些理论的实现的书,比如《编译器:原理、技术和工具(第二版)》,对我来说很难理解吗?

我建议您先从解释器开始,因为您不需要专有的硬件知识来实现它。关键概念通常是如何定义语言,什么构成语句,构建解析树等等。对我来说,硬件知识是次要的,而不是真正理解如何读取和计算语句。

我在学习时所做的是为一种类似Pascal的语言写一个小的解释器,从简单的语句和变量存储开始,随着我的进步,慢慢地添加不同的东西。

继续-这是一个很好的学习方式。通常,在你真正理解书中给出的技术之前,你需要尝试它们,但是在你完成这些练习之后,你应该成为一个更好的程序员。

你需要学习一些汇编语言(或字节码),以便把一个编译好的程序翻译成可以实际执行的东西。

特别是对于C(++),您还需要C(++)标准的副本。

你可以做一些捷径,比如解释而不是完全编译,或者翻译成另一种语言,然后用另一个编译器编译。

同样,你应该首先考虑为小型或简化的语言(如Forth、Basic或所谓的小型C语言)制作一个编译器(不支持所有类型、结构和关键字,缺乏大多数标准库)。
我可以估计,作为一个相当精通C语言、对x86非常了解的程序员,我需要几个月(~3)的时间来编写一个可以工作的小型C语言编译器。就是这样,最小的标准库,没有优化,最小的错误检查(也就是说,不生成所有有用的警告)。这是为了让你们知道即使在不太复杂的情况下也要花多长时间。