swiftlet 0.1.5

swiftlet is a high-performance text-parsing library for Rust, inspired by Python’s Lark.
Documentation
use std::sync::Arc;
use std::time::Instant;
use swiftlet::{ParserOption, Swiftlet};
use swiftlet::grammar::Algorithm;


fn parse_text(grammar: &str, text: &str) {
    let current = Instant::now();
    let conf = Arc::new(
        ParserOption {
            algorithm: Algorithm::CLR,
            debug: true,
            ..Default::default()
        }
    );
    let parser = Swiftlet::from_string(grammar, conf).expect("failed to build parser");
    let parsed = parser.parse(text);
    println!("Time elapsed: {:?}", current.elapsed());
    match  parsed{
        Ok(ast) => {
            ast.pretty_print();
        }
        Err(err) => eprintln!("Error: {err}"),
    }

}


fn main() {
    let grammar = r#"
    start: select_stmt
    select_stmt: "SELECT"i columns "FROM"i table where_clause?
    columns: column ("," column)*
    column: NAME
    table: ( NAME | "(" select_stmt ")" )

    where_clause: "where"i condition
    condition: column comparator literal
    comparator: "=" -> eq
        | "!=" -> ne
        | ">=" -> ge
        | "<=" -> le

    literal: INT | DECIMAL

    NAME: /[a-zA-Z_][a-zA-Z0-9_]*/

    %import (DECIMAL, INT, WS, CNAME, STRING)
    %ignore WS
    "#;
    let query = r#"SELECT hello from (select world from mytble) where world >= 120"#;
    parse_text(grammar, query);
}