Análisis Semántico:
Detecta la validez semántica
de las sentencias aceptadas por el analizador sintáctico. El analizador semántico
suele trabajar simultáneamente al analizador sintáctico. Se entiende por
semántica al conjunto de reglas que especifican el significado de cualquier
sentencia sintácticamente correcta y escrita en un determinado lenguaje. Las
rutinas semánticas deben realizar la evaluación de los atributos de las gramáticas
siguiendo las reglas semánticas asociadas a cada producción de la
gramática.
Análisis Sintáctico:
Analiza el símbolo, la pila
y el estado del autómata, produce las estructuras necesarias para la siguiente etapa
y en el caso de compilación dirigida por la sintaxis invoca llamadas directas
al analizador semántico y al generador de código. Escribe mensajes de errores y
trata de limitar el efecto de estos errores.
“Reconoce la estructura de
una cadena de componentes léxicos”
Teoría de Pilas Y Colas: Son estructuras de datos que se utilizan generalmente
para simplificar ciertas operaciones de programación.
Estas estructuras pueden
implementarse mediante arrays o listas enlazadas. Al utilizar arreglos para implementar
pilas se tiene la limitación de que se debe reservar el espacio en memoria con
anticipación.
Una vez dado un máximo de
capacidad a la pila no es posible insertar un número de elementos mayor que el
máximo establecido.
Una posible solución a este
tipo de inconvenientes consiste en definir pilas de gran tamaño, pero esto resultará
ineficiente y costoso.
No siempre es viable saber
con exactitud el número de elementos a tratar, y siempre existe la posibilidad de
que ocurra un error de desbordamiento. Colas
También son llamadas FIFO
(First In First Out), que quiere decir “El primero que entra es el primero
que sale”. Las rutinas semánticas suelen hacer uso de una pila (la pila semántica)
que contiene la información semántica asociada a los operados (y a veces a los
operadores) en forma de registros semánticos.
1. Colas Simples: Se inserta
por un sitio y se saca por otro, en el caso de la cola simple se inserta por el
final y se saca por el principio. Para gestionar este tipo de cola hay que
recordar siempre cual es el siguiente elemento que se va a leer y cuál es el
último elemento que se ha introducido.
2. Colas Circulares: En las
colas circulares se considera que después del último elemento se accede de
nuevo al primero. De esta forma se reutilizan las posiciones extraídas, el
final de la cola es a su vez el principio, creándose un circuito cerrado.
3. Colas con Prioridad: Las
colas con prioridad se implementan mediante listas o arrays Ordenados. No nos
interesa en este caso que salgan en el orden de entrada sino con una prioridad
que le asignemos. Puede darse el caso que existan varios elementos con la misma
prioridad, en este caso saldrá primero aquel que primero llego (FIFO).
Reglas semánticas
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.
Analizador Sintáctico
Descendente: Parten del axioma inicial de la gramática, se va descendiendo utilizando
las derivaciones izquierdas, hasta llegar a construir la cadena
analizada.
Analizador Sintáctico
Ascendente: Se va construyendo el árbol desde sus nodos terminales. Es decir, se
construye desde los símbolos de la cadena hasta llegar al axioma de la
gramática. Un Analizador Sintáctico Ascendente utiliza durante el análisis
una pila. En esta va guardando datos que le permiten ir haciendo las
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; para la integración total del sistema. El Diseño
Descendente es un método para resolver el problema que posteriormente se
traducirá a un lenguaje comprensible por la computadora. Es el proceso mediante
el cual un problema se descompone en una serie de niveles o pasos sucesivos de
refinamiento. La metodología descendiente consiste en efectuar una relación
entre las sucesivas etapas de estructuración de modo que se relacionen unas con
otras mediante entradas y salidas de información. Pila
Una colección de datos a los
cuales se les puede acceder mediante un extremo, que se conoce generalmente
como tope.
Las Pilas tienen dos
operaciones básicas: Push (para insertar un elemento) Pop (para extraer
un elemento). Gracias a las pilas es posible el uso de la recursividad. La
variable que llama al mismo procedimiento en el que está, habrá que guardarla
así como el resto de variables de la nueva llamada, para a la vuelta de la
recursividad ir sacándolas, esto es posible a la implementación de pilas. Su característica
fundamental es que al extraer se obtiene siempre el último elemento que acaba
de insertarse. Por esta razón también se conocen como estructuras de datos
LIFO.
2) CARACTERÍSTICAS
Su característica fundamental
es que al extraer se obtiene siempre el último elemento que acaba de
insertarse. Por esta razón también se conocen como estructuras de datos LIFO
(del inglés Last In First Out). Una posible implementación mediante listas
enlazadas sería insertando y extrayendo siempre por el principio de la lista.
Gracias a las pilas es
posible el uso de la recursividad. La variable que llama al mismo procedimiento
en el que está, habrá que guardarla así como el resto de variables de la nueva llamada,
para a la vuelta de la recursividad ir sacándolas, esto es posible a la
implementación de pilas.
Contiene la información
semántica asociada a los operandos (y a veces a los operadores) en forma de
registros semánticos.
Los Autómatas con Pila son
una extensión de los AFD a los que se les añade una memoria (pila).
En la pila se almacenan
símbolos de la cadena de entrada y de la gramática, así como caracteres especiales
(#) para indicar el estado de pila vacía.
Las transiciones son de la
forma: (p, x, s; q, t):
p=estado inicial
q=estado al que llega
x= símbolo de la cadena de
entrada
s=símbolo que se desapila
t=símbolo que se apila
Una pila es utilizada para
almacenar el prefijo viable de una forma sentencial de una derivación más a la
derecha. Los símbolos, y son utilizados para identificar
el pivote, por lo tanto sabremos cuando Desplazar o cuando Reducir.
3) VENTAJAS
Es posible el uso de la
recursividad. La variable que llama al mismo procedimiento en el que está, habrá
que guardarla así como el resto de variables de la nueva llamada, para a la
vuelta de la recursividad ir sacándolas, esto es posible a la implementación de
pilas.
Simplifican ciertas
operaciones de programación. Se pueden implementar mediante arrays o listas enlazadas.
4) DESVENTAJAS
Se tiene la limitación de
que se debe reservar el espacio en memoria con anticipación. Una vez dado un máximo
de capacidad a la pila no es posible insertar un número de elementos mayor que el
máximo establecido.
Si esto ocurre, en otras
palabras si la pila está llena y se intenta insertar un nuevo elemento, se producirá
un error conocido como desbordamiento-overflow.
Se deben definir pilas de
gran tamaño, pero esto resultará ineficiente y costoso.
No siempre es viable saber
con exactitud el número de elementos a tratar, y siempre existe la posibilidad
de que ocurra el error de desbordamiento.
5) EJEMPLOS DE CÓMO TRABAJA
LA PILA SEMÁNTICA CON
LAS EXPRESIONES REGULARES
Este ejemplo tendrá que
aceptar cualquier fecha del año 2011, esta fecha tendrá que ser válida (que
lleve relación el mes con el día)
AUTÓMATA DE LOS MESES
No hay comentarios:
Publicar un comentario