2025-02-12 10:30:51 +01:00
|
|
|
use crate::{expression::Expression, token::Token};
|
|
|
|
|
|
|
|
/// Enumeration of all types of statements.
|
|
|
|
#[derive(Debug, Clone, PartialEq)]
|
|
|
|
pub enum Statement {
|
|
|
|
Block(Vec<Statement>),
|
|
|
|
Print(Expression),
|
|
|
|
Expression(Expression),
|
|
|
|
Var {
|
|
|
|
name: Token,
|
|
|
|
initializer: Box<Option<Expression>>,
|
|
|
|
},
|
2025-02-12 13:10:07 +01:00
|
|
|
If {
|
|
|
|
condition: Expression,
|
|
|
|
then_branch: Box<Statement>,
|
|
|
|
else_branch: Option<Box<Statement>>,
|
|
|
|
},
|
|
|
|
While {
|
|
|
|
condition: Expression,
|
|
|
|
body: Box<Statement>,
|
|
|
|
},
|
2025-02-13 12:29:31 +01:00
|
|
|
Function {
|
|
|
|
name: Token,
|
|
|
|
params: Vec<Token>,
|
|
|
|
body: Vec<Statement>,
|
|
|
|
},
|
|
|
|
Return {
|
|
|
|
keyword: Token,
|
|
|
|
value: Option<Expression>,
|
|
|
|
},
|
2025-02-12 10:30:51 +01:00
|
|
|
}
|