1. ESCUELA DE INGENIERÍA
SEMESTRE MAYO –AGOSTO 2020
COMPILADORES
ACTIVIDAD EN CLASES N° 15
NOMBRE: Josseline Andrade Fecha: 24-06-2020
ANALISIS SEMÁNTICO
Contestar las siguientes preguntas
1. ¿Cuál es el objetivo principal del analizador semántico de un procesador de
lenguajes?
El objetivo principal del analizador semántico de un procesador de lenguaje es asegurarse
de que el programa analizado satisfaga las reglas requeridas por la especificación del
lenguaje, para garantizar su correcta ejecución.
2. A qué refiere la descripción formal de la semántica de lenguajes de
programación, cite 6 especificaciones más usadas.
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
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.
2. 3. Cuáles son los puntos de vista de descripción semántica más utilizados,
realiceun resumen corto yun ejemplode laespecificación delos 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:
− 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:
3. − 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 la conexión directa entre el análisis semántico con el resto de las
fases
que emplea un compilador, explique a través del organizador gráfico de Aho.
5. Cite de forma rápida ejemplos de comprobaciones que hace el analizador
semántico con respecto a:
✓ Declaración de identificadores 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.
4. ✓ 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
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 pospuestas por 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 elanálisissemánticocomodecoracióndel ÁrboldeSintaxis
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.
5. 7. Definalas característicasmásimportantes 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 unagramática concreta para lasiguienteoperación 7+(4*2) * 5/(10*2) y
finalmente genere su árbol sintáctico.
Expresión
Binaria
(*)
Expresión
Binaria
(+)
Constante
Entera
(7)
Expresión
Binaria
(*)
Constante
Entera
(4)
Constante
Entera
(2)
Expresión
Binaria
(/)
Constante
Entera
(5)
Expresión
Binaria
(*)
Constante
Entera
(10)
Constante
Entera
(2)
6. Realizar un comentario personal sobre el funcionamiento que tiene el analizador
semántico para el proceso de la compilación.
La fase de análisis semántico de un procesador de lenguaje es muy importante ya que computa la
información adicional necesaria para el procesamiento de un lenguaje, una vez que la estructura
sintáctica de un programa haya sido obtenida. En conclusión el objetivo del análisis semántico
por un lado detectará errores que no se han detectado en fases previas y por otro lado obtendrá
el AST .