Lumesh 语法特性简介
Lumesh 是一个现代化的 shell 和脚本语言,采用 Pratt 解析器实现复杂的表达式解析。
独特语法特性
1. 多种管道操作符
与传统 shell 不同,Lumesh 提供多种管道类型:
cmd1 | cmd2 # 标准管道,传输结构化数据、文本流 |
结构化管道:
ls -l | Into.table() | where(size > 5K) |
2. 错误处理操作符
Lumesh 内置了丰富的错误处理机制:
command ?. # 忽略错误 |
3. 延迟赋值
使用 :=
进行延迟赋值,表达式不会立即执行:
let cmd := ls -l # 延迟执行 |
4. 链式调用
支持类似面向对象语言的链式方法调用:
"hello world".split(' ').join(',') |
5. 解构赋值
支持数组和映射的解构赋值:
let [a, b, c] = [1, 2, 3] |
6. 区间操作符
提供多种区间操作符:
1..10 # 包含结束 |
7. 函数装饰器
支持函数装饰器语法:
@decorator_name |
8. 模式匹配
内置强大的模式匹配功能,支持正则表达式:
match value { |
9. 重载的运算符
利用常规四则运算符处理更多常见任务:
"1" + [2,3] |
10. 函数式编程
0...10 | List.filter(x -> x % 2 == 0) |
内置大量实用的函数库, 以实现便捷的函数式编程,如
- 集合操作:
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
控制流结构
# 条件语句 |
表达式优先级
Lumesh 使用精确定义的运算符优先级系统:
- 赋值运算符 (
=
,:=
,+=
等) - 优先级 1 - 重定向和管道 (
|
,>>
,>!
) - 优先级 2 - 错误处理 (
?.
,?+
,??
) - 优先级 3 - Lambda 表达式 (
->
) - 优先级 4 - …
数据类型
字符串
支持三种字符串类型:
- 双引号字符串:
"hello world"
- 原始字符串:
'raw string'
- 模板字符串:
`template $variable`
集合类型
[1, 2, 3] # 数组 |
函数
- 支持参数收集,支持默认参数
- 支持lambda函数
- 支持函数嵌套
fn add(x){ x+1 } |
模块系统
支持模块导入和使用:
use module_name |
Notes
Lumesh 的语法设计融合了现代编程语言的特性与 shell 的实用性。其独特的管道操作符、错误处理机制和链式调用语法是与传统 shell 最大的区别。
解析器采用 Pratt 算法实现,支持复杂的表达式嵌套和优先级处理。
Wiki pages you might want to explore: