7 个版本
0.2.1 | 2023年4月9日 |
---|---|
0.2.0 | 2023年4月7日 |
0.1.7 | 2023年4月7日 |
0.0.0 | 2023年3月13日 |
#4 in #zen
93 个月下载量
用于 zen-vm
50KB
1K SLoC
ZEN 解析器
GoRules 商业规则引擎中使用的 Zen 商业表达式语言的虚拟机。该语言设计遵循以下原则:
- 无副作用
- 动态类型
- 简单语法,便于广泛受众使用
其主要目标是弥合业务分析师与工程师之间的差距,同时提供卓越的性能和可读性。
资源
单元测试
单元测试是一个逗号分隔的简单表达式列表,这些表达式评估为布尔值。每个逗号分隔符被视为或运算符。在单元表达式中,有一个特殊符号 $,它引用当前列。
一些示例
// Given: $ = 1
1, 2, 3 // true
1 // true
>= 1 // true
< 1 // false
[0..10] // true, (internally this is $ >= 0 and $ <= 10)
> 0 and < 10 // true
// Given: $ = 'USD'
'GBP', 'USD' // true
'EUR' // false
startsWith($, "US") // true - defaults to expression mode, comma is unavailable
endsWith($, "US") // false - defaults to expression mode
lower($) == "usd" // true - defaults to expression mode
标准测试
表达式提供 ZEN 语言的完整语法能力。它们让您访问所有功能,并在定义列或输出时非常有用。当使用 $ 时,单元表达式中也提供完整语法(因为它强制表达式模式)。
100 + 100 // 200
10 * 5 // 50
10 ^ 2 // 100
1 in [1, 2, 3] // true
5 in (5..10] // false
sum([1, 2, 3]) // 6
max([1, 2, 3]) // 3
"hello" + " " + "world" // "hello world"
len("world") // 5
weekdayString(date("2022-11-08")) // "Tue"
contains("hello world", "hello") // true
upper('john') // "JOHN"
some(['admin', 'user'], # == "admin") // true
not all([100, 200, 400, 800], # in (100..800)) // false
filter([100, 200, 400, 800], # >= 200) // [200, 400, 800]
依赖项
~2.2–3MB
~56K SLoC