1. TALLER DE ACTIVIDADES DE COMPILADORES
Nombre: Luis Molina.
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 del analizador semántico es garantizar que el programa diseñado
cumpla con las reglas requeridas del lenguaje en el que se está realizando,
para que así no existan errores al momento de la compilación.
▪ A qué refiere la descripción formal de la semántica de lenguajes de
Programación, cite 6 especificaciones más usadas.
Se refiere a la descripción de cómo se comporta un programa, un lenguaje de
programación, maquinas abstractas, etc.
Especificaciones:
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. ▪ 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: Cada construcción sintáctica se especifica mediante la
computación que se lleva a cabo en su ejecución sobre una máquina abstracta. La
especificación detalla el cómo se lleva a cabo esa especificación. Con respecto a
los significados del programa, estos se describen en operaciones, utilizando un
lenguaje de reglas de inferencia lógicas en las que se describen las secuencias de
ejecución de las instrucciones sobre una máquina abstracta.
Semántica Denotacional: Para representar el comportamiento de cada sentencia se
lleva a cabo haciendo uso de entidades matemáticas, que representan el efecto de
haber ejecutado la sentencia o frase asociada. El efecto de se mide con la computación
de cómo se lleva a cabo. Es usado por lo general al momento de diseñar lenguajes de
programación y se ha empleado en lenguajes como Ada y Pascal.
Semántica Axiomática: Detalla las propiedades del efecto de ejecutar sentencias
sintácticamente correctas, desoyendo así los aspectos de su ejecución. Este sistema
permite estudiar formalmente las propiedades del lenguaje.
3. Semántica Algebraica: Basado en la especificación de tipos de datos abstractos
haciendo uso de una colección de operaciones, puesto que este conjunto de
operaciones hacen referencia a la constitución de un Álgebra, esta definición formal
acompaña a la definición de la semántica algebraica. Dicho método está enfocado en
especificar la semántica de los tipos y sus operaciones.
Semántica de Acciones: 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,
de este modo, esta semántica está basada en el concepto de acciones que reflejan las
operaciones comunes en los lenguajes de programación
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.
Con el diagrama de fases podemos identificar las conexiones.
▪ 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 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
numero
dia_del_mes
PINGUINO1
Estos identificadores están permitidos en pascal y demuestra unicidad.
5. ✓ Comprobaciones de enlace
La especificación de ámbitos para determinadas estructuras de control, en determinados
lenguajes como BASIC, requiere la utilización pareja de palabras reservadas –como IF / END
IF, FOR ID / NEXT ID o SUB / END SUB.
✓ 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
Estas comprobaciones se dan cuando existe cuando se intenta acceder a una casilla
inexistente en un vector con límite, o cuando se realiza una operación matemática
indefinida como la división por 0;
✓ Comprobaciones de tipo
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 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 pasadas16. 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.
o Puede ser visto como el árbol sintáctico de una gramática denominada abstracta.
o Es una representación simplificada de toda la información necesaria para el resto del
programa.
o Es una representación de la estructura de una consecución de componentes léxicos.
▪ 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
| termino
;
termino: termino '*' factor
| termino '/' factor
| factor
;
factor: '+' factor
| '(' expresion ')'
| CTE_ENTERA
;