X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2Fata.ml;h=8f7529faa658bf1d4f0594d277240ab90a513e76;hb=ecec752325cb3d207894a4f8d772936bd7ad9f4a;hp=f0882d5232075c411e5e66fd85b46cb91f9282b3;hpb=db0ad408721f202e33785958211fe6e4228fce8f;p=SXSI%2Fxpathcomp.git diff --git a/src/ata.ml b/src/ata.ml index f0882d5..8f7529f 100644 --- a/src/ata.ml +++ b/src/ata.ml @@ -255,3 +255,18 @@ let top_down_approx auto states tree = +let get_trans ?(attributes=TagSet.empty) auto states tag = + StateSet.fold (fun q acc -> + List.fold_left (fun ((tr_acc, l_acc, r_acc) as acc) (ts, tr) -> + let ts = if ts == TagSet.star then TagSet.diff ts attributes else ts + in + if TagSet.mem tag ts then + let _, _, _, f = Transition.node tr in + let l, r = Formula.st f in + (Translist.cons tr tr_acc, + StateSet.union l l_acc, + StateSet.union r r_acc) + else acc) acc (Hashtbl.find auto.trans q)) + states + (Translist.nil, StateSet.empty, StateSet.empty) +