sponge_lib/
parse_tokens.rs1use crate::decompose_tokens::Token;
2
3#[derive(Debug, Clone)]
4pub enum ParsedToken {
5 VariableAssignment { name: String, value: i32 },
6}
7
8pub fn parse(tokens: Vec<Token>) -> Vec<ParsedToken> {
9 let mut parsed_tokens = Vec::new();
10 let mut iter = tokens.iter().peekable();
11
12 while let Some(token) = iter.next() {
13 if let Token::Keyword(ref kw) = token {
14 if kw == "let" {
15 if let Some(Token::Identifier(name)) = iter.next() {
16 if let Some(Token::Symbol(':')) = iter.next() {
17 if let Some(Token::Keyword(typ)) = iter.next() {
18 if typ == "i32" {
19 if let Some(Token::Symbol('=')) = iter.next() {
20 if let Some(Token::Literal(value)) = iter.next() {
21 parsed_tokens.push(ParsedToken::VariableAssignment {
22 name: name.clone(),
23 value: *value,
24 });
25 }
26 }
27 }
28 }
29 }
30 }
31 }
32 }
33 }
34
35 parsed_tokens
36}