1. TALLER DE ACTIVIDADES DE COMPILADORES
Fecha: 31 de mayo del 2018
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 lenguajes es
asegurarse de que el programa analizado satisfaga las reglas requeridas por la
especificación del lenguaje, para garantizar su correcta ejecución.
▪ 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 descrip-ción
rigurosa del significado o comportamiento de programas, lenguajes de programación,
máquinas abstractas o incluso cualquier dispositivo hardware.
ESPECIFICACIONES MÁS USADAS:
• 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 in-
formació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. ▪ 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.
• Semántica operacional: Define el significado de cada construcción
sintáctica que 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. Los significados del
programa son descritos en términos de operaciones, utilizando un
lenguaje basado en reglas de inferencia lógicas en las que se describen
formalmente las secuencias de ejecución de las diferentes instrucciones
sobre una máquina abstracta.
• Semántica denotacional: Define la representación del comportamiento de
cada sentencia o frase del lenguaje, este se lleva a cabo mediante entidades
matemáticas (de-notación) que representan el efecto de haber ejecutado
las sentencia o frase asociada.
• 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.
3. • Semántica algebraica: Se basa en la especificación de tipos de datos abstrac-
tos 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 opera-
ciones constituye un álgebra, este método de descripción formal de semántica
se denomina semántica algebraica.
4. ▪ 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.
El analizador semántico aporta en el proceso de compilación buscando, definiendo e
identificando el significado del programa, es decir examina y clasifica los bloques de
código que el analizador sintáctico no lo pudo hacer completamente.
▪ Cite de forma rápida ejemplos de comprobaciones que hace el analizador
semántico con respecto a:
✓ Declaración de identificadores y reglas de ámbitos:
superficie = base * altura / 2;
Para este ejemplo cada una de las variables usadas debieron estar declaradas
anteriormente. En este caso el analizador sintáctico tendría que aplicar reglas de
ámbito como la ocultación de identificadores.
✓ Comprobaciones de unicidad
Un claro ejemplo es que, en pascal, un identificador debe declararse de forma única, las
etiquetas en una proposición de tipo case deben ser diferentes y no se pueden repetir los
elementos en un tipo escalar.
✓ Comprobaciones de enlace
Por ejemplo en el lenguaje Ada, un enlace puede tener un nombre que aparezca al
principio y al final de la construcción. El compilador debe comprobar que se utilice el
mismo nombre en ambos sitios.
✓ Comprobaciones pospuestas por el analizador sintáctico
En este punto el analizador semántico deberá comprobar varias restricciones, por
ejemplo en el lenguaje java o C# se usa la sentencia return para retornar datos, pero
antes de hacerlo hay una serie de instrucciones previas a ejecutarse.
✓ 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.
5. ✓ 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.
▪ Qué comprende el análisis semántico como decoración del Árbol de
Sintaxis abstracta.
El análisis semántico interviene en las pasadas que se generan durante el proceso de
compilación, aquí se producen análisis de tipo sintáctico y optimizaciones de código en cada
pasada, para el análisis semántico 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.
▪ 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.
- Es una simplificación de árbol sintáctico que representa toda la información
necesaria para el resto del procesamiento del programa de un modo más eficiente
que el árbol sintáctico original.
▪ Defina una gramática concreta para la siguiente operación 7+(4*2) * 5 /(10*2) y
finalmente genere su árbol sintáctico.
expresion: expresion '*' termino
| expresion '*' termino
| termino
;
termino: termino '*' factor
| termino '/' factor
| factor
;
Gramática abstracta:
expresion: expresionBinaria
| expresionUnaria
| constanteEntera
;
expresioBinaria: expresion ('*'|'/'|'+') expresion
; ;
constanteEntera: CTE_ENTERA
;
7|4|2|5|10 CTE_ENTERA
('*'|'/'|'+') Expresiones