~starkingdoms/starkingdoms

ref: 337e611348882db2bf9cd0616169c2aebeb2d6ee starkingdoms/kabel_test/src/main.rs -rw-r--r-- 1.5 KiB
337e6113 — ghostly_zsh mul and div 1 year, 4 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//use std::{env, fs};

//use kabel::{debug::{debug_ast, debug_token_array}, run_lexer, run_parser, run_semantic_analysis};

use kabel::{run_codegen, run_lexer, run_parser, run_semantic_analysis, vm::{Value, VM}};

fn main() {
    /*let args: Vec<String> = env::args().collect();
    let program =
        fs::read_to_string(args[1].clone()).unwrap();*/

    let program = "print 4 / 5;".to_string();

    let mut output = "".to_string();

    let lexer = run_lexer(program.to_string());

    for error in lexer.errors.clone() {
        output += &error.to_string();
        output += "\n";
    }
    //output += &format!("{:?}", lexer.output);
    if lexer.errors.len() != 0 || lexer.output.len() == 0 {
        println!("{}", output);
        return;
    }
    //output += &debug_token_array(lexer.output.clone());

    let (ast, parser) = run_parser(program.to_string(), lexer.output);

    for error in parser.errors.clone() {
        output += &error.to_string();
        output += "\n";
    }
    if parser.errors.len() != 0 {
        println!("{}", output);
        return;
    }
    //output += &debug_ast(ast.clone(), 0);
    //output += &format!("{:#?}", ast);
    let analyzer = run_semantic_analysis(program.to_string(), ast.clone());
    for error in analyzer.errors.clone() {
        output += &error.to_string();
        output += "\n";
    }

    let codegen = run_codegen(program, ast);

    let mut vm = codegen.vm;
    match vm.run(&mut output) {
        Ok(()) => {}
        Err(e) => output += &e.to_string(),
    }

    println!("{}", output);
}