Source

hello / sql / json_lexer.mll

Full commit

{

open Json_parser
let debugprint = ref true;;
let print str =  if !debugprint then print_endline str;;

let quote_buf = String.create 8192;;
let quote_ptr = ref 0;;
let in_quote = ref false;;

}

let digit = ['0'-'9']*
let literal = ['a'-'z']['A'-'Z' 'a'-'z' '_' '0'-'9']*

rule token = parse
  | '{' { LBRACE }
  | '}' { RBRACE }
  | '[' { LBRACE2 }
  | ']' { RBRACE2 }
  | ':' { COLON }
  | ','     { COMMA }
  | "true"  { TRUE  }
  | "false" { FALSE }
  | "null"  { NULL  }
  | "\""      {
    in_quote := true;
    quote_ptr := 0;
    quote lexbuf;
    in_quote := false;
    QUOTE (String.sub quote_buf 0 (!quote_ptr))
  }
  | "\n"       { print "f"; token lexbuf }
  | digit as s { print ">>"; print s; INT(int_of_string s) }
(*  | eof	         { print "eof."; EOF } *)
  | _            { token lexbuf }
and quote = parse
  | "\""  { () }
  | _ as c {
    (* TODO: support Unicod!! *)
    String.set quote_buf (!quote_ptr) c;
    quote_ptr := (!quote_ptr) + 1;
    quote lexbuf
  }

{}