def recorrer_entrada(self, cadena, tipos, pila): self.inicializar_reglas() while self.aceptacion == False: self.fila = self.regresa_tipo(pila.top()) self.columna = self.regresa_tipo(tipos[self.contador]) self.accion = self.tabla[self.fila, self.columna] if self.accion == -1: print("Cadena aceptada") self.aceptacion = True break if self.accion > 0: pila.push(tipos[self.contador]) pila.push(self.accion) self.contador = self.contador + 1 elif self.accion < 0: self.accion = -self.accion self.accion = self.accion - 1 for i in range(self.numero_elementos[self.accion - 1] * 2): pila.pop() self.fila = pila.top() pila.push(self.reglas[self.accion - 1]) self.columna = pila.top() self.accion = self.tabla[self.fila, self.regresa_tipo(self.columna)] pila.push(self.accion) else: print("Cadena no valida") self.aceptacion = True Hi
class Sintactico(): def __init__(self, size): self.pila = Pila() self.pila.push('$') self.pila.push('0') self.columna = 0 self.cantidad = size self.accion = "" def comparar(self, token): if (valores[token]): self.accion = matriz[int(self.pila.top())][int(valores[token])] print('Pila: ', self.pila.get()) print('Token: ', token) if (self.accion == -1): print('Cadena valida') elif (self.accion > 0): self.pila.push(self.accion) print('Accion: PUSH') print('\n') elif (self.accion < 0): self.pila.pop(reglas[self.accion]['cantidad']) self.pila.push(matriz[int( self.pila.top())][reglas[self.accion]['columna']]) print('Accion: POP %d elementos' % reglas[self.accion]['cantidad']) print('Accion: PUSH de la regla') print('\n') self.comparar('$') else: print('Invalida') exit()
class Sintactico(): def __init__(self,size): self.pila = Pila() self.pila.push('$') self.pila.push('0') self.columna = 0 self.cantidad = size self.accion = "" self.list_tmp = list() self.arbol = [] def comparar(self,token,valor): if(valores[token]): self.accion = matriz[int(self.pila.top())][int(valores[token])] print('Pila: ', self.pila.get()) print('Token: ', token) if(self.accion == -1): print('Cadena valida\n') print('==== Arbol ====') self.arbol = self.arbol[::-1] for item in self.arbol: item.list = item.list[::-1] print(item.regla,'==> ',item.list) elif(self.accion > 0): self.pila.push(self.accion) self.list_tmp.append(valor) print('Accion: PUSH') print('\n') elif(self.accion < 0): self.pila.pop(reglas[self.accion]['cantidad']) self.pila.push(matriz[int(self.pila.top())][reglas[self.accion]['columna']]) print('-----GENERA REGLA-----') print('Accion: POP %d elementos'%reglas[self.accion]['cantidad']) print('Accion: PUSH de la regla') print('Nombre: ', reglas[self.accion]['nombre']) print('\n') list_aux = [] if(reglas[self.accion]['cantidad'] > 0): print('Lista:' ,self.list_tmp) aux = reglas[self.accion]['cantidad'] for i in range(aux): valor2 = self.list_tmp.pop(-1) list_aux.append(valor2) self.arbol.append(nodo(reglas[self.accion]['nombre'], reglas[self.accion]['regla'], list_aux)) self.list_tmp.append(reglas[self.accion]['regla']) self.comparar(token,valor) else: print('Invalida') exit()
def recorrer_entrada(self, cadena, tipos, pila): self.inicializar_reglas() while self.aceptacion == False: print("Cadena: " + str(cadena[self.contador])) self.fila = self.regresa_tipo(pila.top()) self.columna = self.regresa_tipo(tipos[self.contador]) self.accion = self.tabla[self.fila, self.columna] print("Fila: " + str(self.fila) + " pila_top: " + str(pila.top())) print("Columna: " + str(self.columna) + " tipos__: " + str(tipos[self.contador])) print("Accion: " + str(self.accion)) if self.accion == -1: print("Cadena aceptada") self.aceptacion = True break if self.accion > 0: pila.push(tipos[self.contador]) pila.push(self.accion) self.contador = self.contador + 1 pila.muestra() print("\n----------------\n\n") #if self.contador == 5: # self.aceptacion = True elif self.accion < 0: self.accion = -self.accion self.accion = self.accion - 1 for i in range(self.numero_elementos[self.accion - 1] * 2): pila.pop() self.fila = pila.top() pila.push(self.reglas[self.accion - 1]) self.columna = pila.top() self.accion = self.tabla[self.fila, self.regresa_tipo(self.columna)] pila.push(self.accion) print("=====") pila.muestra() print("=====") # self.aceptacion = True else: print("Cadena no valida") self.aceptacion = True
class Sintactico(): def __init__(self, size): self.pila = Pila() self.pila.push('$') self.pila.push('0') self.columna = 0 self.cantidad = size self.accion = "" def comparar(self, token): if (valores[token]): self.accion = matriz[int(self.pila.top())][int(valores[token])] if (self.accion == -1): print('Cadena valida') elif (self.accion > 0): self.pila.push(self.accion) elif (self.accion < 0): self.pila.pop(reglas[self.accion]['cantidad']) self.pila.push(matriz[int( self.pila.top())][reglas[self.accion]['columna']]) self.comparar('$') else: print('Invalida') exit()