关于Learning to write a compiler的stackoverflow存在一个问题。我看过它,我认为这是我想要解决的问题。我认为(和许多其他人一样)这些知识对于程序员来说是非常宝贵的。但是,我的技能主要是在C ++中,我会说我对语言的语法和一些基本的算法和设计概念非常熟悉,但我绝不是一个经验丰富的程序员。我唯一的编程经验来自大学的学术教科书和完成入门/中级课程(300级课程)。因此,我的问题越来越多。
只有一般的C ++语言知识而且没有汇编知识,一本针对编译器的理论和工作以及这些理论的实现的书,如书Compilers: Principles, Techniques, and Tools (2nd Edition),对我来说很难理解?
答案 0 :(得分:3)
我建议您先从解释器开始,因为您不需要专有的硬件知识来实现它。关键概念通常是如何定义语言,制作语句的内容,构建解析树等等......对我而言,硬件知识是次要的,而不是实际理解如何阅读和评估语句。
我在学习的过程中为Pascal语言编写了一个小解释器,并从简单的语句和变量存储开始,并随着我的变化慢慢添加了不同的东西。
答案 1 :(得分:1)
继续 - 这是一种很好的学习方式。通常,在你真正理解它们之前,你需要尝试书中给出的技巧,但是在你完成练习之后,你应该成为一个更好的程序员。
答案 2 :(得分:0)
您需要学习某种汇编语言(或字节代码)才能将已编译的程序转换为可以实际执行的程序。
对于C(++),您还需要一份C(++)标准。
您可以进行一些简短的修改,例如解释,而不是完全编译或翻译成不同的语言,并使用不同的编译器进行编译。
此外,您应该考虑首先为Forth,Basic或所谓的小C(不支持所有类型,构造和关键字以及缺少大多数标准库)这样的小型或哑语式编译器。
我可以估计,我需要一个相当精通的C程序员,他能够很好地了解x86,几个月(~3)才能生成一个小型的C-ish编译器。就是这样,最小的标准库,没有优化,最小的错误检查(即,没有生成所有有用的警告)。这是为了让您了解即使在不那么复杂的情况下,事情还需要多长时间。快速做小事可能会更有价值。