use std::sync::Arc;

use swiftlet::preclude::*;

fn main() {
    // let g = r#"
    // s: C
    // A: D "a" "b"
    // C: "c" A
    // D: "d"
    // "#;

    // let g = r#"
    // s: A "fe"
    // A: ("1" "2") C*
    // C: /\w+/ /\d+/
    // "#;

    let g = r#"
    s: A
    A: (X | "a")+ B
    B: "b"
    X: "x"
    "#;

    let parser_opt = Arc::new(ParserConfig {
        start: "s".to_string(),
        debug: true,
        ..Default::default()
    });
    let parser = Swiftlet::from_str(g)
        .map(|grammar| grammar.parser(parser_opt))
        .expect("failed to build parser");

    let parsed = parser.parse("xaxb").expect("Failed to parse a text");
    parsed.pretty_print();
}
