I am experimenting with writing a toy compiler in ocaml. I am currently trying to follow the offside rule for my lexer. However, I am having some problems with ocaml syntax (compiler errors are extremely uninformative). The code below (33 lines) causes an error on line 34, outside the source code. I am not sure what causes this error.
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 Output:
File "lexer.ml", line 34, characters 0-0:
Error: Syntax error
Can someone help me figure out what is causing the error and help me on the way to fixing it?
a_m0d source
share