Want to create interactive content? It’s easy in Genially!

Reuse this genially

Pila semántica en un analizador sintáctico, Esquema de traducción, Ge

stylesfc.1104

Created on March 29, 2024

Start designing with a free template

Discover more than 1500 professional designs like these:

Transcript

Pila semántica en un analizador sintáctico.

JESÚS IKER FERNÁNDEZ CONSTANTINO
"6-M
29/03/2024
COMPILADORES

PILA SEMANTICA

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.

Caracteristicas

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.

Caracteristicas

Análisis Sintáctico: El esquema de traducción debe definir cómo se analiza la estructura sintáctica del código fuente. Esto implica la definición de reglas gramaticales, como producciones de una gramática libre de contexto, que describen la sintaxis del lenguaje fuente. El analizador sintáctico utiliza estas reglas para construir una representación estructurada del código fuente, como un árbol de sintaxis abstracta. Análisis Semántico: El esquema de traducción también especifica cómo se asigna significado al código fuente. Esto implica la definición de reglas semánticas que determinan el comportamiento y las propiedades del programa. Durante esta fase, se pueden realizar acciones como la verificación de tipos, la resolución de nombres y la generación de información necesaria para la optimización y la generación de código. Generación de Código: Una parte importante del esquema de traducción es la definición de cómo se genera el código destino a partir del código fuente. Esto implica traducir la estructura y el significado del código fuente en instrucciones del lenguaje destino. Dependiendo del objetivo del compilador o intérprete, el código destino puede ser código máquina directo, código intermedio o instrucciones para una máquina virtual. Optimización: Algunos esquemas de traducción incluyen pasos de optimización para mejorar el rendimiento del código generado. Estos pasos pueden incluir optimizaciones a nivel de código intermedio o técnicas de transformación de código para mejorar la eficiencia del programa final. Generación de Errores y Advertencias: El esquema de traducción también debe definir cómo se manejan los errores y advertencias durante el proceso de compilación. Esto implica especificar qué tipos de errores pueden ocurrir, cómo se informan al usuario y qué acciones se toman en respuesta a ellos.

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.

Caracteristicas

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. Tabla de Símbolos: La tabla de símbolos es una estructura de datos que almacena información sobre los símbolos encontrados en el código fuente, como variables, funciones, tipos de datos, constantes, entre otros. Cada entrada en la tabla de símbolos está asociada con un identificador único y contiene información relevante sobre ese símbolo, como su tipo, ámbito, nivel de anidamiento, dirección de memoria, entre otros. Direcciones de Memoria: Las direcciones de memoria se utilizan para asignar ubicaciones de memoria a variables y otras entidades en el código fuente. Durante el análisis semántico, se asignan direcciones de memoria a cada variable declarada en el programa.

BIBLIOGRAFIA

https://5e344735705b1.site123.me/unidad-i-%C3%81nalisis-sem%C3%A1ntico/16-generaci%C3%B3n-de-la-tabla-de-s%C3%ADmbolo-y-de-direcciones

https://5e344735705b1.site123.me/unidad-i-%C3%81nalisis-sem%C3%A1ntico/15-esquema-de-traducci%C3%B3n

LINK

LINK

Actividad 04

https://lucyleonmoreno.blogspot.com/2019/09/pila-semantica-en-un-analizador.html

LINK