9
|
1 #!/usr/bin/env python
|
|
2
|
|
3 from pyrect.regexp.ast import AnyChar, Range
|
|
4
|
|
5 class FA(object):
|
|
6 def __init__(self, transition, start, accepts, states=None):
|
|
7 self.transition = transition
|
|
8 self.start = start
|
|
9 self.accepts = accepts
|
|
10 self.states = states
|
|
11
|
|
12 def accept(self, laungage):
|
|
13 return False
|
|
14
|
|
15 class Transition(dict):
|
|
16 def __setitem__(self, key, value):
|
|
17 if type(key) == tuple:
|
|
18 (state, input) = key
|
|
19 if self.has_key(state):
|
|
20 self[state][input] = value
|
|
21 else:
|
|
22 self[state] = {input: value}
|
|
23 else:
|
|
24 if not isinstance(value, dict):
|
|
25 raise "Transition.__setitem__: invalid item!"
|
|
26 dict.__setitem__(self, key, value)
|
|
27
|
|
28 def __getitem__(self, key):
|
|
29 if type(key) == tuple:
|
|
30 (state, input) = key
|
|
31 if self.has_key(state) and self[state].has_key(input):
|
|
32 return self[state][input]
|
|
33 else:
|
|
34 return None
|
|
35 else:
|
|
36 if self.has_key(key):
|
|
37 return dict.__getitem__(self, key)
|
|
38 else:
|
|
39 return None
|
|
40
|
|
41 def __str__(self):
|
|
42 string = "Transition:"
|
|
43 for (s, i), ns in self.itertrans():
|
|
44 string += " %s x %s -> %s," % (s, i, ns)
|
|
45 return string
|
|
46
|
|
47 def iterstates(self):
|
|
48 for s, t in self.iteritems():
|
|
49 yield s, t
|
|
50
|
|
51 def itertrans(self):
|
|
52 for s, v in self.iteritems():
|
|
53 for i, n in v.iteritems():
|
|
54 yield (s, i), n
|