Sunteți pe pagina 1din 12

1.

1 rboles de expresiones

rbol de expresiones o rbol semntico. Es una estructura jerrquica en


la cual se registran las operaciones que realiza el programa fuente.

En cada una de las ramas del el rbol se registra el valor o significado


que este debe tener y el anlisis se encarga de terminar cul de los
valores registrado en la ramas es aplicable.

Los rboles de expresiones representan el cdigo de nivel del lenguaje


en forma de datos. Los datos se almacenan en una estructura con forma
de rbol.

Cada nodo del rbol de expresin representa una expresin.

Cualquier hoja esta etiquetada solo


con un operando.
Cualquier nodo interior n esta
etiquetado por un operador.
Nodo raz es un operador.

Al introducir la expresin debemos de


tomar en cuenta las siguientes caractersticas: La raz siempre debe
ser un operador

Las hojas siempre deben ser operandos

Los nodos deben estar etiquetados por operadores

Si un operador tiene mayor prioridad que la raz se coloca como


hijo.
Si un operador tiene igual o menor prioridad que un nodo se
coloca como padre.

Un nodo puede contener como hijo otro subrbol que contiene un


pequea expresin.

Construccin de un rbol de expresin

Algoritmo

Mientras carcter diferente de nulo.

Leer carcter de la lista Si es parntesis pasar al siguiente carcter.

Crear un nodo nuevo que contenga ese carcter.

Operando

Si el rbol est vaco hacer raz a nuevo, si no recorrer el rbol por la


derecha hasta llegar a un nodo con hojas, si la hoja izquierda, no est
etiquetada colocar operando, si no colocarlo en la hoja derecha.

Operador

Si la raz es un operando, insertar nuevo en ese nodo, y convertir el


operando en el hijo izquierdo, si no si hay un parntesis abierto insertar
nuevo en la ltima hoja derecha y colocar operando como hijo izquierdo.

Si el carcter anterior es parntesis izquierdo si el siguiente carcter es


parntesis derecho si solo hay un operador en el rbol nuevo se
convierte en raz, si no se inserta en el ltimo nodo derecho, y el nodo se
convierte en hijo izquierdo.

Si no se cumple ninguna de las condiciones anteriores si la raz es de


igual prioridad o menor prioridad convertir la raz en el hijo izq. de nuevo
si no la prioridad del nodo raz es mayor al de nuevo insertar nuevo
como hijo derecho y colocar el nodo reemplazado como hijo izquierdo.
Recorridos en rboles

Recorrido en Preorden:

En este tipo de recorrido se realiza cierta accin (quizs simplemente


imprimir por pantalla el valor de la clave de ese nodo) sobre el nodo
actual y posteriormente se trata el hijo izquierdo y cuando se haya
concluido, el hijo derecho.

Recorrido en Postorden:

En este caso se trata primero el hijo izquierdo, despus el derecho y por


ltimo el nodo actual.

Recorrido en Inorden:

En este caso se trata primero el hijo izquierdo, despus el nodo actual y


por ltimo el hijo derecho.

Recorridos en amplitud (o por niveles)

En este caso el recorrido se realiza en orden por los distintos niveles del
rbol. As, se comenzara tratando el nivel 1, que slo contiene el nodo
raz, seguidamente el nivel 2, el 3 y as sucesivamente.

En los rboles de expresin, la sucesin del preorden de etiquetas nos


da lo que se conoce como la forma prefijo de una expresin.
Anlogamente, la sucesin postorden de las etiquetas de un rbol
expresin nos da lo que se conoce como la representacin postfijo de
una expresin.

Finalmente, el inorden de una expresin en un rbol de expresin nos da


la expresin infijo en s misma, pero sin parntesis.

rbol AVL

Los rboles AVL estn siempre equilibrados de tal modo que para todos
los nodos, la altura de la rama izquierda no difiere en ms de una unidad
de la altura de la rama derecha. Gracias a esta forma de equilibrio o
balanceo, la complejidad de una bsqueda de estos rboles se mantiene
siempre en orden de complejidad.

Es un rbol binario de bsqueda (ABB) que tiene como caracterstica que


siempre esta balanceado.

Operaciones que se le pueden realizar a este rbol:

-Insertar

- Eliminar

- Buscar

Al momento de insertar o eliminar, se comprueba si el rbol esta


desequilibrado, en caso de estarlo se realiza el balanceo.
Rotaciones

Es el nico mtodo que se utiliza para balancear un rbol AVL.

Este se desglosa en 4 variaciones, las cuales pueden ser:

Rotacin simple a la derecha (RSD)

Rotacin simple a la izquierda(RSI)

Rotacin doble a la derecha (RDD)

Rotacin doble a la izquierda (RDI)

Factor de equilibrio

El algoritmo de este rbol toma en cuenta la altura de los nodos de un


rbol para monitorear el peso que tiene un nodo respecto a sus sub-
arboles. A esto se le denomina Factor de Equilibrio.

Reestructurar el rbol significa rotar los nodos del mismo. Para que la
rotacin se efectu se requiere de un factor de equilibrio (FE).

FE= altura subrbol derecho altura subrbol izquierdo

Para que sea un rbol AVL, estos valores deben ser:

-1 = Cargado a la izquierda

= Equilibrado
= Cargado a la derecha

Aplicacin de rotacin dependiendo el caso

Rotacin simple a la derecha: Se tiene un factor de equilibro de -2 y su


nodo izquierdo no tiene un factor de equilibrio de 1.

Rotacin simple a la izquierda: Se tiene un factor de equilibrio de 2 y su


nodo derecho no tiene un factor de equilibrio de -1.

Rotacin doble a la izquierda: Se tiene un factor de equilibrio de 2 y su


nodo derecho tiene un factor de equilibrio de -1.

Rotacin doble a la derecha: Se tiene un factor de equilibrio de -2 y su


nodo izquierdo tiene un factor de equilibrio de 1.

1.2. Acciones semnticas de un analizador sintctico

Definicin de un analizador sintctico: es la fase del analizador que se


encarga de chequear el texto de entrada en base a una gramtica dada.
Y en caso de que el programa de entrada sea vlido, suministra el rbol
sintctico que lo reconoce.

En teora, se supone que la salida del analizador sintctico es alguna


representacin del rbol sintctico que reconoce la secuencia de token
suministrada por el analizador lxico. En la prctica, el analizador
sintctico tambin hace:

Acceder a la tabla de smbolos (para hacer parte del trabajo del


analizador semntico). Chequeo de tipos (del analizador
semntico).
Generar cdigo intermedio.
Generar errores cuando se producen.
En definitiva, realiza casi todas las operaciones de la compilacin. Este
mtodo de trabajo da lugar a los mtodos de compilacin dirigidos por
sintaxis.

Dependiendo del tipo de sentencias, las acciones semnticas pueden


agruparse en:

o Sentencias de Declaracin: completar la seccin de tipos de la


Tabla de Smbolos.
o Sentencias ejecutables: realizar comprobaciones de tipos entre
los operandos implicados.
o Funciones y procedimientos: comprobar el nmero, orden y tipo de
los parmetros actuales en cada llamada a una funcin o
procedimiento.
o Identificacin de variables: comprobar si identificador ha sido
declarado antes de utilizarlo.
o Etiquetas: comprobar si hay etiquetas repetidas y validacin.
o Constantes: comprobar que no se utilicen en la parte izquierda de
una asignacin.
o Conversiones y equivalencias de tipo: verificacin.
o Sobrecarga de operadores y funciones: detectar y solventar.

Analizador sintctico
1.7 Manejo de errores semnticos

Es una de las misiones ms importantes de un compilador, aunque, al


mismo tiempo, es lo que ms dificulta su realizacin. A veces unos
errores ocultan otros.

A veces un error provoca una avalancha de muchos errores que se


solucionan con el primero.

Es conveniente un buen manejo de errores, y que el compilador detecte


todos los errores que tiene el programa y no se pare en el primero que
encuentre. Hay, pues, dos criterios a seguir a la hora de manejar errores:

Pararse al detectar el primer error.

Detectar todos los errores de una pasada.

El anlisis semntico es posterior al sintctico y mucho ms difcil de


formalizar que ste. Se trata de determinar el tipo de los resultados
intermedios, comprobar que los argumentos que tiene un operador
pertenecen al conjunto de los operadores posibles, y si son compatibles
entre s, etc. En definitiva, comprobar que el significado de lo que se va
leyendo es vlido.

La salida "terica" de la fase de anlisis semntico sera un rbol


semntico. Consiste en un rbol sintctico en el que cada una de sus
ramas ha adquirido el significado que debe tener. En el caso de los
operadores polimrficos (un nico smbolo con varios significados), el
anlisis semntico determina cul es el aplicable.

Comprobacin de tipos

Aspectos generales
Un lenguaje con comprobacin fuerte de tipos es capaz de garantizar
que los programas se pueden ejecutar sin errores de tipo, por lo que los
errores de tipo se detectarn siempre en tiempo de compilacin.

Como mnimo, ante un error, un comprobador de tipos debe informar de


la naturaleza y posicin del error y recuperarse para continuar con la
comprobacin del resto del programa a analizar.

Algunas de las operaciones a tener en cuenta en una comprobacin de


tipos:

Conversin de tipos: A veces es necesario transformar el tipo de


una expresin para utilizar correctamente un operador o para
pasar de forma adecuada un parmetro a una funcin.
Coercin: Es una conversin de tipos que realiza de forma
implcita el propio compilador. Si es el programador el que realiza
la conversin se tratar entonces de una conversin explcita.
Sobrecarga de operadores: La sobrecarga se resuelve
determinando el tipo de cada una de las expresiones intervinientes
en la sobrecarga.
Funciones polimrficas: Son aquellas que trabajan con
argumentos cuyo tipo puede cambiaren distintas llamadas a la
funcin.

Especificacin de un comprobador de tipos bsico

Bsicamente se debern realizar dos tareas:

a) Asignacin de tipos: en las declaraciones.


b) Evaluacin y comprobacin de tipos: En las expresiones y en
las funciones, as como en las sentencias.

Otras comprobaciones semnticas y recuperacin de errores semnticos


Dentro de las comprobaciones estticas (en el momento de la
compilacin), tenemos la deteccin e informacin de errores como:

Comprobaciones de tipos: operadores aplicados a operandos


incompatibles, asignacin de tipos incompatibles, llamadas a
funciones con tipos no adecuados, etc.
Comprobaciones de flujo de control: las sentencias que hacen que
el flujo de control abandone una construccin debe tener algn
lugar a donde transmitir el control. Por ejemplo: Unbreak debe
estar dentro de una proposicin while, for o switch en C.
Comprobaciones de unicidad: situaciones en las que solo se puede
definir un objeto una vez exactamente. Por ejemplo: Un
identificador, las etiquetas case dentro de un switch.

Referencias bibliogrficas

Aho, Alfred V. (2008). Compiladores. Principios, tcnicas y herramientas


(2a. ed.). Mxico: Pearson Educacin.

Moguel, O. (2013). Anlisis semntico. Enero 20, 2016, de blogspot Sitio


web: http://analisissemantico.blogspot.mx/

(2014). Unidad I. enero 30, 2017, de http://itpn.mx/ Sitio web:


http://itpn.mx/recursosisc/7semestre/leguajesyautomatas2/Unidad
%20I.pdf
Beltrn I. (2011). Manejo de errores. Febrero, 2017, de blogspot Sitio
web: http://compiladoresasignatura.blogspot.mx/2011/05/unidad-vii-
manejo-de-errores.html

S-ar putea să vă placă și