5 个版本 (3 个重大变更)

0.4.0 2023年7月6日
0.3.1 2023年7月6日
0.3.0 2023年7月6日
0.2.0 2022年9月7日
0.1.0 2022年9月7日

#2044命令行工具

MIT 许可证

23KB
459

Simply 脚本

此项目提供了一个 "simply script" 的解释器,这是一种 极其简单 的脚本语言(受汇编语言启发),主要用于编写谜题。

语法

"simply script" 支持以下命令

设置命令

set |寄存器| |值|

设置指定寄存器的值(32位整数)。寄存器名称可以是字母、数字和下划线的任意组合,但必须以字母开头。此命令本质上用于将值分配给变量。

复制命令

cpy |寄存器1| |寄存器2|

从 |寄存器1| 复制值到 |寄存器2|。

加法命令

add |寄存器1| |寄存器2|

将 |寄存器1| 中存储的值加到 |寄存器2| 中存储的值。将最终值存储在 |寄存器2| 中。

减法命令

sub |寄存器1| |寄存器2|

从 |寄存器2| 中存储的值减去 |寄存器1| 中存储的值。将最终值存储在 |寄存器2| 中。

跳转命令

jmp |寄存器|

要执行的下一行将是存储在 |寄存器| 中的值对应的行。尝试跳转到小于 1 的行号将导致 NegativeExecutionPointer 错误。

当为零时跳转命令

jwz |寄存器1| |寄存器2|

检查 |寄存器1| 中的值。如果该值为 0,则在 |寄存器2| 中存储的行号处继续执行。否则,继续执行下一行。

当为负时跳转命令

jwz |寄存器1| |寄存器2|

检查 |寄存器1| 中的值。如果该值小于 0,则在 |寄存器2| 中存储的行号处继续执行。否则,继续执行下一行。

当为正时跳转命令

jwz |寄存器1| |寄存器2|

检查 |寄存器1| 中的值。如果该值大于 0,则在 |寄存器2| 中存储的行号处继续执行。否则,继续执行下一行。

当不为零时跳转命令

jnz |寄存器1| |寄存器2|

检查 |寄存器 1| 中的值。如果该值不是 0,则从存储在 |寄存器 2| 中的行号继续执行。否则,继续执行下一行。

大于命令

gth |寄存器 1| |寄存器 2|

如果 |寄存器 1| 中存储的值大于 |寄存器 2|,则在 |寄存器 2| 中存储 1,否则在 |寄存器 2| 中存储 -1

小于命令

lth |寄存器 1| |寄存器 2|

如果 |寄存器 1| 中存储的值小于 |寄存器 2|,则在 |寄存器 2| 中存储 1,否则在 |寄存器 2| 中存储 -1

输出命令

out |寄存器|

将 |寄存器| 中存储的值打印到标准输出。

字符命令

chr |寄存器|

如果 |寄存器| 中的值是有效的 ASCII 字符代码,则将其作为 ASCII 字符打印到标准输出。如果该值不是有效的 ASCII 字符代码,则打印一个 '·' 字符。

用法

只需将您的 "简单脚本" 写入一个文本文件(如 "do_calculation.ok"),然后使用 simply do_calculation.ok 运行脚本。

示例

倒计时

设置输入值为 num,然后打印从 num 到零的所有值。如果 num 是负数,则不打印任何内容。

set num 25
set one 1
set A 9
set B 5
jwn num A
out num
sub one num
jmp B

打印较大数字

设置输入值为 num1num2,然后识别并返回较大的数字。如果它们相等,则返回其中一个数字。按照惯例,包含跳转行号的寄存器使用大写字母(A-Z,AA-ZZ 等)命名。

set num1 18
set num2 15
set A 10
set B 11
cpy num2 compare
gth num1 compare
jwp compare A
out num2
jmp B
out num1

依赖项

~4MB
~81K SLoC