X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2Fgrammar.mli;h=dcf00677d02773c3da6b56d02bab81fb58aac4a6;hb=a31b1c91de4e8a984e85c6ca1bc917f26fd334f3;hp=3e355d4cc6a1f34e6f0f1a36d8285876701deb5e;hpb=7166a99542af5ad2f5b53fe9fa9e5164dff7cfe5;p=SXSI%2Fxpathcomp.git diff --git a/src/grammar.mli b/src/grammar.mli index 3e355d4..dcf0067 100644 --- a/src/grammar.mli +++ b/src/grammar.mli @@ -1,3 +1,46 @@ type t +type node = [ `Grammar ] Node.t + +type p_type = [ `Parameter ] +type n_type = [ `NonTerminal ] +type t_type = [ `Terminal ] +type any_type = [ p_type | n_type | t_type ] +type symbol = [ any_type ] Node.t + +type p_symbol = p_type Node.t +type n_symbol = n_type Node.t +type t_symbol = t_type Node.t +type tn_symbol = [ n_type | t_type ] Node.t + +type partial = + | Leaf of node + | Node of tn_symbol * partial array + + +val is_terminal : [< any_type ] Node.t -> bool +val is_non_terminal : [< any_type ] Node.t -> bool +val is_parameter : [< any_type ] Node.t -> bool + +external get_symbol_at : t -> symbol -> node -> symbol = "caml_grammar_get_symbol_at" +external first_child : t -> symbol -> node -> node = "caml_grammar_first_child" +external next_sibling : t -> symbol -> node -> node = "caml_grammar_next_sibling" +external start_first_child : t -> node -> node = "caml_grammar_start_first_child" +external start_next_sibling : t -> node -> node = "caml_grammar_start_next_sibling" +external parameter : [< any_type ] Node.t -> p_symbol = "%identity" +external terminal : [< any_type ] Node.t -> t_symbol = "%identity" +external non_terminal : [< any_type ] Node.t -> n_symbol = "%identity" +external get_id1 : t -> n_symbol -> tn_symbol = "caml_grammar_get_id1" +external get_id2 : t -> n_symbol -> tn_symbol = "caml_grammar_get_id2" +val get_param_pos : n_symbol -> int +external nil_symbol : t -> t_symbol = "caml_grammar_nil_id" +val num_params : n_symbol -> int +val num_children : [< t_type | n_type ] Node.t -> int +external is_nil : t -> t_symbol -> bool = "caml_grammar_is_nil" + +val tag : t_symbol -> Tag.t +val symbol : n_symbol -> int +val tag_operations : t -> Tag.operations + + val load : string -> bool -> t