package lrgrep
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
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/setSig.ml.html
Source file setSig.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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513(******************************************************************************) (* *) (* Mulnir *) (* *) (* Frédéric Bour, Tarides *) (* *) (* Menhir *) (* *) (* François Pottier, Inria Paris *) (* Yann Régis-Gianas, PPS, Université Paris Diderot *) (* *) (* Copyright Inria. All rights reserved. This file is distributed under the *) (* terms of the GNU General Public License version 2, as described in the *) (* file LICENSE. *) (* *) (******************************************************************************) module type S1 = sig (* Elements are assumed to have a natural total order. *) type 'a element (* Sets. *) type 'a t (* The empty set. *) val empty: 'a t (* [is_empty s] tells whether [s] is the empty set. *) val is_empty: 'a t -> bool val is_not_empty: 'a t -> bool (* [singleton x] returns a singleton set containing [x] as its only element. *) val singleton: 'a element -> 'a t (* [is_singleton s] tests whether [s] is a singleton set. *) val is_singleton: 'a t -> bool (* [cardinal s] returns the cardinal of [s]. *) val cardinal: 'a t -> int (* [choose s] returns an arbitrarily chosen element of [s], if [s] is nonempty, and raises [Not_found] otherwise. *) val choose: 'a t -> 'a element (** [minimum s] returns [Some x] where [x] is the smallest element of [s], or [None] if [s] is empty. *) val minimum: 'a t -> 'a element option (** [maximum s] returns [Some x] where [x] is the largest element of [s], or [None] if [s] is empty. *) val maximum: 'a t -> 'a element option (* [mem x s] returns [true] if and only if [x] appears in the set [s]. *) val mem: 'a element -> 'a t -> bool (* [add x s] returns a set whose elements are all elements of [s], plus [x]. If [x] was already in [s], [s] is returned unchanged. *) val add: 'a element -> 'a t -> 'a t (* [remove x s] returns a set whose elements are all elements of [s], except [x]. If [x] was not in [s], [s] is returned unchanged. *) val remove: 'a element -> 'a t -> 'a t (* [union s1 s2] returns the union of the sets [s1] and [s2]. *) val union: 'a t -> 'a t -> 'a t (* [inter s t] returns the set intersection of [s] and [t], that is, $s\cap t$. *) val inter: 'a t -> 'a t -> 'a t (* [disjoint s1 s2] returns [true] if and only if the sets [s1] and [s2] are disjoint, i.e. iff their intersection is empty. *) val disjoint: 'a t -> 'a t -> bool (* [iter f s] invokes [f x], in turn, for each element [x] of the set [s]. Elements are presented to [f] in increasing order. *) val iter: ('a element -> unit) -> 'a t -> unit val iteri: (int -> 'a element -> unit) -> 'a t -> unit val rev_iter: ('a element -> unit) -> 'a t -> unit (* [fold f s seed] invokes [f x accu], in turn, for each element [x] of the set [s]. Elements are presented to [f] in increasing order. The initial value of [accu] is [seed]; then, at each new call, its value is the value returned by the previous invocation of [f]. The value returned by [fold] is the final value of [accu]. In other words, if $s = \{ x_1, x_2, \ldots, x_n \}$, where $x_1 < x_2 < \ldots < x_n$, then [fold f s seed] computes $([f]\,x_n\,\ldots\,([f]\,x_2\,([f]\,x_1\,[seed]))\ldots)$. *) val fold: ('a element -> 'b -> 'b) -> 'a t -> 'b -> 'b (** [fold_right f acc x] computes [f acc x] for each element [x] of [s], in descending order. The initial value of [acc] is [seed]; the final value is the returned value. *) val fold_right: ('a -> 'b element -> 'a) -> 'a -> 'b t -> 'a (** [map f s] returns the set whose elements are [f x] for each [x] in [s]. *) val map: ('a element -> 'b element) -> 'a t -> 'b t (** [exists f s] returns [true] if [f x] is true for at least one element [x] in [s]. *) val exists: ('a element -> bool) -> 'a t -> bool (** [for_all f s] returns [true] if [f x] is true for all elements [x] in [s]. *) val for_all: ('a element -> bool) -> 'a t -> bool (* [elements s] is a list of all elements in the set [s]. *) val elements: 'a t -> 'a element list (* [compare] is an ordering over sets. *) val compare: 'a t -> 'a t -> int (* [equal] implements equality over sets. *) val equal: 'a t -> 'a t -> bool (* [subset s1 s2] returns [true] iff [s1 ⊆ s2]. *) val subset: 'a t -> 'a t -> bool (* [quick_subset s1 s2] is a fast test for the set inclusion [s1 ⊆ s2]. The sets [s1] and [s2] must be nonempty. It must be known ahead of time that either [s1] is a subset of [s2] or these sets are disjoint: that is, [s1 ⊆ s2 ⋁ s1 ∩ s2 = ∅] must hold. Under this hypothesis, [quick_subset s1 s2] can be implemented simply by picking an arbitrary element of [s1] (if there is one) and testing whether it is a member of [s2]. *) val quick_subset: 'a t -> 'a t -> bool (** [diff s1 s2] returns the set of elements that are in [s1] but not in [s2]. *) val diff : 'a t -> 'a t -> 'a t (** {1 Decomposing sets} These functions implement the [Refine.DECOMPOSABLE] interface. We cannot reference it here as [Refine] is implemented using bitsets, that would create a reference cycle. *) (** [compare_minimum s1 s2] compares two sets by their least elements. Returns a negative number if the least element of [s1] is smaller, a positive number if the least element of [s2] is smaller, or zero if both sets are empty or have equal least elements. *) val compare_minimum : 'a t -> 'a t -> int (** [extract_unique_prefix s1 s2] splits [s1] into two sets: - The first set contains elements strictly smaller than all elements of [s2] - The second set contains the remaining elements of [s1] {b Raises} if [s2] is empty. *) val extract_unique_prefix : 'a t -> 'a t -> 'a t * 'a t (** [extract_shared_prefix s1 s2] decomposes [s1] and [s2] into: - A common prefix (elements present in both [s1] and [s2]) - The remaining parts of [s1] and [s2] {b Returns} [(common, (rest1, rest2))] where: - [common] contains elements that are part of both [s1] and [s2] - [s1 = common U rest1] and [s2 = common U rest2] *) (** [sorted_union s] computes the union of an ordered list of sets. This is an optimized special case of [union] that assumes the list is already sorted by the set order. *) val sorted_union : 'a t list -> 'a t (** [of_list xs] creates a set from a list of elements. *) val of_list : 'a element list -> 'a t (** [init_interval i j] creates a set containing all integers from [i] to [j]. The behavior is undefined if [i > j]. *) val init_interval : 'a element -> 'a element -> 'a t (** [init_subset i j f] creates a set containing all elements [x] such that [i ≤ x ≤ j] and [f x] returns [true]. *) val init_subset : 'a element -> 'a element -> ('a element -> bool) -> 'a t (** [filter f s] returns the set of elements [x] in [s] such that [f x] returns [true]. *) val filter : ('a element -> bool) -> 'a t -> 'a t (** [filter_map f s] returns the set of elements [y] such that [f x = Some y] for some element [x] in [s]. *) val filter_map : ('a element -> 'b element option) -> 'a t -> 'b t (** [split x s] returns [(s1, found, s2)] where: - [s1] contains all elements strictly smaller than [x] - [s2] contains all elements strictly larger than [x] - [found] is [true] if [x] is in [s] - [s = s1 U {x} U s2] if [found] is [true] *) val split: 'a element -> 'a t -> 'a t * bool * 'a t (** [find f s] returns the first element [x] in [s] such that [f x] is true. Raises [Not_found] if no such element exists. *) val find : ('a element -> bool) -> 'a t -> 'a element (** [find_map f s] returns [Some y] where [y] is the first element such that [f x = Some y] for some [x] in [s], or [None] if no such element exists. *) val find_map : ('a element -> 'b option) -> 'a t -> 'b option (** [to_seq s] returns a sequence of all elements in [s] in ascending order. *) val to_seq : 'a t -> 'a element Seq.t (** [bind m f] returns the union of [f x] for all elements [x] in [m]. *) val bind : 'a t -> ('a element -> 'b t) -> 'b t (** Split a set into consecutive "runs" of elements that share the same class. {b Parameters} - [cls : 'a element → 'b element] that assigns a class to each element. - [xs : 'a t] – the input set to be split. {b Returns} A list of pairs. Each pair is made of a class (the result of [cls] for the run) and the subset of the original elements that belong to that run (preserving the original order). *) val split_by_run : ('a element -> 'b element) -> 'a t -> ('b element * 'a t) list (** [fused_inter_union s1 s2 ~acc] returns [union (inter s1 s2) acc]. This is an optimized version that computes the intersection and union in a single pass. *) val fused_inter_union : 'a t -> 'a t -> acc:'a t -> 'a t (** [rev_map_elements s f] returns a list of [f x] for all elements [x] in [s], built from the highest to the lowest element. *) val rev_map_elements: 'a t -> ('a element -> 'b) -> 'b list (** [map_to_array s f] returns an array of [f x] for all elements [x] in [s]. *) val map_to_array : 'a t -> ('a element -> 'b) -> 'b array (** [rank x s] returns the number of elements strictly smaller than [x] in the set [s]. *) val rank : 'a element -> 'a t -> int end module type S0 = sig type element type t include S1 with type 'a element := element and type 'a t := t end module type StdSetS1 = sig type 'a elt type 'a t val empty: 'a t val is_empty: 'a t -> bool val mem: 'a elt -> 'a t -> bool val add: 'a elt -> 'a t -> 'a t val singleton: 'a elt -> 'a t val remove: 'a elt -> 'a t -> 'a t val union: 'a t -> 'a t -> 'a t val inter: 'a t -> 'a t -> 'a t val disjoint: 'a t -> 'a t -> bool val diff: 'a t -> 'a t -> 'a t val compare: 'a t -> 'a t -> int val equal: 'a t -> 'a t -> bool val subset: 'a t -> 'a t -> bool val iter: ('a elt -> unit) -> 'a t -> unit val map: ('a elt -> 'b elt) -> 'a t -> 'b t val fold: ('a elt -> 'b -> 'b) -> 'a t -> 'b -> 'b val for_all: ('a elt -> bool) -> 'a t -> bool val exists: ('a elt -> bool) -> 'a t -> bool val filter: ('a elt -> bool) -> 'a t -> 'a t val filter_map: ('a elt -> 'b elt option) -> 'a t -> 'b t val partition: ('a elt -> bool) -> 'a t -> 'a t * 'a t val cardinal: 'a t -> int val elements: 'a t -> 'a elt list val min_elt: 'a t -> 'a elt val min_elt_opt: 'a t -> 'a elt option val max_elt: 'a t -> 'a elt val max_elt_opt: 'a t -> 'a elt option val choose: 'a t -> 'a elt val choose_opt: 'a t -> 'a elt option val split: 'a elt -> 'a t -> 'a t * bool * 'a t val find: 'a elt -> 'a t -> 'a elt val find_opt: 'a elt -> 'a t -> 'a elt option val find_first: ('a elt -> bool) -> 'a t -> 'a elt val find_first_opt: ('a elt -> bool) -> 'a t -> 'a elt option val find_last: ('a elt -> bool) -> 'a t -> 'a elt val find_last_opt: ('a elt -> bool) -> 'a t -> 'a elt option val of_list: 'a elt list -> 'a t val to_seq_from : 'a elt -> 'a t -> 'a elt Seq.t val to_seq : 'a t -> 'a elt Seq.t val to_rev_seq : 'a t -> 'a elt Seq.t val add_seq : 'a elt Seq.t -> 'a t -> 'a t val of_seq : 'a elt Seq.t -> 'a t end module type StdMapS1 = sig (** {1 StdMapS1} This signature provides a parameterized version of the standard library's {!StdMap.S} signature. It is lifted to work with parameterized keys ['n key] instead of ground ones [key]. {b Note.} The type [('n, 'a) t] represents a map indexed by keys parameterized by ['n] and carrying values of type ['a]. This is a direct adaptation of the standard library's {!StdMap.S} signature, generalized to support parameterized keys. @see [StdMap.S] (standard library) for the original signature upon which this is based. *) type 'n key type ('n, 'a) t (** {2 Basic operations} *) (** [empty] is the empty map. *) val empty: ('n, 'a) t (** [is_empty m] returns [true] if [m] is the empty map. *) val is_empty: ('n, 'a) t -> bool (** [mem k m] returns [true] if key [k] is bound in map [m]. *) val mem: 'n key -> ('n, 'a) t -> bool (** [add k d m] returns a map that is the extension of [m] with binding [k ↦ d]. If [k] was already bound in [m], the old binding is replaced by the new one. *) val add: 'n key -> 'a -> ('n, 'a) t -> ('n, 'a) t (** [update k f m] returns a map same as [m], except that the binding for [k] is modified by [f]. If the binding for [k] is present in [m], [f] is called with the current value, otherwise [f] is called with [None]. The result of [f] determines the binding state for [k] in the resulting map. *) val update: 'n key -> ('a option -> 'a option) -> ('n, 'a) t -> ('n, 'a) t (** [singleton k d] returns a map containing the single binding [k ↦ d]. *) val singleton: 'n key -> 'a -> ('n, 'a) t (** [remove m k] returns a map containing the same bindings as [m], except that [k] is unbound in the result. *) val remove: 'n key -> ('n, 'a) t -> ('n, 'a) t (** [merge f m1 m2] returns a map with the same bindings as [m1] and [m2], except that bindings that appear in both maps are combined using [f]. Specifically, for each key [k], if [k] is bound in [m1] to [a1] and in [m2] to [a2], then [k] is bound in the result to [f k a1 a2]. *) val merge: ('n key -> 'a option -> 'b option -> 'c option) -> ('n, 'a) t -> ('n, 'b) t -> ('n, 'c) t (** [union f m1 m2] is an alias for [merge] with the union combinator. *) val union: ('n key -> 'a -> 'a -> 'a option) -> ('n, 'a) t -> ('n, 'a) t -> ('n, 'a) t (** {2 Comparisons} *) (** [compare cmp m1 m2] compares the two maps [m1] and [m2] using [cmp] to compare values. Returns a negative number if [m1] is strictly smaller than [m2], a positive number if [m1] is strictly greater than [m2], or zero if they are equal. *) val compare: ('a -> 'a -> int) -> ('n, 'a) t -> ('n, 'a) t -> int (** [equal eq m1 m2] returns [true] if the two maps are equal up to [eq], which compares values. *) val equal: ('a -> 'a -> bool) -> ('n, 'a) t -> ('n, 'a) t -> bool (** {2 Iteration} *) (** [iter f m] invokes [f k d] for each binding [k ↦ d] in [m]. Bindings are presented in ascending key order. *) val iter: ('n key -> 'a -> unit) -> ('n, 'a) t -> unit (** [fold f m seed] computes [f k d acc] for each binding in [m], in ascending key order. The initial value of [acc] is [seed]; the final value is the returned value. *) val fold: ('n key -> 'a -> 'b -> 'b) -> ('n, 'a) t -> 'b -> 'b (** [for_all f m] returns [true] if [f k d] is true for all bindings [k ↦ d] in [m]. *) val for_all: ('n key -> 'a -> bool) -> ('n, 'a) t -> bool (** [exists f m] returns [true] if [f k d] is true for at least one binding [k ↦ d] in [m]. *) val exists: ('n key -> 'a -> bool) -> ('n, 'a) t -> bool (** {2 Filtering} *) (** [filter f m] returns the map with the same bindings as [m], but only those bindings [k ↦ d] for which [f k d] returns [true]. *) val filter: ('n key -> 'a -> bool) -> ('n, 'a) t -> ('n, 'a) t (** [filter_map f m] returns the map with bindings [k ↦ d'] for each binding [k ↦ d] in [m] such that [f k d] returns [Some d']. *) val filter_map: ('n key -> 'a -> 'b option) -> ('n, 'a) t -> ('n, 'b) t (** [partition f m] returns the pair [(m1, m2)] where [m1] contains all bindings [k ↦ d] in [m] such that [f k d] is true, and [m2] contains the others. *) val partition: ('n key -> 'a -> bool) -> ('n, 'a) t -> ('n, 'a) t * ('n, 'a) t (** {2 Cardinality} *) (** [cardinal m] returns the number of bindings in [m]. *) val cardinal: ('n, 'a) t -> int (** {2 Bindings extraction} *) (** [bindings m] is the list of all bindings in [m], in ascending order. *) val bindings: ('n, 'a) t -> ('n key * 'a) list (** [min_binding m] returns the pair [(k, d)] where [k] is the smallest key bound in [m] and [d] is its binding. Raises [Not_found] if [m] is empty. *) val min_binding: ('n, 'a) t -> ('n key * 'a) (** [min_binding_opt m] returns [Some (k, d)] where [(k, d)] is the smallest key bound in [m], or [None] if [m] is empty. *) val min_binding_opt: ('n, 'a) t -> ('n key * 'a) option (** [max_binding m] returns the pair [(k, d)] where [k] is the largest key bound in [m] and [d] is its binding. Raises [Not_found] if [m] is empty. *) val max_binding: ('n, 'a) t -> ('n key * 'a) (** [max_binding_opt m] returns [Some (k, d)] where [(k, d)] is the largest key bound in [m], or [None] if [m] is empty. *) val max_binding_opt: ('n, 'a) t -> ('n key * 'a) option (** [choose m] returns an arbitrarily chosen binding [(k, d)] from [m]. Raises [Not_found] if [m] is empty. *) val choose: ('n, 'a) t -> ('n key * 'a) (** [choose_opt m] returns [Some (k, d)] if [k] is bound in [m], or [None] if [m] is empty. *) val choose_opt: ('n, 'a) t -> ('n key * 'a) option (** {2 Splitting} *) (** [split k m] returns [(m1, opt, m2)] where: - [m1] contains all bindings with keys strictly smaller than [k] - [m2] contains all bindings with keys strictly larger than [k] - [opt] is [Some d] if [k] is bound to [d] in [m], or [None] otherwise *) val split: 'n key -> ('n, 'a) t -> ('n, 'a) t * 'a option * ('n, 'a) t (** {2 Find operations} *) (** [find k m] returns the value [d] associated with key [k] in [m]. Raises [Not_found] if [k] is not bound in [m]. *) val find: 'n key -> ('n, 'a) t -> 'a (** [find_opt k m] returns [Some d] if [k] is bound to [d] in [m], or [None] otherwise. *) val find_opt: 'n key -> ('n, 'a) t -> 'a option (** [find_first f m] returns the first binding [(k, d)] such that [f k d] is true, or raises [Not_found] if no such binding exists. *) val find_first: ('n key -> bool) -> ('n, 'a) t -> 'n key * 'a (** [find_first_opt f m] returns [Some (k, d)] for the first binding such that [f k d] is true, or [None] if no such binding exists. *) val find_first_opt: ('n key -> bool) -> ('n, 'a) t -> ('n key * 'a) option (** [find_last f m] returns the last binding [(k, d)] such that [f k d] is true, or raises [Not_found] if no such binding exists. *) val find_last: ('n key -> bool) -> ('n, 'a) t -> 'n key * 'a (** [find_last_opt f m] returns [Some (k, d)] for the last binding such that [f k d] is true, or [None] if no such binding exists. *) val find_last_opt: ('n key -> bool) -> ('n, 'a) t -> ('n key * 'a) option (** {2 Mapping} *) (** [map f m] returns the map with the same keys as [m], where each value [d] has been replaced by [f d]. *) val map: ('a -> 'b) -> ('n, 'a) t -> ('n, 'b) t (** [mapi f m] returns the map with the same keys as [m], where each value has been replaced by [f k d] for the corresponding key [k]. *) val mapi: ('n key -> 'a -> 'b) -> ('n, 'a) t -> ('n, 'b) t (** {2 Sequences} *) (** [to_seq m] returns a sequence of all bindings in [m], in ascending key order. *) val to_seq : ('n, 'a) t -> ('n key * 'a) Seq.t (** [to_rev_seq m] returns a sequence of all bindings in [m], in descending key order. *) val to_rev_seq : ('n, 'a) t -> ('n key * 'a) Seq.t (** [to_seq_from k m] returns a sequence of all bindings in [m] with keys greater than or equal to [k]. *) val to_seq_from : 'n key -> ('n, 'a) t -> ('n key * 'a) Seq.t (** [add_seq s m] returns the map that is the union of [m] and all bindings in sequence [s]. *) val add_seq : ('n key * 'a) Seq.t -> ('n, 'a) t -> ('n, 'a) t (** [of_seq s] returns the map containing all bindings from sequence [s]. *) val of_seq : ('n key * 'a) Seq.t -> ('n, 'a) t end
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>