sponge_lib/
parse_tokens.rs

1use 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}