Mercurial > hg > Members > shinya > pyrect
annotate pyrect/regexp/fa.py @ 98:4d498b002de5
refactor for data-structure (dict -> Transition).
author | Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 12 Dec 2010 23:04:31 +0900 |
parents | 5db856953793 |
children | 5e509a9c951c |
rev | line source |
---|---|
43
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 |
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 class FA(object): |
98
4d498b002de5
refactor for data-structure (dict -> Transition).
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
97
diff
changeset
|
4 def __init__(self, transition, start, accepts, states=None): |
43
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 self.transition = transition |
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 self.start = start |
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 self.accepts = accepts |
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 self.states = states |
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 |
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 def accept(self, laungage): |
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 return False |
83c69d42faa8
replace converting-flow, module dfareg with module regexp. it's is substantial changing in implimentation.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 |
91
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
13 class Transition(dict): |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
14 def __setitem__(self, key, value): |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
15 if type(key) == tuple: |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
16 (state, input) = key |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
17 if self.has_key(state): |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
18 self[state][input] = value |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
19 else: |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
20 self[state] = {input: value} |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
21 else: |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
22 if not isinstance(value, dict): |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
23 raise "Transition.__setitem__: invalid item!" |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
24 dict.__setitem__(self, key, value) |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
25 |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
26 def __getitem__(self, key): |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
27 if type(key) == tuple: |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
28 (state, input) = key |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
29 if self.has_key(state) and self[state].has_key(input): |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
30 return self[state][input] |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
31 else: |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
32 return None |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
33 else: |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
34 if self.has_key(key): |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
35 return dict.__getitem__(self, key) |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
36 else: |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
37 return None |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
38 |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
39 def __str__(self): |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
40 string = "Transition:" |
98
4d498b002de5
refactor for data-structure (dict -> Transition).
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
97
diff
changeset
|
41 for (s, i), ns in self.itertrans(): |
91
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
42 string += " %s x %s -> %s," % (s, i, ns) |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
43 return string |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
44 |
97
5db856953793
implement range-expression. and add repeat-mn syntax(ex. A{1,10}).
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
91
diff
changeset
|
45 def iterstates(self): |
98
4d498b002de5
refactor for data-structure (dict -> Transition).
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
97
diff
changeset
|
46 for s, t in self.iteritems(): |
97
5db856953793
implement range-expression. and add repeat-mn syntax(ex. A{1,10}).
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
91
diff
changeset
|
47 yield s, t |
5db856953793
implement range-expression. and add repeat-mn syntax(ex. A{1,10}).
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
91
diff
changeset
|
48 |
5db856953793
implement range-expression. and add repeat-mn syntax(ex. A{1,10}).
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
91
diff
changeset
|
49 def itertrans(self): |
91
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
50 for s, v in self.iteritems(): |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
51 for i, n in v.iteritems(): |
19a88707bd29
add cbc code.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
52 yield (s, i), n |