method term_operator = function
    | I_add | R_add -> Assoc("0","+")
    | I_mul | R_mul -> Assoc("1","*")
    | I_div -> Infix("div")
    | I_mod -> Infix("mod")
    | I_sub | R_sub -> Infix("-")
    | R_div -> Infix("/")
    | I_opp | R_opp -> Prefix("-")
    | I_of_R -> Prefix("(int)")
    | R_of_I -> Prefix("")
    | TERM.L_eq -> Infix("=")
    | TERM.L_neq -> Infix("<>")
    | TERM.I_lt | TERM.R_lt -> Infix("<")
    | TERM.I_leq | TERM.R_leq -> Infix("<=")
    | B_not -> Prefix("!")
    | B_and -> Assoc("true","&&")
    | B_or -> Assoc("false","||")
    | I_bnot -> Prefix("~")
    | I_band -> Infix("(&)")
    | I_bor  -> Infix("(|)")
    | I_bxor -> Infix("(+)")
    | I_lsl  -> Infix("(>>)")
    | I_lsr  -> Infix("(<<)")