X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fxpath%2Fcompile.ml;h=cd887b74970d5a07094fb927b58efcb34717ccf0;hb=aade6d9ba2e2b65e021de8a1c3a2d3874aa5742e;hp=6987b4c13918810fea18d299b1bcdf9828d83055;hpb=be588f7af67f6b24aa423ff374c0f1c058e64951;p=tatoo.git diff --git a/src/xpath/compile.ml b/src/xpath/compile.ml index 6987b4c..cd887b7 100644 --- a/src/xpath/compile.ml +++ b/src/xpath/compile.ml @@ -236,6 +236,12 @@ let path p = 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