package lrgrep

  1. Overview
  2. Docs
Detailed error messages for Menhir-generated parsers

Install

dune-project
 Dependency

Authors

Maintainers

Sources

lrgrep-0.9.tbz
sha256=e53de12e4c5cbe6bca00643593266b4f9fa2e3f6a138195eeff7a4329f5c1c75
sha512=7fd7c4d11506fea7cc11c9bbf5aea9142d905643553c0c90e1bb16b794106b0c14a266acf89ae91b6929008dc0ba6515f788642873e2e4ba6c3d49bd45d25127

doc/src/utils/usage.ml.html

Source file usage.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
39
40
41
42
type mark = {
  mutable used: bool;
}

let new_mark () = { used = false }

let is_used t = t.used

let is_unused t = not (is_used t)

let cmon_mark _ = Cmon.constant "<Usage.mark>"

type set =
  | Empty
  | Leaf of mark
  | Join of {s1: set; s2: set; mutable used: bool}

let empty = Empty

let is_empty = function
  | Empty -> true
  | _ -> false

let singleton mark = Leaf mark

let join s1 s2 =
  if s1 == s2 then s1 else
    match s1, s2 with
    | Empty, s
    | s, Empty -> s
    | _ -> Join {s1; s2; used=false}

let rec mark_used = function
  | Empty -> ()
  | Leaf m -> m.used <- true
  | Join j when j.used -> ()
  | Join j ->
    j.used <- true;
    mark_used j.s1;
    mark_used j.s2

let cmon_set _ = Cmon.constant "<Usage.set>"