error léxico

Cuando el patrón del token no coincide con el prefijo de la entrada restante, el analizador léxico se atasca y tiene que recuperarse de este estado para analizar la entrada restante. En palabras simples, se produce un error léxico cuando una secuencia de caracteres no coincide con el patrón de ningún token. Suele ocurrir durante la ejecución de un programa.

Tipos de error léxico:

Los tipos de errores léxicos que pueden ocurrir en un analizador léxico son los siguientes:

1. Exceder la longitud del identificador o constantes numéricas.

Ejemplo:

C++

#include <iostream>
using namespace std;
 
int main() {
 
    int a=2147483647 +1;
    return 0;
}

Este es un error léxico ya que el entero con signo se encuentra entre −2,147,483,648 y 2,147,483,647  

2. Aparición de personajes ilegales

Ejemplo:  

C++

#include <iostream>
using namespace std;
 
int main() {
 
    printf("Geeksforgeeks");$
    return 0;
}

Este es un error léxico ya que aparece un carácter ilegal $al final de la declaración.

3. String sin igual

Ejemplo:  

C++

#include <iostream>
using namespace std;
 
int main() {
/* comment
    cout<<"GFG!";
    return 0;
}

Este es un error léxico ya que el final del comentario «*/» no está presente pero el principio sí está presente.

4. Error de ortografía

C++

#include <iostream>
using namespace std;
 
int main() {
 
    int 3num= 1234;    /* spelling error as identifier
                       cannot start with a number*/
    return 0;
}

5. Reemplazar un carácter con un carácter incorrecto.

C++

#include <iostream>
using namespace std;
 
int main() {
 
    int x = 12$34; /*lexical error as '$' doesn't
                     belong within 0-9 range*/
    return 0;
}

Otros errores léxicos incluyen 

6. Eliminación del personaje que debería estar presente.

C++

#include <iostream> /*missing 'o' character
                     hence lexical error*/
using namespace std;
 
int main() {
 
    cout<<"GFG!";
    return 0;
}

7. Transposición de dos caracteres.

C++

#include <iostream>
using namespace std;
 
int main()
{
  /* spelling of main here would be treated as an lexical
     error and won't be considered as an identifier,
     transposition of character 'i' and 'a'*/
    cout << "GFG!";
    return 0;
}

Técnica de recuperación de errores

Cuando surge una situación en la que el analizador léxico no puede continuar porque ninguno de los patrones de tokens coincide con ningún prefijo de la entrada restante. La estrategia de recuperación más simple es la recuperación en “ modo de pánico ”. Eliminamos caracteres sucesivos de la entrada restante hasta que el analizador léxico pueda identificar un token bien formado al comienzo de la entrada que queda. 

Las acciones de recuperación de errores son:

  1. Transposición de dos caracteres adyacentes.
  2. Inserte un carácter faltante en la entrada restante.
  3. Reemplazar un carácter con otro carácter.
  4. Elimine un carácter de la entrada restante.

Publicación traducida automáticamente

Artículo escrito por aniruddharouth y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *