Está en la página 1de 23

AUTOMATAS II

UNIDAD 1:
ANALISIS SEMANTICO

Integrantes:
- Escobar Castillo Diana Carmina.
- De Len Gonzlez Cristal Idtzayany.
- Garca Guzmn Suriel Tonaiuh.
-

CONTENIDO
INTRODUCCIN ....................................................................................................................................................3
1.

ANALISIS SEMNTICO ...................................................................................................................................4


1.1

ARBOLES DE EXPRESIONES ...................................................................................................................4

1.1.1

ARBOLES EN INFORMATICA ..........................................................................................................6

1.1.2

DEFINICION RECURSIVA. ...............................................................................................................7

1.1.3

REPRESENTACION DE UN ARBOL GENERAL ..................................................................................8

1.1.4

ARBOL BINARIO ..........................................................................................................................10

1.1.5

NOTACION POLONESA. ...............................................................................................................11

1.2

ACCIONES SEMNTICAS DE UN ANALIZADOR ....................................................................................12

1.3

COMPROBACIONES DE TIPOS EN EXPRESIONES ................................................................................13

1.4

PILA SEMNTICA EN UN ANALIZADOR SINTCTICO...........................................................................14

1.4.1

TEORA DE COLAS Y PILAS ...........................................................................................................14

1.5

ESQUEMAS DE TRADUCCIN .............................................................................................................15

1.6

GENERACIN DE LA TABLA DE SMBOLOS Y DE DIRECCIONES...........................................................17

1.6.1
1.7

CONTENIDO DE LA TABLA DE SMBOLOS ...................................................................................19

MANEJO DE ERRORES SEMNTICOS ..................................................................................................21

CONCLUSIN ......................................................................................................................................................22
BIBLIOGRAFA .....................................................................................................................................................23

INTRODUCCIN

1. ANALISIS SEMNTICO
La fase de anlisis semntico revisa el programa fuente para tratar de
encontrar errores semnticos y rene la informacin sobre los tipos para la
fase posterior de generacin de cdigo. En ella se utiliza la estructura
jerrquica determinada por la fase de anlisis sintctico para identificar los
operadores y operandos de expresiones y proposiciones.
Un componente importante del anlisis semntico es la verificacin de tipos.
Aqu, el compilador verifica si cada operador tiene operandos permitidos
por la especificacin del lenguaje fuente. Por ejemplo, las definiciones de
muchos lenguajes de programacin requieren que el compilador indique un
error cada vez que se use un nmero real como ndice de una matriz. Sin
embargo, la especificacin del lenguaje puede permitir ciertas coerciones a
los operandos, por ejemplo, cuando un operador aritmtico binario se a
plica a un nmero entero y a un nmero real. En este caso, el compilador
puede necesitar convertir el nmero entero real.

1.1 ARBOLES DE EXPRESIONES


Expresin: secuencia de tokens.
Token: puede ser un operando o un operador.
Operador: +, -, *, /.
Propiedades:
Cada hoja es un operando.

El nodo raz o los nodos internos son operadores.


Los subrboles son subexpresiones en los nodos que el nodo raz es
un operador.
Reglas de precedencia: + (positivo), - (negativo).
*, /, %
+, Ejemplo: a*(b+c)+d
los parntesis estn implcitos en el rbol.
La prioridad se determina solo por parntesis.
La expresin completa se sita con parntesis.

Figura 1. Diagrama de expresiones usando notacin polonesa.

1.1.1 ARBOLES EN INFORMATICA


El rbol es una estructura de datos fundamental en informtica, muy bien
adaptados a la inteligencia artificial y al anlisis sintctico.
En la inteligencia artificial, las declaraciones de las reglas se efectan
segn

el

esquema

premisas-conclusin,

que

corresponde

al

establecimiento de relaciones de dependencia que se puedan poner en


forma arborescente.
La resolucin de un problema se reduce entonces al recorrido de un
rbol, con el objeto de establecer un camino entre las hiptesis y las
conclusiones generales.
En el anlisis sintctico, se definen gramticas formales que permiten
descomponer las expresiones. As se puede definir una fase como las
combinaciones de un grupo nominal y de un grupo verbal (verbo y
complemento), este grupo verbal se descompone en un verbo y en un
grupo nominal, formado por un nombre y una frase. La estructura
jerrquica de una expresin puede ser descrita por un esquema
arborescente.
Un compilador podr, en el curso del tratamiento del texto de un
programa, utilizar rboles para decodificar tales expresiones.

1.1.2 DEFINICION RECURSIVA.


Un rbol T es un conjunto finito de uno a ms nudos tales que:
Existe un nudo especial denominado raz del rbol.
Los otros nudos son particiones en m>0 conjuntos disjuntos T1,
T2,TM y cada conjunto es un rbol. Se dice entonces que T1,
T2,.TM son sub arboles de la raz.
Esta definicin recursiva, es decir que se define un rbol en trminos de
rboles.
El nmero de subrboles de un nudo terminal se le llama nivel del nudo.
Un nudo de grado cero se designa nudo terminal u hoja.
El nivel de un nudo con relacin al rbol T se define de la siguiente forma:
La raz de T es de nivel 0
Los otros nudos tienen el nivel de la raz del subrbol que los
contiene ms.
Ejemplo:
Sea un rbol T que consta de siete nudos A, B, C, D, E, F, G, donde A es la
raz del rbol y tal que los grados de los diversos nudos son: grado de A=2,
grado de C=m, grado de F=1, grado de los otros nudos=0 (hojas).

1.1.3 REPRESENTACION DE UN ARBOL GENERAL


La representacin y nomenclatura de los rboles se realiza con las tpicas
notaciones de las relaciones familiares en los rboles genealgicos:

NIVELES DE UN
ARBOL
NIVEL 0:
A = RAIZ
NIVEL 1:
{B}, {C, D, F, G} = 2
subrboles.
NIVEL 2:
{D}, {E}, {F, G}= 3
subrboles
NIVEL 3:
{G}= 1 subrbol.

Figura 2. Niveles de un rbol.


Padre, hijo, hermano, ascendente, descendente, etc. Un ejemplo es el
rbol general de la figura 2.
Las definiciones a considerar son:
Raz del rbol, todos los rboles que no estn vacos tienen un nico
nudo raz. Todos los dems elementos o nudos derivan o
descienden de l. El nudo raz no tiene padre, es decir, no es hijo de
ningn nudo.

Nudo son los vrtices o elementos del rbol.


Nudo terminal u hoja, es aquel nudo que no contiene ningn
subrbol, en la figura son hojas los nudos E, F, K, L, H, I y J.

Figura 3. rbol general.


A cada nudo que no es hoja se le asocia a uno o varios subrboles
llamados descendientes o hijos. De igual forma, cada uno tiene
asociado un antecesor o ascendiente llamado padre.
Los nudos de un mismo padre se le llaman hermanos.
Los nudos con uno o dos subrboles no son hojas ni raz se llaman
nudos internos.
Un conjunto con dos o ms rboles se llama bosque.
Se denomina camino el enlace entre dos nudos consecutivos, y
rama es un camino que termina en una hoja.
Altura de un rbol es el nmero mximo de nudos de una rama.
Equivale al nivel ms alto de los nudos ms uno.
El peso de un rbol es el nmero de nudos terminales.

1.1.4 ARBOL BINARIO


Existe un tipo de rbol denominado rbol binario que puede ser
implementado fcilmente en un ordenador.
Un rbol binario es un conjunto finito de cero o ms nudos tales que:
Existe un nudo llamado raz del rbol.
Cada nudo puede tener 0, 1 o 2 subrboles, conocidos como
subrbol izquierdo y subrbol derecho.
Estos dos subrboles son bien diferenciados. (Fig.3)
Sean dos rboles binarios:
Subrbol izquierdo: tiene una raz A y una hoja B.
Subrbol derecho: tiene una raz A y una hoja B

(a)

(b)
Figura 4. a) Subrbol izquierdo, b) Subrbol derecho.

Estos dos subrboles binarios son diferentes, mientras que es cualquier


rbol sern idnticos.

10

1.1.5 NOTACION POLONESA.


Como ejemplo de aplicacin de los mtodos considerados, evaluaremos
la expresin algebraica.
(

Que se encuentra representada por el rbol de la figura 5.


El primer rbol est construido de la siguiente forma:
Cada operador binario (+, -, *, /,..) constituye una raz de un rbol.
Cada operador (1n,..) constituye la raz de un rbol cuya rama es el
operando.
Las constantes y las variables forman las hojas del rbol.
Si se recorre el rbol, se obtendr las listas de los nudos en el orden
siguiente:
x

Si se recorre el sentido contrario obtendremos la lista de los nudos en el


orden siguiente:

11

tg

Figura 5. Ejemplo de notacin polonesa.

1.2 ACCIONES SEMNTICAS DE UN ANALIZADOR


Dependiendo del tipo de sentencias, las acciones semnticas pueden
agruparse en:
Sentencias de declaracin: completar la seccin de tipos de la
tabla de smbolos.
Sentencias ejecutables: realizar comprobaciones de tipos entre
los operandos.
Funciones y procedimientos: comprobar el nmero, orden y tipo de
los parmetros actuales en cada llamada a una funcin o
procedimiento.

12

Identificacin de variables: comprobar si un identificador ha sido


declarado antes de utilizarlo.
Etiquetas: comprobar si hay etiquetas repetidas y validacin.
Constantes: comprobar que no se utilicen en la parte izquierda de
una asignacin.
Conversiones y equivalencias de tipo: verificacin.
Sobrecarga de operadores y funciones: detectar y solventar.

1.3 COMPROBACIONES DE TIPOS EN EXPRESIONES


Un aspecto importante del anlisis semntico es la comprobacin de los
tipos de las expresiones.
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 detectaran 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 operaciones en una comprobacin de tipos son las siguientes:
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.

13

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 cambiar en distintas llamadas a la funcin.

1.4 PILA SEMNTICA EN UN ANALIZADOR SINTCTICO


Como podemos entender un analizador sintctico 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 analizador sintctico
ascendente otra columna que guarde los atributos de los smbolos que se
van analizando

1.4.1 TEORA DE COLAS Y PILAS


Son estructuras de datos que se utilizan principalmente para simplificar
ciertas

operaciones

de

programacin

estas

estructuras

pueden

implementarse mediante arrays o listas enlazadas

14

Pila:
Una coleccin de datos a los cuales se les puede acceder mediante un
extremo, que se conoce generalmente como tope
Las pilas tienen 2 operaciones bsicas:
Push (para insertar un elemento).
Pop (para extraer un elemento).
Su caracterstica principal es que al extraer se obtiene siempre un ltimo
elemento que acaba de insertarse por esta razn por eso se conocen
como estructuras de datos lifo gracias a la pila es posible el uso de la
recursividad la variable a la que llama al mismo procedimiento en el que
esta, habr que guardarla as como el reto de las variables de la nueva
llamada para huella de la recursividad.

1.5 ESQUEMAS DE TRADUCCIN


Un esquema de traduccin es una gramtica atribuida en la que hay
intercalados en el lado derecho de las reglas de produccin, fragmentos
de cdigo en un lenguaje de programacin, que implementan acciones
semnticas. Un ETDS es una Definicin Dirigida por Sintaxis (DDS) en que se
da un orden en la ejecucin de las acciones semnticas. Las acciones
semnticas se sitan a la derecha de los smbolos a lo que se refieren y
entre llaves. Esta regla de situar las acciones semnticas despus de los
smbolos que utilizan da un orden en su ejecucin.

15

Una caracterstica fundamental de un ETDS es que la traduccin pueda


realizarse de una sola pasada. Por lo tanto, un ETDS no permite herencia de
los atributos desde la derecha hacia la izquierda.
Por todo ello, un ETDS es una Gramtica con Atributos por la Izquierda (GAI)
en que se insertan acciones semnticas.
Los ETDS se utilizan a menudo para convertir un formato de un lenguaje en
el formato de otro lenguaje.
Si tenemos una gramtica y queremos que sea un ETDS, deberemos decidir
los atributos necesarios y asignarlos a los smbolos de la gramtica. Luego,
debemos insertar las acciones semnticas necesarias. En este segundo
paso debemos tener en cuenta que se deben cumplir las restricciones de
un ETDS, es decir:
a) Si todos los atributos son sintetizados, pondremos las acciones
semnticas despus de los atributos implicados. Lo mejor es
situarlas al final de la regla de produccin. Para cada atributo
sintetizado, siempre hay que calcularlo despus de que hayan
tomado valor todos los dems atributos que intervienen en el
clculo.
b) Si hay atributos heredados:

Un atributo heredado A.h debe calcularse antes de que


aparezca el smbolo A.

16

Un atributo sintetizado A.s no debe usarse antes de que


aparezca el smbolo A.

c) Una accin semntica no debe referirse a un atributo sintetizado


de un smbolo que est a la derecha de la accin.

1.6 GENERACIN DE LA TABLA DE SMBOLOS 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 y 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:

17

Figura 6. Estructura tpica de una tabla de smbolos.


En donde vemos la designacin de la entidad y su token -derivados del
anlisis de lxico- as como una serie de atributos (tipo de dato, direccin
en memoria) que emanan de otras fases (anlisis gramatical y semntico).
Las consultas a la tabla de smbolos se realizan por medio del lexema con
que se designa a la entidad.
Esta concepcin de la tabla de smbolos es demasiado simple para fines
prcticos si consideramos que el lexema de la entidad es de longitud
variable y se desea que la estructura sea homognea. Una solucin es
considerar que en el campo lexema se tiene un apuntador (que siempre
ocupa el mismo espacio) hacia donde se registrarn propiamente los
lexemas. Eso evitar el desperdicio de memoria al tener el espacio justo
para representar a cada lexema.

18

Figura 7. Representacin de direcciones en una tabla de smbolos.


La creacin de la tabla de smbolos compete inicialmente al analizador
de lxico, quien registrar a las entidades (reconocidas bajo el patrn de
Identificador) de manera nica, por medio del binomio de operaciones
Bsqueda-Insercin. En el contexto de un programa las entidades pueden
describir propiamente objetos manipulables por el lenguaje (por ejemplo
variables, constantes o funciones) o descriptores de acciones (las palabras
reservadas); ambas situaciones son reconocidas bajo el mismo patrn de
identificador y la tabla de smbolos se emplea para hacer su
discriminacin.

1.6.1 CONTENIDO DE LA TABLA DE SMBOLOS


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

19

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.
A continuacin se presenta un ejemplo de una tabla de smbolos tpica.

Los atributos que se manejan en la tabla anterior y que se describen


enseguida, no son estrictamente necesarios para todos los compiladores;
sin embargo, cada uno de tales atributos deber ser considerado para la
implementacin de un compilador de un compilador en particular.
Nombre de la variable.
Direccin del cdigo objeto.
Tipo.
Valor (o nmero de parmetros para uno procedimiento).

20

Nmero de lnea fuente donde fue declarada la variable.


Nmeros de lnea fuente donde se hace referencia a la variable.
Liga. Campo cuyos valores sirven para listar las variables en orden
alfabtico.

1.7 MANEJO DE ERRORES SEMNTICOS


Los errores que puede detectar el analizador sintctico son aquellos que
violan las reglas de una gramtica independiente del contexto. Algunas de
las caractersticas de un lenguaje de programacin no pueden enunciarse
con reglas independientes del contexto, ya que dependen de l; por
ejemplo, la restriccin de que los identificadores deben declararse
previamente. Por lo tanto, los principales errores semnticos son:
Identificadores no definidos.
Operadores y operandos incompatibles.
La mayora de los errores semnticos pueden ser detectados mediante la
revisin de la tabla de smbolos, suponiendo un tipo que se base en el
contexto donde ocurra o un tipo universal que permita al identificador ser
un operando de cualquier operador del lenguaje. Al hacerlo, evitamos la
produccin de un mensaje de error cada vez que se use la variable no
definida. Si el tipo de un operando no concuerda con los requisitos de tipo
del operador, tambin es conveniente reemplazar el operando con una
variable ficticia de tipo universal.

21

CONCLUSIN

22

BIBLIOGRAFA
Arbones, M., & E.A. (1992). Tecnicas graficas en productica. Barcelona, Espaa: MARCOMBO.
Cataln, J. R. (2010). Compiladores. Teora e implementacin. Madrid, Espaa: Alfaomega.
Malisani Arbones, E. A. (1992). Tecnicas graficas en productica. Barcelona, Espaa: MARCOMBO.
Snchez Dueas, G., & Valverde Andreu, J. A. (1990). Compiladores e interpretes. Un enfoque pragmatico.
Madrid: Daz de Santos.
V. Aho, A., Sethi, R., & D. Ullman, J. (1990). Compiladores. Principios, tcnicas y herramientas. Massachusetts,
EUA: Addison Wesley Longman.

23