Está en la página 1de 34

UNIVERSIDAD NACIONAL DE JUJUY

Facultad de Ingeniería

ANÁLISIS SEMÁNTICO

Grupo 4: CARI, Jonatan Maximiliano


LAMAS, Daniel Alberto
GUERRERO, Matías
GUZMAN, Ariel Palomino
FASES DEL COMPILADOR

a:=a+1;

Analizador Semántico
Analizador Sintáctico

Código Intermedio
Analizador Léxico

Código Final
0000 0110
; 1 + a := a <a, ID> LD A, t1 0110 1100
INC A 1110 0110
STA t1, A 0001 0111
1111 1101

Estas 2 primeras fases son Las 3 fases siguientes son las


las encargadas de definir la encargadas de dar un significado
estructura sintáctica del único, preciso y computable a cada
lenguaje y sus componentes construcción del lenguaje.
léxicos.
¿POR QUÉ NECESITAMOS EL ANÁLISIS
SEMÁNTICO?
 El analizador sintáctico solo puede detectar errores
sobre la estructura del lenguaje, no así los errores de la
interpretación de esta estructura. Por esta razón
necesitamos un analizador semántico.
¿QUÉ ES UN ANALIZADOR SEMÁNTICO?
 El analizador semántico es un parte más del proceso de los
compiladores en lo cual incluye la verificación de que una gramática
tenga sentido o interpretación de un significado de un
determinados elementos, símbolos, o expresión.
 El analizador semántico trata de determinar el tipo de resultado
intermedio, comprobar que los argumentos que tienen un operador
pertenece a un conjunto de los operadores posibles y si son
compatible entre si.
¿QUÉ ES UN ANALIZADOR SEMÁNTICO?
Por ejemplo
Supongamos que tenemos una línea de código en C#
 𝑅𝑒𝑠=𝑣𝑎𝑙𝑜𝑟 1+ 𝑣𝑎𝑙𝑜𝑟 2 ;

𝑐h𝑎𝑟
    ≠ 𝑑𝑜𝑢𝑏𝑙𝑒
 

  𝑐𝑜𝑚𝑝𝑎𝑡𝑖𝑏𝑙𝑒 ⇒ 𝐸𝑟𝑟𝑜𝑟
𝑁𝑜
COMO FUNCIONA EL ANALIZADOR SEMÁNTICO
El analizador semántico requiere las siguientes
características que son
 atributos
 reglas semánticas

Existen dos maneras de asociarlos


 definición
dirigida por regla de sintaxis
 esquema de traducción

En ambos casos es útil definir un conjunto de atributos a


los símbolos gramaticales a los lenguajes.
TRADUCCIÓN DIRIGIDA POR SINTAXIS
 Es una generalización de una gramática libre de contexto en la
cual cada símbolo tiene asociado un conjunto de atributos.
 Asocia información a construcciones de un lenguaje de
programación, asignándole atributos al símbolo de la
gramática que representa dicha construcción.
 Dependiendo del tiempo en que se realice la traducción dentro
del ciclo de compilación tenemos dos clases de traducción:
1. Traducción en tiempo de compilación.
2. Traducción en tiempo de ejecución.
DEFINICIÓN DIRIGIDA POR SINTAXIS
 Una definición dirigida por sintaxis es un formalismo para
especificar las traducciones para las construcciones en función
de atributos asociados con sus componentes sintácticos.
 La idea es asociar con cada símbolo de la gramática un
conjunto de atributos y además a cada producción un conjunto
de reglas semánticas para calcular los valores de los atributos
asociados con los símbolos que aparecen en esa producción.
 La definición dirigida por sintaxis consiste en sí entonces de la
gramática y el conjunto de reglas semánticas.
TABLA DE SÍMBOLOS
 Estructura más importante para el análisis semántico.
 Contiene información esencial para el análisis.

 Su información va a servir para fases posteriores de


síntesis:
 Optimización
 Generación de código final

 Permanece sólo en tiempo de compilación, salvo


excepciones
TABLA DE SÍMBOLOS
 ¿Qué almacena?
 Almacena información sobre:

- Identificadores
- Palabras reservadas (opcional)
- Constantes (opcional)
 Para cada entrada en la TS se debe guardar:

- Lexema
- Tipo (depende de la implementación)
- Ámbito (depende de la implementación)
- Dirección de memoria
TABLA DE SÍMBOLOS
Ejemplo
𝑇𝑖𝑝𝑜 𝑑𝑒 𝑒𝑙𝑒𝑚𝑒𝑛𝑡𝑜𝑠
 

𝑀𝑎𝑡𝑟𝑖𝑧
   
𝑁 ú𝑚𝑒𝑟𝑜𝑑𝑒 𝑒𝑙𝑒𝑚𝑒𝑛𝑡𝑜𝑠
𝐿í 𝑚𝑖𝑡𝑒𝑖𝑛𝑓 . 𝑦 𝑠𝑢𝑝 .
 

 
𝑁 ú𝑚𝑒𝑟𝑜𝑑𝑒 𝑝𝑎𝑟𝑎𝑚𝑒𝑡𝑟𝑜𝑠
𝑃𝑟𝑜𝑐𝑒𝑑𝑖𝑚𝑖𝑒𝑛𝑡𝑜
 
𝑇𝑖𝑝𝑜
 
𝑑𝑒 𝑝𝑎𝑟𝑎𝑚𝑒𝑡𝑟𝑜𝑠
 𝑅𝑒𝑓𝑒𝑟𝑒𝑛𝑐𝑖𝑎
𝐹𝑜𝑟𝑚𝑎𝑑𝑒 𝑝𝑎𝑠𝑜 𝑉𝑎𝑙𝑜𝑟
 
 
PRINCIPALES OPERACIONES DE LA TS
 Inserción

 Búsqueda

 Eliminación
GESTIÓN DE TABLA DE SÍMBOLOS
 La gestión de la TS es un punto crítico para el
rendimiento del compilado.
 El acceso a la TS debe hacerse de forma eficiente y en
cualquier momento.
 ¿Quién debe acceder a la TS?
 Analizador Léxico.
 Analizador Semántico.
IMPLEMENTACIÓN DE LA TABLA DE SÍMBOLOS
La Implementación de la TS debe ser eficiente:
Lista:
 Permite insertar fácilmente
 La búsqueda depende del nº de elementos
 Puede ser muy costoso
Lista ordenada:
 La búsqueda es sencilla
 La inserción es muy costosa
Tabla Hash:
 Coste de inserción bajo
 Coste de búsqueda bajo
 Ideal para la TS
TABLA DE SÍMBOLOS
Ejemplo
Nombre de Línea Líneas
Número Dirección Tipo Valor
Variable Declaración Referenciada
1 Empresa 0 4 1 2 9,14,25

2 X3 4 1 0 3 12,14

3 Formal 8 3 2 4 36,37,38

4 B 48 1 0 5 10,11,13,23

5 Resp 52 1 0 5 11,23,25

6 M 56 6 0 6 17,21

7 Primero 64 2 0 7 28,29,30,38
ATRIBUTOS
Un atributo es un espacio de información que sirve para albergar una
característica propia del proceso de traducción y que puede ser transferida a
otras producciones gramaticales para que pueda ser usada desde allí por sus
reglas semánticas.

También se puede definir atributo como a las propiedades de los símbolos del
lenguaje que almacenan contenidos relacionados con el significado de los
símbolos a los que pertenecen.

 Se utiliza la notación


Ejemplos
ATRIBUTOS: TIPOS DE ATRIBUTOS
Atributos Sintetizados Atributos Heredados

Se calculan a partir de atributos de nodos hijos. Calculados con atributos en nodos padre y
hermanos.
Se refieren a los atributos del antecedente de la
regla. Se refieren a atributos del consecuente de la regla.

La información asciende por el árbol. Información descendente o de transito horizontal.

Los atributos sintetizados lo son durante toda la Los atributos heredados lo son durante toda la
gramática. gramática.

Los atributos de terminales son sintetizados.


ATRIBUTOS: EJEMPLOS
Atributos Heredados Atributos Sintetizados
REGLAS SEMÁNTICAS
Una regla semántica es una expresión formal asociada a
una regla de producción que permite definir la semántica
de la construcción gramatical asociada a la misma en
términos de los símbolos de la regla de producción.
REGLAS SEMÁNTICAS
Contamos con 2 tipos de Reglas Semánticas:

 Reglas de ecuaciones de atributos.

 Reglas de acción semántica.


ECUACIONES DE ATRIBUTOS
Los  valores de los atributos, de cada símbolo gramatical, están relacionados

con los valores de los atributos de los otros símbolos en la regla.

donde:
 es una función matemática de sus argumentos.
 es la colección de todos los atributos para todas las reglas gramaticales.
 símbolos gramaticales.
ECUACIONES DE ATRIBUTOS
  veremos un ejemplo para la cadena
Ahora

Consideremos la siguiente gramática simple para declaraciones de
variables de tipo int y float en una sintaxis tipo C:

 
ECUACIONES DE ATRIBUTOS
Asociada a la gramática tendremos la siguiente gramática con
atributos dtype.
Regla Gramatical Reglas Semánticas
ECUACIONES DE ATRIBUTOS
Las ecuaciones de atributo se pueden exhibir en un árbol de análisis
gramatical. Regla Gramatical Reglas Semánticas
GRAFOS DE DEPENDENCIAS
Un grafo de dependencias describe el flujo de información
entre las instancias de atributos en un árbol de análisis
sintáctico específico; una flecha de una instancia de
atributo a otra significa que el valor de la primera se
necesita para calcular la segunda.
GRAFOS DE DEPENDENCIAS
  
Algoritmo para su construcción:
 Para cada nodo en el árbol de análisis sintáctico hacer
 Para cada atributo del símbolo gramatical en el nodo hacer
 Construir un nodo en el grafo de dependencias para ;
 Para cada nodo en el árbol de análisis sintáctico hacer
 Para cada regla semántica asociada con la producción
utilizada en hacer
 Para cada hasta k hacer
 Construir una arista desde el nodo hasta el nodo para ;
GRAFOS DE DEPENDENCIAS
  veremos un ejemplo para ello utilizaremos la gramática anterior
Ahora

y la misma cadena de entrada:
ACCIONES SEMÁNTICAS
• Define solo el valor de los atributos de los símbolos que aparecen en
la producción.

• Una acción semántica se ejecuta justo cuando se han reconocido los


símbolos que se encuentran a su izquierda en el cuerpo de la
producción.
 • La acción semántica se puede ver como una regla semántica
asociada a un nuevo símbolo no terminal cuya única producción
asociada es ejecutada
ESQUEMAS DE TRADUCCIÓN

Esquema de Esquema de
traducción traducción con
postfijo acciones en medio de
la producción
ESQUEMAS DE TRADUCCIÓN
Esquema de traducción postfijo

Definición: un esquema de traducción postfijo es aquel en el cual las acciones


semánticas se encuentran al final del cuerpo de producción

 
Ejemplo

Si en la regla   insertamos un fragmento de código:

La acción semántica  se ejecutará después de todas las acciones asociadas con el


recorrido de los subárboles .
ESQUEMAS DE TRADUCCIÓN
Esquema de traducción con acciones en medio de la producción (infijo)

Para aplicar estas acciones se deben realizar los siguientes pasos:


• Recorrer en pre orden el árbol de análisis sintáctico ejecutando las acciones
semánticas.

• Adicionar nuevos hijos a cada símbolo de la parte izquierda como nuevos hijos que
contienen a las acciones semánticas en el punto donde ellas se deben realizar.

• Construir el árbol de análisis sintáctico ignorando las acciones semánticas.


ESQUEMAS DE TRADUCCIÓN
 Ejemplo de INFIJO

Si en la regla   insertamos un fragmento de código:

La acción  se ejecutará después de todas las acciones asociadas con el recorrido del subárbol de   y antes que
todas las acciones asociadas con el recorrido del subárbol .
Otro ejemplo con el árbol de análisis sintáctico

{action}
OBJETIVOS DEL ANALIZADOR
SEMÁNTICO
La Fase de análisis semántico tiene por objetivo analizar los componentes del árbol de análisis sintáctico
que representan en el programa con el fin de comprobar que se respetan ciertas reglas semánticas que
dan un significado coherente a las construcciones del lenguaje, es decir, el analizador semántico va
comprobando la coherencia semántica del árbol de análisis sintáctico según se va construyendo.

Las responsabilidades del analizador semántico son:


 Registrar declaraciones
 Inferir tipos
 Comprobar tipos
 Comprobar corrección semántica
CONCLUSIÓN
Concluimos que el analizador semántico es tan importante
como vital para un compilador, debido a que este analiza
cada estructura sintáctica verificando la coherencia de la
misma.
Para esto emplea las estructuras:
 Árbol sintáctico

 Tabla de Símbolos

Que son las más primordiales para este análisis.

También podría gustarte