--- /dev/null
+
+type token =
+ A | B | C of int | EOF
+;;
+
+%%
+
+%token A
+%token B
+%token <> C
+%token EOF
+
+%%
+
+r():
+ one:s()
+ {{ }}
+ b:B
+ two:B?
+ three:s()
+ {{ prerr_endline ("Result: " ^ string_of_int three) }}
+? {{ prerr_endline ("ERROR: " ^ !yy_position) }}
+
+s():
+ A
+ {{ }}
+ {{ prerr_endline "A"; 0 }}
+| B
+ {{ }}
+ {{ prerr_endline "B"; 0 }}
+| n:C
+ {{ }}
+ {{ prerr_endline ("C: " ^ string_of_int n); n }}
+%%
+
+let input = ref [ A; B; B; B; C 5; EOF ] in
+let current() = List.hd !input in
+let next_token () =
+ prerr_endline "get_next";
+ input := List.tl !input;
+ List.hd !input
+in
+parse_r current next_token
+;;
+