holds.
*)
-let compile_axis_test axis (test,kind) phi trans states=
+let compile_axis_test axis (test,kind) phi trans states =
let q = State.make () in
let phi = match kind with
Tree.NodeKind.Node -> phi
nasts) (StateSet.empty, StateSet.empty, [], StateSet.empty) p
in
let builder = Ata.Builder.make () in
+ (** ensure that we have a single selecting state at the end *)
+ let phi_sel = StateSet.fold (fun q acc -> F.or_ (F.stay q) acc) mstates F.false_ in
+ let q_sel = State.make () in
+ let states = StateSet.add q_sel states in
+ let mstates = StateSet.singleton q_sel in
+ let trans = (q_sel, [QNameSet.any, phi_sel]) :: trans in
StateSet.iter
(Ata.Builder.add_state builder ~starting:true) sstates;
StateSet.iter