完成第 7 章 Evaluating Expressions。 这一章篇幅较短,完成之后,就得到一个支持加减乘除、字符串拼接和逻辑判断的最简版 Lox 解释器了,大体上相当于一个计算器。求值仍然借助 visitor 模式,对表达式树进行后序遍历。本身算是简单。 至此,Lox 解释器已经初具雏形。scanner 已经全部完成,后续不需要改动。parser 及 evaluation 过程,只支持了较简单的表达式。后续章节将不断扩充语言,支持语句、控制流、函数、类与继承等等。
yfaming's avatar yfaming
刷完了第 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 了。🎉 翻越一座大山,原来可以如此简单! View quoted note →
View quoted note →