技术解析

「请教贴」如何把 js 的 AST 节点转换成汇编语言代码
0
2021-08-09 21:41:34
idczone

RT 。最近想要实现一个基于 js 的「栈式虚拟机」。

js 源代码 ---> AST 节点的过程相对简单且易于理解, 但是「每个 AST 节点对应的汇编语言操作」就不太懂了。

想请教一下各位大佬有没有这方面的「工具, 书籍, 或者课程」等等。 想要去学习一下。


可以看我的 minits 项目: https://github.com/nervosnetwork/minits
配套演讲: http://accu.cc/content/misc/minits/
当年在 W3C 讨论组分享过, 应该是最符合你题目的项目了, 技术不深, 入个门还是 ok 的

语义分析,照别人的抄就行了

啊,梦回编译原理。

SICP 第五章,但我是看不进去。

"每个 AST 节点对应的汇编语言操作"
通常来说就是指 LLVM 对应的 IR 运行机制,那种伪汇编不是很难,但需要花不少时间去学习。
个人不是很推荐钻研,写这东西特别费时间,又没太大实用价值。

这个博客太有趣了,估计这几天的时间都要花在这上面了

感谢支持, 花了很多时间在上面

感觉还挺难的, 前面给的 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++ 飘过...

生成 AST 了, 直接遍历 AST 转成一个一个汇编的脚本, 完成以后直接编译生成的汇编脚本就可以了。 编译原理计算机专业都学过的吧。里面有的。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服