Acciones semánticas del Analizador sintáctico
1.1
Pila semántica en un analizador sintáctico
Las 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.
Pila: 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 introducir un elemento)
·
Pop (para extraer
un elemento)
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.
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 programación.
Estas estructuras pueden implementarse mediante arrays o
listas enlazadas.
Un analizador sintáctico es un autómata de pila que reconoce la estructura de una cadena de componentes léxicos.
En general, el analizador sintáctico inicializa el
compilador y para cada símbolo de entrada
llama al analizador morfológico y proporciona el siguiente símbolo de entrada.
Al decir pila semántica 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 código de C++ con Visual
Basic.
1.1
Esquema de traducción
Un esquema de traducción es una gramática independiente de contexto en la que se asocian atributos con los símbolos gramaticales y se insertan acciones semánticas encerradas entre llaves { } dentro de los lados derechos de las producciones. Los esquemas de traducción pueden tener tantos atributos sintetizados como heredados.
Cuando se diseña un esquema de traducción, se deben respetar algunas limitaciones para asegurarse de que el valor de un atributo esté disponible cuando una acción se refiera a él. Estas limitaciones, motivadas por las definiciones con atributos por la izquierda, garantizan que las acciones no hagan referencia a un atributo que aún no haya sido calculado. El ejemplo más sencillo ocurre cuando sólo se necesitan atributos sintetizados, en este caso, se puede construir el esquema de traducción creando una acción que conste de una asignación para cada regla semántica y colocando esta acción al final del lado derecho de la producción asociada.
Traducción descendente
Se trabaja con esquema de traducción en lugar de hacerlo con definiciones dirigidas por sintaxis, así que se puede ser explícito en cuanto al orden en que tienen que lugar las acciones y las evaluaciones de los atributos.
Eliminacion de la recursividad izquierda de un esquema de traducción
Como la mayoría de los operadores aritméticos son asociativos por la izquierda, es natural utilizar gramáticas recursivas por la izquierda para las expresiones. La transformación se aplica a esquemas de traducción con atributos sintetizados.
Para el análisis sintáctico descendente, se supone que una acción se ejecuta en el mismo momento en que se expandiría un símbolo en la misma posición. Un atributo heredado de un símbolo debe ser calculado por una acción que aparezca antes que el símbolo, y un atributo sintetizado del no terminal de la izquierda se debe calcular después de que hayan sido calculados todos los atributos de los que depende.
1.1
Generación de la tabla de símbolo y de direcciones
Las tablas de símbolos (también llamadas tablas de identificadores y tablas de nombres), realizan dos importantes funciones en el proceso de traducción: verificar que la semántica sea correcta y ayudar en la generación apropiada de código. Ambas funciones se realizan insertando o recuperando desde la tabla de símbolos los atributos de las variables usadas en el programa fuente. Estos atributos, tales como: el nombre, tipo, dirección de almacenamiento y dimensión de una variable, usualmente se encuentran explícitamente en las declaraciones o más implícitamente a través 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 compilación es la tabla de símbolos, la cual tiene como propósito registrar
información que se comparte entre varias etapas y que permite administrar los recursos asociados
a las entidades que manipulará el programa. La tabla de símbolos tiene típicamente la siguiente estructura:
Una tabla de símbolos 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 símbolos
dependen en algún grado de la naturaleza del lenguaje de programación 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 organización de la tabla de símbolos variará dependiendo de las limitaciones de memoria y tiempo de acceso.
1.7 Manejo de errores semánticos
Un error semántico se produce
cuando la sintaxis del código es correcta, pero lasemántica o significado no es
el que se pretendía. La construcción obedece las reglas dellenguaje, y por ello
el compilador o intérprete no detectan los errores semánticos. Loscompiladores
e intérpretes sólo se ocupan de la estructura del código que se escribe, y node
su significado.
Un error semántico puede hacer
que el programa termine de forma anormal, con o sin unmensaje de error.
Hablando en términos coloquiales, puede hacer que el equipo se quede"colgado".
Bueno esto quiere decir que los
Errores semánticos son más que nada errores quecometen las personas, al momento
de trabajar ya que la computadora no tienepensamiento propio solo acata las
reglas por las que fue diseño y su protocolo. Elcomputador trabaja revisando la
sintaxis y la estructura del programa mas no la lógica.
Comentarios
Publicar un comentario