7 个不稳定版本
0.4.1 | 2023年2月25日 |
---|---|
0.4.0 | 2020年2月15日 |
0.3.0 | 2020年2月15日 |
0.2.2 | 2020年2月15日 |
0.1.0 | 2019年9月15日 |
336 在 编程语言 中排名
每月 下载量 32
62KB
1.5K SLoC
GameShell - Rust 集成实用 shell
GameShell 是一个快速解释器,用于集成到 Rust 应用程序中。它结合了 Lisp 和 bash 的特性,使其变得实用。
语言
GameShell 是一种非常简单的语言,其基本形式如下
command argument-1 argument-2 ...
它通过换行符分割所有命令,通过空格分割所有参数。
我们可以使用括号嵌套命令
command-1 (command-2 argument-1 argument-2) argument-3
如果我们愿意,我们也可以在多行上运行这些命令
command-1 (
command-2 argument-1 argument-2
) argument-3
当没有更多的括号嵌套时,下一个换行符将完成一个命令。
字符串
通过使用内置的 #
命令创建文本字符串
print (#This is a literal string)
什么是命令?
命令是一个类似于这样的函数
fn handler(context: &mut Context, args: &[Type]) -> Result<String, String> {
...
}
您提供上下文,GameShell 将提供 args
列表。然后您可以在处理程序内部执行任何操作。如果处理程序返回 Ok
,则该结果可以用作另一个命令的参数;如果它返回 Err
,则任何嵌套的计算都将被取消。
命令与命令匹配器(简称 cmdmat
)相关联。您将命令匹配器注册到处理程序
eval.register((&[("command", None)], handler)).unwrap();
这匹配了没有参数的命令 command
。None
是所谓的 Decider
,它将解析提供给 command
的任何参数,并判断调用是否有效。
请参阅谓词模块文档以获取更多详细信息和建议。
特性
- 正则表达式命令搜索 - 使用
?
作为命令,返回与正则表达式匹配的已注册命令列表 - 文本字符串 - 使用
#
伪命令。 - 命令嵌套 -
a (b (c d))
- 命令处理程序 - 命令调用 Rust 代码。
- 嵌套调用堆栈溢出保护 - 如果嵌套超过某个阈值(可以自定义),则中止命令。
- 自定义命令验证器/分类器(决策者)
- 输入限制 - 限制命令可以包含的字符数。
依赖项
~2.5–5MB
~81K SLoC