summaryrefslogtreecommitdiff
path: root/src/sail_lib.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/sail_lib.ml')
-rw-r--r--src/sail_lib.ml33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/sail_lib.ml b/src/sail_lib.ml
new file mode 100644
index 00000000..a0ef6a06
--- /dev/null
+++ b/src/sail_lib.ml
@@ -0,0 +1,33 @@
+(** A Sail library *)
+
+(* This library is not well-thought. It has grown driven by the need to
+ * reuse some components of Sail in the Power XML extraction tool. It
+ * should by no means by considered stable (hence the lack of mli
+ * interface file), and is not intended for general consumption. Use at
+ * your own risks. *)
+
+module Pretty = Pretty_print
+
+let parse_exp s =
+ let lexbuf = Lexing.from_string s in
+ try
+ let pre_exp = Parser.exp Lexer.token lexbuf in
+ Initial_check.to_ast_exp Type_internal.initial_kind_env pre_exp
+ with
+ | Parsing.Parse_error ->
+ let pos = Lexing.lexeme_start_p lexbuf in
+ let msg = Printf.sprintf "syntax error on character %d" pos.Lexing.pos_cnum in
+ failwith msg
+ | Parse_ast.Parse_error_locn(l,m) ->
+ let loc = match l with
+ | Parse_ast.Unknown -> "???"
+ | Parse_ast.Range(p1,p2) -> Printf.sprintf "%d:%d" p1.Lexing.pos_cnum p2.Lexing.pos_cnum
+ | Parse_ast.Int(s,_) -> Printf.sprintf "code generated by: %s" s in
+ let msg = Printf.sprintf "syntax error: %s %s" loc m in
+ failwith msg
+ | Lexer.LexError(s,p) ->
+ let msg = Printf.sprintf "lexing error: %s %d" s p.Lexing.pos_cnum in
+ failwith msg
+
+
+