Análisis léxico en el diseño del compilador con ejemplo

Tabla de contenido:

Anonim

¿Qué es el análisis léxico?

El ANÁLISIS LÉXICO es la primera fase del diseño del compilador. Un Lexer toma el código fuente modificado que está escrito en forma de oraciones. En otras palabras, le ayuda a convertir una secuencia de caracteres en una secuencia de tokens. El analizador léxico divide esta sintaxis en una serie de tokens. Elimina cualquier espacio extra o comentario escrito en el código fuente.

Los programas que realizan análisis léxico se denominan analizadores léxicos o lexers. Un lexer contiene tokenizador o escáner. Si el analizador léxico detecta que el token no es válido, genera un error. Lee los flujos de caracteres del código fuente, comprueba los tokens legales y pasa los datos al analizador de sintaxis cuando lo requiere.

Ejemplo

How Pleasant Is The Weather?

Vea este ejemplo; Aquí, podemos reconocer fácilmente que hay cinco palabras Qué agradable, el clima, es. Esto es muy natural para nosotros, ya que podemos reconocer los separadores, los espacios en blanco y el símbolo de puntuación.

 HowPl easantIs Th ewe ather?

Ahora, mira este ejemplo, también podemos leer esto. Sin embargo, llevará algún tiempo porque los separadores se colocan en los lugares impares. No es algo que te llegue de inmediato.

En este tutorial, aprenderá

  • Terminologías básicas:
  • Arquitectura del analizador léxico: cómo se reconocen los tokens
  • Funciones del analizador léxico
  • Errores léxicos
  • Recuperación de errores en Lexical Analyzer
  • Analizador léxico frente a analizador
  • ¿Por qué separar Lexical y Parser?
  • Ventajas del análisis léxico
  • Desventaja del análisis léxico

Terminologías básicas

¿Qué es un lexema?

Un lexema es una secuencia de caracteres que se incluyen en el programa fuente de acuerdo con el patrón de coincidencia de un token. No es más que una instancia de un token.

¿Qué es una ficha?

El token es una secuencia de caracteres que representa una unidad de información en el programa fuente.

¿Qué es el patrón?

Un patrón es una descripción que utiliza el token. En el caso de una palabra clave que se usa como token, el patrón es una secuencia de caracteres.

Arquitectura del analizador léxico: cómo se reconocen los tokens

La tarea principal del análisis léxico es leer los caracteres de entrada en el código y producir tokens.

El analizador léxico escanea todo el código fuente del programa. Identifica cada token uno por uno. Los escáneres generalmente se implementan para producir tokens solo cuando los solicita un analizador. Así es como funciona-

  1. "Obtener el siguiente token" es un comando que se envía desde el analizador al analizador léxico.
  2. Al recibir este comando, el analizador léxico escanea la entrada hasta encontrar el siguiente token.
  3. Devuelve el token al analizador.

Lexical Analyzer omite los espacios en blanco y los comentarios al crear estos tokens. Si hay algún error, el analizador Lexical correlacionará ese error con el archivo de origen y el número de línea.

Funciones del analizador léxico

El analizador léxico realiza las siguientes tareas determinadas:

  • Ayuda a identificar el token en la tabla de símbolos.
  • Elimina los espacios en blanco y los comentarios del programa fuente.
  • Correlaciona los mensajes de error con el programa fuente.
  • Le ayuda a expandir las macros si se encuentran en el programa fuente
  • Leer caracteres de entrada del programa fuente

Ejemplo de análisis léxico, tokens, no tokens

Considere el siguiente código que se envía a Lexical Analyzer

#include int maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}

Ejemplos de tokens creados

Lexeme Simbólico
En t Palabra clave
máximo Identificador
( Operador
En t Palabra clave
X Identificador
, Operador
En t Palabra clave
Y Identificador
) Operador
{ Operador
Si Palabra clave

Ejemplos de Nontokens

Escribe Ejemplos de
Comentario // Esto comparará 2 números
Directiva de preprocesador #include
Directiva de preprocesador #define NUMS 8,9
Macro NUMS
Espacio en blanco / n / b / t

Errores léxicos

Una secuencia de caracteres que no es posible escanear en ningún token válido es un error léxico. Datos importantes sobre el error léxico:

  • Los errores léxicos no son muy comunes, pero deben ser gestionados por un escáner.
  • Los errores ortográficos de identificadores, operadores y palabras clave se consideran errores léxicos.
  • Generalmente, un error léxico es causado por la aparición de algún carácter ilegal, principalmente al comienzo de un token.

Recuperación de errores en Lexical Analyzer

A continuación, se muestran algunas de las técnicas de recuperación de errores más comunes:

  • Elimina un carácter de la entrada restante
  • En el modo de pánico, los personajes sucesivos siempre se ignoran hasta que llegamos a una ficha bien formada.
  • Insertando el carácter que falta en la entrada restante
  • Reemplazar un personaje con otro personaje
  • Transponer dos caracteres en serie

Analizador léxico frente a analizador

Analizador léxico Analizador
Programa de entrada de escaneo Realizar análisis de sintaxis
Identificar tokens Crea una representación abstracta del código
Insertar tokens en la tabla de símbolos Actualizar las entradas de la tabla de símbolos
Genera errores léxicos Genera un árbol de análisis del código fuente.

¿Por qué separar Lexical y Parser?

  • La simplicidad del diseño: facilita el proceso de análisis léxico y el análisis de sintaxis al eliminar tokens no deseados.
  • Para mejorar la eficiencia del compilador: lo ayuda a mejorar la eficiencia del compilador
  • Especialización: se pueden aplicar técnicas especializadas para mejorar el proceso de análisis léxico.
  • Portabilidad: solo el escáner requiere comunicarse con el mundo exterior
  • Mayor portabilidad: peculiaridades específicas del dispositivo de entrada restringidas al lexer

Ventajas del análisis léxico

  • El método del analizador léxico es utilizado por programas como los compiladores que pueden usar los datos analizados del código de un programador para crear un código ejecutable binario compilado.
  • Los navegadores web lo utilizan para formatear y mostrar una página web con la ayuda de datos analizados de JavsScript, HTML, CSS
  • Un analizador léxico separado le ayuda a construir un procesador especializado y potencialmente más eficiente para la tarea.

Desventaja del análisis léxico

  • Necesita dedicar mucho tiempo a leer el programa fuente y particionarlo en forma de tokens.
  • Algunas expresiones regulares son bastante difíciles de entender en comparación con las reglas PEG o EBNF
  • Se necesita más esfuerzo para desarrollar y depurar el lexer y sus descripciones de token
  • Se requiere una sobrecarga de tiempo de ejecución adicional para generar las tablas lexer y construir los tokens

Resumen

  • El análisis léxico es la primera fase en el diseño del compilador.
  • Un lexema es una secuencia de caracteres que se incluyen en el programa fuente de acuerdo con el patrón de coincidencia de un token.
  • El analizador léxico está implementado para escanear todo el código fuente del programa.
  • El analizador léxico ayuda a identificar el token en la tabla de símbolos
  • Una secuencia de caracteres que no es posible escanear en ningún token válido es un error léxico.
  • Elimina un carácter de la entrada restante es útil Método de recuperación de errores
  • Lexical Analyzer escanea el programa de entrada mientras el analizador realiza el análisis de sintaxis
  • Facilita el proceso de análisis léxico y el análisis de sintaxis al eliminar tokens no deseados.
  • Los navegadores web utilizan el analizador léxico para formatear y mostrar una página web con la ayuda de datos analizados de JavsScript, HTML, CSS
  • El mayor inconveniente de usar el analizador Lexical es que necesita una sobrecarga de tiempo de ejecución adicional para generar las tablas de lexer y construir los tokens.