Skip to content

Latest commit

 

History

History
19 lines (14 loc) · 990 Bytes

NOTE.md

File metadata and controls

19 lines (14 loc) · 990 Bytes

原本的计划:设计一个 DSL 专门用来描述语法 + 生成语法解析器。

  • 为了方便迁移到 C,应该用 lambda machine 来实现,而不是用解释器来实现。

  • 在最开始的时候,我们还没有语法解析器, 所以这个 DSL 没有语法解析器可用, 所以我们可以把这个 DSL 的语法设计为 sexp-based。

  • 语言只有最简单的功能, 其抽象能力只为支持编写 grammar, 而不为一般的编程。 因此可能不需要支持匿名的函数 lambda(不用 closure), 只使用在模块中定义好了的有名字的函数即可。

  • 为了在 JS 中使用所生成的 JSON AST 可以直 evaluate grammar 的代码。

    • 作为 AST 的 Exp 和 Stmt 要写两遍,一次在 grammar 中一次在 JS 中。
    • grammar 所返回的 JSON 是不带类型的,JS 必须直接信任或额外效验。

计划的变化:决定尝试手写语法解析器,而不再依赖生成语法解析器的工具。