IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
Analisis sintactico actividad 15
1. NOMBRE: Andrés Dávila M.
FECHA: 24/06/20
MATERIA: Compiladores
ANALISIS SEMÁNTICO
Contestar las siguientes preguntas
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 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. El tipo y dimensión de análisis semántico requerido varía enormemente de
un lenguaje a otro. En lenguajes interpretados como Lisp o Smalltalk casi no se lleva a cabo análisis
semántico previo a su ejecución, mientras que en lenguajes como Ada, el analizador semántico
deberá comprobar numerosas reglas que un programa fuente está obligado a satisfacer.
▪ A qué refiere la descripción formal de la semántica de lenguajes de programación, cite 6
especificacionesmás usadas.
1. Revelar posibles ambigüedades existentes implementaciones de procesadores de lenguajes o en
documentos descriptivos de lenguajes de programación.
2. Ser utilizados como base para la implementación de procesadores de lenguaje.
3. Verificar propiedades de programas en relación con pruebas de corrección o información
relacionada con su ejecución.
4. Diseñar nuevos lenguajes de programación, permitiendo registrar decisiones sobre
construcciones particulares del lenguaje, así como permitir descubrir posibles irregularidades u
omisiones.
5. 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.
6. 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.
2. Semántica Operacional. -Lo que realmente especifica es como 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.
Ejemplo: Este ejemplo es una especificación formal de la semántica de una asignación en un
lenguaje de programación.
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: La especificación de una asignación en semántica denatacional es:
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 [Hoare73]. Se utiliza mayoritariamente en
verificación formal de corrección de programas.
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 [Meinke92]. Este método está pues
enfocado a especificar la semántica de los tipos y sus operaciones. La semántica algebraica
constituye también la base de la semántica de acciones, empleada para especificar la semántica de
lenguajes de programación al completo.
Ejemplo. La especificación del tipo lógico (booleano) en un lenguaje de programación puede llevarse
a cabo del siguiente modo, siguiendo la semántica algebraica:
Semántica de acciones.- Fue elaborado por Peter Mosses [Mosses91] 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 [Watt96]. De este modo, esta
semántica está basada en el concepto de acciones que reflejan las operaciones comunes en los
4. lenguajes de programación, ofreciendo primitivas para la asignación y declaración de
identificadores, así como la combinación de instrucciones mediante control de flujo secuencial,
condicional e iterativo.
▪ Cuál es la conexión directa entre el análisis semántico con el resto de las fases que emplea u n
compilador, explique a través del organizador gráfico de Aho.
La conexión directa que tiene el análisis semántico con el resto de fases del compilador es la Tabla
de símbolos (Inserción y búsqueda de símbolos) y otra con el Manejador de errores (Errores
Semánticos).
▪ Cite de forma rápida ejemplos de comprobaciones que hace el analizador semántico con
respecto a:
5. ✓ 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.
−Los valores de un tipo enumerado de Pascal o C han de ser únicos.
−Las etiquetas de un lenguaje de programación, como un ensamblador, no pueden estar repetidas,
puesto que los saltos a las mismas serían ambiguos.
−La declaración de un identificador en un ámbito ha de ser única en multitud de lenguajes de
programación.
✓ Comprobaciones de enlace
En un ensamblador, un salto a una etiqueta requiere que ésta haya sido referida como una posición
de memoria. −En el lenguaje de programación ANSI C [Kernighan91] y en ISO/ANSI C++ [ANSIC++] la
invocación a una función o método requiere que éstos hayan sido declarados previamente.
✓ 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
-El acceso a un vector fuera de rango.
-Utilización de un puntero nulo.
-División por cero.
✓ Comprobaciones de tipo
6. -Comprobar las operaciones que se pueden aplicar a cada construcción del lenguaje. Dado un
elemento del lenguaje, su tipo identifica las operaciones que sobre él se pueden aplicar. 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.
-Inferir el tipo de cada construcción del lenguaje. Para poder implementar la comprobación anterior,
es necesario conocer el tipo de toda construcción sintácticamente válida del lenguaje. Así, el
analizador semántico deberá aplicar las distintas reglas de inferencia de tipos descritas en la
especificación del lenguaje de programación, para conocer el tipo de cada construcción del lenguaje.
▪ Qué comprende el análisis semántico como decoración del Árbol de Sintaxis abstracta.
Comprenden la asignación de información adicional a los nodos del AST representando propiedades
de las construcciones sintácticas del lenguaje, tales como el tipo de una expresión. Un AST decorado
o anotado es una ampliación del AST, en el que a cada nodo del mismo se le añaden atributos
indicando las propiedades necesarias de la construcción sintáctica que representan.
▪ Defina las características más importantes del Árbol de sintaxis abstracta.
-Las expresiones tendrán asociadas un atributo tipo que indique si son reales o enteras. Esto es
necesario porque se podrá asignar un valor entero a una expresión real, pero no al revés.
−Las expresiones deberán tener un atributo lógico que indique si son o no lvalues. De este modo, se
podrá comprobar si lo que está a la izquierda de la asignación es o no semánticamente correcto.
−En una declaración se deberá insertar el identificador en una tabla de símbolos con su tipo
declarado, para poder conocer posteriormente el tipo de cualquier identificador en una expresión.
Es, por tanto, necesario asignar un atributo nombre (cadena de caracteres) a un identificador.
−Finalmente, aunque más enfocado a la fase de generación de código o interpretación que al análisis
semántico– se les asigna un valor entero o real a las constantes del lenguaje.
▪ Defina una gramática concreta para la siguiente operación 7+(4*2) * 5/(10*2) y finalmente
genere su árbol sintáctico.
7. El analizador sintáctico comprueba que las sentencias que componen el texto fuente son correctas
en el lenguaje, creando una representación interna que corresponde a la sentencia analizada. De
esta manera se garantiza que sólo serán procesadas las sentencias que pertenezcan al lenguaje
fuente. Durante el análisis sintáctico, así como en las demás etapas, se van mostrando los errores
que se encuentran.