Rewrite the AST to conform to the W3C grammar
[tatoo.git] / src / xPath.mli
index de89955..e80a88a 100644 (file)
 
 module Ast :
 sig
-  type path = Absolute of step list | Relative of step list
+  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 step = axis * test * predicate
-  and axis = Self | Attribute | Child | Descendant | DescendantOrSelf
-             | FollowingSibling
-             | Parent | Ancestor | AncestorOrSelf |PrecedingSibling
-             | Preceding | Following
-  and test =  Simple of QNameSet.t
-  and predicate = Or of predicate*predicate
-                  | And of predicate*predicate
-                  | Not of predicate
-                  | Expr of expression
-  and expression =  Path of path
-                    | Function of string*expression list
-                    | Int of int
-                    | String of string
-                    | True | False
-  type t = path
-  val print : Format.formatter -> path -> unit
-  val print_step : Format.formatter -> step -> unit
-  val print_axis : Format.formatter -> axis -> unit
-  val print_test : Format.formatter -> test -> unit
-  val print_predicate : Format.formatter -> predicate -> unit
-  val print_expression : Format.formatter -> expression -> unit
-end
+  and test = Simple of 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
 
 
-val parse_string : string -> Ast.path
-val parse_file : in_channel -> Ast.path
+  type t = path
+end