diff pyrect/regexp/dfa.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 d23f12ce0369
children
line wrap: on
line diff
--- a/pyrect/regexp/dfa.py	Sun Dec 12 19:02:37 2010 +0900
+++ b/pyrect/regexp/dfa.py	Sun Dec 12 23:04:31 2010 +0900
@@ -5,15 +5,13 @@
 from fa import FA
 
 class DFA(FA):
-    def __init__(self, start, accepts, map_, states, assoc):
-        def transition(state, input):
-            return map_[state, input]
-        FA.__init__(self, transition, start, accepts, map_, states)
+    def __init__(self, transition, start, accepts, states, assoc):
+        FA.__init__(self, transition, start, accepts, states)
         self.assoc = assoc
 
     def copy_from(self, dfa):
         self.start = dfa.start
-        self.map = copy.deepcopy(dfa.map)
+        self.transition = copy.deepcopy(dfa.transition)
         self.accepts = copy.deepcopy(dfa.accepts)
         self.states = copy.deepcopy(dfa.states)
         self.assoc = copy.deepcopy(dfa.assoc)
@@ -41,11 +39,11 @@
         self.acceptable = collections.defaultdict(self.setdict)
 
         def search_acceptable(pcur, scur, searched, history, pstart):
-            for (pcur_, i), pnext in self.pdfa.map.iteritems():
-                if pcur_ != pcur or (pnext, i) in searched: continue
+            for i, pnext in self.pdfa.transition[pcur].iteritems():
+                if (pnext, i) in searched: continue
                 searched_ = searched + [(pnext, i)]
-                snext = self.map[(scur, i)]
-                if scur  not in history:
+                snext = self.transition[(scur, i)]
+                if scur not in history:
                     history_ = history + (scur,)
                 else:
                     history_ = history
@@ -62,8 +60,7 @@
         self.curState = self.DFA.start
 
     def do_transition(self, char):
-        self.curState = self.DFA.transition(
-            self.curState, char)
+        self.curState = self.DFA.transition[self.curState, char]
 
     def is_accept_state(self):
         return self.curState in self.DFA.accepts