V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zuiluo
V2EX  ›  分享创造

用 js 写了个 js 解释器

  •  1
     
  •   zuiluo · 2020-04-28 16:28:58 +08:00 · 6023 次点击
    这是一个创建于 1673 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前文 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

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

    第 1 条附言  ·  2020-05-02 14:54:21 +08:00
    29 条回复    2020-05-14 16:28:48 +08:00
    lzuntalented
        1
    lzuntalented  
       2020-04-28 17:38:01 +08:00
    手动点赞
    MonoLogueChi
        2
    MonoLogueChi  
       2020-04-28 18:00:17 +08:00 via Android
    想起了以前有人在微信小程序里搞热更
    opengps
        3
    opengps  
       2020-04-28 18:01:55 +08:00
    听名字就觉得秀
    i0error
        4
    i0error  
       2020-04-28 18:03:25 +08:00
    zdnyp
        5
    zdnyp  
       2020-04-28 18:08:12 +08:00
    这...有啥用么,是跟在线执行 js 一类吗?
    xuarongla0000
        6
    xuarongla0000  
       2020-04-28 18:13:03 +08:00
    没懂,这个有什么用
    zuiluo
        7
    zuiluo  
    OP
       2020-04-28 18:16:08 +08:00
    @xuarongla0000 有意思+成就感+学习新姿势
    zuiluo
        8
    zuiluo  
    OP
       2020-04-28 18:17:48 +08:00
    @zdnyp 主要是用来学习,学习的最好方式是实践 hhh
    zuiluo
        9
    zuiluo  
    OP
       2020-04-28 18:18:25 +08:00
    @i0error 写 js 解释器的人还是蛮多的
    i0error
        10
    i0error  
       2020-04-28 18:21:07 +08:00
    嗯 我这两天刚好注意了下小程序热更,是想回复二楼的,并非 ky
    alphatoad
        11
    alphatoad  
       2020-04-28 18:22:18 +08:00 via iPhone
    我最近也在做类似的东西,哈哈
    Parser 和 interpreter 挺难写的
    xiaojie668329
        12
    xiaojie668329  
       2020-04-28 18:36:21 +08:00 via iPhone
    加油,要是通过 test262 的测试就牛逼了。
    mayx
        13
    mayx  
       2020-04-28 18:37:36 +08:00 via Android
    要不直接搞个 jslinux 上装个 v8 ?
    jtwor
        14
    jtwor  
       2020-04-28 19:05:15 +08:00
    已 star 勾起了对解释器的好奇 看了一下好像还没写处理对象 有没有用不重要 程序跑通的成就感自己才知道 :)
    zuiluo
        15
    zuiluo  
    OP
       2020-04-28 21:21:15 +08:00
    @alphatoad 写的过程确实挺头大的哈哈
    mxT52CRuqR6o5
        16
    mxT52CRuqR6o5  
       2020-04-28 21:56:01 +08:00 via Android
    @xuarongla0000 脸书的 prepack 项目
    m0cha
        17
    m0cha  
       2020-04-28 22:04:29 +08:00 via iPhone
    star 勾起,进入我的吃灰收藏,下一个
    yianing
        18
    yianing  
       2020-04-28 23:33:15 +08:00
    语法分析用的递归下降,我都已经忘了 LL, LR 那些东西了
    yingzir
        19
    yingzir  
       2020-04-28 23:49:51 +08:00
    很不错, 可以把这个解释器写个教程,或者总结,应该会对自己,对其他人都非常有好处
    zuiluo
        20
    zuiluo  
    OP
       2020-04-29 09:04:57 +08:00
    @yingzir 准备写:)
    zhw2590582
        21
    zhw2590582  
       2020-04-29 10:07:28 +08:00
    所以可以用在小程序热更新吗
    zuiluo
        22
    zuiluo  
    OP
       2020-04-29 10:39:16 +08:00
    @zhw2590582 能运行 JS 的环境都能运行这个解释器,至于能不能热更新,就没了解过了。楼上有人有对应的帖子介绍,你可以看看
    damingxing
        23
    damingxing  
       2020-04-30 14:38:07 +08:00
    大佬厉害啊
    charten
        24
    charten  
       2020-05-01 23:17:24 +08:00
    php 解释器我觉得市场更大一点(滑稽
    PALELESS
        25
    PALELESS  
       2020-05-02 11:23:38 +08:00
    一直想写个解释器练练手,star 了
    rodjl
        26
    rodjl  
       2020-05-02 12:46:06 +08:00 via iPhone
    看过 engine262 的源码,看的头大
    LifStge
        27
    LifStge  
       2020-05-02 13:44:58 +08:00
    禁止套娃
    chizuo
        28
    chizuo  
       2020-05-02 20:24:13 +08:00
    @zdnyp
    @xuarongla0000
    非科班的你们可能无法理解学习了编译原理,写个玩具编译器 /解释器有多爽
    1847bell
        29
    1847bell  
       2020-05-14 16:28:48 +08:00
    没点开看,就凭这个标题我都觉得你很秀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2596 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:50 · PVG 23:50 · LAX 07:50 · JFK 10:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.