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