编译原理就是将人能懂的编程语言,转换为机器能懂的语言,编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂。我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法你现在觉得枯燥,我想既跟编译原理本身比较抽象的知识有关,也跟讲述者有关。一个好的讲述者会试着化抽象为形象,以丰富生动的例子来为你解释。
而编译原理是否有用?我认为这门课是一门真正与代码做斗争的课程,对于一个有至于追求技术的人是不容错过的课程,而且编译原理可以说是一个计算机科学的缩影。你学习它更多的是去追寻程序设计语言的本质,如它在寄存器分配中将会使用到贪心算法,死代码消除中将会使用到图论算法,数据流分析中使用到的Fixed-Point Algorithm,词法分析与语法分析中使用到有限状态机与递归下降这样的重要思想等等。
不学编译原理,可能永远给各种写编译器的人当奴隶,以为写程序只能按照他们设计的语言哲学来做。学好了编译原理,不一定非要自己写语言,但是至少能把很多其他程序员觉得很酷的东西看得透彻一点,不会被程序语言的设计表象骗到太多。这个还是挺重要的,是一辈子码工和未来CTO的区别,损失自己算吧……
对于如何学习编译原理个人认为:学习编译原理,因为感觉编译器的编写很提高综合技能。大牛们能否给些建议?这样不至于自己瞎摸索,因为网上一般都推荐一些所谓的经典教材,如龙书、虎书等等。但我感觉自己啃这些书本有些乏味且大部分都是理论,不利于实践。还有就是,人们可能会说,现在做parser的工具这么多,学这些有用吗?当然有用。数据结构都被封装好了,你们不还是要学过一遍,才能把别人的库用得高效。做parser也一样,没有受过训练的人,很容易语法总结成屎,或者因为想象力不够而无法实现自己的需求。所以学习编译原理对自己还是有用的。