Para mayor comprencion de los conceptos basicos de la compilacion en referencia al analisis sintactico, se responde alguna de las principales preguntas del tema.
1. ESCUELA DE INGENIERÍA
SEMESTRE MAYO –
AGOSTO 2020
COMPILADORES
ACTIVIDAD EN
CLASES N° 15
NOMBRE: MAURICIO PINTO Fecha:
24/06/2020
ANALISIS
SEMÁNTICO
1. ¿Cuál es el objetivo principal del analizador semántico de un
procesador de lenguajes?
El objetivoprincipal del analizadorsemánticode unprocesadorde lenguajees
asegurarse de que el programaanalizadosatisfagalasreglasrequeridasporla
especificacióndel lenguaje,paragarantizarsucorrecta ejecución.
2. A qué refiere la descripción formal de la semántica de lenguajes de
programación,cite 6 especificacionesmásusadas.
La descripción formal se refiere a la descripción estricta del significado o
comportamiento del programa, lenguajes de programación, etc.
− Revelar posibles ambigüedades existentes implementaciones de
procesadores de lenguajes o en documentos descriptivos de lenguajes de
programación.
− Ser utilizados como base para la implementación de procesadores de
lenguaje.
− Verificar propiedades de programas en relación con pruebas de corrección o
información relacionada con su ejecución.
− Diseñar nuevos lenguajes de programación, permitiendo registrar
decisiones sobre construcciones particulares del lenguaje, así como permitir
descubrir posibles irregularidades u omisiones.
− Facilitar la comprensión de los lenguajes por parte del programador y como
2. mecanismo de comunicación entre diseñador del lenguaje, implementador y
programador. La especificación semántica de un lenguaje, como documento
de referencia, aclara el comportamiento del lenguaje y sus diversas
construcciones.
− Estandarizar lenguajes mediante la publicación de su semántica de un modo
no ambiguo. Los programas deben poder procesarse en otra implementación
de procesador del mismo lenguaje exhibiendo el mismo comportamiento.
3. Cuáles sonlos puntos devista de descripción semántica más utilizados, realice
un resumen corto y un ejemplo de la especificación de los mismos.
− Semántica operacional: El significado de cada construcción sintáctica es
especificado mediante la computación que se lleva a cabo en su ejecución sobre
una máquina abstracta. Lo que realmente se especifica es cómo se lleva a cabo
dicha ejecución. Ejemplo:
− Semántica denotacional: La representación del comportamiento de cada
sentencia o frase del lenguaje se lleva a cabo mediante entidades matemáticas
(denotación) que representan el efecto de haber ejecutado las sentencia o frase
asociada. Ejemplo:
− Semántica axiomática: Especifica las propiedades del efecto de ejecutar las
sentencias sintácticamente correctas, expresadas mediante asertos, desoyendo
así los aspectos de su ejecución. El sistema permite estudiar formalmente las
propiedades del lenguaje y se requiere la utilización de sistemas consistentes y
completos. Ejemplo:
3. − Semántica algebraica: Se basa en la especificación de tipos de datos abstractos
mediante una colección de operaciones (incluyendo alguna constante). Puesto
que un conjunto de valores al que se le añaden una colección de operaciones
constituye un álgebra, este método de descripción formal de semántica se
denomina semántica algebraica. Ejemplo:
− Semántica de acciones: Fue elaborado por Peter Mosses, para describir la
semántica de lenguajes de un modo más inteligible. Las especificaciones
semánticas de lenguajes siempre han sido consideradas como oscuras,
complicadas y únicamente legibles por expertos, adquiriendo así una mala
reputación por su uso intensivo de símbolos matemáticos. Ejemplo: la
combinación de instrucciones mediante control de flujo secuencial, condicional e
iterativo.
4. Cuál es laconexión directa entre elanálisis semánticocon el resto de las fases
que emplea un compilador, explique a través del organizador gráfico de Aho.
4. 5. Cite de forma rápida ejemplos de comprobaciones que hace el analizador
semántico con respecto a:
✓ Declaración deidentificadores yreglasdeámbitos
Superficie = base * altura / 2; Para que la asignación previa fuese correcta,
los tres identificadores deberían de estar declarados. Puede que estén
declarados en el ámbito (bloque) actual o en uno menos anidado que el
actual, en cuyo caso el analizador sintáctico tendría que aplicar reglas de
ámbito como la ocultación de identificadores.
✓ Comprobaciones de unicidad
Existen multitud de elementos en lenguajes de programación cuyas entidades
han de existir de un modo único, es decir, no se permite que estén duplicadas.
Ejemplos típicos son: Constantes de cada case en Pascal, C o Java. Cada uno de
los elementos existentes en los condicionales múltiples de los lenguajes de
programación mencionados, ha de ser único. En otro caso, el analizador
semántico deberá generar un error de compilación.
✓ Comprobaciones de enlace
5. En ocasiones, el empleo de un elemento de un lenguaje ha de estar ligado
a una utilización previa del mismo: En un ensamblador, un salto a una
etiqueta requiere que ésta haya sido referida como una posición de
memoria.
✓ Comprobaciones pospuestasp o r el analizador sintáctico
Es posible escribir una gramática libre de contexto capaz de representar
que toda implementación de una función en C tenga al menos una
sentencia return. No obstante, si escribimos la gramática de cualquier
función como una repetición de sentencias, siendo return es un tipo de
sentencia, la gramática es más sencilla y fácil de procesar. El analizador
semántico deberá comprobar, pues, dicha restricción.
✓ Comprobaciones dinámicas
Diversos ejemplos pueden ser acceso a un vector fuera de rango,
utilización de un puntero nulo o división por cero.
✓ Comprobaciones de tipo
Por ejemplo, en el lenguaje Java el operador de producto no es
aplicable a una referencia a un objeto. De un modo contrario, el
operador punto sí es válido.
6. Qué comprende el análisis semántico como decoración del Árbol de Sintaxis
abstracta.
El análisis semántico y la generación de código están intercaladas con el
análisis sintáctico y por tanto con el análisis léxico. Este tipo de
compiladores es más eficiente y emplea menos memoria que los que
requieren más de una pasada. El análisis semántico de un programa es
más sencillo de implementar si se emplean para las fases de análisis
sintáctico y semántico dos o más pasadas. En este caso, la fase de análisis
sintáctico creará un árbol sintáctico abstracto para que sea procesado por
el analizador semántico.
6. 7. Defina las características más importantes del Árbol de sintaxis abstracta.
Es una representación de la estructura de una consecución de
componentes léxicos (tokens), en la que éstos aparecen como nodos hoja
y los nodos internos representan los pasos en las derivaciones de la
gramática asociada. Los árboles sintácticos poseen mucha más
información de la necesaria para el resto de las fases de un compilador,
una vez finalizada la fase de análisis sintáctico.
Defina una gramática concreta para lasiguienteoperación 7+(4*2) * 5/ (10*2) y
finalmente genere su árbol sintáctico.
7. Realizar un comentario personal sobre el funcionamiento que tiene el analizador
semántico para el proceso de la compilación.
Para el proceso de compilación el análisis semántico es una parte importante debido a
que revisa el programa fuente buscando errores semánticos y reúne la información
necesaria sobre los tipos para la posterior generación del código, estructurando una
jerarquía que lo ayuda a identificar operadores y operandos de las expresiones y
proposiciones.