NFA concat(NFA a, NFA b) { NFA result; result.set_vertex(a.get_vertex_count() + b.get_vertex_count()); int i; trans new_trans; for(i = 0; i < a.transitions.size(); i++) { new_trans = a.transitions.at(i); result.set_transition(new_trans.vertex_from, new_trans.vertex_to, new_trans.trans_symbol); } result.set_transition(a.get_final_state(), a.get_vertex_count(), '^'); for(i = 0; i < b.transitions.size(); i++) { new_trans = b.transitions.at(i); result.set_transition(new_trans.vertex_from + a.get_vertex_count(), new_trans.vertex_to + a.get_vertex_count(), new_trans.trans_symbol); } result.set_final_state(a.get_vertex_count() + b.get_vertex_count() - 1); return result; }