1 个不稳定版本
| 0.1.0 | 2022 年 11 月 26 日 |
|---|
#2921 在 解析器实现
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