package sqlgg

  1. Overview
  2. Docs
SQL Guided (code) Generator

Install

Dune Dependency

Authors

Maintainers

Sources

sqlgg-20200521.tar.gz
md5=b9e861726ce73364e303f0cc1d5ec049
sha256=b9bfd29dc5c880c324ed77ec333053317fd0806f5a64b573b5031ee7fc227deb
sha512=5f73a65b5cf5c17788a75f64b3def21a9d8e53b32a876a4fee4570317a20b48ca69879e9dadaa399d7e57f2e9d262850650bcb031fd90f6bf21abdf8d99ce1a6

doc/src/sqlgg.lib/parser_utils.ml.html

Source file parser_utils.ml

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
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
OCaml

Innovation. Community. Security.