关键字:词法分析,语法分析,上下文相关分析,解析器,解释器,编译器,ANTLR,Java
推荐:★★★★
难度:★★
豆瓣链接:https://book.douban.com/subject/10482195/
如果你不想学形式语言和自动机理论,还想理解编程语言,这本书正适合你。
先学会怎样使用工具,再逐渐深入学习原理,也符合正常的思维习惯。
先看了这本书,并不代表着你以后不去深入学习编译原理了,这本书只不过会让你轻松起步。
我一直以为那些使用伪代码来讲授实现方法的作者,都没有自己真正实现过。
他们一定还说了,不使用特定编程语言来写,是为了避免将思想局限于那个语言之内。
这一点,我实在不敢苟同。
编程语言是计算过程的准确描述,比阅读伪代码清晰太多了。
一段能够运行的代码,会节省很多篇幅来介绍它的作用。
当然,有些读者将计算过程理解为只能是特定语言描述的那样。
那也就不能怪作者如此照顾你而不得不降低整本书的水平了。
这本书,就是从实现的角度来介绍编程语言的。
计算机怎样理解并运行代码,怎样解释它,怎样把它翻译成机器码。
你可以有一个直观的认识。
一个好的产品提供者,总是能站在用户角度看待问题的。
就像好的代码一开始就设计成要被别人使用一样。
本书的作者开发了ANTLR解析器生成器,并且已经25年了。
在大牛的世界里,解析代码文本如庖丁解牛。
作为一个生成器,ANTLR本身都是由自己生成的。
仅从这一灵活的设计理念上,就令人惊叹。
当然,这本书是介绍编程语言的,顺便提了一下ANTLR而已。
计算机是怎么理解代码的呢。
先把字符流分割成单词,然后把这些单词按层次关系构建成一棵语法分析树。
代码的解释执行过程,就是这棵树的遍历过程。
以上称为编译器的前端。
前端已经几乎完成形式化了,有很多现成的工具可用,ANTLR,Lex,Yacc等。
而对于编译器优化和目标代码生成,本书介绍的并不多,可以参考其他读物。
至于后端的形式化,还有待于形式语义学的研究发展。
以上愚见,只是个人的小小总结。
肯定有理解不到位的地方,请多多指正。
如果你看完了这本书,有什么好的见解,请不吝附言。