刷完了第 6 章 Parsing Expressions,感觉最大的障碍已经克服了。😂 Parsing 技术非常丰富庞杂,包括 LL(k)、LR(1)、LALR、Earley、Packrat、PEG 等算法,还有 parser combinator、parser generator 等等技术。龙书太注重理论探讨,曾经让我觉得,只有完整掌握这些这些算法,才能写 compiler。龙书误我。😂 Crafting Interpreters 则选择跳过理论分析,直接开始构建 recursive descent parser。并且告诉我们,Rust、GCC、V8 等项目都采用了 recursive descent parser,既然如此,还有什么好担心的?😎 Contex-free grammar 方面,也是面向实际需要,介绍了如何消除歧义、如何对文法规则分层以解决运算符优先级问题。 最后,跟着把代码敲完,就得到了一个完整的 parser 了。🎉 翻越一座大山,原来可以如此简单!
yfaming's avatar yfaming
狂推神作 Crafting Interpreters! Compiler/interpreter 技术,一直有种神秘色彩。一方面,掌握它能让你在更高层面看待编程语言,甚至自己创造一门。另一方面,庞杂的技术和龙书这样的大部头书,又往往将人劝退。 幸好,有了 Crafting Interpreters。 它的定位出奇制胜,因为它选择了一条独特的路径,带着我们游览 compiler/interpreter 技术丛林。 这本书以实践为主,主线是从 0 构建 interpreter,理论只做最简要的介绍。非常适合我这种连龙书 Syntax Analysis 那一章都没撑过去的苦手。😂 跟随着它的路径,我们只用几千行代码,就实现了一门完整的编程语言(Lox)。而且是两次,一次用 Java 一次用 C。 第一部分用 Java 实现一个 tree-walk interpreter。每章一个主题,先是实现 scanner,然后 recursive descent parser。然后从表达式求值逐步扩充,直到完整支持语句、控制流、函数、类与继承等语言特性。 第二部分改用 C 语言,实现一个虚拟机。我们从设计字节码开始,并将前面实现的语言特性编译为字节码。 整个过程中,不依赖外部库,需要的东西全部自己动手。跟着书的进度,几百行代码之后我们得到一个 scanner,再几百行之后得到一个 parser,几千行之后你就实现了完整的编程语言:Lox。 剩下的,就是自由发挥的天地了。😎 https://craftinginterpreters.com/
View quoted note →