从零开始自学编译原理系列(一): 一门有趣的课

本学期我将自学 CS143: Compilers 这门课. 自学的原因是学校讲这门课的老师去浪了, 学校就不开课了, 我就只能自学了, 我也是醉了= =!!

编译原理是一门十分有趣的课, 并不是说非要发明一个新语言才去学编译原理. 学习编译原理的好处那真是多又多啊! 我总结了半天, 归纳为两大好处:

  1. 学习的过程能锻炼写高质量的代码, 一个编译器的实现是算法密集度很高的;
  2. 学习之后能从一个全新的角度来理解每一门计算机编程语言.

自学的方法也有两种, 一是看高大上的书, 二是看高大上的视频. 我选择的是看高大上的视频. 有的人说文字的信息密集度比视频要大, 那可不一定! 看视频还能看到这些个斯坦福大学的教授都用些什么操作系统(我两次看到的都是Windows哈哈), 能知道他们打字快不快, 或者还能听出他的键盘是红轴还是黑轴还是普通的薄膜, 那岂不是很有趣!!?? 况且人家还有配套小测试, 配套小作业, 配套大作业, 配套答案详解, 配套评判系统…. 所以在 Coursera 上看视频是一个很好的选择!

这门 Coursera 的课是斯坦福一个年轻教授开的, 认真学习需要每周10-20小时的时间, 学上他10周(两个多月), 还是相当费劲的! 可喜可贺的是他的这个课的线索是如何用 Java 写一个 COOL 语言的编译器, 将 COOL 代码编译为 MIPS 指令. 正好我这两个月想要学一学 Java, 以后人家问我你 Java 怎么学的, 我就可以自豪的说, 我直接用 Java 写了个编译器练练手, 哈哈哈哈!

这门课还发了一个虚拟机, 所有作业可以在虚拟机上面编写完成, 虚拟机最主要的作用是运行 MIPS 指令的程序, 以及交作业. 虚拟机是一个袖珍型的 Bodhi Linux 系统, 截图如下:

QQ截图20150323120112

一个编译器有好几个组件来组成, 这门课将会依次教会我们编写这些组件. 这些组件将被设计成为支持热插拔的模式, 所以调试起来将会非常方便, 其设计思想也是相当之迷人. 在课程末, 有一个可选项, 是优化编译器, 可学可不学, 不过看着名字挺牛逼的, 到时候再说吧!

因此本系列文章将会每周发上一两篇, 十周前结束.