ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Diseño De Las Etapas De Análisis De Un Compilador


Enviado por   •  13 de Mayo de 2014  •  Informe  •  2.760 Palabras (12 Páginas)  •  162 Visitas

Página 1 de 12

!

Problema Numero 40

Redactar una investigación de al menos dos cuartillas para cada caso sobre las aplicaciones de las gramáticas formales en:

!

a) Diseño de las etapas de análisis de un compilador para un lenguaje de programación como C, Java o Pascal.

b) Procesamiento de lenguajes naturales en el área de la inteligencia artificial.

c) Expresiones regulares en algoritmos de búsqueda de cadenas en lenguajes

de programación, como Perl.

!

A) DISEÑO DE LAS ETAPAS DE ANÁLISIS DE UN COMPILADOR !

Conceptualmente un compilador opera en fases. Cada una de las cuales transforma el programa fuente de una representación en otra. En la figura se muestra una descomposición típica de un compilador. En la práctica se pueden agrupar fases y las representaciones intermedias entres las fases agrupadas no necesitan ser construidas explícitamente.

!

!

Las tres primeras fases, que forman la mayor parte de la porción de análisis de un compilador, las otras dos actividades, la administración de la tabla se símbolos y el manejo de errores, se muestran en interacción con las seis fases de análisis léxico, análisis sintáctico, análisis semántico, generación de código intermedio, optimación de código y generación de código.

!

!ii

De modo informal, también se llamarán "fases" al administrador de la tabla de símbolos y al manejador de errores.

Administrador de la tabla de símbolos.

Una función esencial de un compilador es registrar los identificadores utilizados en el programa fuente y reunir información sobre los distintos atributos de cada identificador. Estos atributos pueden proporcionar información sobre la memoria asignada a un identificador, su tipo, su ámbito (la parte del programa donde tiene validez) y, en el caso de nombres de procedimientos, cosas como el número y tipos de sus argumentos, el método de pasar cada argumento (por ejemplo, por referencia) y el tipo que devuelve, si los hay.

!

Una tabla de símbolos es una estructura de datos que contiene un registro por cada identificador, con los campos para los atributos del identificador. La estructura de datos permite encontrar rápidamente el registro de cada identificador y almacenar o consultar rápidamente datos en un registro

!

Cuando el analizador léxico detecta un identificador en el programa fuente, el identificador se introduce en la tabla de símbolos. Sin embargo, normalmente los atributos de un identificador no se pueden determinar durante el análisis léxico.

!

El generador de código, por lo general, introduce y utiliza información detallada sobre la memoria asignada a los identificadores.

!

Detección e información de errores.

Cada frase puede encontrar errores. Sin embargo, después de detectar un error. Cada fase debe tratar de alguna forma ese error, para poder continuar la compilación, permitiendo la detección de más errores en el programa fuente. Un compilador que se detiene cuando encuentra el primer error, no resulta tan útil como debería.

!

!iii

Las fases de análisis sintáctico y semántico por lo general manejan una gran proporción de los errores detectables por el compilador. La fase léxica puede detectar errores donde los caracteres restantes de la entrada no forman ningún componente léxico del lenguaje. Los errores donde la cadena de componentes léxicos viola las reglas de estructura (sintaxis) del lenguaje son determinados por la fase del análisis sintáctico.

!

Durante el análisis semántico el compilador intenta detectar construcciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada, por ejemplo, si se intenta sumar dos identificadores. Uno de los cuales es el nombre de una matriz, y el otro, el nombre de un procedimiento.

!

Las fases de análisis.

Conforme avanza la traducción, la representación interna del programa fuente que tiene el compilador se modifica.

!

Se deberían construir componentes para el operador de varios caracteres (por ejemplo, :=) y el número 60, para reflejar su representación interna. En la sección IX ya se introdujeron las fases segunda y tercera: los análisis sintáctico y semántico. El análisis sintáctico impone una estructura jerárquica a la cadena de componentes léxicos, que se representará por medio de árboles sintácticos. Una estructura de datos típica para el árbol, en la que un nodo interior es un registro con un campo para el operador y dos campos que contienen apuntadores a los registros de los hijos izquierdo y derecho. Una hoja es un registro con dos o más campos, uno para identificar el componente léxico de la hoja, y los otros para registrar información sobre el componente léxico. Se puede tener información adicional sobre las construcciones del lenguaje añadiendo más campos a les registros de los nodos.

!

Forma de examinar de un compilador

!iv

En la compilación hay dos partes: Análisis y Síntesis. La parte del análisis divide al programa fuente en sus elementos componentes y crea una representación intermedia. De las dos partes, la síntesis es la que requiere la técnica más especializada.

Durante el análisis se determina las operaciones que implica el programa fuente y se registra en una estructura jerárquica llamada árbol. A menudo, se usa una clase especial de árbol llamado árbol sintáctico, donde cada nodo representa una operación y los hijos de un nodo son los argumentos de la operación.

!

Como se sintetiza el código objeto un compilador estándar, teórica y gráficamente generación de código. En esta parte el código intermedio optimizado es traducido a una secuencia de instrucciones en ensamblador o en el código de máquina del procesador que nos interese.

!

Tabla de símbolos

Un compilador necesita guardar y usar la información de los objetos que se va encontrando en el texto fuente, como variables, etiquetas, declaraciones de tipos, etc. Esta información se almacena en una estructura de datos interna conocida como tabla de símbolos. El compilador debe desarrollar una serie de funciones relativas a la manipulación de esta tabla como insertar un nuevo elemento en ella, consultar la información relacionada con un símbolo, borrar un elemento, etc.

!v

Como se tiene que acceder mucho a la tabla de símbolos los accesos deben ser lo más rápidos posible para que la compilación sea eficiente.

!

Manejo de errores

Es una de las misiones más importantes de un compilador, aunque, al mismo tiempo, es lo que más dificulta

...

Descargar como (para miembros actualizados) txt (19 Kb)
Leer 11 páginas más »
Disponible sólo en Clubensayos.com