用Go编写解释器
用Go编写解释器
简介:
引言
《Writing an Interpreter in Go》(中文译名《用Go编写解释器》)是Thorsten Ball撰写的一本独特的实践指南,它循序渐进地教你为虚构的编程语言Monkey创建一个完整的解释器。与学术性的编译器教材不同,本书聚焦于实际代码和极简的理论,让读者能够立即着手用Go语言编写一个可运行的解释器。
本书出版于2018年,共212页,面向希望深入了解编程语言“底层”工作原理的程序员。它不需要读者具备编译器方面的预备知识,但要求读者熟练掌握Go语言。
本书内容
本书系统地引导读者经历创建解释器的所有阶段:从词法分析到代码执行。主要主题包括:
- 词法分析器(Lexer)——将源代码分解为词法单元(Token)。
- 解析器(Parser)——使用递归下降和Pratt解析方法构建抽象语法树(AST)。
- 对象系统——表示各种值(数字、字符串、布尔值、函数、数组、哈希)。
- 求值器(Eval)——遍历AST并执行表达式和语句。
- 闭包和一等函数——实现作用域和闭包。
- 内置函数——添加标准操作(len, puts, first, rest等)。
- 类型系统——带有运行时检查的动态类型系统。
每一章都以可立即测试的代码结尾。最终,读者将获得一个能够运行Monkey程序的解释器——Monkey是一种语法类似于C、JavaScript和Python混合体的语言。
适合读者
本书适合以下人群:
- Go开发者——希望加深对Go语言及其功能的理解。
- 对编译器感兴趣的开发者——希望了解解析器和解释器的工作原理。
- 学生和教师——作为编程语言课程的实践补充。
- 任何希望创建自己语言或DSL(领域特定语言)的开发者。
重要提示:本书不从头教授Go语言——读者需要具备中等水平的Go编程能力(了解结构体、接口、指针,不需要掌握协程)。
读者将学到什么
阅读本书后,您将能够:
- 从头编写一个词法分析器,将字符串解析为词法单元。
- 使用带运算符优先级的递归下降方法实现解析器。
- 构建并遍历AST。
- 创建值系统和环境(执行环境)。
- 实现闭包和高阶函数。
- 添加对数组、哈希和字符串操作的支持。
- 理解动态分发和错误处理的工作原理。
- 获得可扩展的解释器完整代码。
本书优势
实践导向。每个概念都立即通过代码得到巩固。您不仅仅是阅读理论——而是一行一行地编写解释器。
循序渐进。本书分为多个小章节,每章都添加新功能。这使得您可以轻松回顾前面的部分。
干净的Go代码。作者使用了地道的Go语言、接口和组合,使代码既具有教学性又具有工业级质量。
无冗余理论。与“龙书”(Aho, Lam, Sethi, Ullman)不同,本书没有形式化语法和证明——只包含构建可运行解释器所需的内容。