grew_rule.mli 4.32 KB
Newer Older
bguillaum's avatar
bguillaum committed
1 2 3 4 5 6 7 8 9 10
(**********************************************************************************)
(*    Libcaml-grew - a Graph Rewriting library dedicated to NLP applications      *)
(*                                                                                *)
(*    Copyright 2011-2013 Inria, Université de Lorraine                           *)
(*                                                                                *)
(*    Webpage: http://grew.loria.fr                                               *)
(*    License: CeCILL (see LICENSE folder or "http://www.cecill.info")            *)
(*    Authors: see AUTHORS file                                                   *)
(**********************************************************************************)

11
open Grew_base
12 13
open Grew_types

bguillaum's avatar
bguillaum committed
14 15
open Grew_graph
open Grew_command
pj2m's avatar
pj2m committed
16 17
open Grew_edge
open Grew_fs
bguillaum's avatar
bguillaum committed
18
open Grew_ast
pj2m's avatar
pj2m committed
19

20
(* ================================================================================ *)
pj2m's avatar
pj2m committed
21 22
module Instance : sig
  type t = {
23 24 25
    graph: G_graph.t;
    history: Command.h list;
    rules: string list;
26
    big_step: Libgrew_types.big_step option;
27 28 29 30
  }

  (** [from_graph graph] return a fresh instance based on the input [graph]. *)
  val from_graph: G_graph.t -> t
bguillaum's avatar
bguillaum committed
31

32 33
  (** [rev_steps t] reverses the small step list: during rewriting, the last rule
      is in the head of the list and the reverse is needed for display. *)
pj2m's avatar
pj2m committed
34 35
  val rev_steps: t -> t

36
  (** [to_gr t] returns a string which contains the "gr" code of the current graph *)
37
  val to_gr: Domain.t -> t -> string
38

39 40
  (** [to_conll_string t] returns a string which contains the "conll" code of the current graph *)
  val to_conll_string: Domain.t -> t -> string
bguillaum's avatar
bguillaum committed
41

42
  (** [save_dep_png base t] writes a file "base.png" with the dep representation of [t].
bguillaum's avatar
bguillaum committed
43
      NB: if the Dep2pict is not available, nothing is done *)
44 45
  val save_dep_png: Domain.t -> ?filter: string list -> ?main_feat: string -> string -> t -> float option
  val save_dep_svg: Domain.t -> ?filter: string list -> ?main_feat: string -> string -> t -> float option
46

47
  (** [save_dot_png base t] writes a file "base.png" with the dot representation of [t] *)
48
  val save_dot_png: Domain.t -> ?filter: string list -> ?main_feat: string -> string -> t -> unit
49
end (* module Instance *)
pj2m's avatar
pj2m committed
50

51
(* ================================================================================ *)
pj2m's avatar
pj2m committed
52 53
module Instance_set : Set.S with type elt = Instance.t

54
(* ================================================================================ *)
pj2m's avatar
pj2m committed
55 56 57
module Rule : sig
  type t

58
  (** [get_name t] returns the name of the rule [t]. *)
bguillaum's avatar
bguillaum committed
59 60
  val get_name: t -> string

bguillaum's avatar
bguillaum committed
61
  (** [get_loc t] returns the file location of the rule [t]. *)
62 63
  val get_loc: t -> Loc.t

64
  (** [is_filter t] returns [true] iff the rule [t] is a filter rule. *)
65 66
  val is_filter: t -> bool

bguillaum's avatar
bguillaum committed
67
  (** [to_dep t] returns a string in the [dep] language describing the match basic of the rule *)
68
  val to_dep: Domain.t -> t -> string
bguillaum's avatar
bguillaum committed
69

70
  (** [build domain ?local dir ast_rule] returns the Rule.t value corresponding to [ast_rule].
71
      [dir] is used for localisation of lp files *)
bguillaum's avatar
bguillaum committed
72
  val build: Domain.t -> ?locals:Label_domain.decl array -> string -> Ast.rule -> t
pj2m's avatar
pj2m committed
73

74
  (** [normalize domain module_name ?confluent rule_list filter_list instance] returns two sets of good normal forms and bad normal forms *)
pj2m's avatar
pj2m committed
75
  (* raise Stop if some command fails to apply *)
76
  val normalize:
77
    Domain.t ->
78
    string -> (* module name *)
bguillaum's avatar
bguillaum committed
79
    ?confluent:bool ->
80 81
    t list -> (* rule list *)
    t list -> (* filter list *)
pj2m's avatar
pj2m committed
82 83
    Instance.t ->
      Instance_set.t * Instance_set.t
bguillaum's avatar
bguillaum committed
84

bguillaum's avatar
bguillaum committed
85 86
  (** the type matching encodes the graph morphism from a pattern to a graph *)
  (* NB: it was made public for the grep mode *)
bguillaum's avatar
bguillaum committed
87
  type matching
88 89
  type pattern

90
  val build_pattern: Domain.t -> Ast.pattern -> pattern
bguillaum's avatar
bguillaum committed
91

92 93 94
  (** [node_matching pattern graph matching] return a assoc list (pid_name, gid.position) *)
  val node_matching: pattern -> G_graph.t -> matching -> (string * int) list

bguillaum's avatar
bguillaum committed
95
  (** [match_in_graph rule graph] returns the list of matching of the pattern of the rule into the graph *)
96
  val match_in_graph: Domain.t -> ?param:Lex_par.t -> pattern -> G_graph.t -> matching list
bguillaum's avatar
bguillaum committed
97

98
  (** [match_deco rule matching] builds the decoration of the [graph] illustrating the given [matching] of the [rule] *)
bguillaum's avatar
bguillaum committed
99
  (* NB: it can be computed independly from the graph itself! *)
100
  val match_deco: pattern -> matching -> G_deco.t
101
end (* module Rule *)