-
Allan Blanchard authoredAllan Blanchard authored
engine.ml 10.62 KiB
(**************************************************************************)
(* *)
(* This file is part of WP plug-in of Frama-C. *)
(* *)
(* Copyright (C) 2007-2023 *)
(* CEA (Commissariat a l'energie atomique et aux energies *)
(* alternatives) *)
(* *)
(* you can redistribute it and/or modify it under the terms of the GNU *)
(* Lesser General Public License as published by the Free Software *)
(* Foundation, version 2.1. *)
(* *)
(* It is distributed in the hope that it will be useful, *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *)
(* GNU Lesser General Public License for more details. *)
(* *)
(* See the GNU Lesser General Public License version 2.1 *)
(* for more details (enclosed in the file licenses/LGPLv2.1). *)
(* *)
(**************************************************************************)
(* -------------------------------------------------------------------------- *)
(* --- Engine Signature --- *)
(* -------------------------------------------------------------------------- *)
(** Generic Engine Signature *)
open Format
open Plib
type op =
| Op of string (** Infix or prefix operator *)
| Assoc of string (** Left-associative binary operator (like + and -) *)
| Call of string (** Logic function or predicate *)
type link =
| F_call of string (** n-ary function *)
| F_subst of string * string (** n-ary function with substitution
first value is the link name, second is the
substitution (e.g. "foo(%1,%2)") *)
| F_left of string (** 2-ary function left-to-right + *)
| F_right of string (** 2-ary function right-to-left + *)
| F_list of string * string (** n-ary function with (cons,nil) constructors *)
| F_assoc of string (** associative infix operator *)
| F_bool_prop of string * string (** Has a bool and prop version *)
type callstyle =
| CallVar (** Call is [f(x,...)] ; [f()] can be written [f] *)
| CallVoid (** Call is [f(x,...)] ; in [f()], [()] is mandatory *)
| CallApply (** Call is [f x ...] *)
type mode =
| Mpositive (** Current scope is [Prop] in positive position. *)
| Mnegative (** Current scope is [Prop] in negative position. *)
| Mterm (** Current scope is [Term]. *)
| Mterm_int (** [Int] is required but actual scope is [Term]. *)
| Mterm_real (** [Real] is required but actual scope is [Term]. *)
| Mint (** Current scope is [Int]. *)
| Mreal (** Current scope is [Real]. *)
type flow = Flow | Atom
type cmode = Cprop | Cterm
type amode = Aint | Areal
type pmode = Positive | Negative | Boolean
type ('x,'f) ftrigger =
| TgAny
| TgVar of 'x