| type 'a start = |
| | Module : (Script.var option * Script.definition) start |
| | Script : Script.script start |
| | Script1 : Script.script start |
| |
| exception Syntax = Script.Syntax |
| |
| let parse' name lexbuf start = |
| lexbuf.Lexing.lex_curr_p <- |
| {lexbuf.Lexing.lex_curr_p with Lexing.pos_fname = name}; |
| try start Lexer.token lexbuf |
| with Syntax (region, s) -> |
| let region' = if region <> Source.no_region then region else |
| {Source.left = Lexer.convert_pos lexbuf.Lexing.lex_start_p; |
| Source.right = Lexer.convert_pos lexbuf.Lexing.lex_curr_p} in |
| raise (Syntax (region', s)) |
| |
| let parse (type a) name lexbuf : a start -> a = function |
| | Module -> parse' name lexbuf Parser.module1 |
| | Script -> parse' name lexbuf Parser.script |
| | Script1 -> parse' name lexbuf Parser.script1 |
| |
| let string_to start s = |
| let lexbuf = Lexing.from_string s in |
| parse "string" lexbuf start |
| |
| let string_to_script s = string_to Script s |
| let string_to_module s = snd (string_to Module s) |