function M = union_nfsas(MM) % M is the nfsa-union of MM = {M1,M2,...} % see str2nfsa.m for basic nfsa definitions nQ = 0; for j=1:length(MM) nQ = nQ + length(MM{j}.Q); end nQ = nQ + 1; M = MM{1}; ft = fsa_type(M); if (ft=='d') M = d2nfsa(M); end M.Q = 1:nQ; M.q0 = 1; M3.F = []; shift = 1; for j=1:length(MM) Mj = MM{j}; ft = fsa_type(Mj); if (ft=='d') Mj = d2nfsa(Mj); end M.F = union(M.F,Mj.F+shift); R = nfsa_delta(M,1,'@'); M = set_ndelta(M,[1],['@'],{union(R,Mj.q0+shift)}); for q = Mj.Q for s = Mj.ALF R = nfsa_delta(Mj,q,s); M = set_ndelta(M,[q+shift],[s],{R+shift}); end end shift = shift + length(Mj.Q); end return