1 个不稳定版本
0.1.0 | 2024 年 3 月 13 日 |
---|
#145 在 模拟器
76KB
2K SLoC
Apika 的我的虚拟机 (AMVM)
AMVM旨在构建一个运行自定义字节码的虚拟机。此项目与Brayan-724/js-ast非常相似,它是一个JavaScript分词器、解析器和运行时。目标是把JavaScript转换成这种字节码,使其性能更好,并使用这个虚拟机来构建需要运行时的未来项目。
目标
- 构建一个虚拟机。
- 成功处理字节码。
- 实现原始类型(
String
,一些数字u8
..)。 - 实现基本操作符(
+ - * /
)。 - 实现基本语句(
if
,for
,while
)。
- 将JavaScript转换为字节码。
使用它
进行中!
合作
由于此项目非常年轻,因此会有很多变化。如果您想合作(我非常感激)您需要了解以下内容
还有更多文件,它们不是为 main.rs
编写的,而是为 lib.rs
编写的。
lib.rs
这里关于解析、生成和运行字节码的所有内部信息,这将作为 amvm-core
发布,以便在项目之间共享或与引擎紧密接触。
main.rs
这是最终用户命令行界面所在的位置,因此它具有 IO 操作。作为 amvm
发布,以运行字节码输出文件。
字节码
AMVM_HEADER = "\x08\x48\x30" // Arbitrary value for sign (0B4B30)
COMMAND_SEPARATOR = '\0'
CMD_DCLR_VAR = '\x01'
CMD_ASGN_VAR = '\x0D'
CMD_PUTS = '\x0E'
CMD_EVAL = '\x02'
VAR_CONST = '\x0B'
VAR_LET = '\x0C'
EXPR_VALUE = '\x03'
EXPR_VAR = '\x0A'
EXPR_ADD = '\x09'
VALUE_UNDEFINED = '\x04'
VALUE_STRING = '\x05'
VALUE_U8 = '\x06'
VALUE_I16 = '\x07'
VALUE_F32 = '\x08'
(CMD_DCLR_VAR) 命令声明变量
在当前上下文中声明一个变量。
``