Академический Документы
Профессиональный Документы
Культура Документы
SEMANTICO
El anlisis semntico dota de un significado coherente a lo que
hemos hecho en el anlisis sintctico.
*Construye el rbol de
anlisis sintctico de las
hojas a la raz.
1.- DE ABAJO ARRIBA (BOTTOMUP):
*Construye un rbol de
anlisis sintctico de la raz a
las hojas
1.- DE ARRIBA ABAJO (TOPDOWN):
TABLA DE SIMBOLOS
Ejemplo:
A : float ; B
: string ;
A := B + 5 ;
Analizador Lxico.
id1 :float;
id2 : string ;
A +
B 5
Analizador Semntico
Hasta aqu la entrada es lxica y sintcticamente valida, ahora se analiza desde el
punto de vista semntico:
ATRIBUTOS ATRIBUTOS
SINTETIZADOS HEREDADOS
Son expresiones de tipos los tipos simples del lenguaje, y algunos tipos
especiales:
Integer
Real
Char
Boolean
CONSTRUCTORES DE TIPOS
Matrices
Productos
Registros
Punteros
Funciones
COMPROBACIONES DE TIPOS
Un aspecto importante del anlisis semntico es la comprobacin de los tipos de las
expresiones. Esta comprobacin se hace con un doble objetivo:
Detectar posibles errores
Averiguar el operador o funcin correcto en casos de sobrecarga
y polimorfismo.
Para representar los tipos en el compilador, se emplean lo que se denominan
expresiones de tipo (ET). La definicin de estas expresiones es generalmente
recursiva. Un ejemplo sera:
Los tipos bsicos: real, entero, . . ., adems de los tipos especiales error de tipo y
ausencia de tipo (void) son ETs.
Si n1 y n2 son enteros, rango(n1, n2) es una ET.
Si T es una ET, tambin lo es puntero(T).
Si T1 y T2 son ETs, tambin lo es T1 ! T2.
Si T1 y T2 son ETs, tambin lo es vector(T1, T2).
Si T1 y T2 son ETs, tambin lo es T1 T2.
Si T1,. . . ,Tk son ETs y N1,. . . ,Nk son nombres de campos, registro((N1, T1), . .
. , (Nk, Tk)) es una ET.
Se debe tener en cuenta que, segn los lenguajes, estas definiciones
cambian. Es ms, los lenguajes pueden restringir que expresiones realmente
resultan en tipos vlidos para los programas (por ejemplo, en Pascal no se
puede definir un vector de funciones).
Algunos ejemplos de declaraciones y sus expresiones correspondientes
seran:
Equivalencia de tipos
Eq_Est (s, t) :
Si s y t son del mismo tipo bsico
Retorne Verdadero
Sino Si s = arreglo(s1, s2) y t = arreglo(t1, t2)
Retorne Eq_Est(s1, t1) y Eq_Est(s2, t2)
Sino Si s = apuntador(s1) y t = apuntador(t1)
Retorne Eq_Est(s1, t1)
Sino
Retorne Falso
Equivalencia funcional:
Comprobacion de tipos
Comprobaciones de flujo de control:
Comprobaciones de unicidad