RT 。最近想要实现一个基于 js 的「栈式虚拟机」。
js 源代码 ---> AST 节点的过程相对简单且易于理解, 但是「每个 AST 节点对应的汇编语言操作」就不太懂了。
想请教一下各位大佬有没有这方面的「工具, 书籍, 或者课程」等等。 想要去学习一下。
1
Mohanson 2021-05-22 20:04:37 +08:00 4
可以看我的 minits 项目: https://github.com/nervosnetwork/minits
配套演讲: http://accu.cc/content/misc/minits/ 当年在 W3C 讨论组分享过, 应该是最符合你题目的项目了, 技术不深, 入个门还是 ok 的 |
2
ch2 2021-05-22 20:20:27 +08:00
语义分析,照别人的抄就行了
|
3
lambdafate 2021-05-22 20:30:14 +08:00
啊,梦回编译原理。
|
4
no1xsyzy 2021-05-22 23:31:43 +08:00
SICP 第五章,但我是看不进去。
|
5
3dwelcome 2021-05-22 23:50:45 +08:00
"每个 AST 节点对应的汇编语言操作"
通常来说就是指 LLVM 对应的 IR 运行机制,那种伪汇编不是很难,但需要花不少时间去学习。 个人不是很推荐钻研,写这东西特别费时间,又没太大实用价值。 |
8
jiyinyiyong 2021-05-23 11:51:33 +08:00
感觉还挺难的, 前面给的 LLVM 是静态类型语言生成汇编的方案吧, 编译原理的内容, 但是生成代码需要类型提示的, 得跟 TypeScript 那样手写类型了, 不然要编译器实现类型推断.. 在 JavaScript 上做类型推断... 感觉不靠谱.
Julia 语言因为是 LLVM 上实现的, 动态语言, 实现了基于动态语言生成 assembly. 我感觉挺厉害的, 不知道类型推断这块具体怎么做到的 https://discourse.julialang.org/t/understanding-generated-assembly-for-simple-loop/9698 . 我觉得楼主先搞个 VM, 然后自己基于 VM 糊个语言出来, 应该也已经蛮厉害了 https://craftinginterpreters.com/a-virtual-machine.html . 至于基于 JavaScript 搞这种, 我听朋友说好像得扒 https://bellard.org/quickjs/ 源码了(不会 C++ 飘过... |
9
jones2000 2021-05-23 14:28:58 +08:00
生成 AST 了, 直接遍历 AST 转成一个一个汇编的脚本, 完成以后直接编译生成的汇编脚本就可以了。 编译原理计算机专业都学过的吧。里面有的。
|