1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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)