def compute_with_target_gen(target, nfa): _, start, trans = nfa trace = compute_tr_with_target(start, target, nfa) for S in trace[1:]: yield S while True: trace = compute_tr_with_target(target, target, nfa) for S in trace[1:]: yield S
def compute_with_target_gen(target, nfa): _, start, trans = nfa trace = compute_tr_with_target(start, target, nfa) for S in trace[1:]: yield S while True: trace = compute_tr_with_target(target, target, nfa) for S in trace[1:]: yield S
def compute_minimal_state_traces(nfa): _, start, trans = nfa states = set() traces = [] for S in trans: if S == start: continue T1 = compute_tr_with_target(start, S, nfa) if (FIN, "-", start[0]) in trans[S]: traces.append(T1[1:]) else: T2 = compute_tr_with_target(S, (FIN, FEX, 0, start[0]), nfa) T = T1[1:] + T2[1:-1] traces.append(T) return traces
def compute_minimal_state_traces(nfa): _, start, trans = nfa states = set() traces = [] for S in trans: if S == start: continue T1 = compute_tr_with_target(start, S, nfa) if (FIN, '-', start[0]) in trans[S]: traces.append(T1[1:]) else: T2 = compute_tr_with_target(S, (FIN, FEX, 0, start[0]), nfa) T = T1[1:] + T2[1:-1] traces.append(T) return traces
def compute_super_tr(langlet, start_state, state_traces, segtree, running_cycle, start_symbols=None): nid = start_state[0] nfa = langlet.parse_nfa.nfas[nid] cyclic = compute_in_cycle(nfa) trace = [] if not start_symbols: start_symbols = langlet.parse_nfa.start_symbols[1] for S in cyclic: if is_symbol(S[0]): cycle_gen = compute_with_target_gen(S, nfa) while True: state = cycle_gen.next() if is_symbol(state[0]): tr = _compute_next_tr(langlet, state, state_traces, segtree, start_symbols) if tr: trace += tr else: trace.append(state) if state == S: # compute tail trace += compute_tr_with_target(S, (FIN, FEX, 0, nid), nfa)[1:-1] break else: trace.append(state) return trace
def compute_super_tr(langlet, start_state, state_traces, segtree, running_cycle, start_symbols=None): nid = start_state[0] nfa = langlet.parse_nfa.nfas[nid] cyclic = compute_in_cycle(nfa) trace = [] if not start_symbols: start_symbols = langlet.parse_nfa.start_symbols[1] for S in cyclic: if is_symbol(S[0]): cycle_gen = compute_with_target_gen(S, nfa) while True: state = cycle_gen.next() if is_symbol(state[0]): tr = _compute_next_tr(langlet, state, state_traces, segtree, start_symbols) if tr: trace += tr else: trace.append(state) if state == S: # compute tail trace += compute_tr_with_target( S, (FIN, FEX, 0, nid), nfa)[1:-1] break else: trace.append(state) return trace