编译原理其实就是将高级语言翻译成计算机语言(即计算机所能识别的二进制代码)所遵循的规律,让电脑可以懂得高级语言所表达的东西,内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。编译原理是计算及专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂。 我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了。
学习编译原理,我认为这门课是一门真正与代码做斗争的课程,对于一个有至于追求技术的人是不容错过的课程,而且编译原理可以说是一个计算机科学的缩影。当你真正完成编译原理的学习后,你对你所写的程序、程序语言都会有更深的本质认识,这样的认识也会让你站的高度完全不同,并且知道编译的过程方法理论,可以为以后学习工作打下基础,而且编译原理并不仅仅是用来写编译器的,还可以在许多意想不到的领域进行应用。在学习过编译原理之后,我觉得会有以下的几点益处,编译原理可以让我们更加容易的理解在一个语言种哪些写法是等价的,哪些是有差异的;可以更加客观的比较不同语言的差异;学习新的语言是效率也会更高。
如果不学编译原理,可能永远给各种写编译器的人当奴隶,以为写程序只能按照他们设计的语言哲学来做。学好了编译原理,不一定非要自己写语言,但是至少能把很多其他程序员觉得很酷的东西看得透彻一点,不会被程序语言的设计表象骗到太多。这么来说吧,可以把编译原理比作人体解剖学,如果一个程序员完全不懂得编译原理,就跟不懂得人体解剖学的画家一样,虽然说懂也不一定会成功,可是起码在学习完编译原理之后,成功的几率会比较高。
那么我们应该如何来学习编译原理呢?首先肯定要多看书,书上有绝大部分的知识,所以我们必须多看书;其次我们要多多进行练习,掌握了书本上的知识之后,如果不加以练习时没有用的,所以必须勤于练习;最好就是有一本属于自己的错题本之类的东西,把自己对于编译原理不会的东西或者不足的地方总结起来。