File: quickChickToolLexer.mll

package info (click to toggle)
coq-quickchick 2.1.1-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 2,432 kB
  • sloc: ml: 4,367; ansic: 789; makefile: 388; sh: 27; python: 4; lisp: 2; perl: 2
file content (58 lines) | stat: -rw-r--r-- 2,591 bytes parent folder | download | duplicates (5)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
{
open QuickChickToolParser

(* Function to increase line count in lexbuf *)
let line_incs s lexbuf =
(*  Printf.printf "Read: %s\n" s; *)
  let splits = String.split_on_char '\n' s in
  let pos = lexbuf.Lexing.lex_curr_p in
(* Printf.printf "Was in line %d, position %d\n" pos.pos_lnum (pos.pos_cnum - pos.pos_bol); *)
  lexbuf.Lexing.lex_curr_p <- {
    pos with 
      Lexing.pos_lnum = pos.Lexing.pos_lnum + (List.length splits - 1);
      Lexing.pos_bol = if List.length splits > 1 then pos.Lexing.pos_cnum - (String.length (List.hd (List.rev splits))) else pos.Lexing.pos_bol
  }

let python_comment_bit = ref false
}

let white    = [' ' '\t' '\r' '\n']
let nonwhite = [^ ' ' '\t' '\r' '\n']


(* Main Parsing match *)
rule lexer = parse
    
(* OCaml-style comments... *)
  | (white* "(*!" white* "Section" as s)    { line_incs s lexbuf; T_StartSection s }
  | (white* "(*!" white* "extends" as s)    { line_incs s lexbuf; T_Extends s }
  | (white* "(*!" white* "QuickChick" as s) { line_incs s lexbuf; T_StartQuickChick s }
  | (white* "(*!" white* "QuickCheck" as s) { line_incs s lexbuf; T_StartQuickCheck s }

  | (white* "(*!!" as s)                    { line_incs s lexbuf; T_StartMutTag s }
  | (white* "(*!" white* "*)" as s)         { line_incs s lexbuf; T_StartMutants s }
  | (white* "(*!" as s)                     { line_incs s lexbuf; T_StartMutant s }
  | (white* "(*"  as s)                     { line_incs s lexbuf; T_StartComment s }

  | (white* "*)" as s)                      { line_incs s lexbuf; T_EndComment s }

(* C-style comments... *)
  | (white* "/*!" white* "Section" as s)    { line_incs s lexbuf; T_StartSection s }
  | (white* "/*!" white* "extends" as s)    { line_incs s lexbuf; T_Extends s }
  | (white* "/*!" white* "QuickChick" as s) { line_incs s lexbuf; T_StartQuickChick s }
  | (white* "/*!" white* "QuickCheck" as s) { line_incs s lexbuf; T_StartQuickCheck s }

  | (white* "/*!!" as s)                    { line_incs s lexbuf; T_StartMutTag s }
  | (white* "/*!" white* "*/" as s)         { line_incs s lexbuf; T_StartMutants s }
  | (white* "/*!" as s)                     { line_incs s lexbuf; T_StartMutant s }
  | (white* "/*"  as s)                     { line_incs s lexbuf; T_StartComment s }

  | (white* "*/" as s)                      { line_incs s lexbuf; T_EndComment s }

(* Other *)
  | (white* as s) (nonwhite as c)           { line_incs (s^(String.make 1 c)) lexbuf; 
                                              T_Char (s^(String.make 1 c)) }
  | (white* as s) eof                       { line_incs s lexbuf; T_Eof s }