“不闻不若闻之,闻之若不见之,见之不若知之,知之不若行之。” —— 荀子
仓库名称 lsbasi 是 Let’s Build A Simple Interpreter 首字母缩写。
原作者的 repo 。由于我想自己实现一遍,所以并没有直接 fork 。
顺便写了一个踩坑记录,主要记录学习过程中遇到问题的解决方案以及一些心得体会。
常用 emoji 含义如下:
- ✨ 引入新功能。
- 🐛 解决 bug 。
- 📝 更新文档。
从算术表达式开始逐步扩展,几乎任何语言都支持算术表达式。
-
算术表达式。
- 不带空格的一位整数加法。
- 支持多位整数,跳过空格功能。支持减法。
- 多个多位整数的加减法。
- 乘除实现。
- 加减乘除混合后的优先级处理。
- 支持括号。
- 语法分析树改为抽象语法树(AST)。
- 观察者模式。
- 支持一元表达式。
-
Pascal 解释器:
- 处理 Pascal 关键字 token。
- 支持解析 Pascal header 。
- 采用 div 来做整数除法,采用 / 来做浮点数除法。
- 支持 Pascal 注释。
- 支持函数。
- 符号表管理。
- 嵌套作用域。
- 报错处理。(提供行号和列号以及错误类型等信息)
- Executing Procedure Calls。