Cub 1.0.1

Cub 1.0.1

Louis Dhauwe 维护。



Cub 1.0.1

Lioness Cub SavannaKit

Cub Logo

Cub 编程语言

Travis build status Codecov
version 1.0.1 Carthage Compatible Swift Platform: iOS macOS tvOS watchOS Extension: .cub
Twitter Donate via PayPal

Cub 是一种受 Swift 启发的解释型、动态类型脚本语言。该项目包含一个词法分析器、解析器、编译器和解释器,所有这些都在 Swift 中编写。

Cub 用于 OpenTerm 的脚本功能。OpenTerm 和 在线 都有语言指南。Cub 是从 Lioness(我的第一种编程语言)演变而来的。

标准库(简称:stdlib)包含一些基本实用函数,例如将日期转换为日期格式。

源示例

以下 Cub 代码递归地计算阶乘

func factorial(x) returns {
	
    if x > 1 {
        return x * factorial(x - 1)
    }
	
    return 1
}

a = factorial(5) // a = 120

以下 Cub 代码使用 do times 循环

a = 1
n = 10
do n times {
    a += a
}
// a = 1024

更多示例可以在 这里 找到。

外部函数

Cub 具有一个重要的特性,即为外部函数提供定义功能。这些函数是用本地代码(例如 Swift)实现的,因此允许 Cub 调用本地代码。

外部函数会暂停解释器,执行本地代码,并在本地代码执行完毕后恢复解释器。

以下示例实现了打印函数

let runner = Runner(logDebug: true, logTime: true)
		
runner.registerExternalFunction(name: "print", argumentNames: ["input"], returns: true) { (arguments, callback) in
			
	for (name, arg) in arguments {
		print(arg)
	}
			
	callback(nil)
}

外部函数在 Cub 中的调用方式与任何其他全局函数类似,如上例中的打印函数可以按以下方式调用

print("Hello world")

特性

  • 简约而富有表现力的语法
  • 无类型系统,语言是动态的
  • 5个基本运算符:+-/*^
    • ^ 表示“乘方”,例如 2^10 等于 1024
    • 所有运算符都有简写,例如 +=+
  • 数值
    • 所有数值都是浮点数
  • 布尔值
    • 可以通过比较进行评估
    • 可以通过字面量定义:truefalse
  • 字符串
    • 可以使用 + 运算符连接
  • 数组
    • 可以包含任何类型,包括其他数组
  • 函数
    • 支持参数、返回值和递归
    • 可以定义在其他函数内
  • 结构体
    • 可以包含任何类型,包括其他结构体
  • 循环
    • for
    • while
    • do-while
    • 重复-while
    • break
    • continue
  • if / else / else if 条件语句

运行

由于该项目不依赖于任何依赖项,运行它无需设置。

macOS

打开 Cub.xcworkspace (建议使用最新非测试版 Xcode),并运行 macOS Example 目标。示例将在 A.cub 中运行代码。输出将被打印到控制台。

安装框架

使用 Swift Package Manager

将依赖项部分添加到 Package.swift 文件中

.Package(url: "https://github.com/louisdh/cub.git",
		         majorVersion: 1, minor: 0)

使用 CocoaPods

将以下行添加到您的 Podfile

pod 'Cub', '~> 1.0'

使用 Carthage

将以下行添加到您的 Cartfile

github "louisdh/cub" ~> 1.0

运行 carthage update 以构建框架,并将构建的 Cub.framework 拖放到您的 Xcode 项目中。

路线图

  • 结构体
  • 完成建议(给定一个不完整的源字符串和插入点)
  • 解释器中的断点支持
  • Stdlib 文档
  • 编译器警告
  • 编译器优化
  • 更快的 Lexer(无需正则表达式)
  • 支持标识符名称中的表情符号
  • guard 语句
  • 大量更多的单元测试
  • Linux 支持

Xcode 文件模板

Cub 源文件可以轻松地使用 Xcode 创建,有关说明见 XcodeTemplate.md

架构

有关项目架构的详细说明可以在此处找到。这里

许可协议

本项目适用于 MIT 许可协议。有关更多信息,请参阅 LICENSE 文件。