Mercurial > hg > Members > nobuyasu > test
view pyrect/pyrect/regexp/fa.py @ 9:493c96d030c0
add pyrect
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 14 Jun 2011 17:24:03 +0900 |
parents | |
children |
line wrap: on
line source
#!/usr/bin/env python from pyrect.regexp.ast import AnyChar, Range class FA(object): def __init__(self, transition, start, accepts, states=None): self.transition = transition self.start = start self.accepts = accepts self.states = states def accept(self, laungage): return False class Transition(dict): def __setitem__(self, key, value): if type(key) == tuple: (state, input) = key if self.has_key(state): self[state][input] = value else: self[state] = {input: value} else: if not isinstance(value, dict): raise "Transition.__setitem__: invalid item!" dict.__setitem__(self, key, value) def __getitem__(self, key): if type(key) == tuple: (state, input) = key if self.has_key(state) and self[state].has_key(input): return self[state][input] else: return None else: if self.has_key(key): return dict.__getitem__(self, key) else: return None def __str__(self): string = "Transition:" for (s, i), ns in self.itertrans(): string += " %s x %s -> %s," % (s, i, ns) return string def iterstates(self): for s, t in self.iteritems(): yield s, t def itertrans(self): for s, v in self.iteritems(): for i, n in v.iteritems(): yield (s, i), n