sábado, 2 de abril de 2016

5. Analizador Léxico


Léxico

El léxico de un lenguaje de programación u otro lenguaje usado en la informática está constituido por todas las palabras y símbolos que lo componen. En los lenguajes de programación el léxico lo constituyen todos los elementos individuales del lenguaje, denominados frecuentemente “tokens”. Así son tokens: las palabras reservadas del lenguaje, los símbolos que denotan los distintos tipos de operadores, identificadores (de variables, de funciones, de procedimientos, de tipos, etc), separadores de sentencias, y otros símbolos empleados en las distintas construcciones del lenguaje.

Análisis Léxico 

Un programa fuente es una serie de símbolos que representan las construcciones del lenguaje tales como variables, etiquetas, palabras reservadas, constantes, operadores, entre otros. El programa fuente se trata inicialmente con el analizador léxico, el cual tiene el propósito de agrupar el texto en los diferentes tipos de patrones que conforman las
unidades léxicas como identificadores (de variables, de funciones, de procedimientos, de tipos, de clases), palabras reservadas y operadores. Por razones de eficiencia, a cada token se le asocia un atributo (o más de uno) que se representa internamente por un código numérico o por un tipo enumerado. Por ejemplo a un identificador se le puede dar una representación interna de 1, a una contante de 2, a un operador aritmético un 2,…, cada palabra reservada tiene su propio código. Así, para la siguiente sentencia de Pascal:

IF cuenta = sueldo THEN jefe:= justo;

El analizador léxico la separa en la siguiente secuencia de tokens:



Y les asigna su atributo, habitualmente por medio de un código numérico cuyo significado se ha definido previamente.

El análisis léxico es un análisis a nivel de caracteres, su misión es reconocer los componentes léxicos o tokens, enviando al analizador sintáctico los tokens y sus atributos.
También se encarga de eliminar los comentarios. El analizador léxico también recibe el nombre de explorador (en inglés scanner).

Práctica Laboratorio

Con el objeto de clarificar algunos de los conceptos sobre diseño de compiladores, se desea construir un mini compilador de un lenguaje muy simple (aunque de alto nivel), que se ha denominado MUSIM que significa MUy_SIMple. El lenguaje objeto será un lenguaje de bajo nivel denominado ENSAMPOCO que significa ENSAMbla POCO. 

La primera parte de este ejercicio consistirá en un programa que simula el análisis léxico de un compilador, que lee desde un archivo de texto el programa fuente. 

Definición del compilador de MUSIM/0


Generalmente un compilador toma el programa fuente, lo interpreta y crea un programa objeto (normalmente en lenguaje máquina). Por ahora nos limitaremos a comprender y analizar una de las formas, de cómo se llevaría a cabo un analizador léxico según las características de un lenguaje.

Fichero fuente  

Digite un programa en el lenguaje MUSIM/0, en un archivo de texto, guárdelo como prueba1.txt. 

Análisis Léxico a través del Lenguaje Intermedio  

El análisis léxico debe separar el fichero fuente en componentes léxicos o tokens, y enviarlos al analizador sintáctico (en este guía no se detallará el analizador sintáctico). Habitualmente se envían los componentes léxicos y sus atributos. En este caso solo se enviaran los tokens, ya que el atributo va implícito en el token (tan sólo se tiene el tipo de dato entero).


A continuación se muestra la definición de clase Léxico, la cual contiene las funciones necesarias para poder implementar un análisis léxico adecuado para el lenguaje MUSIM/0. Abra el C++ y digite el siguiente código:




Guarde el código .cpp en el mismo directorio donde guardo el archivo prueba1.txt, luego ejecute el código.

Análisis de resultados

Responda lo siguiente:


  1. ¿Qué es lo que muestra el programa?
  2. Coloque en el archivo prueba.txt algún carácter no reconocido por el lenguaje MUSIM/0. Vuelva a ejecutar la aplicación generada en C++. ¿Qué observó en la ejecución?  ¿Cuál es la razón del resultado?
  3. Elimine el carácter “;” de alguna de las instrucciones. Vuelva a ejecutar la aplicación. ¿Qué observó en la ejecución? ¿Cuál es la razón del resultado?
  4. Deduzca el algoritmo y escriba un programa en C++ utilizando la librería <fstream> para manejo de archivos 



1 comentario: