刷完 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 规则非常重要。事先要做好推演。
不然的话,越往后越容易出现问题。
完成第 7 章 Evaluating Expressions。
这一章篇幅较短,完成之后,就得到一个支持加减乘除、字符串拼接和逻辑判断的最简版 Lox 解释器了,大体上相当于一个计算器。求值仍然借助 visitor 模式,对表达式树进行后序遍历。本身算是简单。
至此,Lox 解释器已经初具雏形。scanner 已经全部完成,后续不需要改动。parser 及 evaluation 过程,只支持了较简单的表达式。后续章节将不断扩充语言,支持语句、控制流、函数、类与继承等等。
View quoted note →
View quoted note →