Está en la página 1de 13

TOSHIBA

[Direccin de la compaa]

[TTULO DEL
DOCUMENTO]
[Subttulo del documento]

Indicese
Ooooooooooooooooo
O
Oo
O
O

O
Oo

Introhgbc
X
X
X
X
X
Xx
X
X
X

1.1Arboles de expresin
Un rbol de anlisis sintctico muestra, en forma grfica, la manera en que el
smbolo inicial de una gramtica deriva a una cadena en el lenguaje. Si el no
terminal A tiene una produccin AXYZ, entonces un rbol de anlisis sintctico
podra tener un nodo interior etiquetado como A, con tres hijos llamados X, Y y Z,
de izquierda a derecha.

De manera formal, dada una gramtica libre de contexto, un rbol de anlisis


sintctico de acuerdo con la gramtica es un rbol con las siguientes
propiedades:
1.
2.
3.
4.

La raz se etiqueta con el smbolo inicial.


Cada hoja se etiqueta con un terminal. O con .
Cada nodo interior se etiqueta con un no terminal.
Si A es el no terminal que etiqueta a cierto nodo interior, y X 1, X2,, Xn
representa a un smbolo.

Terminologa de rboles
Las estructuras de datos tipo rbol figuran de manera prominente en la
compilacin.

Un rbol consiste en uno o ms nodos. Los nodos pueden tener etiquetas,


que en este libro, por lo general, sern smbolos de la gramtica. Al dibujar
un rbol, con frecuencia representamos los nodos mediante estas etiquetas
solamente.
Solo uno de los nodos es la raz. Todos los nodos, excepto la raz tienen un
padre nico; la raz no tiene padre. Al dibujar rboles, colocamos el padre
de un nodo encima de ese nodo y dibujamos una lnea entre ellos.
Entonces, la raz es el nodo ms alto (superior).
Si el nodo N es el padre del nodo M, entonces M es hijo de N. Los hijos de
nuestro nodo se llama hermanos. Tienen un orden, partiendo desde la
izquierda, por lo que al dibujar rboles, ordenamos los hijos de un nodo
dado en esta forma.
Un nodo sin hijos se llama hoja. Los otros nodos (los que tienen uno o ms
hijos) son nodos interiores.
Un descendiente de un nodo N es ya el mismo N un hijo de N, un hijo de un
hijo de N, y as en lo sucesivo, para cualquier nmero de niveles. Decimos
que el nodo N es un ancestro del nodo M, si M es descendiente de N.
1.2Acciones 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 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.

Manejo de errores sintcticos


Los errores sintcticos son dados por una expresin aritmtica o parntesis no
equilibrados.

El manejo de errores de sintaxis es el ms complicado desde el punto de vista


de la creacin de compiladores. Nos interesa que cuando el compilador
encuentre un error, se recupere y siga buscando errores. Por lo tanto el
manejador de errores de un analizador sintctico tiene como objetivos:

Indicar los errores de forma clara y precisa. Aclarar el tipo de error y su


localizacin.
Recuperarse del error, para poder seguir examinando la entrada.
No ralentizar significativamente la compilacin

Tipo de gramtica que acepta un analizador sintctico


Nosotros nos centraremos en el anlisis sintctico para lenguajes basados en
gramticas formales, ya que de otra forma se hace muy difcil la comprensin del
compilador, y se pueden corregir, quizs ms fcilmente, errores de muy difcil
localizacin, como es la ambigedad en el reconocimiento de ciertas sentencias.
La gramtica que acepta el analizador sintctico es una gramtica de contexto
libre:
Gramtica: G (N, T, P, S)
N = No terminales.
T = Terminales.
P = Reglas de Produccin.
S = Axioma Inicial.

1.3Comprobaciones de tipos en expresiones.


La labor de comprobacin de tipos consiste en conferir a las construcciones
sintcticas del lenguaje la semntica de tipificacin y en realizar todo tipo de
comprobaciones de dicha ndole. Por su naturaleza, sin embargo, sta se
encuentra repartida entre la fase de anlisis semntico y la generacin de cdigo
intermedio.
Comprobaciones estticas
Las comprobaciones estticas recogen el compendio de todas aquellas tareas de
carcter semntico que, por su naturaleza, pueden ser realizadas directamente
durante la fase de compilacin mediante el uso de los artefactos y mecanismos
propios de dicha fase. Este tipo de comprobaciones son beneficiosas puesto que
confieren seguridad a la ejecucin del programa.
Caractersticas
o
o

Diferente de la dinmica en runtime.


Ejemplo: comprobacin de tipos, flujo de control, unicidad.

Comprobaciones dinmicas
Las comprobaciones dinmicas son aquellas que no se realizan durante la fase de
compilacin y se delegan al momento de la ejecucin del programa. Ello requiere
generar cdigo ejecutable especficamente diseado para realizar tales
comprobaciones. Los lenguajes con una carga excesiva de comprobaciones
dinmicas generan programas ms largos, lentos e inseguros en ejecucin.
Verificacin de tipos
Comprueba la compatibilidad de tipos de todas las expresiones del cdigo fuente
recuperando la informacin durante la gestin de declaraciones. Adems se
asegura de que no existe en el programa ninguna referencia a ningn smbolo no
declarado.
Inferencia de tipos
En lenguajes sin tipificacin de variables o con sobrecarga se aplican tareas de
inferencia de tipos en el nivel gramatical de las expresiones para resolver el tipo
de datos de la expresin resultante en funcin del contexto de evaluacin.
1.4Pila semntica en un analizador sintctico.
Las pilas y colas son estructuras de datos que se utilizan generalmente para
simplificar ciertas operaciones de programacin. Estas estructuras pueden
implementarse mediante arrays o listas enlazadas.
Pila: coleccin de datos a los cuales se les puede acceder mediante un extremo,
que se conoce generalmente como tope.
Las pilas tienen dos operaciones bsicas:

Push (para introducir un elemento)


Pop (para extraer un elemento)

Sus caractersticas fundamentales es que al extraer se obtiene siempre el ltimo


elemento que acabe de insertarse. Por esta razn tambin se conoce como
estructuras de datos LIFO, una posible implementacin mediante listas enlazadas
seria insertando y extrayendo siempre por el principio de la lista.
Las pilas se utilizan en muchas aplicaciones que utilizamos con frecuencia. Las
pilas y colas son estructuras de datos que se utilizan generalmente para
simplificar ciertas operaciones de programacin. Estas estructuras pueden
implementarse mediante arrays o listas enlazadas.
Un analizador sintctico es un autmata de pila que reconoce la estructura de
una cadena de componentes lxicos.
En general, el analizador sintctico inicializa el compilador y para cada smbolo de
entrada llama al analizador morfolgico y proporciona el siguiente smbolo de
entrada.
Al decir pila semntica no se refiere a que hay varios tipos de pila, hace
referencia a que se debe programar nica y exclusivamente en un solo lenguaje,
es decir, no podemos mezclar cdigo de C++ con Visual Basic.
Ventajas

Los problemas de integracin entre los subsistemas son sumamente


costosos y muchos de ellos no se solucionan hasta que la programacin
alcanza la fecha lmite para la integracin total del sistema.
Se necesita una memoria auxiliar que nos permita guardar los datos para
poder hacer la comparacin.

Objetivo terico
Es construir un rbol de anlisis sintctico, este raramente se construye como tal,
sino que las rutinas semnticas integradas van generando el rbol de Sintaxis
abstracta. Se especifica mediante una gramtica libre de contexto.
El anlisis semntico detecta la validez semntica de las sentencias aceptadas
por el analizador sintctico. El analizador semntico suele trabajar
simultneamente al analizador sintctico y en estrecha cooperacin. Se entiende
por semntica como el conjunto de reglas que especifican el significado de
cualquier sentencia sintcticamente correcta y escrita en un determinado
lenguaje.
Las rutinas semnticas deben realizar la evaluacin de los atributos de las
gramticas siguiendo las reglas semnticas asociadas a cada produccin de la
gramtica.
El anlisis sintctico es la fase en la que 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 la 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.
Se compone de un conjunto de rutinas independientes, llamadas por los
analizadores morfolgico y sintctico. El anlisis semntico utiliza como entrada
el rbol sintctico detectado por el anlisis sintctico para comprobar
restricciones de tipo y otras limitaciones semnticas y preparar la generacin de
cdigo.
Las rutinas semnticas suelen hacer uso de una pila que contiene la informacin
semntica asociada a los operadores en forma de registros semnticos.
Reglas semnticas
Son el conjunto de normas y especificaciones que definen al lenguaje de
programacin y estn dadas por la sintaxis del lenguaje, las reglas semnticas
asignan un significado lgico a ciertas expresiones definidas en la sintaxis del
lenguaje.
La evaluacin de las reglas semnticas define los valores de los atributos en los
nodos del rbol de anlisis sintctico para la cadena de entrada. Una regla
semntica tambin puede tener efectos colaterales, por ejemplo, imprimir un
valor o actualizar una variable global.
Compatibilidad de tipos
Durante la fase de anlisis semntico, el compilador debe verificar que los tipos y
valores asociados a los objetos de un programa se utilizan de acuerdo con la
especificacin del lenguaje.
Adems debe detectar conversiones implcitas de tipos para efectuarlas o insertar
el cdigo apropiado para efectuarlas, as como almacenar informacin relativa a
los tipos de los objetos y aplicar las reglas de verificacin de tipos.
Analizadores descendentes:
Parten del axioma inicial de la gramtica, se va descendiendo utilizando las
derivaciones izquierdas, hasta llegar a construir la cadena analizada.
Se va construyendo el rbol desde sus nodos terminales. Es decir, se construye
desde los smbolos de cadena hasta llegar al axioma de la gramtica.
Bottom up
Es un principio de muchos aos del estilo de programacin que los elementos
funcionales de un programa no deben ser demasiado grandes. Si un cierto
componente de un programa crece ms all de la etapa donde est fcilmente

comprensible, se convierte en una masa de la complejidad que encubre errores


tan fcilmente como una ciudad grande encubre a fugitivos.
Top-down
Este mtodo consiste en dividir los problemas en sub problemas ms sencillos
para conseguir una solucin ms rpida. El diseo descendente es un mtodo
para resolver el problema que posteriormente se traducir a un lenguaje
compresible por la computadora.
Un parser ascendente utiliza durante el anlisis una pila. En esta va guardando
datos que le permiten ir haciendo las operaciones de reduccin que necesita. Para
incorporar acciones semnticas como lo es construir el rbol sintctico, es
necesario incorporar a la pila del parser otra columna que guarde los atributos de
los smbolos que se van analizando. Estos atributos estaran ligados a la
correspondiente produccin en la tabla de parsing.
La pila juega un papel fundamental en el desarrollo de cualquier analizador
semntico. Dentro de cada elemento de la pila se guardan los valores que pueden
tener una expresin.
1.5Esquema de traduccin
Un esquema de traduccin es una gramtica independiente de contexto en la que
se asocian atributos con los smbolos gramaticales y se insertan acciones
semnticas encerradas entre llaves { } dentro de los lados derechos de las
producciones. Los esquemas de traduccin pueden tener tantos atributos
sintetizados como heredados.
Cuando se disea un esquema de traduccin, se deben respetar algunas
limitaciones para asegurarse de que el valor de un atributo est disponible
cuando una accin se refiera a l. Estas limitaciones, motivadas por las
definiciones con atributos por la izquierda, garantizan que las acciones no hagan
referencia a un atributo que an no haya sido calculado. El ejemplo ms sencillo
ocurre cuando slo se necesitan atributos sintetizados, en este caso, se puede
construir el esquema de traduccin creando una accin que conste de una
asignacin para cada regla semntica y colocando esta accin al final del lado
derecho de la produccin asociada.
Traduccin descendente
Se trabaja con esquema de traduccin en lugar de hacerlo con definiciones
dirigidas por sintaxis, as que se puede ser explcito en cuanto al orden en que
tienen que lugar las acciones y las evaluaciones de los atributos.
Eliminacin de la recursividad izquierda de un esquema de traduccin
Como la mayora de los operadores aritmticos son asociativos por la izquierda,
es natural utilizar gramticas recursivas por la izquierda para las expresiones. La
transformacin se aplica a esquemas de traduccin con atributos sintetizados.

Para el anlisis sintctico descendente, se supone que una accin se ejecuta en el


mismo momento en que se expandira un smbolo en la misma posicin. Un
atributo heredado de un smbolo debe ser calculado por una accin que aparezca
antes que el smbolo, y un atributo sintetizado del no terminal de la izquierda se
debe calcular despus de que hayan sido calculados todos los atributos de los
que depende.
Un atributo heredado de un smbolo debe ser calculado por una accin que
aparezca antes que el smbolo, y un atributo sintetizado del no terminal de la
izquierda se debe calcular despus de que hayan sido calculados todos los
atributos de los que depende.
Los fragmentos de cdigo as insertados se denominan acciones semnticas.
Dichos fragmentos actan, calculan y modifican los atributos asociados con los
nodos del rbol sintctico. El orden en que se evalan los fragmentos es el de un
recorrido primero-profundo del rbol de anlisis sintctico.
Obsrvese que, en general, para poder aplicar un esquema de traduccin hay que
construir el rbol sintctico y despus aplicar las acciones empotradas en las
reglas en el orden de recorrido primero-profundo. Por supuesto, si la gramtica es
ambigua una frase podra tener dos rboles y la ejecucin de las acciones para
ellos podra dar lugar a diferentes resultados. Si se quiere evitar la multiplicidad
de resultados (interpretaciones semnticas) es necesario precisar de qu rbol
sintctico concreto se est hablando.
1.6Generacin de la tabla de smbolo y de direcciones.
Las tablas de smbolos (tambin llamadas tablas de identificadores y tablas de
nombres), realizan dos importantes funciones en el proceso de traduccin:

Verificar que la semntica sea correcta.


Ayudar en la generacin apropiada de cdigo.

Ambas funciones se realizan insertando o recuperando desde la tabla de smbolos


los atributos de las variables usadas en el programa fuente. Estos atributos, tales
como: el nombre, tipo, direccin de almacenamiento y dimensin de una variable.
Usualmente se encuentran explcitamente en las declaraciones o ms
implcitamente a travs del contexto en que aparecen los nombres de variables
en el programa.
Una de las estructuras de datos que se encuentran relacionadas con las fases del
proceso de compilacin es la tabla de smbolos, la cual tiene como propsito
registrar informacin que se comparte entre varias etapas y que permite
administrar los recursos asociados a las entidades que manipular el programa.
La tabla de smbolos tiene tpicamente la siguiente estructura:
Una tabla de smbolos puede conceptualizarse como una serie de
renglones, cada uno de los cuales contiene una lista de valores de atributos
que son asociados con una variable en particular.

Las clases de los atributos que aparecen en una tabla de smbolos


dependen en algn grado de la naturaleza del lenguaje de programacin
para el cual se escribe el compilador.
Por ejemplo, un lenguaje puede ser sin tipos, y por lo tanto el atributo tipo no
necesita aparecer en la tabla. Similarmente, la organizacin de la tabla de
smbolos variar dependiendo de las limitaciones de memoria y tiempo de
acceso.
1.7Manejo 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.

conclu

bibliografia

También podría gustarte