Está en la página 1de 6

Nombre: Andrés Maldonado

Tema: Análisis sintáctico

▪ ¿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]:
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

1
▪ 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: 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:

 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. Ejemplo:

 Semántica algebraica: Se basa en la especificación de tipos de datos abstractos mediante


una colección de operaciones (incluyendo alguna constante). Ejemplo:

2
 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:

▪ 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.

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).

3
▪ 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

✓ 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.

4
✓ 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

-El acceso a un vector fuera de rango.


-Utilización de un puntero nulo.
-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.

▪ 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.

-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 le 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.

5
6