Refactor xpath parser and ast in a submodule.
[tatoo.git] / src / xPath.ml
diff --git a/src/xPath.ml b/src/xPath.ml
deleted file mode 100644 (file)
index a825d84..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-(***********************************************************************)
-(*                                                                     *)
-(*                               TAToo                                 *)
-(*                                                                     *)
-(*                     Kim Nguyen, LRI UMR8623                         *)
-(*                   Université Paris-Sud & CNRS                       *)
-(*                                                                     *)
-(*  Copyright 2010-2012 Université Paris-Sud and Centre National de la *)
-(*  Recherche Scientifique. All rights reserved.  This file is         *)
-(*  distributed under the terms of the GNU Lesser General Public       *)
-(*  License, with the special exception on linking described in file   *)
-(*  ../LICENSE.                                                        *)
-(*                                                                     *)
-(***********************************************************************)
-
-(*
-  Time-stamp: <Last modified on 2013-01-30 19:05:13 CET by Kim Nguyen>
-*)
-
-module Ast =
-struct
-
-  type path = single_path list
-  and single_path = Absolute of step list | Relative of step list
-  and step = axis * test * expr list
-  and axis = Self | Attribute | Child | Descendant | DescendantOrSelf | FollowingSibling
-             | Parent | Ancestor | AncestorOrSelf | PrecedingSibling | Preceding | Following
-
-  and test = QNameSet.t
-
-  and binop = Eq | Neq | Lt | Gt | Lte | Gte | Or | And | Add | Sub | Mult | Div | Mod
-  and unop =  Neg
-  and expr =
-    | Number of [ `Int of int | `Float of float ]
-    | String of string
-    | Fun_call of QName.t * expr list
-    | Path of path
-    | Binop of expr * binop * expr
-    | Unop of unop * expr
-
-
-  type t = path
-
-
-  let text = QNameSet.singleton QName.text
-  let node = QNameSet.any
-  let star =
-    QNameSet.complement (
-      QNameSet.from_list [ QName.text;
-                         QName.document;
-                         QName.cdata_section;
-                         QName.comment])
-
-
-
-  let pp fmt e = Format.fprintf fmt e
-
-  let prio e = match e with
-  | Unop (Neg, _) -> 11
-  | Path _ -> 10
-  | Number _ | String _ | Fun_call _ -> 9
-  | Binop (_,op,_) -> begin match op with
-    | Lt | Lte | Gt | Gte -> 7
-    | Neq | Eq -> 6
-    | And -> 5
-    | Or -> 4
-    | Mult | Div | Mod -> 3
-    | Add | Sub -> 2
-  end
-
-  let print_binop fmt o =
-    pp fmt "%s" begin match o with
-    | Eq -> "="
-    | Neq -> "!="
-    | Lt -> "<"
-    | Gt -> ">"
-    | Lte -> "<="
-    | Gte -> ">="
-    | Or -> "or"
-    | And -> "and"
-    | Add -> "+"
-    | Sub -> "-"
-    | Mult -> "*"
-    | Div -> "div"
-    | Mod -> "mod"
-    end
-  let print_unop fmt o =
-    pp fmt "%s" begin match o with
-    | Neg -> "-"
-    end
-
-  let rec print_path fmt p =
-    Pretty.print_list ~sep:" | " print_single_path fmt p
-
-  and print_single_path fmt p =
-    let l = match p with
-      | Absolute l -> pp fmt "/"; l
-      | Relative l -> l
-    in
-      Pretty.print_list ~sep:"/" print_step fmt l
-
-  and print_step fmt (axis, test, expr) =
-    pp fmt "%a::%a" print_axis axis print_test test;
-    match expr with
-      [] -> ()
-    | l -> pp fmt "[ ";
-        Pretty.print_list ~sep:" ][ " print_expr fmt l;
-        pp fmt " ]"
-
-  and print_axis fmt a = pp fmt "%s" (match a with
-      Self -> "self"
-    | Child -> "child"
-    | Descendant -> "descendant"
-    | DescendantOrSelf -> "descendant-or-self"
-    | FollowingSibling -> "following-sibling"
-    | Attribute -> "attribute"
-    | Ancestor -> "ancestor"
-    | AncestorOrSelf -> "ancestor-or-self"
-    | PrecedingSibling -> "preceding-sibling"
-    | Parent -> "parent"
-    | Preceding -> "preceding"
-    | Following -> "following"
-  )
-  and print_test fmt ts =
-    try
-      pp fmt "%s" (List.assoc ts
-                     [ text,"text()";
-                       node,"node()";
-                       star, "*" ] )
-    with
-      Not_found -> pp fmt "%s"
-        (if QNameSet.is_finite ts
-         then QName.to_string (QNameSet.choose ts)
-         else "<INFINITE>"
-        )
-
-  and print_expr fmt = function
-    | Number (`Int(i)) -> pp fmt "%i" i
-    | Number (`Float(f)) -> pp fmt "%f" f
-    | String s -> pp fmt "'%S'" s
-    | Fun_call (n, args) ->
-        pp fmt "%a(" QName.print n;
-        Pretty.print_list ~sep:", " print_expr fmt args;
-        pp fmt ")"
-    | Path p -> print_path fmt p
-    | Binop (e1, op, e2) as e ->
-        let pe = prio e in
-        let need_par1 = prio e1 < pe in
-        if need_par1 then pp fmt "(";
-        pp fmt "%a" print_expr e1;
-        if need_par1 then pp fmt ")";
-        pp fmt " %a "  print_binop op;
-        let need_par2 = prio e2 < pe in
-        if need_par2 then pp fmt "(";
-        pp fmt "%a" print_expr e2;
-        if need_par2 then pp fmt ")"
-    | Unop (op, e0) as e ->
-        let need_par0 = prio e0 < prio e in
-        print_unop fmt op;
-        if need_par0 then pp fmt "(";
-        print_expr fmt e0;
-        if need_par0 then pp fmt ")"
-
-end