Lox 解释器的 Swift 实现
2018年11月02日:解释器的实现已经完成。🎉
本项目包含 Lox 语言的 Swift 实现,遵循了 Crafting Interpreters 一书,该书由 Bob Nystrom 编写。 GitHub 上的 Crafting Interpreters
编程语言和编译器是我最大的兴趣之一,关注 Swift 进化列表和观看 Jonathan Blow 开发他的新语言是我的两个爱好。 我过去玩过解析器,并试图处理 Swift 中缺失的元编程功能,但我从未尝试实现一种完整的语言。 虽然我了解其背后的理论,但我缺乏动力去亲自动手,而 Bob 的书似乎给了我这种动力!
这里的计划是遵循 Bob 在书中的工作,并用 Swift 逐个章节地实现它。 我真的很好奇 Swift 是否适合这种类型的工作。
需要注意的是,我试图编写一种介于惯用 Swift(在这个年轻的语言中,无论这意味着什么)和书中 Java 代码之间的混合体。 因为我不是在创造语言或编译器,而是遵循这本书,我不想陷入一种境地,即在未来的章节中,这本书要求进行一些代码更改,而这些更改变得过于复杂,因为我试图过于聪明。 所以我把它当作一个学习练习,并尽量接近地实现它,除非在那些我忍不住使用 Swift 的优秀特性,例如 guard
或强大的 switch
语句的情况下。 将来也许会有时间编写另一个探索不同做事方式的编译器,但这次不是。
截至 2018年11月02日
4. 扫描 - Swift 中的 Lox 解释器
5. 表示代码
6. 解析表达式
?:
的支持7. 求值表达式
8. 语句和状态
9. 控制流
10. 函数
11. 解析和绑定
12. 类
13. 继承
我集成了 Bob 的测试,以确保此实现的行为与原始实现相同。 您可以在此项目中找到 测试,以及经过修改以与此项目配合使用的 test.py
脚本。 您还可以找到一个包含主要修改的 diff。
用法示例:sh build.sh; ./tools/test.py chap13_inheritance
该项目现在使用 SPM 来管理可执行文件、框架和依赖项。
解释器的大部分是在一个框架中实现的,可执行文件只是一个使用该框架的小型 CLI 程序。
Alejandro Martinez | http://alejandromp.com | @alexito4