Skip to main content

sml_lang/
codegen.rs

1use crate::lexer::Token;
2
3pub fn generate_code(tokens: &[Token]) -> String {
4    let mut output = String::new();
5
6    output.push_str("struct A {\n");
7
8    let mut i = 0;
9
10    while i < tokens.len() {
11        match &tokens[i] {
12
13            Token::Identifier(name) => {
14                if let Some(value_token) = tokens.get(i + 2) { 
15                    // skip ASSIGN in between
16
17                    let ty = match value_token {
18                        Token::Int(_) => "i64",
19                        Token::Float(_) => "f64",
20                        Token::StringVal(_) => "String",
21                        Token::Bool(_) => "bool",
22                        _ => "unknown",
23                    };
24
25                    output.push_str(&format!("    {}: {},\n", name, ty));
26                }
27            }
28
29            _ => {}
30        }
31
32        i += 1;
33    }
34
35    output.push_str("}\n");
36
37    output
38}