#lisp #language #bash #interpreter #command-arguments #parser

gameshell

简单 Lisp/bash 类型的 shell,用于集成到程序中

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

LGPL-3.0 或更高版本

62KB
1.5K SLoC

GameShell - Rust 集成实用 shell

Latest Version docs.rs

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();

这匹配了没有参数的命令 commandNone 是所谓的 Decider,它将解析提供给 command 的任何参数,并判断调用是否有效。

请参阅谓词模块文档以获取更多详细信息和建议。

特性

  • 正则表达式命令搜索 - 使用 ? 作为命令,返回与正则表达式匹配的已注册命令列表
  • 文本字符串 - 使用 # 伪命令。
  • 命令嵌套 - a (b (c d))
  • 命令处理程序 - 命令调用 Rust 代码。
  • 嵌套调用堆栈溢出保护 - 如果嵌套超过某个阈值(可以自定义),则中止命令。
  • 自定义命令验证器/分类器(决策者)
  • 输入限制 - 限制命令可以包含的字符数。

依赖项

~2.5–5MB
~81K SLoC