编程语言实现模式 - 图1

    关键字:词法分析,语法分析,上下文相关分析,解析器,解释器,编译器,ANTLR,Java

    推荐:★★★★
    难度:★★

    豆瓣链接:https://book.douban.com/subject/10482195/


    如果你不想学形式语言和自动机理论,还想理解编程语言,这本书正适合你。
    先学会怎样使用工具,再逐渐深入学习原理,也符合正常的思维习惯。
    先看了这本书,并不代表着你以后不去深入学习编译原理了,这本书只不过会让你轻松起步。

    我一直以为那些使用伪代码来讲授实现方法的作者,都没有自己真正实现过。
    他们一定还说了,不使用特定编程语言来写,是为了避免将思想局限于那个语言之内。
    这一点,我实在不敢苟同。

    编程语言是计算过程的准确描述,比阅读伪代码清晰太多了。
    一段能够运行的代码,会节省很多篇幅来介绍它的作用。
    当然,有些读者将计算过程理解为只能是特定语言描述的那样。
    那也就不能怪作者如此照顾你而不得不降低整本书的水平了。

    这本书,就是从实现的角度来介绍编程语言的。
    计算机怎样理解并运行代码,怎样解释它,怎样把它翻译成机器码。
    你可以有一个直观的认识。

    一个好的产品提供者,总是能站在用户角度看待问题的。
    就像好的代码一开始就设计成要被别人使用一样。
    本书的作者开发了ANTLR解析器生成器,并且已经25年了。
    在大牛的世界里,解析代码文本如庖丁解牛。

    作为一个生成器,ANTLR本身都是由自己生成的。
    仅从这一灵活的设计理念上,就令人惊叹。
    当然,这本书是介绍编程语言的,顺便提了一下ANTLR而已。

    计算机是怎么理解代码的呢。
    先把字符流分割成单词,然后把这些单词按层次关系构建成一棵语法分析树。
    代码的解释执行过程,就是这棵树的遍历过程。

    以上称为编译器的前端。
    前端已经几乎完成形式化了,有很多现成的工具可用,ANTLR,Lex,Yacc等。
    而对于编译器优化和目标代码生成,本书介绍的并不多,可以参考其他读物。
    至于后端的形式化,还有待于形式语义学的研究发展。

    以上愚见,只是个人的小小总结。
    肯定有理解不到位的地方,请多多指正。
    如果你看完了这本书,有什么好的见解,请不吝附言。