Mercurial > hg > Members > shinya > pyrect
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