1. TALLER DE ACTIVIDADES DE COMPILADORES
Daniel Rosero
Fecha: 06 de junio del 2019
Tema: Análisis sintáctico
Resuelva cada una de las interrogantes planteadas y subir el enlace al espacio virtual con la
publicación del enlace de la dirección de su blog.
• ¿Cuál es el objetivo principal del analizar 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. El
tipo y dimensión de análisis semántico requerido varía enormemente de un lenguaje a otro.
• 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 de la semántica de lenguajes de programación es la descripción rigurosa del significado o
comportamiento de programas, lenguajes de programación, máquinas abstractas o incluso cualquier dispositivo
hardware. La necesidad de hacer especificaciones formales de semántica surge para [Nielson92, Watt96, Labra03]:
o Revelar posibles ambigüedades existentes implementaciones de procesadores de lenguajes o en
documentos descriptivos de lenguajes de programación.
o Ser utilizados como base para la implementación de procesadores de lenguaje.
o Verificar propiedades de programas en relación con pruebas de corrección o información relacionada con
su ejecución.
o Diseñar nuevos lenguajes de programación, permitiendo registrar decisiones sobre construcciones
particulares del lenguaje, así como permitir descubrir posibles irregularidades u omisiones.
o 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.
o 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.
• Cuáles son los puntos de vista de descripción semántica más utilizados, realice un
resumen corto y un ejemplo de la especificación de los mismos.
o 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.
Ejemplo:
2. o 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:
o 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.
Ejemplo:
o Semántica algebraica: Se basa en la especificación de tipos de datos abstractos mediante una colección
de operaciones (incluyendo alguna constante).
Ejemplo:
o 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:
3. • Cuál es la conexión directa entre el análisis semántico con el resto de fases que emplea un
compilador, explique a través del organizador gráfico de Aho.
• Cite de forma rápida ejemplos de comprobaciones que hace el analizador semántico con respecto:
✓ Declaración de identificadores y reglas de ámbitos
✓ Comprobaciones de unicidad
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 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
Las sentencias break y continue de Java y C sólo pueden utilizarse en determinadas estructuras de control
del lenguaje. Éste es otro escenario para que el analizador sintáctico posponga la comprobación hasta la
fase análisis semántico.
✓ Comprobaciones dinámicas
Acceso a un vector fuera de rango, utilización de un puntero nulo o división por cero.
✓ Comprobaciones de tipo
En 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.
4. • Qué comprende el análisis semántico como decoración del Árbol de Sintaxis abstracta.
Como sabemos, un árbol sintáctico 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 las características más importantes del Árbol de sintaxis abstracta.
o Comparado al código fuente, un AST no incluye ciertos elementos, como puntuación no esencial y
delimitadores (corchetes, punto y coma, paréntesis, entre otros.).
o Una diferencia importante es que el AST puede ser editado y mejorado con propiedades y anotaciones para
cada elemento que contiene. Esta edición y anotación es imposible con el código fuente de un programa,
mientras que esto implicaría cambiarlo.
o Al mismo tiempo, un AST usualmente contiene información extra sobre el programa, debido a las etapas
consecutivas de análisis del compilador. Un ejemplo simple de la información adicional presente en un AST
es la posición de un elemento en el código fuente. Esta información es usada en caso de un error en el
código, para notificar al usuario la locación de un error.
• Defina una gramática concreta para la siguiente operación 7+(4*2) * 5/(10*2) y finalmente genere
su árbol sintáctico.
o expresión: expresión '*' término
expresión '*' término
término;
o termino: término '*' factor
término '/' factor
factor;