第 1章 词法分析 1
1.1 词法分析 1
1.2 定义词法单元 2
1.3 词法分析器 4
1.4 扩展词法单元和词法分析器 14
1.5 编写REPL 20
第 2章 语法分析 23
2.1 语法分析器 23
2.2 为什么不用语法分析器生成器 26
2.3 为Monkey 语言编写语法分析器 27
2.4 语法分析器的第 一步:解析let语句 28
2.5 解析return语句 42
2.6 解析表达式 44
2.6.1 Monkey 中的表达式 45
2.6.2 自上而下的运算符优先级分析(也称普拉特解析法) 46
2.6.3 术语 47
2.6.4 准备AST 48
2.6.5 实现普拉特语法分析器 52
2.6.6 标识符 53
2.6.7 整数字面量 57
2.6.8 前缀运算符 60
2.6.9 中缀运算符 65
2.7 普拉特解析的工作方式 72
2.8 扩展语法分析器 81
2.8.1 布尔字面量 83
2.8.2 分组表达式 87
2.8.3 if 表达式 88
2.8.4 函数字面量 94
2.8.5 调用表达式 100
2.8.6 删除TODO 105
2.9 RPPL 107
第3章 求值 110
3.1 为符号赋予含义 110
3.2 求值策略 111
3.3 树遍历解释器 113
3.4 表示对象 114
3.4.1 对象系统的基础 116
3.4.2 整数 116
3.4.3 布尔值 117
3.4.4 空值 118
3.5 求值表达式 118
3.5.1 整数字面量 119
3.5.2 完成REPL 122
3.5.3 布尔字面量 123
3.5.4 空值 125
3.5.5 前缀表达式 126
3.5.6 中缀表达式 129
3.6 条件语句 135
3.7 return语句 139
3.8 错误处理 143
3.9 绑定与环境 149
3.10 函数和函数调用 154
3.11 如何处理垃圾 165
第4章 扩展解释器 168
4.1 数据类型和函数 168
4.2 字符串 168
4.2.1 在词法分析器中支持字符串 169
4.2.2 字符串语法分析 172
4.2.3 字符串求值 173
4.2.4 字符串连接 175
4.3 内置函数 177
4.4 数组 182
4.4.1 在词法分析器中支持数组 183
4.4.2 数组字面量语法分析 185
4.4.3 索引运算符表达式语法分析 188
4.4.4 数组字面量求值 192
4.4.5 索引运算符表达式求值 194
4.4.6 为数组添加内置函数 197
4.4.7 测试驱动数组 201
4.5 哈希表 202
4.5.1 哈希字面量词法分析 203
4.5.2 哈希字面量语法分析 205
4.5.3 哈希对象 210
4.5.4 哈希字面量求值 215
4.5.5 哈希索引表达式求值 218
4.6 大结局 222
第5章 遗失的篇章:Monkey的宏系统 224
5.1 宏系统 224
5.2 Monkey 的宏系统 227
5.3 quote 229
5.4 unquote 233
5.4.1 遍历树 235
5.4.2 替换unquote调用 248
5.5 宏扩展 256
5.5.1 macro关键字 257
5.5.2 宏字面量语法分析 259
5.5.3 定义宏 262
5.5.4 展开宏 267
5.5.5 强大的unless 宏 271
5.6 扩展REPL 273
5.7 关于宏的一些畅想 274