用 js 写了个 js 解释器

2020-04-28 16:28:58 +08:00
 zuiluo

前文 https://www.v2ex.com/t/652219

一个解释器的小玩具,经过我一个多月业余时间的开发,现在终于支持大部分 JS 的核心功能了,除了对象。

现在已经图灵完备,基本上可以算的上一个阉割版 js 了

举个例子:解释执行一个快排函数:)


function quickSort(list,len) {
    let a = 0;
    let b = len-1;
    let c = list[a];
    while (a < b){
        while (list[b]>c && a < b){
            b = b-1;
        }
        if(list[b] < c){
            list[a] = list[b];
            list[b] = c;
            b = b-1;
            c = list[b];
        }
         while (list[a] < c && a < b){
            a = a + 1;
         }
        if(list[a] > c){
            list[b] = list[a];
            list[a] = c;
            a = a + 1;
            c = list[a];
        }
    }
    return list;
}

let arr = [9,3,2,1,5,-2,6];
quickSort(arr,7);
log(arr,666);

https://github.com/zuluoaaa/makeJs

最终跑通的那一刻,感觉整个人都嗨翻了

6043 次点击
所在节点    分享创造
29 条回复
lzuntalented
2020-04-28 17:38:01 +08:00
手动点赞
MonoLogueChi
2020-04-28 18:00:17 +08:00
想起了以前有人在微信小程序里搞热更
opengps
2020-04-28 18:01:55 +08:00
听名字就觉得秀
i0error
2020-04-28 18:03:25 +08:00
zdnyp
2020-04-28 18:08:12 +08:00
这...有啥用么,是跟在线执行 js 一类吗?
xuarongla0000
2020-04-28 18:13:03 +08:00
没懂,这个有什么用
zuiluo
2020-04-28 18:16:08 +08:00
@xuarongla0000 有意思+成就感+学习新姿势
zuiluo
2020-04-28 18:17:48 +08:00
@zdnyp 主要是用来学习,学习的最好方式是实践 hhh
zuiluo
2020-04-28 18:18:25 +08:00
@i0error 写 js 解释器的人还是蛮多的
i0error
2020-04-28 18:21:07 +08:00
嗯 我这两天刚好注意了下小程序热更,是想回复二楼的,并非 ky
alphatoad
2020-04-28 18:22:18 +08:00
我最近也在做类似的东西,哈哈
Parser 和 interpreter 挺难写的
xiaojie668329
2020-04-28 18:36:21 +08:00
加油,要是通过 test262 的测试就牛逼了。
mayx
2020-04-28 18:37:36 +08:00
要不直接搞个 jslinux 上装个 v8 ?
jtwor
2020-04-28 19:05:15 +08:00
已 star 勾起了对解释器的好奇 看了一下好像还没写处理对象 有没有用不重要 程序跑通的成就感自己才知道 :)
zuiluo
2020-04-28 21:21:15 +08:00
@alphatoad 写的过程确实挺头大的哈哈
mxT52CRuqR6o5
2020-04-28 21:56:01 +08:00
@xuarongla0000 脸书的 prepack 项目
m0cha
2020-04-28 22:04:29 +08:00
star 勾起,进入我的吃灰收藏,下一个
yianing
2020-04-28 23:33:15 +08:00
语法分析用的递归下降,我都已经忘了 LL, LR 那些东西了
yingzir
2020-04-28 23:49:51 +08:00
很不错, 可以把这个解释器写个教程,或者总结,应该会对自己,对其他人都非常有好处
zuiluo
2020-04-29 09:04:57 +08:00
@yingzir 准备写:)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/666980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX