看完了 Crafting Interpreters 第 9 章,Control Flow。 这一章增加了逻辑表达式(and、or),if 语句,while 和 for 循环。 实现 for 循环时,介绍了一下语法糖 syntactic sugar,在 parse 时,就把 for 循环给改写为 while 循环语句了。这就是脱糖 desugaring 过程。 Lox 的循环不支持 continue 和 break 语句。所以大大降低了实现难度。 而因为同样原因,我感觉语法分析阶段做的事情非常少。基本上 parse 得到语法树(Stmt class)之后,就结束了,没有额外工作,感觉有所缺憾。希望后续章节能够涉及这方面。
yfaming's avatar yfaming
刷完 Crafting Interpreters 第 8 章,Statements and State。 这一章内容较多。增加了对语句的支持,包括表达式语句、print 语句、变量声明语句。同时增加了赋值表达式,并且支持了作用域。 实现作用域时使用的 Environment,与 Peter Novig 的 [(How to Write a (Lisp) Interpreter (in Python))](https://www.norvig.com/lispy.html) 经典文章里的,是同一思路。 最后讨论了一下变量声明是显式好,还是隐式好。结论是,显式更好。 Lox 相比真正编程语言,还缺少控制结构(if、while 等)、函数。这是接下来两章的内容。 现在的代码量只有 1059 行(不含注释和空行),已经做到这个程度,太神奇了。 随着内容的增加,感觉定义好 grammar 规则非常重要。事先要做好推演。 不然的话,越往后越容易出现问题。 View quoted note →
View quoted note →