1 个不稳定版本

0.1.0 2022 年 11 月 26 日

#2921解析器实现

MIT 许可证

36KB
564

Rust 中的 RiveScript

这是 RiveScript 解释器对 Rust 编程语言的移植。

它目前还在开发中,尚不可用。下面的清单可能能给您提供一个关于其状态的概述。查看 git 日志,看我如何在弄清楚这个模块的同时学习 Rust!

目前我所看到的粗略路线图

  • 读取并解析 RiveScript 源文档到内存中。
    • load_directory(),load_file() 和 stream() 可以访问 RiveScript 源。
    • 解析文档到完整的“抽象语法树”,映射出主题、触发器和回复。
    • 支持所有 RiveScript 命令
      • ! 定义
      • > 标签
      • + 触发器
      • - 回复
      • % 上一个
      • ^ 继续
      • @ 重定向
      • * 条件
      • // 注释/* 多行注释 */
      • 对象宏(收集名称、语言、源代码)
    • !本地连接=|空格|换行
    • ! 全局深度 = 25 可以更改递归深度
    • 语法检查和严格模式
  • 排序回复
    • 排序 + 触发器
    • 排序 % 上一个
    • 排序替换列表
  • 为用户获取回复
    • 用户变量存储
    • > 开始
    • -回复,以及(加权)随机回复。
    • @重定向
    • % 上一个
    • *条件
    • 标签
      • <星号>, <星号1> - <星号N>
      • <机器人星号>, <机器人星号1> - <机器人星号N>
      • <输入1> - <输入9>
      • <回复1> - <回复9>
      • <id>
      • <无回复>
      • <机器人>
      • <环境>
      • <获取>, <设置>
      • <添加>, <减去>, <乘法>, <除法>
      • {主题=...}
      • {权重=...}
      • {@...}, <@>
      • {!...}
      • {随机}
      • {}, <>
      • {正式}, <正式>
      • {句子}, <句子>
      • {大写}, <大写>
      • {小写}, <小写>
      • {}
      • \s
      • \n
      • \/
      • \#

测试它

克隆此项目并运行: RUST_LOG=debug cargo run

main.rs程序当前硬编码为从 ./eg/brain 读取。

开发者注意事项

当模块接近“完成”时,这些内容可能被放置在其他位置。

关于与其他编程语言相比集成此模块的一些笔记

  • 对于Rust的借用/所有权,当解析器找到+Trigger时,它不能像在其他大多数实现中那样立即“给予”它AST;因为-Reply或*Condition需要写入Trigger引用,而如果AST已经有它,它是无法做到的。所以当前Trigger的缓冲区在找到另一个+Trigger命令,启动新的触发器时,会被给予AST。
    • 当发现另一个+Trigger命令开始一个新的触发器时;在开始新的触发器之前,当前的触发器会被给予AST。
    • 当开始一个> begin> topic时;对于旧主题的任何正在进行的触发器将被提交到AST。
    • 在解析阶段结束时:如果正在填充一个最终触发器,在返回之前会被给予AST。
  • 在解析器中:大多数实现都会进行前瞻扫描,既为了收集^Continues(将它们附加到当前行),也为了在触发器下查找%Previous。在rivescript-rs中,我们只前瞻查找^Continue,并在类似于@Redirect*Condition的正常命令切换中处理%Previous

许可证

当此模块功能齐全时,将根据MIT许可证发布。

版权 © 2022 Noah Petherbridge。

依赖项

~3–4.5MB
~70K SLoC