Pila Semántica en Un Analizador Sintáctico
Pila Semántica en Un Analizador Sintáctico
Pila Semántica en Un Analizador Sintáctico
LENGUAJES Y AUTMATAS II
INVESTIGACIN:
PILA SEMNTICA EN UN ANALIZADOR SINTCTICO
PROFESOR:
MARIO GIMNEZ VZQUEZ
ALUMNO:
RAL AXEL MARISCAL ESCOBAR
NO. CONTROL: 12320775
ACAPULCO, GRO.
5 - SEPTIEMBRE - 2016
ndice
Definicin y descripcin ........................................................................................... 2
Caractersticas ........................................................................................................ 4
Ventajas .................................................................................................................. 5
Desventajas............................................................................................................. 6
Ejemplos (Como trabaja la pila semntica con las expresiones)............................. 6
Bibliografa ............................................................................................................ 11
1|Pgina
Definicin y descripcin
Las pilas semnticas son estructuras de datos que se utilizan generalmente para
simplificar ciertas operaciones de programacin. Estas estructuras pueden
implementarse mediante arrays o listas enlazadas.
Tambin podemos definirlas como una coleccin de datos a los cuales se les puede
acceder mediante un extremo, que se conoce generalmente como tope.
Las pilas semnticas tienen dos operaciones bsicas:
Bottom up
Es un principio de muchos aos del estilo de programacin utilizado para realizar
una pila semntica. 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.
2|Pgina
Top-down
Este mtodo consiste en dividir los problemas en subproblemas 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 comprensible
por la computadora.
class TPila {
public:
TPila( );
TPila( TPila & );
~TPila( );
TPila& operator=( TPila &);
TItem& Cima( );
void Apilar( TItem& );
. . .
private:
struct TNodo {
TItem dato;
TNodo *sig;
};
TNodo *fp;
};
TPila::TPila( ) { fp = NULL; }
void
TPila::Desapilar( ) {
TNodo *aux;
aux = fp;
fp = fp -> sig;
delete aux;
Ejemplo de implementacion en codigo C++ de una pila semantica.
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.
3|Pgina
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.
Caractersticas
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.
Una pila semntica ayuda al compilador a reconocer la estructura de una cadena
de componentes lxicos.
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.
Con el uso de las pilas semnticas es posible 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.
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.
En general una pila semntica hace posible al analizador sintctico:
Acceder a la tabla de smbolos (para hacer parte del trabajo del analizador
semntico).
Ventajas
Al utilizar una pila semntica en un analizador sintctico podemos obtener los
siguientes beneficios:
Las rutinas semnticas suelen hacer uso de una pila que contiene la
informacin semntica asociada a los operadores en forma de registros
semnticos.
5|Pgina
Desventajas
Se necesita una memoria auxiliar que nos permita guardar los datos para
poder hacer la comparacin.
6|Pgina
::=
::=
::=
::=
2. Sea la expresin
int a,b,c;
a/(b+c^2)
7|Pgina
En algn caso podra llegar a producirse error (p.e. si / representara slo la divisin
entera).
8|Pgina
El analizador semntico podra reducir los tipos inseguros al tipo mximo (real) o
utilizar un tipo interno nuevo (ej. arit={int,real}, una unin).
Lo anterior es un ejemplo de propagacin bottom-up. La propagacin top-down
tambin es posible: lo que se transmite son las restricciones y los tipos de las hojas
sirven de comprobacin.
Por ejemplo, si la divisin slo puede ser entera, transmitimos hacia abajo la
restriccin de que sus operandos slo pueden ser enteros.
La implantacin de todos los casos posibles de operacin con tipos mixtos podra
ser excesivamente cara.
En su lugar, se parte de operaciones relativamente simples (ej. int+int, real+real) y
no se implementan las restantes (ej. int+real, real+int), aadiendo en su lugar
operaciones mondicas de cambio de tipo (ej. int->real).
Esta decisin puede introducir ambigedades. Por ejemplo, sea el programa
real a;
int b,c;
a:=b+c
9|Pgina
:= real
--------|
|
a
+ int
real --------|
|
b
c
int
int
10 | P g i n a
Bibliografa
1. Alfred V. Aho, J. D. (2000). Compiladores Principios, tecnicas y herramientas.
Mexico: Addison Wesley.
2. Alfred V. Aho, M. S. (2008). Compiladores: principios, tcnicas y
herramientas. Mexico: Pearson Adisson Wesley.
3. N., E. W. (2006). Compiler Construction. New York: Addison Wesley.
4. Terry, P. (1997). Compilers and Compiler Generators: an introduction with
C++. Boston: International Thomson Computer Press.
11 | P g i n a