chryso-parser-yacc 0.0.2

Chryso parser-yacc crate.
use std::path::Path;

fn main() {
    println!("cargo:rerun-if-env-changed=CHRYSO_YACC_ALLOW_CONFLICTS");
    let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap();
    let out_dir = std::env::var("OUT_DIR").unwrap();
    let grammar_dir = Path::new(&manifest_dir).join("grammar");
    let lexer_path = grammar_dir.join("sql.l");
    let parser_path = grammar_dir.join("sql.y");
    println!("cargo:rerun-if-changed={}", lexer_path.display());
    println!("cargo:rerun-if-changed={}", parser_path.display());
    let lexer_out = Path::new(&out_dir).join("sql.l.rs");
    let parser_out = Path::new(&out_dir).join("sql.y.rs");
    let allow_conflicts = std::env::var("CHRYSO_YACC_ALLOW_CONFLICTS")
        .map(|value| !matches!(value.as_str(), "0" | "false" | "FALSE"))
        .unwrap_or(false);

    lrlex::CTLexerBuilder::new()
        .lexer_path(&lexer_path)
        .output_path(&lexer_out)
        .lrpar_config(move |ctp| {
            ctp.yacckind(cfgrammar::yacc::YaccKind::Original(
                cfgrammar::yacc::YaccOriginalActionKind::GenericParseTree,
            ))
            .error_on_conflicts(!allow_conflicts)
            .grammar_path(&parser_path)
            .output_path(&parser_out)
        })
        .build()
        .unwrap();
}