Я экспериментирую с написанием игрушечного компилятора в ocaml. В настоящее время я пытаюсь реализовать правило офсайда для моего лексера. Однако у меня возникли некоторые проблемы с синтаксисом ocaml (ошибки компилятора крайне неинформативны). Приведенный ниже код (его 33 строки) вызывает ошибку в строке 34 за концом исходного кода. Я не уверен, что является причиной этой ошибки.
open Printf
let s = (Stack.create():int Stack.t);
let rec check x =
(
if Stack.is_empty s then
Stack.push x s
else if Stack.top s < x then
(
Stack.push x s;
printf "INDENT\n";
)
else if Stack.top s > x then
(
printf "DEDENT\n";
Stack.pop s;
check x;
)
else
printf "MATCHED\n";
);
let main () =
(
check 0;
check 4;
check 6;
check 8;
check 5;
);
let _ = Printexc.print main ()
Выход Ocaml:
File "lexer.ml", line 34, characters 0-0:
Error: Syntax error
Может ли кто-нибудь помочь мне разобраться, чем вызвана ошибка, и помочь мне на пути ее устранения?