1use log::trace;
2use tokenizer::{tokens::CommentedToken, tokens_buffer::TokensBuffer};
3
4use crate::ast::Expression;
5
6pub fn parse<'a, 'b: 'a>(
7 tokens: &'b [&'a CommentedToken<'a>],
8) -> Result<Vec<Expression<'a>>, String> {
9 let mut expressions = vec![];
10 let mut remaining_tokens = tokens;
11
12 while !remaining_tokens.is_empty() {
13 trace!(
14 "Main parse function, remaining tokens: {}",
15 TokensBuffer(remaining_tokens)
16 );
17 let (new_remaining_tokens, mut expr) = crate::program::program(remaining_tokens)
18 .map_err(|err| format!("Could not parse: {:?}", err))?;
19 expressions.append(&mut expr);
20 trace!("New remaining tokens: {}", TokensBuffer(remaining_tokens));
21 remaining_tokens = new_remaining_tokens;
22 }
23
24 Ok(expressions)
25}