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

Download history 8/week @ 2024-03-28 6/week @ 2024-04-04 3/week @ 2024-04-25 70/week @ 2024-05-02

93 个月下载量
用于 zen-vm

MIT 许可证

50KB
1K SLoC

ZEN 解析器

GoRules 商业规则引擎中使用的 Zen 商业表达式语言的虚拟机。该语言设计遵循以下原则:

  • 无副作用
  • 动态类型
  • 简单语法,便于广泛受众使用

其主要目标是弥合业务分析师与工程师之间的差距,同时提供卓越的性能和可读性。

资源

文档

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