Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
parser_utils.ml1 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 35 36 37 38(* Simple wrapper tying together parser and lexer *) module type Parser_type = sig type token type result val input : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> result val rule : Lexing.lexbuf -> token end exception Error of exn * (int * int * string * string) module Make(T : Parser_type) = struct let parse_buf_exn lexbuf = try T.input T.rule lexbuf with exn -> begin let curr = lexbuf.Lexing.lex_curr_p in let line = curr.Lexing.pos_lnum in let cnum = curr.Lexing.pos_cnum - curr.Lexing.pos_bol in let tok = Lexing.lexeme lexbuf in let tail = Sql_lexer.ruleTail "" lexbuf in raise (Error (exn,(line,cnum,tok,tail))) end let parse_buf lexbuf = try Some (parse_buf_exn lexbuf) with _ -> None let parse_stdin () = parse_buf (Lexing.from_channel stdin) let parse_string str = (*Error.log "Parsing : %s" str; *) parse_buf (Lexing.from_string str) let parse_file filename = let contents = try Std.input_file filename with _ -> "" in parse_string contents end