vinci/parser/instruction/
while_loop.rs1use crate::ast::instructions::while_loop::While;
2use crate::ast::instructions::Node;
3use crate::lexer::token::Token;
4use crate::parser::error::ParseError;
5use crate::parser::Parser;
6
7pub fn parse_while_instruction(parser: &mut Parser) -> Result<Node, ParseError> {
27 let condition: Node;
28 let body: Vec<Node>;
29
30 parser.expected(Token::Condition)?;
31 parser.expected(Token::LeftCurly)?;
32
33 let current = parser.next_token();
34 condition = parser.parse_node(¤t)?;
35
36 parser.expected(Token::RightCurly)?;
37 parser.expected(Token::Then)?;
38 parser.expected(Token::LeftCurly)?;
39
40 body = parser.parse_nodes()?;
41
42 parser.expected(Token::Semicolon)?;
43
44 Ok(Node::WHILE(Box::new(While { condition, body })))
45}