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)