Синтаксическая ошибка OCaml в let..in

Я новичок в Ocaml и пытаюсь распечатать дерево AST, однако получаю синтаксическую ошибку в in функции mon_to_string. Примечание. Все используемые функции определены.

let rec print exp =
  let rec the_exp tree out = match tree with
    [] -> out

  and exp_to_string tree = match tree with
    | Ast.Expression.Identifier(x) -> print_identifier x
    | Ast.Expression.Literal(x) -> print_literal x
    | Ast.Expression.BinaryExp(x) -> print_bin_exp x
    | Ast.Expression.UnaryExp(x) -> print_unary_exp x
  in "<Expression>\n" ^ exp_to_string exp ^ "</Expression>\n"

  and mon_to_string tree = match tree with
    | Ast.Monitor.ExpressionGuard(x) -> print_exp_guard x
    | Ast.Monitor.QuantifiedGuard(x) -> print_quant_guard x
    | Ast.Monitor.Conditional(x) -> print_conditional x
    | Ast.Monitor.Evaluate(x) -> print_eval x
    | Ast.Monitor.Choice(x) -> print_choice x
  in "<Monitor>" ^ "\n" ^ mon_to_string exp ^ "</Monitor>\n"

person denbuttigieg    schedule 14.02.2018    source источник
comment
У вас не может быть двух in только с одним let. Какое выражение должен возвращать внешний print?   -  person Bergi    schedule 15.02.2018
comment
В вашем коде НЕТ синтаксической ошибки. Вы также должны опубликовать сообщение об ошибке.   -  person camlspotter    schedule 15.02.2018


Ответы (1)


Нет let, соответствующего последнему in.

Правильный синтаксис выглядит следующим образом:

let rec v1 = exp1
and v2 = exp2
and v3 = exp3
in exp4

У тебя есть:

let rec v1 = exp1
and v2 = exp2
in exp3
and v3 = exp4
in exp5
person Jeffrey Scofield    schedule 14.02.2018