Module Topllib.ToplAst

type property_name = string
val compare_property_name : property_name -> property_name -> int
val hash_fold_property_name : Ppx_hash_lib.Std.Hash.state -> property_name -> Ppx_hash_lib.Std.Hash.state
val hash_property_name : property_name -> Ppx_hash_lib.Std.Hash.hash_value
val property_name_of_sexp : Ppx_sexp_conv_lib.Sexp.t -> property_name
val sexp_of_property_name : property_name -> Ppx_sexp_conv_lib.Sexp.t
type register_name = string
val compare_register_name : register_name -> register_name -> int
type variable_name = string
type constant =
| LiteralInt of int
type value =
| Constant of constant
| Register of register_name
| Binding of variable_name
type binop =
| OpEq
| OpNe
| OpGe
| OpGt
| OpLe
| OpLt
type predicate =
| Binop of binop * value * value
| Value of value
type condition = predicate list
type assignment = register_name * variable_name
type procedure_name_pattern = string

a regular expression

type label_pattern =
| ArrayWritePattern
| ProcedureNamePattern of procedure_name_pattern
type label = {
arguments : variable_name list option;
condition : condition;
action : assignment list;
pattern : label_pattern;
}
type vertex = string
val compare_vertex : vertex -> vertex -> int
val hash_fold_vertex : Ppx_hash_lib.Std.Hash.state -> vertex -> Ppx_hash_lib.Std.Hash.state
val hash_vertex : vertex -> Ppx_hash_lib.Std.Hash.hash_value
val vertex_of_sexp : Ppx_sexp_conv_lib.Sexp.t -> vertex
val sexp_of_vertex : vertex -> Ppx_sexp_conv_lib.Sexp.t
type transition = {
source : vertex;
target : vertex;
label : label option;
}
type t = {
name : property_name;
message : string option;
prefixes : string list;
transitions : transition list;
}