Presentacion Compiladores
Análisis semántico
•
•
•
•
•
•
Mark Lozano
José Ávila
Allan Cerrato
Audry Meléndez
Fausto Romero
María Cheverria
Resumen
• Introducción
• Gramáticas de atributos.
– Gramáticas S-atribuidas.
– Gramáticas L-atribuidas.
• Esquemas de traducción dirigidos por sintaxis.
• Grafo de dependencias.
• Evaluación de atributos.
Introducción
• El lenguaje es un vehículo por elcual se transmiten instrucciones a
un procesador para que las ejecute y produzca ciertos resultados.
• Es tarea del compilador extraer el contenido semántico incluido en las
sentencias del programa.
• Ciertos aspectos relativos a la corrección de un programa no se
pueden expresar claramente mediante el lenguaje de programación.
• Es necesario dotar al compilador de rutinas auxiliares para captar
todolo que no se ha expresado mediante la sintaxis del lenguaje
Introducción
• Semántica: conjunto de reglas que especifican el
significado de cualquier sentencia
sintácticamente correcta y escrita en un
determinado lenguaje.
• El análisis semántico, a diferencia de otras fases, no se
realiza claramente diferenciado del resto de las tareas del
compilador.
– Fase en la que se obtiene informaciónnecesaria para la compilación
tras conocer la estructura sintáctica del programa.
– Completa las fases de análisis léxico y sintáctico incorporando
comprobaciones que no pueden asimilarse al mero reconocimiento de
una cadena dentro de un lenguaje
Introducción
• Errores semánticos de un programa:
– Conversiones de tipos no permitidas
int x;
x = 4.32;
Error: Ej1.java [6:1] possible loss of precision– Variables usadas y no definidas
– Operandos de tipos no compatibles
if (x || 5) x = 0;
Error: Ej2.java [7:1] operator || cannot be applied to int,int
Funciones del análisis
• Las principales funciones son:
semántico
– Identificar cada tipo de instrucción y sus componentes.
– Completar la Tabla de Símbolos.
– Realizar comprobaciones estáticas:
• Se realizan durante la compilación delprograma.
• Ejemplos: comp. de tipos, unicidad de etiquetas e identificadores,
etc.
• Realizar comprobaciones dinámicas:
• Aquellas que el compilador incorpora al programa traducido.
• Hacen referencia a aspectos que sólo pueden ser conocidos en
tiempo de ejecución
• Dependientes del estado de la máquina en la ejecución o del
propio programa.
– Validar las declaraciones de identificadores: en muchoslenguajes no se
puede usar una variable si no ha sido declarada con anterioridad.
Introducción
• El análisis semántico se divide en dos categorías:
– Análisis de la exactitud del programa para garantizar una ejecución
adecuada.
• Algunos lenguajes (Lisp, Smalltallk) pueden no tener análisis
estático.
• Por ejemplo, ADA es un lenguaje con fuertes restricciones para
que un programa sea ejecutable.
–Análisis para mejorar la eficiencia (optimización del programa
traducido)
Especificación de la
• No hay una notación estándar para especificar la
semántica
semántica estática de un lenguaje
– El análisis semántico varía mucho de unos lenguajes a
otros
• Las especificaciones semánticas de un lenguaje pueden
hacerse de manera informal o formal:
– Especificación natural: basada en el lenguajenatural.
• Por ejemplo:
– “Los identificadores deben definirse antes de utilizarse”
– “Los operandos deben ser compatibles entre sí”
– Especificación formal: definición más precisa.
• Lenguajes formales: Z, B, VDM, etc.
• Gramáticas de atributos (Knuth, 1968)
Gramáticas de
atributos
• Una gramática de atributos es una gramática libre de contexto cuyos
símbolos pueden tener asociados atributos y lasproducciones pueden tener
asociadas reglas de evaluación de los atributos.
• En la creación de compiladores se utilizan ecuaciones de atributos o reglas
semánticas como método para expresar la relación entre el cálculo de los
atributos y las reglas del lenguaje.
• Cada producción (regla sintáctica) tiene asociada una acción semántica que
se aplica cuando se realiza una reducción en el análisis...
Regístrate para leer el documento completo.