?root: lines lines: (number | ratio | monzo | operation)+ ?number: float | int | random_int | random_float random_int: "(" int "," int ")" random_float: "(" float "," float ")" float: /(-?[0-9]+\.[0-9]*)|(\.[0-9]+)/ int: /-?[0-9]+/ ?ratio: frac_ratio | edo_ratio | edji_ratio | decimal_ratio frac_ratio: (int | random_int) "/" (int | random_int) edo_ratio: (int | random_int) "\\" (int | random_int) edji_ratio: (int | random_int) "\\" (int | random_int) "<" (int | random_int) "/"? (int | random_int)? ">" decimal_ratio: int "," int monzo: "[" int+ ">" operation: (number | ratio | monzo) (operator ((number | ratio | monzo) | sub_operations | operation))+ !operator: "+" | "-" | "*" | "%" | "&" | "|" | "<<" | ">>" sub_operations: "(" operation ")" %import common.WS %ignore WS