Files
aster/src/ast/stmt.rs
T

40 lines
655 B
Rust

use crate::ast::expr::Expr;
#[derive(Debug, Clone)]
pub enum Stmt {
/// let x = expr;
Let {
name: String,
initializer: Expr,
},
/// 表达式语句:expr;
ExprStmt(Expr),
/// 代码块:{ ... }
Block(Vec<Stmt>),
/// if 语句
If {
condition: Expr,
then_branch: Box<Stmt>,
else_branch: Option<Box<Stmt>>,
},
/// while 循环
While {
condition: Expr,
body: Box<Stmt>,
},
/// 函数声明
Function {
name: String,
params: Vec<String>,
body: Vec<Stmt>,
},
/// return expr?;
Return(Option<Expr>),
}