Você está na página 1de 16

Instituto Tecnolgico

de Ciudad Victoria
Educacin a Distancia
LENGUAJES Y
AUTOMATAS 2

2015

Alumno: Christian Ren Guerrero Hernndez.


N de control: 12380909.
Tutor: Ing. Fidel ngel Martnez Salazar
Unidad Acadmica: San Fernando.

RESUMEN UNIDAD 1

ASESOR:
Ing. Miguel ngel Macas
Garca

ANLISIS SEMNTICO.
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.En compiladores de un solo
paso, las llamadas a las rutinas semnticas se realizan directamente desde el analizador
sintctico y son dichas rutinas las que llaman al generador de cdigo. El instrumento
ms utilizado para conseguirlo es la gramtica de atributos.En compiladores de dos o
ms pasos, el anlisis semntico se realiza independientemente de la generacin de
cdigo, pasndose informacin a travs de un archivo intermedio, que normalmente
contiene informacin sobre el rbol sintctico en forma lineal, para facilitar su manejo y
hacer posible su almacenamiento en memoria auxiliar.Las rutinas semnticas suelen
hacer uso de una pila (pila semntica) que contiene la informacin semntica asociada a
los operandos en forma de registros semnticos.

FUNCIONAMIENTO.
Recibe como entrada el rbol de derivacin del programa aade al rbol de derivacin
una serie de anotaciones, que permiten determinar la correccin semntica del
programa y preparar la generacin de cdigo La salida que genera es un rbol de
derivacin con anotaciones semnticas.
FUNCIONES PRINCIPALES.
Identificar cada tipo de instruccin y sus componentes
Completar la Tabla de Smbolos
Realizar distintas comprobaciones y validaciones:

Comprobaciones de tipos.

Comprobaciones del flujo de control.

Comprobaciones de unicidad.

Comprobaciones de emparejamiento.

El Analizador Semntico finaliza la fase de Anlisis del compilador y comienza la fase de


Sntesis, en la cual se comienza a generar el cdigo objeto.

La especificacin de la semntica puede realizarse de dos formas:


Lenguaje natural
Especificacin formal: Semntica Operacional, semntica denotacional, semntica
Axiomtica, Gramticas con Atributos.

Este anlisis es ms difcil de formalizar, determina el tipo de los resultados intermedios,


comprobar que los argumentos que tienen un operador pertenecen al conjunto de
operadores posible, y si son compatibles entre s.

RBOLES DE EXPRESIN.

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, por ejemplo, una llamada al mtodo o una
operacin binaria, como x < y.
En la ilustracin siguiente se muestra un ejemplo de una expresin y su representacin
en forma de un rbol de expresin. Las diferentes partes de la expresin tienen un color
distinto para hacerlas coincidir con el nodo correspondiente del rbol de expresin.
Tambin se muestran los diferentes tipos de los nodos del rbol de expresin.
REGLAS PARA LA CONSTRUCCION DE ARBOLES DE EXPRESION
Para construir el rbol de expresiones que represente la expresin matemtica es
necesario construir primero la expresin pero en la notacin polaca correspondiente y a
partir de esta es que se construye el rbol. El algoritmo usado para transformar una
expresin infija a prefija es explicado a continuacin.
Sea A una expresin infija cualquiera, formada por operadores, parntesis (izquierdos y
derechos) y operandos, tambin se usar una pila para los operadores. El procedimiento
seguido es el siguiente:
Se lee un elemento de A, si este es un operador o un parntesis izquierdo, entonces se
acta la regla 1 y si es un operando se enva la expresin de notacin polaca. Si el
elemento ledo de A es un parntesis derecho, se desapilarn elementos de la pila de
operadores hasta encontrar el correspondiente parntesis izquierdo. Cada elemento
desapilado pasa a formar parte de la notacin polaca, excepto los parntesis. Cuando no
queden elementos en A, se desipilan operadores de la pila, hasta que esta quede vaca.

Regla 1:
Existe un orden de prioridad para los operadores, que de menor a mayor es el siguiente:
suma (+) y resta (-), multiplicacin (*) y divisin (/), exponenciacin (^), operadores
unarios. El parntesis izquierdo lo trataremos como un operador (aunque no lo es) cuyo
orden de prioridad es el mayor de todos cuando se quiera apilar y el menor de todos
cuando est en la cima de la pila.
Cuando se intente apilar algn operador se har lo siguiente: si es un operador unario
entonces se apila, si es un operador binario, se comparar su prioridad con el ltimo
insertado en la pila (el de la cima), si su prioridad es mayor, entonces se apilar. Si

ocurre lo contrario (su prioridad es menor o igual) entonces el operador de la cima de la


pila se desapilar y pasar a formar parte de la notacin polaca. Se volver a intentar
apilar el operador siguiendo la misma regla, hasta que se pueda apilar, si la pila queda
vaca tambin se apila. El parntesis izquierdo siempre se apilar y no podr ser
desapilado por ningn operador y por tanto no formar parte de la notacin polaca
inversa.
El siguiente ejemplo, ayudar a entender mejor lo dicho anteriormente. Sea la siguiente
expresin infija: 2^sin(y+x)ln(x).
En la siguiente tabla se muestra paso a paso la conversin a notacin postfija. Se usa el
color rojo para sealar los casos en que es necesario desapilar operadores de la pila.

CONSTRUCCIN DEL RBOL BINARIO DE EXPRESIONES


Una vez obtenida la expresin en notacin postfija, se puede evaluar mediante el uso
nuevamente de una pila. Sin embargo, en nuestro caso se trabaja con un rbol binario
de expresiones, as que lo que se hace es construir el rbol. El algoritmo usado para
construir el rbol no usa como tal la expresin postfija ya conformada, sino que el rbol
se va construyendo usando las mismas reglas con las que se construye la notacin
postfija, una pila para los operadores y otra para los nodos del rbol, ambas no son
necesitadas al terminar el rbol. El algoritmo es el siguiente:
Se siguen las mismas reglas expuestas anteriormente usando la pila de operadores,
pero cuando se encuentra un operando o un operador es desapilado, entonces se crea
el nodo correspondiente y se acta segn la regla II. Al finalizar el algoritmo solo debe
quedar un nodo apilado en la pila de nodos, el que constituye el nodo raz de nuestro
rbol de expresiones.

Regla 2.
Si el nodo corresponde a un operando, entonces se apila. Si el nodo corresponde a una
operador unario entonces se desapilan un nodo de la pila de nodos y es enlazado a la

rama izquierda del nodo correspondiente al operador unario y este ltimo es apilado. Si
el nodo corresponde a un operador binario entonces dos nodos son desapilados de la
pila de nodos, el primero es enlazado a la rama derecha del nodo binario y el segundo a
la rama izquierda, nuevamente este nodo es apilado.
En el siguiente ejemplo se usa la misma expresin infija anterior (2^sen(y+x) ln (x))
para ilustrar el procedimiento para construir el rbol:

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 subrbol izquierdo y cuando se haya concluido, el subrbol derecho. Otra forma para
entender el recorrido con este mtodo seria seguir el orden: nodo raz, nodo izquierda,
nodo derecha.

Un recorrido general del rbol en orden previo Preorden produce la cadena


q+ABsenC*X+YZ. Es versin prefija. El recorrido general de orden produce una cadena
AB+CsenXYZ+*q, la cual es la versin posfija de la expresin.

Ejemplo de rbol con etiquetas: el nodo 2 tiene el operador + como etiqueta y sus hijos
izquierdo y derecho representan las expresiones a y b. por tanto, n2 representa (a)+(b) o

ms simple, a+b. El nodo n1 representa (a+b)*(a+c) puesto que * es la etiqueta de n1, y


a+b y a+c son los correspondientes expresiones representadas por n2 y n3.

ACCIONES SEMNTICAS DE UN ANALIZADOR SINTCTICO.

El anlisis semntico se realiza despus del sintctico y es ms difcil de formalizarque


ste. Se trata de determinar el tipo de los resultados intermedios, comprobar quelos
argumentos que tiene un operador pertenecen al conjunto de los operadoresposibles, y
si son compatibles entre s, comprobar que el significado de loque se va leyendo es
vlido.El anlisis semntico utiliza como entrada el rbol sintctico detectado
paracomprobar restricciones de tipo y otras limitaciones semnticas y preparar
lageneracin de cdigo.
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 quedebe
tener. En el caso de los operadores polimrficos el anlisis semntico determina cul es
el aplicable. Por ejemplo,consideremos la siguiente sentencia de asignacin: A:= B + C
En Pascal, el signo + sirve para sumar enteros y reales, concatenar cadenas
decaracteres y unir conjuntos. El anlisis semntico debe comprobar que B y C sean
deun tipo comn o compatible y que se les pueda aplicar dicho operador. Si B y C
sonenteros o reales los sumar, si son cadenas las concatenar y si son
conjuntoscalcular su unin.

Acciones semnticas
Dependiendo del tipo de sentencias, las accionessemnticas pueden agruparse en:
Sentencias de Declaracin: completar la seccin de tipos de la Tabla de Smbolos.
Sentencias ejecutables: realizar comprobaciones detipos entre los operandos
implicados.
Funciones y procedimientos: comprobar el nmero, orden y tipo de los parmetros
actuales en cada llamadaa una funcin o procedimiento.
Identificacin de variables: comprobar si 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 ysolventar.

COMPROBACIONES DE TIPOS EN EXPRESIONES.

La comprobacin de tipos es una forma de asegurar quelos identificadores relacionados


sean de tiposcompatibles.
Dos identificadores son compatibles de acuerdo a lo siguiente:
Cuando forman el lado izquierdo y el lado derecho de un operador.
Cuando forman el lado izquierdo y el lado derecho de una proposicin deasignacin.
Cuando sean parmetros reales y formales.
COMPROBACIN DE TIPOS EN EXPRESIONES
Las comprobaciones de consistencia que se efectanantes de la ejecucin del programa
fuente, sedenominan comprobaciones estticas.Las comprobaciones que se realizan
durante laejecucin del programa objeto se denominancomprobaciones dinmicas.
La revisin de la sintaxis de un programa fuente es un ejemplo de comprobacin
esttica, mientras que la comprobacin de tipos, es un ejemplo de comprobacin que
con frecuencia puede efectuarse en forma esttica y que en ocasiones debe realizarse
dinmicamente.

TIPOS
Qu es un tipo?
La nocin vara de lenguaje a lenguaje.
Consenso

Un conjunto de valores

Un conjunto de operadores sobre los valores

Las clases son una instanciacin moderna de la nocin de tipo

TIPOS Y OPERACIONES
Ciertas Operaciones son legales para cada tipo
No tiene sentido sumar un apuntador a funcin y un entero en C
Tiene sentido sumar dos enteros
Pero ambos tienen la misma implementacin en lenguaje ensamblador!

PILA 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.

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

problemas

subproblemas

ms

una

ms

en

sencillos para conseguir

dividir
solucin

los

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
analizadorsemntico. Dentro de cada elemento de la pila se guardan los valores que
puedentener

una

expresin.

ESQUEMA DE TRADUCCIN

Un esquema de traduccin es una gramtica independiente de contexto en la que se


encuentran intercalados, en los lados derechos de las reglas de produccin, fragmentos
de programa llamados acciones semnticas.Es como una definicin dirigida por la
sintaxis con la diferencia de que el orden de evaluacin de las reglas semnticas se
muestra explcitamente.Los esquemas de traduccin pueden tener tanto atributos
sintetizados como heredados.

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.

GENERACIN 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 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:
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.

MANEJO DE ERRORES SEMNTICOS


Los errores semnticos son pocos y los que existen no se pueden detectar tan
fcilmente. Hasta esta etapa los errores son mostrados a los usuarios. Los dems
errores ya son muy difciles de detectar y generalmente se dan en tiempo de ejecucin.
Manejo de errores semnticos
Algunos problemas se presentan durante la fase de gestin de memoria al pasar
argumentos o al crear la pila semntica.
Muchos errores se generan durante la etapa del enlazador, al tratar de obtener cdigo
existente de algunas funciones/mtodos ya implementadas en bibliotecas/APIs

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.

REFERENCIAS
http://arantxa.ii.uam.es/~epulido/procesadores/semantico1.pdf
http://informatica.isipedia.com/primero/automatas-gramaticas-y-lenguajes/05-analisissemantico
http://biblioteca.uns.edu.pe/saladocentes/archivoz/publicacionez/sesion_iii_3u___analisis
_semantico.pdf
https://jesyib.wordpress.com/category/consultas/
https://sites.google.com/site/iscmendezportafolio/arboles-de-expresion
http://www.utm.mx/~jahdezp/archivos%20estructuras/arboles%20con
%20expresiones.pdf
https://es.scribd.com/doc/128330225/1-2-Acciones-semanticas
https://es.scribd.com/doc/219732692/Lenguajes-y-Automatas-II-Unidad-I-Sem-2-20131#download
http://itpn.mx/recursosisc/7semestre/leguajesyautomatas2/Unidad%20I.pdf
http://dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u5.pdf
http://revistas.udistrital.edu.co/ojs/index.php/visele/article/view/246/356

Você também pode gostar