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

简易网页 racket/scheme/lisp 解释器

  •  
  •   yangyuan ·
    yangyuan · 2017-04-15 12:27:02 +08:00 · 2668 次点击
    这是一个创建于 2570 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主要是照着 racket 做的,但国内没多少人听说过 racket ,所以标上了 scheme/lisp 。
    Racket 是一个 scheme 系的语言。

    源码用 TypeScript 编写,实现了一个面向对象的 AST 实现。理论上可以无伤翻译为 Java/C#/C++/Python 之类。
    语法树上所有节点都是 expression , expression 的 value 要么是 binary data 要么是 procedure 。
    理论上支持一个新语法,最差情况就是新建一种 expression 。

    *商业 [解*释*器] 是不会用这种架构,这么做的目的是为了用最少最易懂的代码(但是牺牲性能)完成一个精简的解释器主体。
    相反这个架构参考了大量 scheme 编译器的文章和源码。

    此外没有自己做 call frame 而是直接递归,同样是为了代码更好懂。
    既然是玩具暂时不想着做 properly tail recursion 。(要啥自行车。。


    DEMO:
    https://yangyuan.github.io/racket.js/
    源码
    https://github.com/yangyuan/racket.js/
    Racket 语法样例
    https://github.com/yangyuan/racket.js/blob/master/docs/examples.md


    抽时间写的, base 语法实现了大部分。
    主要缺内置 list 、 string 、数学函数。
    计划用林散时间补齐,然后加上 bigbang 和少量图像函数。


    --------------------------------------------------------------------
    最近在想能不能用类似的方式实现 C 的解释。
    之前有 Clang 经验,似乎理论上照它的 AST 设计就可以。但是地址操作要做很大限制。
    5 条回复    2017-04-23 01:35:28 +08:00
    Mistwave
        1
    Mistwave  
       2017-04-15 20:06:46 +08:00 via iPhone
    Racket 在国内确实小众,支持一下
    yivanus
        2
    yivanus  
       2017-04-18 22:17:08 +08:00
    刚好玩过 racket ,但实际用起来好像没啥方向。
    yangyuan
        3
    yangyuan  
    OP
       2017-04-19 02:07:06 +08:00
    @yivanus 在研究领域这类语言用的比较多。
    exch4nge
        4
    exch4nge  
       2017-04-21 13:05:51 +08:00
    @yangyuan LZ 啥时候计划支持 macro ,比如 define-syntax 之类的……
    yangyuan
        5
    yangyuan  
    OP
       2017-04-23 01:35:28 +08:00
    @exch4nge 暂时不打算支持,因为现在是打算支持到 racket 中等学生语言。

    define-syntax 需要完全更改架构,代码会变得晦涩,就像官方 racket 一样。
    代码量也会变得很大,网页载入会变慢。

    如果我想支持 define-syntax ,我会直接写个 scheme 版本的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5350 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:20 · PVG 15:20 · LAX 00:20 · JFK 03:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.