mutable selec : StateSet.t;
mutable bottom : StateSet.t;
mutable top : StateSet.t;
- mutable trans : SetT.t;
+ mutable trans_q : SetT.t;
+ mutable trans_r : SetT.t;
}
exception Not_found_transition
exception Transition_not_injective
-
+
let transition asta st lab =
let filter (s,l,f) =
(State.compare s st = 0) && (QNameSet.compare l lab = 0) in
- let tr_set = SetT.elements (SetT.filter filter asta.trans) in
+ let tr_set = (SetT.elements (SetT.filter filter asta.trans_q)) @
+ (SetT.elements (SetT.filter filter asta.trans_r))
+ in
match tr_set with
| [] -> raise Not_found_transition
| x::y::z -> raise Transition_not_injective
let rec remove_states l = match l with
| [] -> []
| (a,s,l) :: tl -> (s,l) :: (remove_states tl) in
- remove_states (SetT.elements (SetT.filter filter asta.trans))
+ (remove_states (SetT.elements (SetT.filter filter asta.trans_q)),
+ (remove_states (SetT.elements (SetT.filter filter asta.trans_r))))
let empty = {
quer = StateSet.empty;
selec = StateSet.empty;
bottom = StateSet.empty;
top = StateSet.empty;
- trans = SetT.empty;
+ trans_q = SetT.empty;
+ trans_r = SetT.empty
}
let any_label = QNameSet.complement (QNameSet.empty)
let new_state () = State.make()
-let add_tr ast tr = ast.trans <- (SetT.add tr (ast.trans))
+let add_tr ast tr flag =
+ if flag
+ then ast.trans_q <- (SetT.add tr (ast.trans_q))
+ else ast.trans_r <- (SetT.add tr (ast.trans_r))
let add_quer ast st = ast.quer <- (StateSet.add st (ast.quer))
let top_states ast = StateSet.elements ast.top
let print fmt asta =
- let pp = Format.fprintf fmt in
- pp "Query states: ";
- StateSet.print fmt asta.quer;
- pp "\nRecognizing states: ";
- StateSet.print fmt asta.reco;
- pp "\nSelecting states: ";
- StateSet.print fmt asta.selec;
- pp "\nBottom states: ";
- StateSet.print fmt asta.bottom;
- pp "\nTop states: ";
- StateSet.print fmt asta.top;
- pp "\nTransitions: \n";
- Format.fprintf fmt "{";
- Format.open_vbox 20;
- SetT.iter (fun x -> Format.fprintf fmt "%a @." Transition.print x)
- (asta.trans);
- Format.print_flush ();
- Format.fprintf fmt "}"
-
+ let print_box fmt flag =
+ let pp = Format.fprintf fmt in
+ Format.fprintf fmt "@[<v 0># Query states: %a@ @]"
+ StateSet.print asta.quer;
+ Format.fprintf fmt "@[<v 0># Recognizing states: %a@ @]"
+ StateSet.print asta.reco;
+ Format.fprintf fmt "@[<v 0># Selecting states: %a@ @]"
+ StateSet.print asta.selec;
+ Format.fprintf fmt "@[<v 0># Bottom states: %a@ @]"
+ StateSet.print asta.bottom;
+ Format.fprintf fmt "@[<v 0># Tom states: %a@ @]"
+ StateSet.print asta.top;
+ let print_list_tr fmt z=
+ SetT.iter (fun x -> Format.fprintf fmt "| %a@ " Transition.print x) z in
+ let print_box_list fmt trans =
+ Format.fprintf fmt " @[<hov 0>%a @]" print_list_tr trans in
+ Format.fprintf fmt "@[<v 0># Queries transitions:@ %a@ @]"
+ print_box_list asta.trans_q;
+ Format.fprintf fmt "@[<v 0># Recognizing transitions:@ %a@ @]"
+ print_box_list asta.trans_r in
+ Format.fprintf fmt "@[<v 0> ##### ASTA #####@. %a@ @]@ " print_box 0
let to_file out asta = ()