lang_pt 0.1.2

A parser tool to generate recursive descent top down parser.
Documentation
use crate::examples::json::{lexerless::json_lexerless_grammar, tokenized::json_grammar};
use serde_json::Value as SerdeValue;
use std::time::Instant;

#[test]
fn test_parse_time() {
    let parser = json_grammar();
    let lexerless_parser = json_lexerless_grammar();

    let code_part = std::fs::read("./src/examples/__tests__/benchmark/example.json").unwrap();
    let times = 10000;

    let serde_instant = Instant::now();

    for _ in 0..times {
        serde_json::from_slice::<SerdeValue>(&code_part).unwrap();
    }

    println!("Serde time:{:?}", serde_instant.elapsed());

    let toolkit_instance = Instant::now();

    for _ in 0..times {
        parser.tokenize_n_parse(&code_part).unwrap();
    }
    println!("Toolkit time:{:?}", toolkit_instance.elapsed());

    let lexerless_instant = Instant::now();
    for _ in 0..times {
        lexerless_parser.parse(&code_part).unwrap();
    }
    println!("Lexerless time:{:?}", lexerless_instant.elapsed());
}
#[test]
fn large_file_parse_time() {
    let parser = json_grammar();
    let lexerless_parser = json_lexerless_grammar();
    let code_part = std::fs::read("./src/examples/__tests__/benchmark/large-file.json").unwrap();

    let serde_instant = Instant::now();

    let times = 4;

    for _ in 0..times {
        serde_json::from_slice::<SerdeValue>(&code_part).unwrap();
    }

    println!("Serde time:{:?}", serde_instant.elapsed());

    let toolkit_instance = Instant::now();

    for _ in 0..times {
        parser.tokenize_n_parse(&code_part).unwrap();
    }
    println!("Toolkit time:{:?}", toolkit_instance.elapsed());

    let lexerless_instant = Instant::now();
    for _ in 0..times {
        lexerless_parser.parse(&code_part).unwrap();
    }
    println!("Lexerless time:{:?}", lexerless_instant.elapsed());
}