Inves Zai
Inves Zai
Inves Zai
INVESTIGACION 1
ALUMNO
Garcia Calderon Zaira Linnet B19520379
Pop
(para extraer un elemento) La pila semántica en un analizador sintáctico juega un
papel fundamental en el desarrollo de cualquier analizador semántico. Dentro de
cada elemento de la pila se guardan los valores que pueden tener una expresión.
Como podemos entender un analizador sintáctico ascendente utiliza durante el
análisis una pila semántica. En esta va guardando datos que le permiten ir
haciéndolas operaciones de reducción que necesita. Para incorporar acciones
semánticas como lo es construir el árbol sintáctico, es necesario incorporar a la pila
del analizador sintáctico ascendente otra columna que guarde los atributos de los
símbolos que se van analizando.
Bottom up
Es un principio de muchos años del estilo de programación utilizado para realizar
una pila semántica. Los elementos funcionales de un programa no deben ser
demasiado grandes. Si un cierto componente de un programa crece más allá de la
etapa donde está fácilmente comprensible, se convierte en una masa de la
complejidad que encubre errores tan fácilmente como una ciudad grande encubre
fugitivos.
Top-down
Este método consiste en dividir los problemas en sus problemas más sencillos para
conseguir una solución más rápida. El diseño descendente es un método para
resolver el problema que posteriormente se traducirá a un lenguaje comprensible
por la computadora.
Reglas semánticas
Son el conjunto de normas y especificaciones que definen al lenguaje de
programación y están dadas por la sintaxis del lenguaje, las reglas semánticas
asignan un significado lógico a ciertas expresiones definidas en la sintaxis del
lenguaje. La evaluación de las reglas semánticas define los valores de los atributos
en los nodos del árbol de análisis sintáctico para la cadena de entrada. Una regla
semántica también puede tener efectos colaterales, por ejemplo, imprimir un valoro
actualizar una variable global.
Compatibilidad de tipos
Durante la fase de análisis semántico, el compilador debe verificar que los tipos y
valores asociados a los objetos de un programa se utilizan de acuerdo con la
especificación del lenguaje. Además, debe detectar conversiones implícitas de tipos
para efectuarlas o insertarle código apropiado para efectuarlas, así como almacenar
información relativa a los tipos de los objetos y aplicar las reglas de verificación de
tipos.
Características
Sus características fundamentales es que al extraer se obtiene siempre el último
elemento que acabe de insertarse. Por esta razón también se conoce como
estructuras de datos LIFO, una posible implementación mediante listas enlazadas
seria insertando y extrayendo siempre por el principio de la lista. Una pila semántica
ayuda al compilador a reconocer la estructura de una cadena de componentes
léxicos. Al decir pila semántica no se refiere a que hay varios tipos de pila, hace
referencia que se debe programar única y exclusivamente en un solo lenguaje, es
decir, no podemos mezclar código de C++ con Visual BASIC. Con el uso de las pilas
semánticas es posible construir un árbol de análisis sintáctico, este raramente se
construye como tal, sino que las rutinas semánticas integradas van generando el
árbol de Sintaxis abstracta. Se especifica mediante una gramática libre de contexto.
Para incorporar acciones semánticas como lo es construir el árbol sintáctico, es
necesario incorporar a la pila del par otra columna que guarde los atributos delos
símbolos que se van analizando. En general una pila semántica hace posible al
analizador sintáctico: Acceder a la tabla de símbolos (para hacer parte del trabajo
del analizador semántico).
Se necesita una memoria auxiliar que nos permita guardar los datos para
poder hacer la comparación.
Un grave error que puede ocurrir es tratar de eliminar un elemento de una
pila semántica vacía. Este tipo de error se le conoce como
subdesbordamiento ( underflow) y puede ocasionar que el analizador
sintáctico se detenga repentinamente y con ello se aborte este proceso.
El tamaño de la pila puede ser un problema, en caso de que esta crezca
hasta tal punto de sobrepasar la memoria disponible.
A veces un error provoca una avalancha de muchos errores que se
solucionan con el primero
Ejemplos (Como trabaja la pila semántica con las
expresiones)
.
El analizador semántico podría reducir los tipos inseguros al tipo máximo (real) o
utilizar un tipo interno nuevo (ej. arit={int,real}, una unión).Lo anterior es un ejemplo
de propagación bottom-up.
Por ejemplo, si la división sólo puede ser entera, transmitimos hacia abajo la
restricción de que sus operados sólo pueden ser enteros. La implantación de todos
los casos posibles de operación con tipos mixtos podría ser excesivamente cara
.En su lugar, se parte de operaciones relativamente simples (ej. int+int, real+real)
yno se implementan las restantes (ej. int+real, real+int), añadiendo en su lugar
operaciones monádicas de cambio de tipo (ej. int->real).Esta decisión puede
introducir ambigüedades. Por ejemplo, sea el programa.