#language #silkworm #yarn #lexer #dialog #interactive #internal

silkworm_syn

Yarn交互式对话语言的解析器。丝蚕的内部依赖。

2个版本

0.1.0-dev.12020年6月23日
0.1.0-dev.02020年5月26日

#2951解析器实现


用于 silkworm

MIT 协议

170KB
4.5K SLoC

silkworm

silkworm是纯Rust实现的Yarn交互式对话语言。

进行中

silkworm目前处于初始开发阶段。所宣传的所有功能可能尚未实现!

  • 词法分析器
  • 解析器
  • 运行时
    • 源映射
    • IR定义,AST验证和降级
    • 解释器
  • 面向用户的API
  • CLI工具?

(希望)功能

  • 对对话中的纯文本进行零拷贝解析。
  • 支持Yarn 1.1的超集,包括作用域标识符和子程序等有用功能。
  • 被动运行时,便于集成到任何类型的程序中。
  • 在Rust中!

与YarnSpinner的不同之处

运行时

丝蚕运行时是被动的,不假设实时环境。因此,即使在YarnSpinner中是内置的,命令如wait也必须由用户提供。

目前也没有计划包括YarnSpinner的内置格式函数(selectpluralordinal)的实现,因为开发重点在于语言本身。如果需要,用户可以提供自己的格式函数。

关键字

除了YarnSpinner的关键字和运算符外,还预留了一些当前未使用的关键字,以实现向前兼容。

有关当前使用和预留关键字的完整列表,请参阅docs/keywords.md

预处理指令

silkworm支持预处理指令,这些是在源代码中放置的指令,用于改变silkworm的行为。它们的形式为//# name(<arg>, ...)//#! name(<arg>, ...)注释。可以使用运行时API完全禁用预处理指令。

//# 开头的语法定义在它们修改的代码之前,称为“外部”风格语法。以 //#! 开头的语法定义在它们修改的块内部,称为“内部”风格语法。某些语法只能放在文件的开始处。这些语法必须是“内部”风格,并在文件中所有节点之前,但可以由任意数量的常规注释先于或后于。

默认情况下,当 silkworm 遇到它不理解的语法时,将产生警告。

有关 silkworm 支持的所有语法的完整列表,请参阅 docs/pragmas.md

语言特性

silkworm 的方言在 Yarn 1.1 的基础上包含了许多有用的扩展。这些特性可以在运行时单独启用或禁用,或者使用文件顶部的 feature 语法定义来为单个文件启用或禁用。

有关 silkworm 支持的所有语言特性的完整列表,请参阅 docs/features.md

许可证

silkworm 可在 MIT 许可证下使用。


lib.rs:

Yarn 交互式对话语言的解析器。

这个crate主要是打算作为silkworm项目的内部依赖,该项目是纯 Rust 实现的 Yarn 交互式对话语言。预期最终用户将使用面向用户的 API silkworm,而不是直接依赖此 crate。

此 crate 包含语言的 AST 定义、词法分析和解析器。所有组件都假设所有源代码逻辑上位于一个可以使用字节位置索引的连续空间中。

依赖项

~4–5.5MB
~108K SLoC