Initial public import
[afterthought.git] / xpath_syntax.ml
1 (* XPath expressions *)
2
3 type expr = 
4   | String_literal of string
5   | Number_literal of float
6   | Var of string
7   | Function of string * (expr list)
8   | PathExpr of path_expr
9
10   | Equal of expr * expr
11   | NotEqual of expr * expr
12   | Lower of expr * expr
13   | Greater of expr * expr
14   | LowerEqual of expr * expr
15   | GreaterEqual of expr * expr
16   | Plus of expr * expr
17   | Minus of expr * expr
18   | Mul of expr * expr
19   | Div of expr * expr
20   | Mod of expr * expr
21   | UnaryMinus of expr
22   | Or of expr * expr
23   | And of expr * expr
24
25 and path_expr =
26   | Pipe of path_expr * path_expr
27   | Slash of path_expr * path_expr
28   | Axis of Xpath_ext.Axis.t * path_expr
29   | Name of string
30   | TypeTest of Xpath_ext.Type_test.t
31   | Condition of path_expr * expr
32   | Root
33   | Expr of expr
34
35 let path_expr = function
36   | Expr e -> e
37   | e -> PathExpr e
38
39 let expr = function
40   | PathExpr e -> e
41   | e -> Expr e
42
43 let double_slash =
44   let desc = Axis(
45     Xpath_ext.Axis.Descendant_or_self, 
46     TypeTest Xpath_ext.Type_test.Node_test) in
47   fun before after ->
48     Slash( Slash (before,desc), after )
49
50
51 let dot =  
52   Axis(Xpath_ext.Axis.Self, TypeTest Xpath_ext.Type_test.Node_test)
53 let dotdot = 
54   Axis(Xpath_ext.Axis.Parent, TypeTest Xpath_ext.Type_test.Node_test)