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("(<<)")