Entradas

Mostrando entradas de febrero, 2022

1.1 Árboles de expresiones

Imagen
Árbol de expresiones o árbol semántico.  Es una estructura jerárquica en la cual se registran las operaciones que realiza el programa fuente. En cada una de las ramas del el árbol se registra el valor o significado que este debe tener y el análisis se encarga de terminar cuál de los valores registrado en la ramas es aplicable. Los árboles de expresiones representan el código de nivel del lenguaje en forma de datos. Los datos se almacenan en una estructura con forma de árbol. Cada nodo del árbol  representa una expresión. Cualquier hoja esta etiquetada solo con un operando. Cualquier nodo interior n esta etiquetado por un operador. Nodo raíz es un operador. 

1.2 Acciones semánticas de un analizador sintáctico

Imagen
Es la fase del analizador que se encarga de checar el texto de entrada en base a una gramática dada.  Y en caso de que el programa de entrada sea válido, suministra el árbol sintáctico que lo reconoce. En teoría, se supone que la salida del analizador sintáctico es alguna representación del árbol sintáctico que reconoce la secuencia de Token suministrada por el analizador léxico. En la práctica, el analizador sintáctico también hace: Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador semántico). Chequeo de tipos (del analizador semántico). Generar código intermedio. Generar errores cuando se producen. En definitiva, realiza casi todas las operaciones de la compilación. Este método de trabajo da lugar a los métodos de compilación dirigidos por sintaxis. Acciones semánticas Se encargan de que los tipos que intervienen en las expresiones sean compatibles o que los parámetros reales de una función sean coherentes con los parámetros formales. Fase del analizador...

1.3 Comprobaciones de tipos en expresiones

La labor de comprobación de tipos consiste en conferir a las construcciones sintácticas del lenguaje la semántica de tipificación y en realizar todo tipo de comprobaciones de dicha índole. Por su naturaleza, sin embargo, ésta se encuentra repartida entre la fase de análisis semántico y la generación de código intermedio. Comprobaciones estáticas Las comprobaciones estáticas recogen el compendio de todas aquellas tareas de carácter semántico que, por su naturaleza, pueden ser realizadas directamente durante la fase de compilación mediante el uso de los artefactos y mecanismos propios de dicha fase. Este tipo de comprobaciones son beneficiosas puesto que confieren seguridad a la ejecución del programa. Características Diferente de la dinámica en runtime. Ejemplo: comprobación de tipos, flujo de control, unicidad. • Comprobaciones dinámicas Las comprobaciones dinámicas son aquellas que no se realizan durante la fase de compilación y se delegan al momento de la ejecución del programa. Ello...

1.4 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 ...

1.5 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...

1.6 Generacion de la tabla de simbolos y tabla de direcciones

Imagen
Las tablas de símbolos (también llamadas tablas de identificadores y tablas de nombres), realizan dos funciones en el proceso de traducción: Verificar que la semántica sea correcta. Generación del código apropiado. Ambas funciones se realizan insertando o recuperando de 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 tabla de símbolos se designa por la entidad, token -derivados del análisis léxico; así como una serie de atributos (tipo de dato, dirección en memoria) que emanan de otras fases (análisis gramatical y semántico). En el contexto de un programa las entidades pueden describir propiamente objetos manipulables por el lenguaje (por ejemplo, variables, constantes o funciones) o ...

1.7 Manejo de errores semánticos

Un error semántico se produce cuando la sintaxis del código es correcta, pero la semántica o significado no es el que se pretendía. La construcción obedece las reglas del lenguaje, y por ello el compilador o intérprete no detectan los errores semánticos.  Los compiladores e intérpretes sólo se ocupan de la estructura del código que se escribe, y no de su significado. Un error semántico puede hacer que el programa termine de forma anormal, con o sin un mensaje de error.  Hablando en   términos   coloquiales, puede   hacer   que   el   equipo   se   quede   "colgado". Los mensajes de error de la forma *** Error 111 *** *** Ocurrió un error *** *** Falta declaración *** *** Falta delimitador *** No son útiles para el programador y no deben presentarse en un ambiente de compilación amigable y bien diseñado. Por ejemplo, el mensaje de error ‘Falta declaración’ podría reemplazarse por *** No ...