跳过正文
  1. 惊鸿一瞥/

Lumesh 语法特性简介

1089 字·3 分钟
目录

Lumesh 是一个现代化的 shell 和脚本语言,采用 Pratt 解析器实现复杂的表达式解析。

独特语法特性
#

1. 多种管道操作符
#

与传统 shell 不同,Lumesh 提供多种管道类型:

1cmd1 | cmd2      # 标准管道,传输结构化数据、文本流
2cmd1 |_ cmd2     # 位置管道,传输到指定的参数位置
3cmd1 |> cmd2     # 单派管道,循环派发列表数据
4cmd1 |^ cmd2     # PTY 管道

结构化管道:

1ls -l | Into.table() | where(size > 5K)
2Fs.ls -l | where(size > 5K) | select(name,size,modified)
3ls -1 |> adb push _ /sdcard/Download/

2. 错误处理操作符
#

Lumesh 内置了丰富的错误处理机制:

1command ?.        # 忽略错误
2command ?: e      # 错误捕获 或 默认值
3command ?+        # 打印到标准输出
4command ??        # 打印到错误输出
5command ?>        # 覆盖打印 (数据通道)
6command ?!        # 遇错终止  (终止管道)

3. 延迟赋值
#

使用 := 进行延迟赋值,表达式不会立即执行:

1let cmd := ls -l    # 延迟执行

4. 链式调用
#

支持类似面向对象语言的链式方法调用:

1"hello world".split(' ').join(',')
2data | .filter(x -> x > 0)

5. 解构赋值
#

支持数组和映射的解构赋值:

1let [a, b, c] = [1, 2, 3]
2let {name, age} = user_data

6. 区间操作符
#

提供多种区间操作符:

11..10      # 包含结束
21..<10     # 不包含结束
31..10:2    # 带步长
41...10     # 直接创建数组

7. 函数装饰器
#

支持函数装饰器语法:

1@decorator_name
2@decorator_with_args(param1, param2)
3fn my_function() { ... }

8. 模式匹配
#

内置强大的模式匹配功能,支持正则表达式:

1match value {
2    pattern1 => result1,
3    pattern2 => result2,
4    _ => default
5}

9. 重载的运算符
#

利用常规四则运算符处理更多常见任务:

1"1" + [2,3]
2[1,2] + 3
3[1,2] + [3,4,5]
4{a:b} + c
5{a:b} + {c:d}

10. 函数式编程
#

10...10 | List.filter(x -> x % 2 == 0)
20..10 | .map(x -> x * 2)

内置大量实用的函数库, 以实现便捷的函数式编程,如

  • 集合操作: List.reduce, List.map
  • 文件系统: Fs.ls, Fs.read, Fs.write
  • 字符串处理: String.split, String.join、正则模块、格式化模块
  • 时间操作: Time.now, Time.format
  • 数据转换: Into模块, Parse模块
  • 数学计算: 完整的数学函数库
  • 日志记录: Log模块
  • UI操作: Ui.pick, Ui.confirm

控制流结构
#

1# 条件语句
2if condition { action } else { alternative }
3match expr { a => brachA; ... }
4# 循环语句
5for item in collection { process(item) }
6while condition { body }
7loop { infinite_loop }
8# 简单重复
9repeat 10 {a += 1}

表达式优先级
#

Lumesh 使用精确定义的运算符优先级系统:

  • 赋值运算符 (=, :=, += 等) - 优先级 1
  • 重定向和管道 (|, >>, >!) - 优先级 2
  • 错误处理 (?., ?+, ??) - 优先级 3
  • Lambda 表达式 (->) - 优先级 4
  • ...

数据类型
#

字符串
#

支持三种字符串类型:

  • 原始字符串:'raw string'
  • 转义字符串:"first line \nsecond line"
  • 模板字符串:`template $variable`

集合类型
#

1[1, 2, 3]                    # 数组
2{key: value, name: "test"}   # 映射
31..10                        # 区间
41...10                       # 数组

函数
#

  • 支持参数收集,支持默认参数
  • 支持lambda函数
  • 支持函数嵌套
1fn add(x){ x+1 }
2(x,y) -> x+y

模块系统
#

支持模块导入和使用:

1use module_name
2
3Fs.ls("/path")      # 使用内置模块

Notes
#

Lumesh 的语法设计融合了现代编程语言的特性与 shell 的实用性。其独特的管道操作符、错误处理机制和链式调用语法是与传统 shell 最大的区别。

解析器采用 Pratt 算法实现,支持复杂的表达式嵌套和优先级处理。

Wiki pages you might want to explore:

相关文章