I am experimenting with writing a toy compiler in ocaml. Currently, I am trying to implement the [offside rule](http://en.wikipedia.org/wiki/Off-side_rule) for my lexer. However, I am having some trouble with the ocaml syntax (the compiler errors are extremely un-informative). The code below (33 lines of it) causes an error on line 34, beyond the end of the source code. I am unsure what is causing 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 work out what the error is caused by and help me on my way to fixing it?