Esempio n. 1
0
    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
Esempio n. 2
0
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()
Esempio n. 3
0
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()
Esempio n. 4
0
    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
Esempio n. 5
0
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()