(* $Id$ * ---------------------------------------------------------------------- * *) module Graph : sig type graph type vertex (* A directed graph whose edges are marked with strings (= element types) * and with the constraint that for a given vertex and a given element * type the edge must be unique. *) exception Edge_not_unique val create : unit -> graph (* Creates an empty graph *) val new_vertex : graph -> vertex (* Adds a new vertex to the graph, and returns the vertex *) val new_edge : vertex -> string -> vertex -> unit (* new_edge v_from etype v_to: * Adds a new edge from vertex v_from to vertex v_to, marked with * etype. * Raises Edge_not_unique if there is already an edge etype starting * at v_from to a different vertex than v_to. *) val graph_of_vertex : vertex -> graph (* Returns the graph the passed vertex is contained in. *) val union : graph -> graph -> unit (* union g1 g2: * Moves the vertexes and edged found in g2 to g1. * After that, g2 is empty again. *) val outgoing_edges : vertex -> (string * vertex) list (* Returns the list of outgoing edges starting in the passed vertex *) val follow_edge : vertex -> string -> vertex (* Follows the edge starting in the passed vertex which is marked * with the passed element type. * Raises Not_found if there is no such edge. *) val ingoing_edges : vertex -> (vertex * string) list (* Returns the list of ingoing edges ending in the passed vertex *) end module VertexSet : Set.S with type elt = Graph.vertex type dfa_definition = { dfa_graph : Graph.graph; dfa_start : Graph.vertex; (* Where the automaton starts *) dfa_stops : VertexSet.t; (* Where the automaton may stop *) dfa_null : bool; (* Whether dfa_start member of dfa_stops *) } val dfa_of_regexp_content_model : Pxp_types.regexp_spec -> dfa_definition (* Computes the DFA or raises Not_found if it does not exist *) (* ====================================================================== * History: * * $Log$ * Revision 1.1 2000/11/17 09:57:29 lpadovan * Initial revision * * Revision 1.1 2000/07/23 02:16:08 gerd * Initial revision. * * *)