def Analizar(self):
        Tkn.LimpiarHTML(self)
        ERROR.LimpiarErrores(self)

        self.consola.delete(1.0, END)
        self.recorrido.delete(1.0, END)
        '''
        self.editor.tag_add("start", "3.0", "3.1")
        self.editor.tag_config("start", background="black", foreground="yellow")
        editor1 = self.editor
        self.editor.tag_add("start1", "3.1", "3.5")
        editor1.tag_config("start1", background="green", foreground="red")
        '''
        Ruta = self.Archivo
        extension = Ruta.split(".")
        mensaje = messagebox.showinfo("Tipo Archivo",
                                      "Es un archivo " + extension[1])
        if (extension[1] == "html"):
            HTML(self.editor.get(1.0, END))
        elif (extension[1] == "css"):
            CSS(self.editor.get(1.0, END))
        elif (extension[1] == "js"):
            JS(self.editor.get(1.0, END))
        elif (extension[1] == "rmt"):
            RMT(self.editor.get(1.0, END))
        else:
            messagebox.showerror("ERROR", "Extensión no aceptada")
        self.Color(extension[1])
        self.EscribirConsola()
        self.EscribirEstados()
 def EscribirConsola(self):
     LError = []
     LError = ERROR.ErroresList(self)
     self.consola.delete(1.0, END)
     for er in LError:
         self.consola.insert(INSERT, er)
         self.consola.insert(INSERT, "\n")
    def AnalizadorSintac(self):
        i = 0
        ParA = 0
        ParC = 0
        correcto = False
        while (i < len(listaLex)):
            if (listaLex[i] == "("):
                ParA += 1
                i = i + 1
                correcto = self.Parentesis(i)
            if (listaLex[i]) == ")":
                ParC += 1
                i = i + 1

        if (ParA != ParC):
            ERROR(")", "Error sintactico, falto parentesis cerrado )", 0, 0)
예제 #4
0
    def __init__(self, TextoCSS):
        self.TextoCSS = TextoCSS
        estado = 0
        lexema = ""
        fila = 1
        columna = 0 
        colorear = 0

        i = 0
        while i < len(TextoCSS):
            caracter = TextoCSS[i]
            if (estado == 0):
                lexema = ""
                #Para validar todos los signos permitidos 
                if ((caracter == '{')|(caracter == '}')|(caracter == ':')|(caracter == ';')|(caracter == '(')|(caracter == ')')|(caracter == '*')|(caracter == '.')|(caracter == '#')|(caracter == ',')):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 8
                elif(caracter == '/'):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 1
                #Reconozco las comillas para la cadena 
                elif((caracter == '"')|(caracter == '”')|(caracter == '“')):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 14
                elif(caracter == '-'):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 12
                elif (caracter.isalpha()):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 5
                elif (caracter.isdigit()):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 9
                elif (caracter == '\n'):
                    columna = 0
                    fila +=1
                    colorear += 1
                    i+=1
                    estado = 0
                elif (caracter.isspace()):
                    lexema += caracter
                    colorear+=1
                    columna += 1 
                    i+=1
                    estado = 0 
                else:
                    lexema += caracter
                    columna += 1
                    colorear += 1
                    ERROR(lexema, "Caracter desconocido", fila, columna)
                    i+=1
                    estado = 0

            elif (estado == 1):
                if(caracter == "*"):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 2
                else:
                    estado = 0

            elif (estado == 2):
                if(caracter == "*"):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 3
                elif (caracter == '\n'):
                    columna = 0
                    fila +=1
                    colorear += 1
                    i+=1
                    estado = 2
                elif (caracter.isspace()):
                    lexema += caracter
                    colorear+=1
                    columna += 1 
                    i+=1
                    estado = 2
                else:
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 2

            elif (estado == 3):
                if(caracter == "/"):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 4
                else:
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 2
            
            elif (estado == 4):
                Tkn(1, lexema, "Comentario", fila, columna)
                self.esta2(lexema, estado)
                estado = 0

            elif (estado == 5):
                if(caracter.isalpha()):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 5
                elif(caracter == "-"):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 6
                else:
                    if(self.Reservadas(lexema) == 2):
                        self.esta2(lexema, estado)
                        Tkn(2, lexema, "Palabra", fila, columna)
                    else:
                        self.esta2(lexema, estado)
                        Tkn(self.Reservadas(lexema), lexema, "Reservada", fila, columna)
                    estado = 0

            elif(estado == 6):
                if(caracter.isalpha()):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 7
                else: 
                    estado = 0

            elif(estado == 7):
                if(caracter.isalpha()):
                    columna+=1  
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 7
                else:
                    if(self.Reservadas(lexema) == 2):
                        self.esta2(lexema, estado)
                        Tkn(2, lexema, "Palabra", fila, columna)
                    else:
                        self.esta2(lexema, estado)
                        Tkn(self.Reservadas(lexema), lexema, "Reservada", fila, columna)
                    estado = 0

            elif (estado == 8):
                self.esta2(lexema, estado)
                Tkn(1, lexema, "Signo", fila, columna)
                estado = 0

            elif (estado == 9):
                if (caracter.isdigit()):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 9
                elif(caracter == "."):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 10
                elif(caracter == "%"):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 13
                    '''elif (caracter.isalpha()):
                    columna+=1 
                    colorear+=1 
                    lexema += caracter
                    i+=1
                    estado = 16 '''
                else:
                    Tkn(4, lexema, "Numero", fila, columna)
                    estado = 0

            elif (estado == 10):
                if (caracter.isdigit()):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 11
                else:
                    ERROR(lexema, "Decimal no permitido", fila, columna)
                    estado = 0

            elif (estado == 11):
                if (caracter.isdigit()):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 11
                elif (caracter == "%"):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 13
                    '''elif (caracter.isalpha()):
                    columna+=1 
                    colorear+=1 
                    lexema += caracter
                    i+=1
                    estado = 16 '''
                else:
                    Tkn(4, lexema, "Numero", fila, columna)
                    estado = 0

            elif (estado == 12):
                if (caracter.isdigit()):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 9
                else:
                    estado = 0

            elif (estado == 13):
                Tkn(13, lexema, "Porcentaje", fila, columna)
                self.esta2(lexema, estado)
                estado = 0

            elif(estado == 14):
                if((caracter == '"')|(caracter == '”')|(caracter == '“')):
                    columna+=1 
                    lexema += caracter
                    self.esta2(lexema, estado)
                    i+=1
                    estado = 15
                else: 
                    columna+=1 
                    colorear+=1 
                    lexema += caracter
                    i+=1
                    estado = 14
                    
            elif (estado == 15):
                self.esta2(lexema, estado)
                Tkn(15, lexema, "Cadena", fila, columna)
                estado = 0

            else: 
                print("Nose que hacer")
                
        self.Path(TextoCSS)
예제 #5
0
 def Path(self, texto):
     linea = texto.split("\n")
     salida = linea[0].split("output")
     print(salida[1])
     Tkn.ReporteToken(self, salida[1])
     ERROR.ReporteError(self, salida[1])
예제 #6
0
    def __init__(self, TextoHTML):
        self.TextoHTML = TextoHTML
        #print("Lee bien el texto \n " + TextoHTML)
        estado = 0
        lexema = ""
        fila = 1
        columna = 0
        colorear = 0
        #En este for vamos a leer caracater por caracter de la cadena, ahora hay que enviarlo al estado
        #Cambiaremos a while porque el for siempre avanza y necesitamos retroceder una iteración
        i = 0
        while i < len(TextoHTML):
            caracter = TextoHTML[i]
            if (estado == 0):
                lexema = ""
                if ((caracter == '<') | (caracter == '>') | (caracter == '/') |
                    (caracter == '=') | (caracter == '(') | (caracter == ')') |
                    (caracter == ':') | (caracter == '.') | (caracter == ';') |
                    (caracter == '-') | (caracter == ',')):
                    columna += 1
                    colorear += 1
                    lexema += caracter
                    i += 1
                    estado = 1
                elif ((caracter == '"') | (caracter == '\'') |
                      (caracter == '”')):
                    columna += 1
                    colorear += 1
                    lexema += caracter
                    i += 1
                    estado = 5
                elif (caracter.isalpha()):
                    columna += 1
                    colorear += 1
                    lexema += caracter
                    i += 1
                    estado = 2
                elif (caracter.isdigit()):
                    columna += 1
                    colorear += 1
                    lexema += caracter
                    i += 1
                    estado = 4
                elif (caracter == '\n'):
                    columna = 0
                    fila += 1
                    colorear += 1
                    i += 1
                    estado = 0
                elif (caracter.isspace()):
                    lexema += caracter
                    colorear += 1
                    columna += 1
                    i += 1
                    estado = 0
                else:
                    lexema += caracter
                    columna += 1
                    colorear += 1
                    ERROR(lexema, "Caracter desconocido", fila, columna)
                    i += 1
                    estado = 0

            elif (estado == 1):
                Tkn(1, lexema, "Signo", fila, columna)
                estado = 0

            elif (estado == 2):
                if (caracter.isalpha()):
                    columna += 1
                    colorear += 1
                    lexema += caracter
                    i += 1
                    estado = 2
                elif (caracter.isdigit()):
                    columna += 1
                    colorear += 1
                    lexema += caracter
                    i += 1
                    estado = 3
                else:
                    if (self.Reservadas(lexema) == 2):
                        Tkn(2, lexema, "Palabra", fila, columna)
                    else:
                        Tkn(self.Reservadas(lexema), lexema, "Reservada", fila,
                            columna)
                    estado = 0

            elif (estado == 3):
                if (caracter.isdigit()):
                    columna += 1
                    colorear += 1
                    lexema += caracter
                    i += 1
                    estado = 3
                else:
                    if (self.Reservadas(lexema) == 2):
                        Tkn(2, lexema, "Palabra", fila, columna)
                    else:
                        Tkn(self.Reservadas(lexema), lexema, "Reservada", fila,
                            columna)
                    estado = 0

            elif (estado == 4):
                if (caracter.isdigit()):
                    columna += 1
                    colorear += 1
                    lexema += caracter
                    i += 1
                    estado = 4
                else:
                    Tkn(4, lexema, "Numero", fila, columna)
                    estado = 0

            elif (estado == 5):
                if ((caracter == '"') | (caracter == '\'') |
                    (caracter == '”')):
                    columna += 1
                    colorear += 1
                    lexema += caracter
                    i += 1
                    estado = 6
                else:
                    columna += 1
                    colorear += 1
                    lexema += caracter
                    i += 1
                    estado = 5

            elif (estado == 6):
                Tkn(6, lexema, "Cadena", fila, columna)
                estado = 0

            else:
                print("Nose que hacer")
                Tkn.MostrarTK(self)

        Tkn.MostrarTK(self)
        self.Path(TextoHTML)
        ERROR.MostrarError(self)
    def __init__(self, TextoRMT):
        self.TextoRMT = TextoRMT
        estado = 0
        lexema = ""
        fila = 1
        columna = 0

        i = 0
        while i < len(TextoRMT):
            caracter = TextoRMT[i]
            if (estado == 0):
                lexema = ""
                if ((caracter == '*') | (caracter == '/') | (caracter == '+') |
                    (caracter == '-') | (caracter == '(') | (caracter == ')')):
                    columna += 1
                    lexema += caracter
                    i += 1
                    estado = 5
                elif (caracter.isalpha()):
                    columna += 1
                    lexema += caracter
                    i += 1
                    estado = 4
                elif (caracter.isdigit()):
                    columna += 1
                    lexema += caracter
                    i += 1
                    estado = 1
                elif (caracter == '\n'):
                    columna = 0
                    fila += 1
                    i += 1
                    estado = 0
                elif (caracter.isspace()):
                    lexema += caracter
                    columna += 1
                    i += 1
                    estado = 0
                else:
                    lexema += caracter
                    columna += 1
                    ERROR(lexema, "Caracter desconocido", fila, columna)
                    i += 1
                    estado = 0

            elif (estado == 1):
                if (caracter.isdigit()):
                    columna += 1
                    lexema += caracter
                    i += 1
                    estado = 1
                elif (caracter == '.'):
                    columna += 1
                    lexema += caracter
                    i += 1
                    estado = 2
                else:
                    listaLex.append("Numero")
                    Tkn(1, lexema, "Numero", fila, columna)
                    estado = 0

            elif (estado == 2):
                if (caracter.isdigit()):
                    columna += 1
                    lexema += caracter
                    i += 1
                    estado = 3
                else:
                    ERROR(lexema,
                          "Error sintactico, falto numero despues del punto.",
                          fila, columna)
                    estado = 0

            elif (estado == 3):
                if (caracter.isdigit()):
                    columna += 1
                    lexema += caracter
                    i += 1
                    estado = 3
                else:
                    listaLex.append("Numero")
                    Tkn(1, lexema, "Numero", fila, columna)
                    estado = 0

            elif (estado == 4):
                if (caracter.isalpha()):
                    columna += 1
                    lexema += caracter
                    i += 1
                    estado = 4
                elif (caracter.isdigit()):
                    columna += 1
                    lexema += caracter
                    i += 1
                    estado = 4
                elif (caracter == '_'):
                    columna += 1
                    lexema += caracter
                    i += 1
                    estado = 4
                else:
                    listaLex.append("Variable")
                    Tkn(4, lexema, "Variable", fila, columna)
                    estado = 0

            elif (estado == 5):
                listaLex.append(lexema)
                Tkn(5, lexema, "Signo", fila, columna)
                estado = 0

            else:
                print("Nose que hacer")
                Tkn.MostrarTK(self)

        #self.AnalizadorSintac()
        self.Path(TextoRMT)
        ERROR.MostrarError(self)
 def Path(self, texto):
     ruta = "/js/"
     Tkn.ReporteToken(self, ruta)
     ERROR.ReporteError(self, ruta)
    def __init__(self, TextoJS):
        self.TextoJS = TextoJS

        estado = 0
        lexema = ""
        fila = 1
        columna = 0 
        colorear = 0

        i = 0
        while i < len(TextoJS):
            caracter = TextoJS[i]
            if (estado == 0):
                lexema = ""
                if ((caracter == '<')|(caracter == '>')|(caracter == '*')|(caracter == '=')|(caracter == '(')|(caracter == ')')|(caracter == ':')|(caracter == '.')|(caracter == ';')|(caracter == '-')|(caracter == ',')|(caracter == '{')|(caracter == '}')|(caracter == '+')|(caracter == '&')|(caracter == '|')|(caracter == '!')):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 7
                elif (caracter == "/"):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 1
                elif((caracter == '"')|(caracter == '\'')|(caracter == '”')):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 8
                elif (caracter.isalpha()):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 6
                elif (caracter.isdigit()):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 10
                elif (caracter == '\n'):
                    columna = 0
                    fila +=1
                    colorear += 1
                    i+=1
                    estado = 0
                elif (caracter.isspace()):
                    lexema += caracter
                    columna += 1 
                    i+=1
                    estado = 0 
                else:
                    lexema += caracter
                    columna += 1
                    ERROR(lexema, "Caracter desconocido", fila, columna)
                    i+=1
                    estado = 0

            elif (estado == 1):
                if(caracter == "/"):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 2
                elif (caracter == "*"):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 3
                else:
                    Tkn(1, lexema, "Signo", fila, columna)
                    estado = 0

            elif (estado == 2):
                if(caracter == "\n"):
                    Tkn(2, lexema, "Comentario", fila, columna)
                    estado = 0
                else:
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 2

            elif (estado == 3):
                if (caracter == "*"):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 4
                elif (caracter == '\n'):
                    columna = 0
                    fila +=1
                    colorear += 1
                    i+=1
                    estado = 3
                elif (caracter.isspace()):
                    lexema += caracter
                    colorear+=1
                    columna += 1 
                    i+=1
                    estado = 3
                else:
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 3
            

            elif (estado == 4):
                if (caracter == "/"):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 5
                elif (caracter == "*"):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 4
                elif (caracter == '\n'):
                    columna = 0
                    fila +=1
                    i+=1
                    estado = 3
                elif (caracter.isspace()):
                    lexema += caracter
                    columna += 1 
                    i+=1
                    estado = 3
                else:
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 4

            elif (estado == 5):
                Tkn(5, lexema, "Comentario", fila, columna)
                estado = 0

            elif (estado == 6):
                if(caracter.isalpha()):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 6
                else:
                    if(self.Reservadas(lexema) == 6):
                        Tkn(6, lexema, "Variable", fila, columna)
                    else:
                        Tkn(self.Reservadas(lexema), lexema, "Reservada", fila, columna)
                    estado = 0

            elif (estado == 7):
                Tkn(7, lexema, "Signo", fila, columna)
                estado = 0

            elif (estado == 8):
                if((caracter == '"')|(caracter == '\'')|(caracter == '”')):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 9
                else:
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 8

            elif (estado == 9):
                Tkn(9, lexema, "Cadena", fila, columna)
                estado = 0

            elif (estado == 10):
                if (caracter.isdigit()):
                    columna+=1 
                    lexema += caracter
                    i+=1
                    estado = 10
                else:
                    Tkn(10, lexema, "Numero", fila, columna)
                    estado = 0

            else: 
                print("Nose que hacer")
                Tkn.MostrarTK(self)

        self.Path(TextoJS)