Sie sind auf Seite 1von 10

INSTITUTO TECNOLGICO SUPERIOR DE TEPEXI DE RODRGUEZ

ANALISIS SEMANTICO COMO GENERACION DEL CODIGO


OBJETO Y COMO APLICARLO
Investigacin para la materia

LENGUAJES Y AUTOMATAS II

Carrera
INGENIERIA EN SISTEMAS COMPUTACIONALES

Presenta:
DIEGO JIMENEZ REYES

Docente
M.C.C. RODOLFO LUNA PEREZ

ANLISIS SEMNTICO

La fase de anlisis semntico de un procesador de lenguaje es aqulla que computa

la

informacin adicional necesaria para el procesamiento de un lenguaje, una vez que


la estructura sintctica de un programa haya sido obtenida. Es por tanto la fase posterior a
la de anlisis sintctico y la ltima dentro del proceso de sntesis de un lenguaje de
programacin.
Sintaxis de un lenguaje de programacin es el conjunto de reglas formales que
especifican la estructura de los programas pertenecientes a dicho lenguaje. Semntica de
un lenguaje de programacin es el conjunto de reglas que especifican el significado de
cualquier sentencia sintcticamente vlida. Finalmente, el anlisis semntico de un
procesador de lenguaje es la fase encargada de detectar la validez semntica de las
sentencias aceptadas por el analizador sintctico.
La fase de anlisis semntico obtiene su nombre por requerir informacin relativa al
significado del lenguaje, que est fuera del alcance de la representatividad de las
gramticas libres de contexto y los principales algoritmos existentes de anlisis; es por
ello por lo que se dice que captura la parte de la fase de anlisis considerada fuera del
mbito de la sintaxis.
Dentro de la clasificacin jerrquica que Chomsky dio de los lenguajes, la utilizacin de
gramticas sensibles al contexto (o de tipo 1) permitira identificar sintcticamente
caractersticas como que la utilizacin de una variable en el lenguaje Pascal ha de estar
previamente declarada. Sin embargo, la implementacin de un analizador sintctico
basado en una gramtica de estas caractersticas sera computacionalmente ms
compleja que un autmata de pila.
As, la mayora de los compiladores utilizan una gramtica libre de contexto para describir
la sintaxis del lenguaje y una fase de anlisis semntico posterior para restringir las
sentencias que semnticamente no pertenecen al lenguaje.
Una vez comprobado que la sentencia es sintcticamente correcta, el analizador
semntico deber verificar que el identificador empleado como parte de una expresin
haya sido declarado previamente. Para llevar a cabo esta tarea, es tpica la utilizacin de
una estructura de datos adicional denominada tabla de smbolos. sta poseer una
entrada por cada identificador declarado en el contexto que se est analizando. Con este

DIEGO JIMNEZ REYES

ING. SISTEMAS COMPUTACIONALES

tipo de estructuras de datos adicionales, los desarrolladores de compiladores


acostumbran a suplir las carencias de las gramticas libres de contexto.
Otro caso que se da en la implementacin real de compiladores es ubicar determinadas
comprobaciones en el analizador semntico, aun cuando puedan ser llevadas a cabo por
el analizador sintctico. Es factible describir una gramtica libre de contexto capaz de
representar que toda implementacin de una funcin tenga al menos una sentencia
return. Sin embargo, la gramtica sera realmente compleja y su tratamiento en la fase de
anlisis sintctico sera demasiado complicada. As, es ms sencillo transferir dicha
responsabilidad al analizador semntico que slo deber contabilizar el nmero de
sentencias return aparecidas en la implementacin de una funcin.
El objetivo principal del analizador semntico de un procesador de lenguaje es asegurarse
de que el programa analizado satisfaga las reglas requeridas por la especificacin del
lenguaje, para garantizar su correcta ejecucin. El tipo y dimensin de anlisis semntico
requerido vara enormemente de un lenguaje a otro. En lenguajes interpretados como
Lisp

o Smalltalk casi no se lleva a cabo anlisis semntico previo a su ejecucin,

mientras que en lenguajes como Ada, el analizador semntico deber

comprobar

numerosas reglas que un programa fuente est obligado a satisfacer.

ESPECIFICACIN SEMNTICA
Existen dos formas de describir la semntica de un lenguaje de programacin: mediante
especificacin informal o natural y formal.
DESCRIPCIN INFORMAL.- Es llevada a cabo mediante el lenguaje natural. Esto hace
que la especificacin sea inteligible (en principio) para cualquier persona. La experiencia
nos dice que es una tarea muy compleja, si no imposible, el describir

todas

las

caractersticas de un lenguaje de programacin de un modo preciso.


DESCRIPCIN FORMAL.- La descripcin rigurosa del significado o comportamiento de
programas, lenguajes de programacin, mquinas abstractas o incluso cualquier
dispositivo hardware. La necesidad de hacer especificaciones formales de semntica
surge para:

DIEGO JIMNEZ REYES

ING. SISTEMAS COMPUTACIONALES

Revelar posibles ambigedades existentes implementaciones de procesadores de

lenguajes o en documentos descriptivos de lenguajes de programacin.


Ser utilizados como base para la implementacin de procesadores de lenguaje.
Verificar propiedades de programas en relacin con pruebas de correccin o

informacin relacionada con su ejecucin.


Disear nuevos lenguajes de programacin, permitiendo registrar decisiones
sobre construcciones particulares del lenguaje, as como permitir descubrir

posibles irregularidades u omisiones.


Facilitar la comprensin de los lenguajes por parte del programador y como
mecanismo de comunicacin entre diseador del lenguaje, implementador y
programador. La especificacin semntica de un lenguaje, como documento de

referencia, aclara el comportamiento del lenguaje y sus diversas construcciones.


Estandarizar lenguajes mediante la publicacin de su semntica de un modo no
ambiguo. Los programas deben poder procesarse en otra implementacin de
procesador del mismo lenguaje exhibiendo el mismo comportamiento.

TAREAS Y OBJETIVOS DEL ANLISIS SEMNTICO


En el diagrama de fases de un compilador podemos destacar, a raz de las dos
definiciones previas, una mayor interconexin entre la fase de anlisis semntico y las
siguientes fases de un compilador:

DIEGO JIMNEZ REYES

ING. SISTEMAS COMPUTACIONALES

Anlisis sintctico.- La entrada del analizador semntico es la salida generada


por el analizador sintctico. La estructura empleada para intercambiar la
informacin entre estas dos fases es lo que se conoce como rbol sintctico, una
simplificacin del mismo, denominada rbol sintctico abstracto. Una vez validada
la sintaxis de un programa, el anlisis semntico aplicar reglas semnticas para

validar dicho rbol.


Manejador de errores. Si la validacin del rbol sintctico descrita en el prrafo
anterior no fuese satisfactoria, es decir, existiese un error semntico, la fase de
anlisis semntico debera notificar dicho error al manejador de errores para que
ste se encargase de su gestin. El proceso de anlisis podra seguir
ejecutndose o no, en funcin de si el procesador de lenguaje implementa algn
mecanismo de recuperacin de errores.

DIEGO JIMNEZ REYES

ING. SISTEMAS COMPUTACIONALES

Generacin de cdigo (intermedio). La salida del anlisis semntico se


suele emplear como entrada para la generacin de cdigo. La estructura de
datos empleada para intercambiar informacin entre las dos fases mencionadas
es un rbol sintctico decorado. Este rbol posee informacin adicional al rbol
generado por el analizador sintctico, como por ejemplo la informacin relativa al
tipo de cada una de las expresiones del programa. El empleo de dicha informacin
es til para llevar a cabo el proceso de generacin de cdigo (a bajo nivel, el tipo
de una expresin es necesario, por ejemplo, para saber el nmero de bytes que

ocupa su valor).
Tabla de smbolos. Como hemos mencionado previamente, la utilizacin de
gramticas libres de contexto (de tipo 2) no permite expresar caractersticas
representables con gramticas sensibles al contexto como la necesidad de que la
utilizacin de una variable en el lenguaje Pascal requiera la declaracin previa de
la variable utilizada. Para poder implementar un procesador del lenguaje Pascal
empleando gramticas de tipo 2 e implementaciones de autmatas de pila, es
necesario emplear una estructura de datos auxiliar denominada tabla de
smbolos. Esta estructura de datos, a su nivel ms bsico, es un diccionario
(memoria asociativa) que asocia identificadores a la informacin requerida por el
compilador. Sus dos operaciones bsicas son insertar y buscar.

GENERADOR DE CDIGO OBJETO


ENTRADA AL GENERADOR DE CDIGO
DIEGO JIMNEZ REYES

ING. SISTEMAS COMPUTACIONALES

La entrada para el generador de cdigo consta de la representacin intermedia del


programa fuente producida por la etapa inicial (que consta del analizador lxico, el
analizador sintctico y se ha traducido el programa fuente a una representacin
intermedia razonablemente detallada), junto con informacin de la tabla de smbolos que
se utiliza para determinar las direcciones durante la ejecucin de los objetos de datos
denotados por los nombres de la representacin intermedia.

PROGRAMAS OBJETO
La salida del generador de cdigo es el programa objeto. Esta salida puede adoptar una
variedad de formas: lenguaje de mquina absoluto, lenguaje de mquina re-localizable o
lenguaje ensamblador.

Producir como salida un programa en lenguaje mquina absoluto tiene la ventaja


de que se puede colocar en una posicin fija de memoria y ejecutarse
inmediatamente.

Producir como salida un programa en lenguaje mquina re-localizable (mdulo


objeto) permite que los subprogramas se compilen por separado. Aunque se tenga
que pagar el costo aadido de enlazar y cargar si se producen mdulos objeto relocalizables, se gana mucha flexibilidad al poder compilar subrutinas por separado
y llamar desde un mdulo objeto a otros programas previamente compilados.

Producir como salida un programa en lenguaje ensamblador facilita el proceso de


generacin de cdigo. Se pueden generar instrucciones simblicas y utilizar las
macros del ensamblador para ayudar a generar el cdigo. Como producir cdigo
ensamblador no duplica la tarea completa del compilador, esta eleccin es otra
alternativa razonable, especialmente para una mquina con memoria pequea,
donde un compilador debe utilizar varias pasadas.

ADMINISTRACIN DE LA MEMORIA

La correspondencia entre los nombres del programa fuente con direcciones de objetos de
datos en la memoria durante la ejecucin la realiza la etapa inicial en cooperacin con el
generador de cdigo. Se usa la suposicin de que un nombre en una proposicin de tres
direcciones se refiere a una entrada en la tabla de smbolos para el nombre. Las entradas
de la tabla de smbolos se van creando conforme se examinan las declaraciones de un

DIEGO JIMNEZ REYES

ING. SISTEMAS COMPUTACIONALES

procedimiento. El tipo en una declaracin determina el ancho, es decir, la cantidad de


memoria necesaria para el nombre declarado. Segn la informacin de la tabla de
smbolos, se puede determinar una direccin relativa para el nombre dentro de un rea de
datos para el procedimiento.

SELECCIN DE INSTRUCCIONES

La naturaleza del conjunto de instrucciones de la mquina objeto determina la dificultad


de la seleccin de instrucciones. Es importante que el conjunto de instrucciones sea
uniforme y completo. Si la mquina objeto no apoya cada tipo de datos de una manera
uniforme, entonces cada excepcin a la regla general exige un tratamiento especial.
Las velocidades de las instrucciones y las expresiones particulares de la mquina son
otros factores importantes. Para cada tipo de proposicin de tres direcciones, se puede
disear un esqueleto de cdigo que perfila el cdigo objeto que ha de generarse para esa
construccin.
La calidad del cdigo generado viene determinada por su velocidad y tamao. Las
velocidades de las instrucciones son necesarias para disear nuevas secuencias de
cdigo pero es difcil obtener informacin exacta de los tiempos de ejecucin. Decidir cul
es la mejor secuencia de cdigo de mquina para una determinada construccin de tres
direcciones tambin puede exigir conocer el contexto en el que aparece esa construccin.

ASIGNACIN DE REGISTROS

Las instrucciones que implican operandos en registros son ms cortas y rpidas que las
de operandos en memoria. El uso de registros se divide en 2 sub-problemas:
1. Durante la asignacin de los registros, se selecciona el conjunto de variables que
residir en los registros en un momento del programa.
2. Durante una fase posterior de asignacin a los registros, se escoge el registro
especfico en el que residir una variable.

Es difcil encontrar una asignacin ptima de registros a variables, incluso con


valores en un solo registro. Matemticamente, el problema es NP completo. Este
problema se complica an ms el hardware, el sistema operativo o ambos, en la
mquina objeto pueden exigir que se cumplan ciertas convenciones del uso de
registros.

UN GENERADOR DE CDIGO SIMPLE

DIEGO JIMNEZ REYES

ING. SISTEMAS COMPUTACIONALES

Para cada operador dentro de una proposicin hay un operador correspondiente en el


lenguaje objeto.
Los resultados calculados se pueden dejar en registros mientras sea posible.
Para evitar un posible error, el algoritmo de generacin de cdigo simple guarda todo en
memoria cuando se traslada a travs de los lmites de los bloques bsicos as como
cuando se hacen llamadas a procedimientos.

ALGORITMO PARA GENERACIN DE CDIGO


Toma como entrada una secuencia de proposiciones de tres direcciones que constituyen
un bloque bsico. Para cada proposicin de tres direcciones de la forma x := y op z se
realizan las siguientes operaciones:

1. Se invoca la funcin obtenreg para determinar la posicin L donde se debe


guardar el resultado del clculo y op z.
2. Se consulta el descriptor de direcciones de y para determinar y, (una de) la(s)
proposicion(es) en curso de y. si el valor de y no est en L, se genera la instruccin
MOV y, L para colocar una copia de y en L.
3. Se genera la instruccin OP z, L donde z es una posicin en curso de x. se
actualiza el descriptor de direcciones de x para indicar que x est en la posicin L.
4. Si los valores en curso de y o z, o ambos, no tienen usos siguientes, no estn
activos a la salida del bloque, y estn en registros, se altera el descriptor de
registros para indicar que despus de la ejecucin de x := y op z, estos registros
ya no contendrn y o z, o ambos, respectivamente.

Funcin obtenreg
1. Si el nombre y est en un registro que no contiene el valor de otros nombres, e y
no est activa y no tiene uso siguiente despus de la ejecucin de x:= y op z,
entonces se devuelve el registro de y para L.
2. Si falla (1), devulvase un registro vaci para L si hay alguno.
3. Si no se utiliza x en el bloque, o no se puede encontrar ningn registro ocupado
adecuado, seleccinese la posicin de memoria de x para L.

BIBLIOGRAFA

DIEGO JIMNEZ REYES

ING. SISTEMAS COMPUTACIONALES

Anlisis Semntico en Procesadores de Lenguaje


Francisco Ortn Soler
Juan Manuel Cueva Lovelle
Maria Cndida Luengo Dez
Aquilino Adolfo Juan Fuente
Jos Emilio Labra Gayo
Ral Izquierdo Castanedo
Lenguajes y Sistemas Informticos
Departamento de Informtica
Universidad de Oviedo
Oviedo, Marzo 2004
Aho, V, Compiladores, principios, tcnicas y herramientas, editorial Addison Wesley
Iberoamerica.

DIEGO JIMNEZ REYES

ING. SISTEMAS COMPUTACIONALES

Das könnte Ihnen auch gefallen