def p_error(t): try: print("Error sintactico, no se espera el valor " + t.value, t.lineno, find_column(t)) p = Datos("SINTACTICO", "Error sintactico, no se espera el valor " + t.value, t.lineno, find_column(t)) Reporte.agregar(p) except: print("Error sintactico irrecuperable", 1, 1) p = Datos("SINTACTICO", "Error sintactico irrecuperable", 1, 1) Reporte.agregar(p)
def t_error(t): print("Error lexico, simbolo " + t.value[0] + " no valido. en la linea: " + t.lexer.lineno + " y columna: " + find_column(t)) p = Datos("LEXICO", "Error lexico, simbolo " + t.value[0] + " no valido ", t.lexer.lineno, find_column(t)) Reporte.agregar(p) t.lexer.skip(1)
def convertir_a_numero(self, string_a_convertir): cadena_convertida = 0 try: cadena_convertida = int(string_a_convertir) except ValueError: p = Datos( "SEMANTICO", "error convirtiendo la cadena " + string_a_convertir + " a un digito", self.line, self.column) Reporte.agregar(p) return cadena_convertida
def getValor(self,entorno,tree): if(self.tipo == TIPO.NORMAL): return self.valor.getValor(entorno,tree) elif(self.tipo == TIPO.ID): symbolic = entorno.get(str(self.value)) if(symbolic == None): valueaagregar = Datos("SEMANTICO","No es existe la Variable "+self.value,self.line,self.column) Reporte.agregar(valueaagregar) return None value = symbolic.getValor(entorno,tree) return value
def scan1(self): SentenciasR = Sentencias.ReporteD() SentenciasR.Abrir() ast = [] Ent = [] execr = N.Nodo() execr.start() inputValue=self.tex.get("1.0","end-1c") tkinter.messagebox.showwarning(title=None, message=inputValue) # asc.texto = inputValue.lower() asc.texto ="CREATE DATABASE casa" sentencias = asc.parse(inputValue) self.sentencias = sentencias #tkinter.messagebox.showwarning(title=None, message="1 asc") Ent = Entorno.Entorno(None) print("recorrera") ast = Ast.Ast(sentencias) bandera = False if(sentencias != None): for x in sentencias: try: a = True print("testeara --- ") print(x.id) if(ast.exist_label(x)): print("Ya existe la variable ") print("Ya existe la variable ",x.id) valueaagregar = Datos("SEMANTICO","Ya existe la variable "+x.id,x.line,x.column) Reporte.agregar(valueaagregar) else: print("testeara -exist_label ") print(x.id) ast.agregarlabel(x) except: pass #tkinter.messagebox.showwarning(title=None, message="2") print("parseara") A = ast.getlabels() if(A != None): print("1 ") for W in A: try: print("ejecutara2 ---------------------- ", W) except: pass for W in A: try: print("ejecutara ---------------------- ", W) print("2 ") print("3 ") try: W.ejecutar(Ent,ast) print("4b ") except: print("3b ") pass except: pass print("4 ") else: valueaagregar = Datos("SEMANTICO","Arbol vacio para compilar ",0,0) Reporte.agregar(valueaagregar) self.ent = Ent self.ast = ast
def getValor(self, entorno, tree): print("wwq ") # print(self.tipo) print("ww77 ") if (self.tipo == TIPO.VALOR): print("ww9999 ") print("wwqd " + str(self.tipo)) print("ww99990 ") print(self.value.getValor(entorno, tree)) return self.value.getValor(entorno, tree) if (self.tipo == TIPO.MD5): print("entro a tipomd5 ") return self.value.Value_md5() elif (self.tipo == TIPO.SUM): param1 = self.left.getValor(entorno, tree) param2 = self.right.getValor(entorno, tree) if (isinstance(param1, str) and isinstance(param2, str)): return param1 + param2 if (isinstance(param1, str)): param1 = self.convertir_a_numero(valor1) if (isinstance(param2, str)): param2 = self.convertir_a_numero(valor2) if isinstance(param1, int) and isinstance(param2, int): return int(param1) + int(param2) elif isinstance(param1, float) and isinstance(param2, int): return round(float(float(param1) + float(param2)), 2) elif isinstance(param1, int) and isinstance(param2, float): return round(float(float(param1) + float(param2)), 2) elif isinstance(param1, float) and isinstance(param2, float): return round(float(float(param1) + float(param2)), 2) else: p = Datos("SEMANTICO", "Error sumando datos, verifique que sean validos", self.line, self.column) Reporte.agregar(p) return None elif (self.tipo == TIPO.REST): param1 = self.left.getValor(entorno, tree) param2 = self.right.getValor(entorno, tree) if (isinstance(param1, str) and isinstance(param2, str)): return param1 + param2 if (isinstance(param1, str)): param1 = self.convertir_a_numero(valor1) if (isinstance(param2, str)): param2 = self.convertir_a_numero(valor2) if isinstance(param1, int) and isinstance(param2, int): return int(param1) - int(param2) elif isinstance(param1, float) and isinstance(param2, int): return round(float(float(param1) - float(param2)), 2) elif isinstance(param1, int) and isinstance(param2, float): return round(float(float(param1) - float(param2)), 2) elif isinstance(param1, float) and isinstance(param2, float): return round(float(float(param1) - float(param2)), 2) else: p = Datos("SEMANTICO", "Error restando datos, verifique que sean validos", self.line, self.column) Reporte.agregar(p) return None elif (self.tipo == TIPO.MULT): param1 = self.left.getValor(entorno, tree) param2 = self.right.getValor(entorno, tree) if (isinstance(param1, str)): param1 = self.convertir_a_numero(valor1) if (isinstance(param2, str)): param2 = self.convertir_a_numero(valor2) if isinstance(param1, int) and isinstance(param2, int): return int(param1) * int(param2) elif isinstance(param1, float) and isinstance(param2, int): return round(float(float(param1) * float(param2)), 2) elif isinstance(param1, int) and isinstance(param2, float): return round(float(float(param1) * float(param2)), 2) elif isinstance(param1, float) and isinstance(param2, float): return round(float(float(param1) * float(param2)), 2) else: p = Datos( "SEMANTICO", "Error multiplicando datos, verifique que sean validos", self.line, self.column) Reporte.agregar(p) return None elif (self.tipo == TIPO.DIV): param1 = self.left.getValor(entorno, tree) param2 = self.right.getValor(entorno, tree) if (isinstance(param1, str)): param1 = self.convertir_a_numero(valor1) if (isinstance(param2, str)): param2 = self.convertir_a_numero(valor2) if isinstance(param2, int): if int(param2) == 0: p = Datos( "SEMANTICO", "Error dividiendo datos entre 0, verifique que sean validos", self.line, self.column) Reporte.agregar(p) return None if isinstance(param1, int) and isinstance(param2, int): return int(param1) / int(param2) elif isinstance(param1, float) and isinstance(param2, int): return round(float(float(param1) / float(param2)), 2) elif isinstance(param1, int) and isinstance(param2, float): return round(float(float(param1) / float(param2)), 2) elif isinstance(param1, float) and isinstance(param2, float): return round(float(float(param1) / float(param2)), 2) else: p = Datos( "SEMANTICO", "Error dividiendo datos, verifique que sean validos", self.line, self.column) Reporte.agregar(p) return None elif (self.tipo == TIPO.ID): symbolic = entorno.get(str(self.value)) if (symbolic == None): valueaagregar = Datos("SEMANTICO", "No es existe la Variable " + self.value, self.line, self.column) Reporte.agregar(valueaagregar) return None value = symbolic.getValor(entorno, tree) return value print("wwq44 ")