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_data6. 区间操作符#
提供多种区间操作符:
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: