Mise à jour terminée. Pour connaître les apports de la version 13.8.4 par rapport à notre ancienne version vous pouvez lire les "Release Notes" suivantes :
https://about.gitlab.com/releases/2021/02/11/security-release-gitlab-13-8-4-released/
https://about.gitlab.com/releases/2021/02/05/gitlab-13-8-3-released/

driver_lexer.mll 3.88 KB
Newer Older
1 2 3
(**************************************************************************)
(*                                                                        *)
(*  Copyright (C) 2010-                                                   *)
MARCHE Claude's avatar
MARCHE Claude committed
4 5 6
(*    François Bobot                                                     *)
(*    Jean-Christophe Filliâtre                                          *)
(*    Claude Marché                                                      *)
7 8 9 10 11 12 13 14 15 16 17 18 19 20
(*    Andrei Paskevich                                                    *)
(*                                                                        *)
(*  This software is free software; you can redistribute it and/or        *)
(*  modify it under the terms of the GNU Library General Public           *)
(*  License version 2.1, with the special exception on linking            *)
(*  described in file LICENSE.                                            *)
(*                                                                        *)
(*  This software is distributed in the hope that it will be useful,      *)
(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                  *)
(*                                                                        *)
(**************************************************************************)

{
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
21
  open Format
22 23
  open Lexing
  open Driver_parser
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
24
  open Lexer
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
25

26 27 28 29 30 31
  exception IllegalCharacter of char

  let () = Exn_printer.register (fun fmt e -> match e with
    | IllegalCharacter c -> fprintf fmt "illegal character %c" c
    | _ -> raise e)

Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
32
  let keywords = Hashtbl.create 97
33 34
  let () =
    List.iter
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
35 36 37 38 39
      (fun (x,y) -> Hashtbl.add keywords x y)
      [ "theory", THEORY;
	"end", END;
	"syntax", SYNTAX;
	"remove", REMOVE;
40
	"meta", META;
41
	"cloned", CLONED;
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
42 43 44 45
	"prelude", PRELUDE;
	"printer", PRINTER;
	"valid", VALID;
	"invalid", INVALID;
46
        "timeout", TIMEOUT;
47
        "time",    TIME;
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
48 49
	"unknown", UNKNOWN;
	"fail", FAIL;
50 51 52
        "logic", LOGIC;
        "type", TYPE;
        "prop", PROP;
53
        "filename", FILENAME;
54
        "transformation", TRANSFORM;
55
        "plugin", PLUGIN
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
56 57
      ]

58 59
}

Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
60 61 62 63 64
let space = [' ' '\t' '\r']
let alpha = ['a'-'z' 'A'-'Z' '_']
let digit = ['0'-'9']
let ident = alpha (alpha | digit | '\'')*

65 66 67
let op_char = ['=' '<' '>' '~' '+' '-' '*' '/' '%'
               '!' '$' '&' '?' '@' '^' '.' ':' '|' '#']

68
rule token = parse
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
69 70
  | '\n'
      { newline lexbuf; token lexbuf }
71
  | space+
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
72
      { token lexbuf }
73 74
  | "(*)"
      { LEFTPAR_STAR_RIGHTPAR }
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
75 76
  | "(*"
      { comment lexbuf; token lexbuf }
77
  | '_'
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
78 79 80
      { UNDERSCORE }
  | ident as id
      { try Hashtbl.find keywords id with Not_found -> IDENT id }
81 82
  | digit+ as i
      { INTEGER (int_of_string i) }
83 84 85 86 87 88
  | "<-"
      { LARROW }
  | "["
      { LEFTSQ }
  | "]"
      { RIGHTSQ }
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
89 90 91 92 93 94
  | "("
      { LEFTPAR }
  | ")"
      { RIGHTPAR }
  | "."
      { DOT }
95 96 97 98
  | ","
      { COMMA }
  | op_char+ as op
      { OPERATOR op }
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
99
  | "\""
Jean-Christophe Filliâtre's avatar
Jean-Christophe Filliâtre committed
100
      { STRING (string lexbuf) }
101 102
  | "import" space*  "\""
      { INPUT (string lexbuf) }
103
  | eof
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
104 105
      { EOF }
  | _ as c
106
      { raise (IllegalCharacter c) }
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
107 108

{
109
  let loc lb = Loc.extract (lexeme_start_p lb, lexeme_end_p lb)
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
110 111 112 113

  let with_location f lb =
    try f lb with e -> raise (Loc.Located (loc lb, e))

114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
  let parse_file input_lexbuf lexbuf =
    let s = Stack.create () in
    Stack.push lexbuf s;
    let rec multifile lex_dumb =
      let lexbuf = Stack.top s in
      let tok = token lexbuf in
      Loc.transfer_loc lexbuf lex_dumb;
      match tok with
        | INPUT filename ->
          Stack.push (input_lexbuf filename) s;
          multifile lex_dumb
        | EOF -> ignore (Stack.pop s);
          if Stack.is_empty s then EOF else multifile lex_dumb
        | _ -> tok in
    let lex_dumb = Lexing.from_function (fun _ _ -> assert false) in
    Loc.transfer_loc lexbuf lex_dumb;
    with_location (Driver_parser.file multifile) lex_dumb
Jean-Christophe Filliâtre's avatar
drivers  
Jean-Christophe Filliâtre committed
131
}