// Auto-generated from grammar/unified-grammar.toml
pub static KEYWORDS: &[(&str, &str)] = &[
    ("me", "ME"),
    ("from", "FROM"),
    ("loop", "LOOP"),
    ("box", "BOX"),
    ("local", "LOCAL"),
    ("peek", "PEEK"),
];
pub static OPERATORS_ADD_COERCION: &str = "string_priority";
pub static OPERATORS_SUB_COERCION: &str = "numeric_only";
pub static OPERATORS_MUL_COERCION: &str = "numeric_only";
pub static OPERATORS_DIV_COERCION: &str = "numeric_only";
pub static OPERATORS_ADD_RULES: &[(&str, &str, &str, &str)] = &[
    ("String", "String", "String", "concat"),
    ("String", "Integer", "String", "concat"),
    ("Integer", "String", "String", "concat"),
    ("String", "Bool", "String", "concat"),
    ("Bool", "String", "String", "concat"),
    ("String", "Other", "String", "concat"),
    ("Other", "String", "String", "concat"),
    ("Integer", "Integer", "Integer", "add_i64"),
    ("Float", "Float", "Float", "add_f64"),
];
pub static OPERATORS_SUB_RULES: &[(&str, &str, &str, &str)] = &[
    ("Integer", "Integer", "Integer", "sub_i64"),
    ("Float", "Float", "Float", "sub_f64"),
];
pub static OPERATORS_MUL_RULES: &[(&str, &str, &str, &str)] = &[
    ("Integer", "Integer", "Integer", "mul_i64"),
    ("Float", "Float", "Float", "mul_f64"),
];
pub static OPERATORS_DIV_RULES: &[(&str, &str, &str, &str)] = &[
    ("Integer", "Integer", "Integer", "div_i64"),
    ("Float", "Float", "Float", "div_f64"),
];
pub fn lookup_keyword(word: &str) -> Option<&'static str> {
    for (k, t) in KEYWORDS {
        if *k == word { return Some(*t); }
    }
    None
}

pub static SYNTAX_ALLOWED_STATEMENTS: &[&str] = &[
    "box",
    "global",
    "function",
    "static",
    "if",
    "loop",
    "break",
    "return",
    "print",
    "nowait",
    "include",
    "local",
    "outbox",
    "try",
    "throw",
    "using",
    "from",
];
pub static SYNTAX_ALLOWED_BINOPS: &[&str] = &[
    "add",
    "sub",
    "mul",
    "div",
    "and",
    "or",
    "eq",
    "ne",
];