package lrgrep

  1. Overview
  2. Docs
Analyse the stack of a Menhir-generated LR parser using regular expressions

Install

dune-project
 Dependency

Authors

Maintainers

Sources

lrgrep-0.3.tbz
sha256=84a1874d0c063da371e19c84243aac7c40bfcb9aaf204251e0eb0d1f077f2cde
sha512=5a16ff42a196fd741bc64a1bdd45b4dca0098633e73aa665829a44625ec15382891c3643fa210dbe3704336eab095d4024e093e37ae5313810f6754de6119d55

doc/src/utils/boolvector.ml.html

Source file boolvector.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
open Fix.Indexing

type 'n t = bytes

let make c default =
  let n = cardinal c in
  Bytes.make ((n + 7) lsr 3) (if default then '\xFF' else '\x00')

let test b n =
  let n = (n : _ index :> int) in
  let cell = n lsr 3 in
  let bit = n land 7 in
  Char.code (Bytes.unsafe_get b cell) land (1 lsl bit) <> 0

let set b n =
  let n = (n : _ index :> int) in
  let cell = n lsr 3 in
  let bit = n land 7 in
  Bytes.unsafe_set b cell
    (Char.unsafe_chr (Char.code (Bytes.unsafe_get b cell) lor (1 lsl bit)))

let clear b n =
  let n = (n : _ index :> int) in
  let cell = n lsr 3 in
  let bit = n land 7 in
  Bytes.unsafe_set b cell
    (Char.unsafe_chr (Char.code (Bytes.unsafe_get b cell) land lnot (1 lsl bit)))

let init c f =
  let result = make c false in
  Index.iter c (fun i -> if f i then set result i);
  result

let from_vector vec f =
  let n = Vector.length vec in
  let result = make n false in
  Index.iter n (fun i -> if f (Vector.get vec i) then set result i);
  result