lunes, 20 de febrero de 2017

Analizador Léxico, Sintáctico y Semántico

Los ordenadores son una mezcla equilibrada de Software y Hardware
Los compiladores son programas de computadora que traducen de un lenguaje a otro un lenguaje escrito en lenguaje fuente y produce un programa equivalente escrito en lenguaje objeto
Un compilador se compone internamente de varias etapas o faces que realizan operaciones lógicas y estas son:

Analizador léxico
Lee la secuencia de caracteres de izquierda a derecha del programa fuente y agrupa la secuencia de caracteres en unidades con significado propio (componentes léxicos o tokens)
Las palabras clave identificadores, operadores, constantes numéricas, signos de puntuación como separadores de sentencia, llaves, parestesias, etcétera. son diversas clasificaciones de componentes léxicos.

Actividad:
Dos conceptos de analizador léxico, ejemplo y representación de sus componentes.

Análisis léxico (Scanner)
Scanner tiene las funciones de leer el programa fuente como un archivo de caracteres y dividirlo en tokens. Los tokens son las palabras reservadas de un lenguaje, secuencia de caracteres que representa una unidad de información en el programa fuente. En cada caso un token representa un cierto patrón de caracteres que el analizador léxico reconoce, o ajusta desde el inicio de los caracteres de entrada. De tal manera es necesario generar un mecanismo computacional que nos permita identificar el patrón de transición entre los caracteres de entrada, generando tokens, que posteriormente serán clasificados. Este mecanismo es posible crearlo a partir de un tipo especifico de maquina de estados llamado autómata finito. 

Ejemplos:



Representación de un Analizador léxico
Los componentes léxicos se representan:
1.       Palabras reservadas: if, while, do, …
2.       Identificadores: variables, funciones, tipos definidos por el usuario, etiquetas, …
3.       Operadores: =, >, <, >=, <=, +, *, …
4.       Símbolos especiales: ;, ( ), { }, …
5.       Constantes numéricas. literales que representan valores enteros y flotantes.

6.       Constantes de carácter: literales que representan cadenas de caracteres. 

¿Qué es un analizador léxico?
Se encarga de buscar los componentes léxicos o palabras que componen el programa fuente, según unas reglas o patrones. La entrada del analizador léxico podemos definirla como una secuencia de caracteres.
El analizador léxico tiene que dividir la secuencia de caracteres en palabras con significado propio y después convertirlo a una secuencia de terminales desde el punto de vista del analizador sintáctico, que es la entrada del analizador sintáctico. El analizador léxico reconoce las palabras en función de una gramática regular de manera que sus NO TERMINALES se convierten en los elementos de entrada de fases posteriores.

Ejemplos:

Representación de sus componentes



Análisis sintáctico 
determina si la secuencia de componentes léxicos sigue la sintaxis del lenguaje y obtiene la estructura jerárquica del programa en forma de árbol, donde los nodos son las construcciones de alto nivel del lenguaje.
Se determina las relaciones estructurales entre los componentes léxicos esto es semejante a realizar el análisis gramatical sobre una fase en el lenguaje natural. La estructura sintáctica se define mediante las gramáticas independientes del contexto

Actividad:
Dos conceptos de analizador sintáctico, ejemplo y representación de sus componentes.


¿Qué es el analizador sintáctico?
Es la fase del analizador que se encarga de chequear el texto de entrada en base a una gramática dada. Y en caso de que el programa de entrada sea válido, suministra el árbol sintáctico que lo reconoce. En teoría, se supone que la salida del analizador sintáctico es alguna representación del árbol sintáctico que reconoce la secuencia de tokens suministrada por el analizador léxico. En la práctica, el analizador sintáctico también hace:
• Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador semántico).
• Chequeo de tipos (del analizador semántico).
• Generar código intermedio.

• Generar errores cuando se producen. En definitiva, realiza casi todas las operaciones de la compilación. Este método de trabajo da lugar a los métodos de compilación dirigidos por sintaxis.


Representación de sus componentes


Análisis Semántico
El análisis semántico dota de un significado coherente a lo que hemos hecho en el análisis sintáctico.
El chequeo semántico se encarga de que los tipos que intervienen en las expresiones sean compatibles o que los parámetros reales de una función sean coherentes con los parámetros formales

Funciones principales
Identificar cada tipo de instrucción y sus componentes
Completar la Tabla de Símbolos
Realizar distintas comprobaciones y validaciones:
Comprobaciones de tipos.
Comprobaciones del flujo de control.
Comprobaciones de unicidad.

Comprobaciones de emparejamiento.

Actividad:
Concepto de analizador semántico, ejemplo y representación de sus componentes.

La tarea del compilador requiere la extracción del contenido semántico incluido en las distintas sentencias del programa. Es por esto que se hace necesario dotar al compilador de una serie de rutinas auxiliares que permitan captar todo aquello que no se ha expresado mediante la sintaxis del lenguaje y todo aquello que hace descender a nuestro lenguaje de programación de las alturas de una máquina abstracta hasta el nivel de un computador real.
El análisis semántico completa las dos fases anteriores de análisis lexicográfico y sintáctico incorporando ciertas comprobaciones que no pueden asimilarse al mero reconocimiento de una cadena dentro de un lenguaje.

La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. Un componente importante del análisis semántico es la Verificación de Tipos. Aquí, el compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente

Ejemplo

Representación de sus componentes
.

5 comentarios:

  1. Me resultó muy util tu blog, muchas gracias.

    ResponderEliminar
  2. Justo voy a comenzar con la materia de taller de compiladores y la calificación se basa en crear un compilador en java.

    ResponderEliminar
  3. Excelente, muy bien detallado cada punto, si pudieras agregar al post solamente la parte después del análisis que seria la parte de síntesis que es la parte de la implementación del código estaría completo. Muchas gracias!

    ResponderEliminar