Cadena de
tokens
ANÁLISIS SEMÁNTICO
Análisis Semántico
2
Comprobación estática
Comprobación de tipos
La aplicación de los operadores y operandos deben ser compatibles
Comprobaciones del flujo del control
Las proposiciones que hacen que se abandone el flujo del control de
una construcción debe tranferirse a otro punto. (break, exit)
Comprobaciones de unicidad
Hay situaciones en los que un objeto solo puede definirse una vez
exclusivamente. Las etiquetas de una sentencia case no deben
repetirse, declaraciones de objetos,..
Comprobaciones relacionadas con nombre
El mismo nombre debe aparecer dos o más veces. En Ada el nombre
que aparece en un bloque puede aparecer al principio y final, el
compilador debe comprobar que se utiliza el mismo el ambos sitios
1
Análisis Semántico
3
El Analizador Semántico
4
Autómata a pila
(Gramática independiente
del contexto)
Traductor
+ Dirigido por
Sintaxis
Acciones Semánticas
2
Traducción dirigida por sintaxis
5
Notaciones
Definición dirigida por la sintaxis (DDS)
Esquema de Traducción (EDT)
3
Traducción dirigida por sintaxis
7
Ejemplo
Sintetizados,
Sintetizados CALCULADORA
CALCULADORA, Análisis Ascendente
Ejemplo
Heredados,
H d d INFORMACIÓN DE TIPOS
4
Grafos de Dependencias
9
Grafo de Dependencias
10
Algoritmo de Construcción
5
Grafo de Dependencias
11
Ejemplo:
reall id1, id2, id3
4
T.tipo=real L.her=real 6
her 5
tipo
3 entrada
her id3
real 7 L.her=real 8 ,
her
9 L.her=real 10 , 2 entrada
id2
id1
1 entrada
Grafo de dependencias
12
6
Evaluación Ascendente de Definiciones con Atributos
Sintetizados (I)
13
Estado Val
... ...
Tope X X.x
Y Y.y
Ejemplo:
Producción
P d ió F
Fragmento d
de Código
Códi
L→E n print (val [tope])
E→E1 + T val [ntope] := val [tope-2] + val [tope]
E→T
T→T1 * F val [ntope] := val [tope-2] × val [tope]
T→F
F→( E ) val [ntope] := val [tope-1]
F→dígito F.val := dígito.valex
7
Definiciones con Atributos por la
15
Izquierda
Si la traducción ocurre durante el análisis sintáctico, el orden de evaluación de los
atributos se corresponde con el orden en el que se “crean” los nodos de un árbol
de análisis sintáctico
Un orden natural para los métodos de traducción descendente y ascendente es el
“orden de evaluación en profundidad”
Esquema de Traducción
16
8
Esquema de Traducción
17
Proceso de Síntesis
Lenguaje Intermedio
Generación de Código
Ventajas del código intermedio
Facilitar la fase de optimización
Aumentar la portabilidad del compilador de una máquina a otra
Se puede utilizar el mismo analizador para diferentes generadores
Se pueden utilizar optimizadores independientes de la máquina
TDS
9
Tipos de representaciones intermedias
19
10
Códigos de Tres Direcciones
21
Tercetos
22
11
Tercetos y Tercetos Indirectos
23
Ejemplos
Expresión Tercetos
S:=A+B*C 1 (*, B, C)
2 (+, A, (1))
3 (:=, (2), S)
IF A<B THEN X:=B 1 (<, A, B)
2 (IFF, , (4))
3 (:=, B, X)
4 (,,)
Expresión Tercetos
S:=A+B*C 1 (*,
(* B,
B C)
X:=A+B*C 2 (+, A, (1))
3 (:=, (2), S)
4 (:=, (2), X)
VE=(1, 2, 3, 1, 2, 4)
WHILE X<B DO X:=X+1 1 (<, X, B)
2 (IFF, , (6))
3 (+, X, 1)
4 (:=, (3), X)
5 (GOTO, , (1))
6 (, , )
VE=(1, 2, (3, 4, 5, 1, 2)*, 6)
12
Tercetos Indirectos, Optimización
25
Código Inicial
Expresión Tercetos Orden de Ejecución
While X<B do 1 (<, X, B) VE=(1,2,(3,4,5,6,7,1,2)*,8)
A:=X+1; 2 (IFF, , (8))
B:=B-1 3 (+, X, 1)
4 (:=, (3), A)
5 (-, B, 1)
6 (:=, (3), B)
7 (GOTO, , (1))
8 (, , )
Código Optimizado
If X<B
THEN A:=X+1;
WHILE X<B DO
B:=B-1
VE=(1, 2, 3, 4, (1, 2, 5, 6, 7)*, 8)
Nivel de Indirección
La representación de tercetos tiene mayor nivel de
indirección que los cuartetos
Optimización
Mover código en los tercetos es relativamente más
difícil, aunque en menor grado para los tercetos
indirectos
Espacio
Los cuartetos ocupan más memoria, especialmente si se
utilizan las variables temporales más de una vez
13
Tercetos
27
14
Generación de Código a partir de
29
Notación Polaca
El código se genera cuando se encuentra el operador
Ejemplo:
Pila Entrada Código Generado
$ SABC*+:=
$S ABC*+:=
$SA BC*+:=
$SAB C*+:=
$SABC *+:= LOAD C
MUL B
STO T1
$SAT1 +:= LOAD T1
ADD A
STO T2
$ST2 := LOAD T2
STO S
15
GCI con ASA
31
Ejemplo de GCI
32
16
GCI- Asignaciones con cuartetos
33
17
GCI- Condicionales
35
GCI- Bucles
36
18