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 在 命令行工具
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
打印较大数字
设置输入值为 num1
和 num2
,然后识别并返回较大的数字。如果它们相等,则返回其中一个数字。按照惯例,包含跳转行号的寄存器使用大写字母(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