yfaming on Nostr: 刷完 Crafting Interpreters 第 8 章,Statements and State。 ...
刷完 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 过程,只支持了较简单的表达式。后续章节将不断扩充语言,支持语句、控制流、函数、类与继承等等。
nevent1q…ydum
Published at
2026-08-01 03:25:42 UTCEvent JSON
{
"id": "4e292316f621d9240c8ce63c9f4550731f792927e936799426bb4bb3b4cbb947",
"pubkey": "908fbc3babc322eea473a0ab1e6bf6b3adcf899288ac97b2fa79f34ad408d4e4",
"created_at": 1785554742,
"kind": 1,
"tags": [
[
"q",
"2f697045a3ee639f85cfc1d708c7e44e3c0ec224e7fdce379933fc0b1449c0c1",
"wss://lang.relays.land/zh",
"908fbc3babc322eea473a0ab1e6bf6b3adcf899288ac97b2fa79f34ad408d4e4"
]
],
"content": "刷完 Crafting Interpreters 第 8 章,Statements and State。\n\n这一章内容较多。增加了对语句的支持,包括表达式语句、print 语句、变量声明语句。同时增加了赋值表达式,并且支持了作用域。\n\n实现作用域时使用的 Environment,与 Peter Novig 的 [(How to Write a (Lisp) Interpreter (in Python))](https://www.norvig.com/lispy.html) 经典文章里的,是同一思路。\n\n最后讨论了一下变量声明是显式好,还是隐式好。结论是,显式更好。\n\nLox 相比真正编程语言,还缺少控制结构(if、while 等)、函数。这是接下来两章的内容。\n\n现在的代码量只有 1059 行(不含注释和空行),已经做到这个程度,太神奇了。\n\n随着内容的增加,感觉定义好 grammar 规则非常重要。事先要做好推演。\n不然的话,越往后越容易出现问题。\n\nnostr:nevent1qvzqqqqqqypzpyy0hsa6hseza6j88g9tre4ldvade7ye9z9vj7e0570nft2q348yqyvhwumn8ghj7mrpdenjuun9d3shjuewd3skuep00f5qqgp0d9cytglwvw0ctn7p6uyv0ezw8s8vyf88lh8r0xfnls93gjwqcy33wn2z",
"sig": "a445f0480946b07889f5874ae9df5a5bc35cffc4ff1f97923159b00f2e0d57dd14ade4d950c7944419e8a5f3dea16648b05d905173dfda83e4d9c4be5a74d274"
}