《用Go语言自制解释器》是由人民邮电出版社出版的一本关于Go语言方面的书籍,作者是索斯藤·鲍尔(Thorsten、Ball),主要介绍了关于Go语言、解释器方面的知识内容,目前在Go语言类书籍综合评分为:7.1分。
书籍介绍
- 从零开始,自己写一门语言
- 体验从无到有实现类C语言的乐趣
- 原版豆瓣评分9.5分
跟随本书,你将揭开解释器的神秘面纱,通晓它的工作原理,并编写出自己的解释器。
内容简介
在程序员与计算机的“交流”过程中,解释器无疑扮演着优秀的翻译角色。它为只懂0和1的计算机翻译源代码,为看似随机的字符赋予含义。这是如何实现的呢?充满好奇心的你,是否曾经思考过这个问题?跟随本书,你将揭开解释器的神秘面纱,通晓它的工作原理,并编写出自己的解释器。本书采用Go语言来为自创的编程语言Monkey实现解释器。你将为Monkey语言实现类C语法、变量绑定、基本数据类型、算术运算、内置函数、闭包等特性,并了解什么是词法分析器、语法分析器和抽象语法树。
目录
- 第 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