文章摘要
作者决定为《nand2tetris》书中的Hack处理器编写一个C编译器,经历多次失败后,找到了《Writing a C Compiler》这本书,并计划通过博客记录学习过程。该书从第一章开始逐步构建编译器,每章增加新功能,作者与书作者邮件交流并获得了及时帮助。与其他编译器书籍不同,该书专注于构建真实语言而非虚构语言。
文章总结
文章《Working through ‘Writing A C Compiler’》详细介绍了作者在学习和实践《Writing a C Compiler》一书中的经历和感悟。主要内容如下:
书籍介绍:作者决定为《nand2tetris》书中的Hack处理器编写一个C编译器,并在多次尝试失败后发现了《Writing a C Compiler》这本书。

学习过程:作者计划通过博客记录学习过程,逐章进行。书中第一章结束时,读者就能编写一个简单的编译器,后续章节逐步增加功能。例如,第一章的编译器只能处理返回常量的
main函数,而第二章则增加了单目运算符的功能。测试套件:书中提供了大量的测试套件,每个章节都会增加新的测试。测试套件可以针对不同的编译阶段(如词法分析、语法分析、语义分析等)进行测试,甚至包括“额外学分”的功能。
代码仓库:作者提到书中提供了两个GitHub仓库,一个是测试套件,另一个是OCaml实现的编译器参考。作者自己也创建了两个仓库,一个是测试套件的分支,另一个是用Rust实现的编译器。
博客计划:作者计划为每一章撰写一篇博客,包括已经完成的部分和未来的学习进展。
总结:尽管作者在后续章节中可能会提出一些改进建议或指出不足之处,但这本书仍然是一本非常优秀的书籍。
文章展示了作者在学习编译器构建过程中的详细步骤和心得体会,强调了书籍的实用性和测试套件的重要性。
评论总结
正面评价:
- mkw5053认为这本书很好,并提到自己之前也喜欢类似的书籍:“Sounds like a great book. I worked through nand2tetris ages ago and remember enjoying it as well.”(听起来是一本很棒的书。我很久以前做过nand2tetris,记得也很喜欢。)
- sanufar对这本书的渐进式教学风格表示赞赏,并认为作者的OCaml实现非常有用:“I love this book! I worked through a bunch of it during my winter break last year and found the incremental teaching style extremely rewarding.”(我喜欢这本书!去年寒假我读了很多,发现渐进式教学风格非常有收获。)
负面评价:
- jokoon对书中使用访问者模式的部分表示不满,并因此停止阅读:“The crafting interpreting asks the reader to use the visitor pattern, and this was quite a turn off for me, I stopped there.”(书中要求读者使用访问者模式,这让我很反感,我就停在那里了。)
中立评价:
- UncleOxidant提到作者还有一系列博客文章,可能对读者有帮助:“The author of the book also has a series of blog entries.”(这本书的作者还有一系列博客文章。)
- stellalo将书中的方法与另一篇论文进行类比,但未深入评价:“From what the blog author says (I haven’t looked into the book), the approach reminds me of Abdulaziz Ghuloum, 2006, An Incremental Approach to Compiler Construction.”(从博客作者的说法来看(我还没看书),这种方法让我想起了Abdulaziz Ghuloum 2006年的论文《An Incremental Approach to Compiler Construction》。)
- kragen认为书的结构很好,并提到Ghuloum的论文对他有启发:“This makes the book sound very well structured! I also found Ghuloum's paper inspirational.”(这让我觉得这本书结构很好!我也觉得Ghuloum的论文很有启发性。)
总结:评论中对这本书的评价较为正面,尤其是对其渐进式教学风格和作者提供的参考实现表示赞赏。但也有读者对书中某些技术细节(如访问者模式)感到不满。部分评论者提到作者的其他资源(如博客)和相关论文,认为这些内容对读者有帮助。