在进行编译器开发之前需要/推荐哪些知识
What knowledge is required/recommended before approaching compiler development?
在stackoverflow上有一个关于学习编写编译器的问题。我已经看过了,我认为这是我想要解决的问题。我认为(和其他许多人一样)这些知识对程序员来说是无价的。然而,我的技能主要是c++,我可以说我对语言的语法和一些基本算法和设计概念非常熟悉,但我绝不是一个经验丰富的程序员。我唯一的编程经验来自大学水平的学术教科书和完成入门/中级课程(300级课程)。因此,我的问题出现了。
只有c++语言的一般知识,没有汇编知识,一本针对编译器的理论和工作原理以及这些理论的实现的书,比如《编译器:原理、技术和工具(第二版)》,对我来说很难理解吗?
我建议您先从解释器开始,因为您不需要专有的硬件知识来实现它。关键概念通常是如何定义语言,什么构成语句,构建解析树等等。对我来说,硬件知识是次要的,而不是真正理解如何读取和计算语句。
我在学习时所做的是为一种类似Pascal的语言写一个小的解释器,从简单的语句和变量存储开始,随着我的进步,慢慢地添加不同的东西。
继续-这是一个很好的学习方式。通常,在你真正理解书中给出的技术之前,你需要尝试它们,但是在你完成这些练习之后,你应该成为一个更好的程序员。
你需要学习一些汇编语言(或字节码),以便把一个编译好的程序翻译成可以实际执行的东西。
特别是对于C(++),您还需要C(++)标准的副本。
你可以做一些捷径,比如解释而不是完全编译,或者翻译成另一种语言,然后用另一个编译器编译。
同样,你应该首先考虑为小型或简化的语言(如Forth、Basic或所谓的小型C语言)制作一个编译器(不支持所有类型、结构和关键字,缺乏大多数标准库)。
我可以估计,作为一个相当精通C语言、对x86非常了解的程序员,我需要几个月(~3)的时间来编写一个可以工作的小型C语言编译器。就是这样,最小的标准库,没有优化,最小的错误检查(也就是说,不生成所有有用的警告)。这是为了让你们知道即使在不太复杂的情况下也要花多长时间。
- C/C++编译器通常会删除重复的库吗
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 在线编译器中的分段C++没有打印消息
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 我需要知道编译器如何在cpp中使用析构函数
- 编译器如何区分std::vector的构造函数
- CLANG 编译器 说:变量"PTR"可能未初始化
- 告诉c++编译器该参数没有别名
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 为什么所有C++编译器都会崩溃或挂起此代码
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 在进行编译器开发之前需要/推荐哪些知识