예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
파일: gui.py 프로젝트: edgarJ91/tytus
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
예제 #6
0
    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 ")