]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/pxp/pxp/m2parsergen/x.m2y
Initial revision
[helm.git] / helm / DEVEL / pxp / pxp / m2parsergen / x.m2y
diff --git a/helm/DEVEL/pxp/pxp/m2parsergen/x.m2y b/helm/DEVEL/pxp/pxp/m2parsergen/x.m2y
new file mode 100644 (file)
index 0000000..3fa80b0
--- /dev/null
@@ -0,0 +1,45 @@
+
+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
+;;
+