#bytecode #lox #language #wenyan

bin+lib wyw

文言语言的字节码解释器

1 个不稳定版本

0.1.0 2023年3月5日

#2208命令行工具

MIT 许可证

125KB
3.5K SLoC

Wenyan-rs

Wenyan-lang 的字节码解释器。

用法

wyr path/to/filename.wy

示例

吾有一術 名之曰「階乘」 欲行是術 必先得一數 曰「甲」 乃行是術曰
 若「甲」等於一者。
  乃得「甲」
 若非
  減「甲」以一名之曰「乙」
  施「階乘」於「乙」名之曰「丙」
  乘「丙」以「甲」。名之曰「丁」
  乃得「丁」
 云云
是謂「階乘」之術也

施「階乘」於五書之

输出

120

该项目仍在开发中,许多功能尚未实现。您可以在 示例 文件夹中查看更多支持的示例。

差异

在线 IDE 有许多友好的增强功能,我的某些规则可能更加严格,以便于实现。

变量需要用单引号括起来。

吾有一數曰五名之曰「甲」 // ✅
吾有一數曰五名之曰甲 // ❌

昔之「甲」者今其是矣 // ✅
昔之甲者今其是矣 // ❌

禁用部分定义的变量。

吾有二數曰五曰六  // ✅
吾有二數曰五曰六名之曰「甲」名之曰「乙」 // ✅
吾有二數曰五曰六名之曰「甲」 // ❌ 

具有隐式块作用域。

吾有一數曰十名之曰「甲」
若陽者
  吾有一數曰一名之曰「甲」
  加「甲」以五書之
云云
加「甲」以五書之

输出与在线 IDE

-6
-6
+6
+15

布尔代数语句始终得到布尔值。

吾有一數曰五名之曰「甲」
吾有一數曰六名之曰「乙」
夫「甲」「乙」中有陽乎
書之

吾有一數曰五名之曰「甲」
吾有一數曰六名之曰「乙」
夫「甲」「乙」中無陰乎
書之

输出与在线 IDE

-5
-6
+true
+true

将单个 数据 作为表达式处理,并将其推入堆栈。

吾有一數曰五名之曰「甲」
「甲」書之
「「黃河流水鳴濺濺」」書之

输出与在线 IDE

+5
+黃河流水鳴濺濺

将 '也' 视为一种空白字符,您可以使用它使代码更易于阅读,但不能将其用作块的结束符。


Function will be added into stack, and "書之" will drain values produced by current function.

```bash
吾有一數曰五名之曰「甲」
吾有一術名之曰「你好」是術曰
夫「「世界,你好」」書之
是謂 「你好」 之術也

施「你好」

夫「「世界,你好」」書之 之后,堆栈将是

[2] <fn 你好>
[1] Value::Number(5)
[0] <global context> 

当函数 你好 返回时,堆栈将是

[1] Value::Number(5)
[0] <global context> 

利用我们自己的虚拟机,它具有报告更多类型运行时错误的能力。

吾有二言曰『你』曰『好』名之曰「甲」名之曰「乙」 
減「甲」以「乙」書之

输出

[line 2] errors: two string can only be added

未来工作

还有许多功能尚未实现!其中一部分在 此问题 中列出。

鸣谢

许可证

MIT.

依赖关系

~2.6–4MB
~66K SLoC