表达式 (Expression)¶
本页定义了 Lumos 的表达式结构 Expr。
表达式 Expr¶
pub enum Expr {
/// 字面量 (1, "hello", true 等)
Literal(Literal),
/// 符号引用 (变量名、函数名、命名空间等)
Symbol(String),
/// 二元运算 (a + b, a && b)
Binary {
op: BinaryOp,
left: Box<Expr>,
right: Box<Expr>,
},
/// 一元运算 (-a, !b, *a)
Unary {
op: UnaryOp,
operand: Box<Expr>,
},
/// 函数调用 (foo(a, b))
Call {
callee: Box<Expr>,
args: Vec<Expr>,
},
/// 成员访问 (obj.member)
Member {
object: Box<Expr>,
member: String,
},
/// 下标访问 (arr[index])
Index {
target: Box<Expr>,
index: Box<Expr>,
},
/// 三元运算 (cond ? a : b)
Ternary {
cond: Box<Expr>,
then_expr: Box<Expr>,
else_expr: Box<Expr>,
},
/// 代码块表达式 (val x = { ... })
BlockExpr(Block),
/// Lambda 表达式 (def(x) -> x + 1)
Lambda(Box<FunctionDecl>),
/// 表达式别名 (let expr = ...)
LetAlias {
name: String,
value: Box<Expr>,
},
/// 编译期常量别名 (lit expr = ...)
LitAlias {
name: String,
value: Box<Expr>,
},
/// 调试伪函数 (dbg(...))
Dbg(Vec<Expr>),
/// 类型转换 (expr as T)
Cast {
expr: Box<Expr>,
target_type: TypeRef,
},
/// 类型判断 (expr is T 或 expr is state)
Is {
expr: Box<Expr>,
target: IsTarget,
},
/// 异步等待 (await expr)
Await(Box<Expr>),
/// 单位转换 (expr in unit)
UnitConvert {
expr: Box<Expr>,
target_unit: String,
},
}
运算符枚举¶
二元运算符 BinaryOp¶
pub enum BinaryOp {
Add, Sub, Mul, Div, Mod, // 算术
Eq, Ne, Lt, Le, Gt, Ge, // 比较
And, Or, Xor, // 逻辑/位运算
Shl, Shr, // 移位
Assign, // 赋值 (=)
AddAssign, SubAssign, ... // 复合赋值
Pipeline, // 管道 (|>)
}
一元运算符 UnaryOp¶
pub enum UnaryOp {
Pos, Neg, // + -
Not, BitNot, // ! ~
Deref, // * (解引用)
AddrOf, // & (取地址)
}
类型判断目标 IsTarget¶
pub enum IsTarget {
Type(TypeRef),
State(String), // 如 is empty, is valid
}
相关内容:表达式语法见 语法/表达式。