(* An interpreter for arithmetic expressions *) exception Error of string datatype Token = INT of int | PLUS | TIMES | LPAREN | RPAREN fun parseE (INT i :: ts) k = parseE' ts k | parseE (LPAREN :: ts) k = parseE ts (fn (RPAREN :: ts) => parseE' ts k | _ => raise Error ") expected") and parseE' (PLUS :: ts) k = parseE ts k | parseE' (TIMES :: ts) k = parseE ts k | parseE' ts k = k ts val R = parseE ([INT 5, PLUS, INT 10, TIMES, LPAREN, INT 199, PLUS, INT 1, RPAREN]) (fn [] => () | _ => raise Error "expected EOF found something else");