(***********************************************************************)
(*
- Time-stamp: <Last modified on 2013-02-07 10:31:01 CET by Kim Nguyen>
+ Time-stamp: <Last modified on 2013-03-10 14:31:48 CET by Kim Nguyen>
*)
open Ast
%}
%token <string> TAG
+%token <string> ATTNAME
%token <string> STRING
%token <int> INT
%token <float> FLOAT
absolute_path:
SLASH relative_path { $2 }
-| SLASHSLASH relative_path { (DescendantOrSelf, node, []) :: $2 }
+| SLASHSLASH relative_path { $2 @ [(Descendant true, node, [])] }
;
relative_path:
step { [ $1 ] }
| relative_path SLASH step { $3 :: $1 }
| relative_path SLASHSLASH step { $3
- :: (DescendantOrSelf, node, [])
+ :: (Descendant true, node, [])
:: $1 }
;
;
axis_test:
- AXIS COLONCOLON test { $1, $3 }
+ AXIS COLONCOLON test { let a, t = $1, $3 in
+ if a == Attribute && Utils.QNameSet.is_finite t then
+ (a, Utils.QNameSet.fold
+ (fun t a ->
+ Utils.QNameSet.add
+ (Utils.QName.add_attribute_prefix t) a)
+ t Utils.QNameSet.empty)
+ else
+ (a, t)
+ }
| test { Child, $1 }
| AXIS {
let _ = Format.flush_str_formatter () in
let a = Format.flush_str_formatter () in
Child, Utils.QNameSet.singleton (Utils.QName.of_string a)
}
+| ATTNAME { (Attribute,
+ Utils.QNameSet.singleton (Utils.QName.of_string $1)) }
;
test:
expr { [ $1 ] }
| arg_list1 COMMA expr { $3 :: $1 }
;
-