feat: Add support for loop statements.
This commit is contained in:
@@ -73,6 +73,10 @@ pub enum Statement {
|
||||
elze: Option<Box<Statement>>,
|
||||
},
|
||||
|
||||
Loop {
|
||||
body: Box<Statement>,
|
||||
},
|
||||
|
||||
Compound {
|
||||
body: Vec<Statement>,
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@ pub mod parser;
|
||||
pub mod token;
|
||||
|
||||
fn main() {
|
||||
let mut parser = Parser::new("if a < 12 { let b = 10; } else { let c = 20; }");
|
||||
let mut parser = Parser::new("loop {}");
|
||||
|
||||
println!("{:#?}", parser.parse_statement());
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ impl<'src> Parser<'src> {
|
||||
match self.peek_no_eof()?.kind {
|
||||
TokenKind::KwLet => self.parse_let_statement(),
|
||||
TokenKind::KwIf => self.parse_if_statement(),
|
||||
TokenKind::KwLoop => self.parse_loop_statement(),
|
||||
|
||||
_ => {
|
||||
let expr = self.parse_expression(0)?;
|
||||
@@ -69,6 +70,14 @@ impl<'src> Parser<'src> {
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_loop_statement(&mut self) -> ParserResult<Statement> {
|
||||
self.expect(&[TokenKind::KwLoop])?;
|
||||
|
||||
let body = Box::new(self.parse_compound_statement()?);
|
||||
|
||||
Ok(Statement::Loop { body })
|
||||
}
|
||||
|
||||
fn parse_if_statement(&mut self) -> ParserResult<Statement> {
|
||||
self.expect(&[TokenKind::KwIf])?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user