let rec needs_semi = function
| [] -> true (* General base case *)
| RBRACE::[] -> false (* The end of bodies do not require semicolons *)
| SEMI::[] -> false (* A properly terminated line does not require an additional semicolon *)
| _::rest -> needs_semi rest