-
Notifications
You must be signed in to change notification settings - Fork 0
/
Automata.py
29 lines (25 loc) · 960 Bytes
/
Automata.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Automata:
""" $ A = (Q, \sigma, \delta, q_0, F) $ """
def __init__(self, states, sigma, transitionTable, initial, final):
self.states = states
self.sigma = sigma
self.transitionTable = transitionTable
self.initialStates = initial
self.finalStates = final
def delta(self, q, c):
if q in self.states and c in self.sigma:
return self.transitionTable[q][self.sigma.index(c)]
return None
def belongsAlphabet(self, expr):
exprSet = set(expr)
for x in exprSet:
if x not in self.sigma:
return False
return True
def isValid(self, expr, begin = 0): # aqui mero
if self.belongsAlphabet(expr):
n = self.delta(begin, expr[0])
for i in range(1, len(expr)):
n = self.delta(n, expr[i])
return n in self.finalStates
return False