/lk

DIY programming language LK, inspired by Lua.

Primary LanguageGoMIT LicenseMIT

Lang LK

badge-lang badge-lang

💌 致谢 - lua - luago

简体中文 | English

⌨️ 体验

获取

  • 通过 go 安装:go install github.com/lollipopkit/lk@latest
  • Release 下载

CLI

详细说明可以运行 lk --help 查看

# 进入REPL交互式解释器
lk
# 执行.lk(c)文件
lk <file>
# 编译.lk文件
lk -c <file>
# 为.lk文件,生成语法树
lk -a <file>

📄 语法

详细

示例

// http 发送请求示例
resp, code, err := http.req(
    'POST', // Method
    'https://http.lolli.tech/post', // URL
    {'accept': 'application/json'}, // Headers
    {'foo': 'bar'} // Body
)
if err != nil {
    errorf('http req: %s', err) // 内置的 error(f) 方法
}
printf('code: %d, body: %s', code, resp)

// json 解析
obj, err := json(resp)
if err != nil {
    errorf('json parse: %s', err)
}
foo := obj['json']['foo']
// 正则匹配
if foo != nil and foo:match('[bar]{3}') {
    printf('match: %s', foo)
}

🔖 TODO

  • 语法
    • 注释:// /* */
    • 去除 repeat, until, goto, .. (concat)
    • Raw String, 使用 ` 包裹字符
    • 面向对象
    • 自动添加 range ( paris )
    • 语法糖
      • 三元操作符 a ? b : c
      • a == nil ? b : a -> a ?? b
      • shy a = b -> a := b
      • shy a = fn(b) {rt c} -> shy a = fn(b) => c
      • 支持 a++ a+=b
    • Table
      • key为StringExp,而不是NameExp
      • 构造方式:= -> :, eg: {a = 'a'} -> {a: 'a'}
      • 索引从 0 开始
      • 改变 metatable 设置方式
      • 支持 a.0 (等同于 a[0])
  • CLI
    • 支持传入参数 ( lk args.lk arg1 -> os.args == [lk, args.lk, arg1] )
    • 报错时输出调用栈
    • REPL,直接运行 ./lk 即可进入
      • 支持方向键
      • 识别代码块
  • 资源
    • 文档
      • LANG.md
      • 测试集,位于 test 文件夹
    • IDE
      • VSCode高亮

🌳 生态

📝 License

lollipopkit 2023 GPL v3