#![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))
}
}