我当年入门编译原理的时候,是看了一本《游戏脚本高级编程》的书。这本书虽然写得拖泥带水,内容也特别浅,但正是这本书让我知道了如何从头到尾实际地写一个parser + 虚拟机,让我入了门。后来我在
@vczh的指点下看了Parsing Techniques,自己写了一个正则表达式匹配和LR(K) Parser (类似于yacc)。但重要的是这本书让我理解了如何手写Parser(这是从不会到会的飞跃)。
后来我自己写了一个功能更加全面的类似于javascript的函数式动态脚本语言顺带支持了面向对象,进一步加深了理解。
再后来,我看了《Engineering a Compiler》,通过这本书全面的学习了后端优化知识。
再再后来,我阅读了LLVM的代码,陆陆续续写了四五个compiler,目前自认为算是基本了解了这个领域。
总的感觉是,虽然看书重要,但是如果不亲自实现一遍很难真的学会。