原本的计划:设计一个 DSL 专门用来描述语法 + 生成语法解析器。
-
为了方便迁移到 C,应该用 lambda machine 来实现,而不是用解释器来实现。
-
在最开始的时候,我们还没有语法解析器, 所以这个 DSL 没有语法解析器可用, 所以我们可以把这个 DSL 的语法设计为 sexp-based。
-
语言只有最简单的功能, 其抽象能力只为支持编写 grammar, 而不为一般的编程。 因此可能不需要支持匿名的函数 lambda(不用 closure), 只使用在模块中定义好了的有名字的函数即可。
-
为了在 JS 中使用所生成的 JSON AST 可以直 evaluate grammar 的代码。
- 作为 AST 的 Exp 和 Stmt 要写两遍,一次在 grammar 中一次在 JS 中。
- grammar 所返回的 JSON 是不带类型的,JS 必须直接信任或额外效验。
计划的变化:决定尝试手写语法解析器,而不再依赖生成语法解析器的工具。