예제 #1
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)