V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gztss
V2EX  ›  C

没事做了款脚本语言

  •  
  •   gztss · 2018-11-14 20:33:21 +08:00 · 1951 次点击
    这是一个创建于 2212 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前两天用 C 语言实现了一个脚本语言—— berry,实际上是仿照 Lua 做的,另外简单的支持了一下类。本来只是做着玩玩顺便给单片机用,所以这个脚本语言会尽量往小了做,最终目标是在 RAM 只有几 KB,ROM 几十 KB 的设备上使用。

    这里是 GitHub 链接:https://github.com/gztss/berry

    语法的话中规中矩,只打算内置 list 和 hash-map 两种数据结构。由于考虑到单片机 ROM 也比较小,不会实现很丰富的标准库函数(其实是我懒得做)。

    项目现在还处于项目早期,文档什么的我都还没怎么写,这几天会尽快补上。目前我已经实现了大部分的 Core Language,GC 也简单的做了一下。

    这是一个简单的例子,它演示了一个 list 迭代器( list 类已经内置了迭代器),这个迭代器使用闭包实现。

    def list_iter(list)
        index = 0
        def it()
            value = list[index]
            index = index + 1
            return value
        end
        return it
    end
    l = [0, 1, 2, 3, 4, 5]
    lout = []
    it = list_iter(l)
    v = it()
    while (v != nil)
        lout.append(v)
        v = it()
    end
    print(lout)
    
    FrankHB
        1
    FrankHB  
       2018-11-14 21:14:13 +08:00
    Any spec?
    gztss
        2
    gztss  
    OP
       2018-11-14 21:30:46 +08:00 via Android
    @FrankHB 还没写呢,正在撸。。这玩意很简单,写起来应该很快😂
    FrankHB
        3
    FrankHB  
       2018-11-14 21:33:23 +08:00
    我写这类 spec 经常比实际实现多花 10 倍时间……
    (各种测试等编译摸鱼的时间不算。)
    gztss
        4
    gztss  
    OP
       2018-11-14 22:07:06 +08:00 via Android
    前面我指的是这个语言很简单,当然有些地方我考虑的确实不行。另外在 tools 目录下面有 EBNF,凑个数吧。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5787 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.