Code: Select all
import gc
def e_closure (startstate):
"""Return all states reachable from startstates on epsilon transitions.
"""
print('eclos1', startstate)
print(len(gc.get_objects()))
sys.stdout.flush()
work = [startstate]
set()
print('eclos2')
print(len(gc.get_objects()))
sys.stdout.flush()
result = set()
print('eclos3')
sys.stdout.flush()
while work:
s = work.pop()
result.add(s)
for n in s.get_transitions(state.EPSILON):
if n not in result:
work.append(n)
x = sorted(result, key=lambda s: s.name)
return x
Beispielprotokolle:
Code: Select all
('eclos1', start)
6961
eclos2
6962
eclos3
('eclos1', d0)
6962
eclos2
6963
eclos3
('eclos1', d2)
6963
eclos2
6964
eclos3
('eclos1', d3)
6964
eclos2
6965
eclos3
('eclos1', d4)
6965
eclos2
6966
eclos3
('eclos1', d1)
6966
eclos2
6967
eclos3
('eclos1', c0)
6967
eclos2
6968
eclos3
('eclos1', c2)
6968
eclos2
6969
eclos3
('eclos1', c3)
6969
eclos2
6970
eclos3
('eclos1', c4)
6970