package p4spectec

  1. Overview
  2. Docs
P4-SpecTec: A mechanization toolchain for the P4 Programming Language

Install

dune-project
 Dependency

Authors

Maintainers

Sources

v0.1.2.tar.gz
md5=1a3bc0a385fe1ecf403c019f49aa6de6
sha512=5d20b5821f33e2a3a5419b208606f27c01511994c2b3b1e1cdf4c077056dfd0aa81682af0720e1060ee2bfb0341918fcc4c53159820205a2bc32b725e5c1a714

doc/src/dynamic/var.ml.html

Source file var.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
open Lang
open Il
open Il.Print
open Util.Source

type t = id * iter list

let to_string (id, iters) =
  string_of_varid id ^ String.concat "" (List.map string_of_iter iters)

let compare_iter (iter_a : iter) (iter_b : iter) =
  match (iter_a, iter_b) with
  | Opt, Opt | List, List -> 0
  | Opt, List -> -1
  | List, Opt -> 1

let rec compare_iters iters_a iters_b =
  match (iters_a, iters_b) with
  | [], [] -> 0
  | [], _ :: _ -> -1
  | _ :: _, [] -> 1
  | iter_a :: iters_a, iter_b :: iters_b ->
      let c = compare_iter iter_a iter_b in
      if c <> 0 then c else compare_iters iters_a iters_b

(* Compare variables by id, then by iters. *)
let compare (id_a, iters_a) (id_b, iters_b) =
  let cmp_id = String.compare id_a.it id_b.it in
  if cmp_id = 0 then compare_iters iters_a iters_b else cmp_id