-
Notifications
You must be signed in to change notification settings - Fork 1
/
ER.py
61 lines (51 loc) · 1.78 KB
/
ER.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"""
Bruno Cesar RA: 11078407
Juliano Gomes RA: 1118509
"""
class ER:
def __init__(self, processaSimbolo = None, operadores = {}):
self.alfabeto = set()
self.corpo = []
self.operacao = None
self.op_num_args = operadores
self.operadores = operadores.keys()
if processaSimbolo:
self.processaSimbolo = processaSimbolo
else:
self.processaSimbolo = lambda x : x
def criarER(self,lista):
pilha = []
pilha.append(lista[0])
proximaPosicao = 1
ultimoOperador = 0
while len(pilha) != 0:
topo = len(pilha) - 1
if pilha[topo] in self.operadores:
ultimoOperador = len(pilha)
else:
nfa = self.criarNFABasico(pilha[topo])
pilha.append(nfa)
operador = pilha[ultimoOperador]
distancia = topo - ultimoOperador
if distancia == self.op_num_args[operador]:
args = []
while args < distancia:
args.append(pilha.pop())
self.criarERBasica(operador, args)
pilha.append(lista[proximaPosicao])
proximaPosicao += 1
def uniao(self, sentenca):
resultado = []
resultado.append(self.corpo[0](sentenca))
if resultado:
resultado.append(self.corpo[1](sentenca))
return resultado
def estrela(self, sentenca):
resultado = []
reconhece = True
while reconhece:
temp = self.corpo[0](sentenca)
def concatenacao(self, sentenca):
resultado =[]
temp = corpo[0]()
def executa(self, sentenca):