It is very convenient to solve task ONP using streams:
type expr =
Atom of char
| Par of expr
| Op of char * expr * expr
let rec parse = parser
[< ''('; r = parse_op; '')' >] -> Par r
| [< 'ch >] -> Atom ch
and parse_op = parser
[< l = parse; 'op; r = parse >] -> Op (op, l, r)
let rec output_rpn = function
Atom ch -> print_char ch
| Par expr -> output_rpn expr
| Op (op, e1, e2) -> output_rpn e1; output_rpn e2; print_char op
let n = int_of_string (input_line stdin) in
for i = 1 to n do
output_rpn (parse (Stream.of_string (input_line stdin))) ;
print_newline ()
done ;;
But I have got compile error (syntax error). Command to compile it: ocamlopt -pp "camlp4o" task.ml.
created
last reply
- 3
replies
- 1.2k
views
- 4
users