首先,别一上来就抱着“龙书”不放,也就是《编译原理》(Compilers: Principles, Techniques, & Tools)。 这书经典是经典,但真的…太厚了!而且讲得比较偏理论,上手难度不是一般的高。除非你是真想搞编译器的底层研究,否则,先别碰它。我当年就是被“龙书”吓跑的,放了半年,才鼓起勇气再战。
那入门该选什么?我推荐《现代编译原理:C语言描述》(Modern Compiler Implementation in C)。 这本书的优点在于实践性强,用C语言作为例子,一步步教你实现一个简单的编译器。边学边做,才是王道啊!而且这本书的翻译质量也还不错,读起来不会太晦涩难懂。缺点嘛,可能就是内容相对比较浅显,如果想深入了解,还是得啃其他的书。

还有一本,《Crafting Interpreters》,这书比较特殊,它是教你从头开始写一个解释器,而不是编译器。但别小看解释器,它能帮你更好地理解编译原理的一些基本概念,比如词法分析、语法分析、语义分析等等。 这本书的特点是文风幽默,例子生动,而且作者还提供了完整的代码,可以直接运行。不过,这本书是用Java写的,如果你对Java不熟悉,可能需要先了解一下Java的基础知识。
如果你对编译原理已经有了一定的了解,想深入学习一些高级主题,比如代码优化、并行编译等等,那可以考虑《高级编译器设计与实现》(Advanced Compiler Design and Implementation)。这本书讲得比较深入,涉及了很多编译器的内部细节。但要注意,这本书的难度比较大,需要一定的编译原理基础才能看懂。
说到这里,我想多说一句,学编译原理,光看书是远远不够的!一定要动手实践! 要写代码!要debug!要思考! 我当年就是因为只看书,不写代码,结果学了半天,还是啥都不会。后来,我痛定思痛,开始自己写编译器,才慢慢掌握了一些编译原理的知识。
别怕遇到问题,遇到问题就查资料,就问人。 Stack Overflow是个好地方,Google也是个好老师。 别怕犯错,犯错是学习的最好机会。 我当年写编译器的时候,debug了好几个星期,最后才发现是一个非常愚蠢的错误。但正是这个错误,让我对编译原理有了更深刻的理解。
对了,如果你对LLVM感兴趣,可以看看《Getting Started with LLVM Core Libraries》。LLVM是一个非常流行的编译器框架,很多语言的编译器都是基于LLVM开发的。这本书可以帮助你快速入门LLVM,了解LLVM的基本架构和使用方法。
另外,网上还有很多优秀的编译原理课程,比如Coursera上的“Compilers”课程,Stanford Online上的“CS143: Compilers”课程。 这些课程都是由顶尖的大学教授授课,内容深入浅出,非常适合学习编译原理。
除了这些书和课程,我还想推荐一些其他的学习资源。比如,你可以关注一些编译原理相关的博客和论坛,比如“Brendan Gregg’s Blog”、“Hacker News”等等。 在这些地方,你可以了解到最新的编译原理技术和研究成果,还可以和其他的编译原理爱好者交流学习经验。
还有,阅读一些开源编译器的源代码也是一个不错的学习方法。 比如,你可以阅读GCC、Clang等编译器的源代码,了解这些编译器是如何实现的。当然,阅读这些编译器的源代码需要一定的耐心和毅力,但如果你能坚持下来,你一定会收获很多。
别忘了,学习编译原理是一个漫长的过程,需要不断地学习和实践。 不要期望一蹴而就,要保持耐心和热情。 相信你一定能学好编译原理!
还有一点,选书的时候要考虑自己的基础。 如果你完全没有编程基础,那最好先学习一下C语言或者Java的基础知识。 如果你对数据结构和算法不太熟悉,那也需要先补习一下。 编译原理是一门综合性的学科,涉及了很多计算机科学的基础知识。
最后,我想说,学习编译原理是一件非常有挑战性的事情,但也是一件非常有意义的事情。 通过学习编译原理,你可以更好地理解计算机的工作原理,可以更好地编写高效的代码,可以更好地解决实际问题。 所以,加油吧!
还有还有,别死读书!编译原理这东西,理论性很强,但最终还是要落实到实践上。 尝试自己写一个简单的编译器或者解释器,哪怕只是一个玩具级别的,也能让你对编译原理的理解更上一层楼。 真的!我当年就是吃了死读书的亏,看了好多书,结果啥也不会。 后来自己动手写了个简单的解释器,才感觉开窍了。
记住,实践出真知!别怕出错,大胆尝试!编译原理的世界,等你来探索!
本文由用户 好好学习 上传分享,若内容存在侵权,请联系我们(点这里联系)处理。如若转载,请注明出处:http://www.365yunshebao.com/book/5311.html