编译原理学习指南 - 弦外之音

/ 0评 / 0

本文主要向初学者讲解如何学习编译原理,编译原理是一个比较有趣的学科,当你学会编译原理之后,你就会知道 gcc 等编译系统是如何把 C程序转成汇编指令,同时也能明白 编译系统 的复杂性以及局限性,有时候编译系统无法使用到高级指令 SMID,这时候你就可以自己写汇编优化某个函数。

编译原理比较有趣,但是也比较难,初学者学这门课的时候,通常会遇到一个拦路虎,这个拦路虎是《编译原理》这本书,这本书我是21岁的时候买的,啃了2周,看了30多页,发现看不进去。

其实这本数并不适合初学者阅读,特别是那时候我对汇编程序还一无所知。

编译系统实际上 就是把 源语言作为输入,然后 目标语言作为输出。这个目标语言不一定 就是 CPU的汇编指令集,也可以是 JVM 指令集,也可以是 JavaScript。例如把 Dart 语言编译成 js,js就是目标语言。

但是,我不推荐初学者直接看 Dart 的编译系统,初学者学习一个东西,要先去学比较简单的,不要有太多的封装跟概念抽象。

有些书籍,他不希望指定目标语言 是 JVM 指令集还是 汇编指令集 还是其他的语言,他希望把这些概念抽象,将一个特殊问题泛化成一个一般的问题,有利于进一步扩展,但是这样提升了理解的门槛,对初学者不太友好。



下面就来说说学习 编译原理 的路线。

1,要学会 汇编语法,可以看 《汇编语言基于X86处理器》《现代X86汇编语言

2,学会 C/C++ 基本用法,推荐看 《C语言程序设计现代方法》《C++ primer

3,到第三步,C/C++已经比较熟练了,就已经有 理解 编译系统 的基础了,这时候,你可以看 《自己动手构建编译系统》或者《编译系统透视》,这两本都是实战书,对于初学者而言,需要读的就是这种可以调试的书。

4,到第四步,编译基础你已经有了,这个时候,你才可以去看抽象的书籍。这类比较高深的书籍有以下:

《Parsing Techniques》《编译器设计》 《编译原理》《高级编译器设计与实现》《现代编译原理 C语言描述》《现代编译原理 java语言描述


我每学习一个领域的知识,都会习惯性地买 5~10 本书,因为不同的作者对相同的技术也会有不同的阐述,可以对比着看,就能快速理解。

我手上 C/C++的书籍有8本,算法数据结构的有8本,操作系统API使用以及原理的有10多本,编译原理的书籍我目前有6本,汇编的书籍我有5本。

这么多书,我是如何学习的呢?每一本经典书籍,如果细看,基本都要1~3个月。我22岁左右的年纪看书是细看的,《TCP/IP详解》3册书,我看了半年才看完,《unix环境高级编程》我看了2个月。但是后面我看书是粗看,例如《现代x86汇编语言》这本书,我不会每个指令都运行调试一番,我只会调试一个比较重要的指令,其他的指令我是过一眼,直接跳过,大概知道这个指令集提供了哪些类别的指令,大概怎么用就行了,后面实际编程的时候,我用到了,会回头细看。

这种阅读速度比较快,X87 FPU,MMX指令, SSE指令,一个章节 1~2 天即可看完。

不过对于没有阅读过经典书籍的同学,我个人建议,开始还是要深度细读几本经典书籍。


由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1,QQ:2338195090。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注