rogue-lang 0.0.0

A transpiler prioritizing simplicity while maintaining performance & efficiency
Documentation
#![allow(dead_code)]
#![allow(clippy::needless_return)]

#![feature(test)]
extern crate test;

mod lexer;
mod utility;
mod parser;

use lexer::lex;
use parser::parse;

fn _main() {
    let filename = "<src>";
    let source = "const PERFECT = 10";

    let mut lexer_result = lex(filename, source);

    if let Some(tokens) = lexer_result.result {
        for tok in &tokens {
            println!("{tok}");
        }
        println!();

        let mut parser_result = parse(filename, source, &tokens);
        
        if let Some(ast) = parser_result.result {
            ast.pretty_print();
        } else {
            parser_result.dump()
        }
    } else {
        lexer_result.dump()
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use test::Bencher;

    fn main() {
        _main()
    }

    #[bench]
    fn lexer_bench(b: &mut Bencher) {
        let filename = "<src>";
        let source = "const PERFECT = 10";

        b.iter(|| lex(filename, source))
    }

    #[bench]
    fn parser_bench(b: &mut Bencher) {
        let filename = "<src>";
        let source = "const PERFECT = 10";

        let lexer_result = lex(filename, source);
        let tokens = lexer_result.result.unwrap();

        b.iter(|| parse(filename, source, &tokens))
    }
}