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)
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)
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 __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)