Вы находитесь на странице: 1из 33

Teora de lenguajes y compiladores

Unidad III

Analizador Semntico

Semana 12

Traduccin dirigida por la sintaxis


Objetivo General

El alumno al finalizar el curso desarrollar


aplicaciones que le permitan determinar si
una sentencia corresponde a la estructura
gramatical de un lenguaje de
programacin. As mismo estar
capacitado para proponer nuevas formas
estructurales en la definicin de lenguajes
de programacin.
Objetivo Especfico

Desarrollar un analizador semantico


Objetivo Instruccional

Implementa procedimientos para el


procesamiento semntico basado en
traduccin dirigida por la sintaxis
Contenidos Procedimentales

Comprender el esquema de traduccin


dirigida por la sintaxis
Contenidos Generalidades

Traducciones

Formas de traduccin dirigida por la sintaxis

Grafo de dependencias
Traduccin Dirigida por la Sintaxis

El anlisis semntico puede efectuarse en


paralelo con el anlisis sintctico; es decir, puede
Generalidades

realizarse el anlisis semntico cada vez que el


analizador sintctico reconoce una estructura
sintctica, o sea; una produccin.

Las acciones del anlisis semntico relacionadas


con las producciones se incorporan al proceso de
anlisis sintctico y generan cdigo intermedio
cada vez que se ejecutan.
Traduccin Dirigida por la Sintaxis

Asocia informacin a la construccin del


lenguaje.
Generalidades

Asocia atributos en los smbolos de la gramtica.


Los valores de los atributos se calculan mediante
reglas Semnticas asociadas a las
producciones gramaticales.
Traduccin Dirigida por la Sintaxis
Generalidades
Reglas semnticas
Las reglas semnticas establecen dependencias
entre los atributos de los diferentes smbolos.
Generalidades

Esas dependencias se reflejan en un grafo con el


fin de establecer un orden de evaluacin de las
reglas.

La evaluacin de las reglas asigna valor a los


atributos.

Un rbol de anlisis sintctico que contiene tambin


los atributos y su valores se llama un rbol anotado o
decorado.
Acciones semnticas
Se asocian con las producciones de una gramtica
independiente del contexto. Pueden considerarse
como un fragmento de cdigo que se ejecutara
Generalidades

cuando el analizador sintctico reconozca la


produccin apropiada.

Ejemplo: Considerando la produccin de la


gramtica G0

TERMINO TERMINO * FACTOR (* A *)

En el caso de un analizador sintctico descendente,


se ejecutara A al expandir TERMINO o FACTOR.
Traduccin a cudruplos
La generacin del cdigo de tres direcciones se
ilustra en el siguiente ejemplo donde se considera la
gramtica G0 y el anlisis por desplazamiento y
Traducciones

reduccin de la frase: x + y x * y.

Para ello se supone que existe una matriz infinita de


variables auxiliares (va[k]), de tal forma que cada
vez que se usa una nueva variable auxiliar, la
variable k se incrementa.

Se utilizan tambin los apuntadores ApuntE, ApuntT y


ApuntF que referencian al lugar donde puede
hallarse el valor de una Expresion, un Termino, etc.
Traduccin a cudruplos
(1) E T (* ApunE := ApunT *)
(2) E1 E2 + T (* INC(k)
ApunE1 := va[k];
Traducciones

Genera(ADD, ApunE2,ApunT,va[k] *)
(3) E1 E2 - T (* INC(k);
ApunE1 := va[k];
Genera(SUB, ApunE2, ApunT, va[k] *)
(4) T F (* ApunT := ApunF *)
(5) T1 T2 * F (* INC(k);
ApunT1 := v a[k];
Genera(MUL, ApunT2, ApunF, va[k] *)
(6) T1 T2 / F (* INC(k);
ApunT1 := va[k];
Genera(DIV, ApunT2, ApunF, va[k] *)
(7) F x (* ApunF := x; *)
(8) F y (* ApunF := y; *)
(9) F (E) (* ApunF := ApunE; *)
Traduccin a cudruplos
Anlisis de frase: x + y x * y

Entrada Pila Accin Cdigo Comentario


Traducciones

x+yx*y$ Desplazar Desplaza x a la pila


+yx*y$ x Reducir (7) Reduce x a F por regla 7
+yx*y$ F Reducir (4) Reduce F a T por regla 4
+yx*y$ T Reducir (1) Reduce T a E por regla 1
+yx*y$ E desplazar Desplaza + a la pila
yx*y$ E+ desplazar Desplaza y a la pila
x*y$ E+y Reducir (8) Reduce y a F por regla 8
x*y$ E+F Reducir (4) Reduce F a T por regla 4
x*y$ E+T Reducir (2) ADD x y va[1] Reduce E+T a E
x*y$ E Desplazar Desplaza a la pila
x*y$ E- Desplazar Desplaza x a la pila

Continua
Traduccin a cudruplos
Anlisis de frase: x + y x * y

Entrada Pila Accin Cdigo Comentario


Traducciones

*y$ E-x Reducir (7) Reduce x a F por regla 7


*y$ E-F Reducir (4) Reduce F a T por regla 4
*y$ E- T Desplazar Desplaza * a la pila
y$ ET* Desplazar Desplaza y a la pila
$ ET*y Reducir (8) Reduce y a F por regla 8
$ ET*F Reducir (5) MUL x y va[2] Reduce T*F a T por
regla 5
$ E-T Reducir (3) SUB va[1] va[2] va [3] Reduce E-T a E por
regla 3
$ E Aceptar
Traduccin a notacin posfija
Volveremos a usar la gramtica anterior G0, para
mostrar las acciones semnticas que generan
notacin posfija.
Traducciones

A cada produccin se aade la accin semntica


A respectiva en la forma (* A *); ADD, SUB, MUL y DIV
son operaciones obvias, mientras que LOD es una
operacin de carga para meter operandos en la
pila.
Traduccin a notacin posfija
(1) EXPR TERM (* T *)
(2) EXPR EXPR + TERM (* E T ADD *)
(3) EXPR EXPR TERM (* E T SUB *)
Traducciones

(4) TERM FACTOR (* F *)


(5) TERM TERM * FACTOR (* T F MUL *)
(6) TERM TERM / FACTOR (* T F DIV *)
(7) FACTOR x (* LOD x *)
(8) FACTOR y (* LOD y *)
(9) FACTOR ( EXPR ) (* E *)
Traduccin a notacin posfija
Anlisis de frase: x + y x * y

Entrada Derivacin Cdigo


Traducciones

EXPR EXPR - TERM (* E T SUB *)


EXPR + TERM1 TERM2 (* E T1 ADD T2 SUB *)
TERM3 + TERM1 TERM2 (* T3 T1 ADD T2 SUB *)
FACTOR + TERM1 TERM2 (* F T1 ADD T2 SUB *)
x + TERM1 - TERM2 (* LOD x T1 ADD T2 SUB *)
x + FACTOR TERM (* LOD x F ADD T SUB *)
x + y - TERM (* LOD x LOD y ADD T SUB *)
x + y TERM * FACTOR (* LOD x LOD y ADD T F MUL SUB *)
x + y FACTOR1 * FACTOR2 (* LOD x LOD y ADD F1 F2 MUL SUB *)
x + y x * FACTOR (* LOD x LOD y ADD LOD x F MUL SUB *)
x+yx*y (* LOD x LOD y ADD LOD x LOD y MUL SUB *)
Notacin posfija de la frase
Gramticas de atributo
Formas de traduccin dirigida por la sintaxis

Definicin

Las gramticas de atributo son


gramticas independientes del contexto
a las que se aaden atributos y reglas de
evaluacin de atributos (funciones/reglas
semnticas).
Funciones/Reglas Semnticas
Formas de traduccin dirigida por la sintaxis

Calculan los valores de los atributos despus del


anlisis sintctico. Tambin pueden tener efectos
secundarios (escribir algo, actualizar una variable global ,crear
un rbol de derivacin,)

Sintaxis Semntica
E0 := E1 + T E0.Value := E1.Value+ T.Value

E := T E.Value := T.value

T0 := T1 * F T0.Value := T1.Value * F.Value

T := F T.Value := F.Value

F := (E) F.Value := E.Value

F := numero F.Value := ValorLex(numero)


Atributos semnticos
Formas de traduccin dirigida por la sintaxis

A cada smbolo de la gramtica se le pueden


asignar variables con sus correspondientes valores.

Hay dos tipos de atributos:

o Sintetizados (locales)
Se definen en un determinado nodo del rbol de
derivacin y permiten asignar un valor a un nodo
dependiendo del valor de los nodos hijos

o Heredados
Se pasan a niveles inferiores del rbol. Su valor depende
del valor de los hermanos y del padre. Sirven, por ejemplo,
para saber si hay que utilizar el valor de un identificador o
su direccin segn aparezca en la parte izquierda o
derecha de su asignacin.
Atributos Sintetizados (1/4)
Formas de traduccin dirigida por la sintaxis

El valor del atributo en un nodo del rbol


depende de los valores de los atributos
asociados a sus nodos hijos.

X0

X1 Xi Xn
Formas de traduccin dirigida por la sintaxis
Atributos Sintetizados (2/4)
Ejemplo
calculadora

Produccin Reglas Semnticas


L E \n print (E.val)
E E1 + T E.val := E1.val + T.val
ET E.val := T.val
T T1 * F T.val := T1.val * F.val
TF T.val := F.val
F(E) F.val := E.val
F dgito F.val := dgito.valex
Atributos Sintetizados (3/4)
Formas de traduccin dirigida por la sintaxis

La definicin con atributos sintetizados del ejemplo


especifica una calculadora que lee una lnea de entrada
que contiene una expresin aritmtica que incluye dgitos,
parntesis, los operadores + y *, seguida de un carcter de
nueva lnea \n, e imprime el valor de la expresin.
Por ejemplo, dada la expresin 3*5+4 seguida de una nueva
lnea, el programa imprime el valor 19
La figura contiene un rbol de anlisis sintctico con
anotaciones para la entrada 3*5+4\n. El resultado, que se
imprime en la raz del rbol, es el valor de E.val en el primer
hijo de la raz.
Atributos Sintetizados (4/4)
Formas de traduccin dirigida por la sintaxis

Para ver cmo se calculan los valores de los atributos, considrese


el nodo situado en el extremo de la izquierda, que corresponde al
uso de la produccin F digito. La regla semntica
correspondiente, F.val := digito.valex, establece que el atributo
F.val en el nodo tiene el valor 3 porque el valor de digito.valex en
el hijo de este nodo es 3. De forma similar, en el padre de este
nodo F, el atributo T.val tiene el valor 3.
Formas de traduccin dirigida por la sintaxis
Atributos Heredados (1/4)

Se calculan a partir de los valores de


atributos de su nodo padre o sus
nodos hermanos.
Formas de traduccin dirigida por la sintaxis
Atributos Heredados (2/4)
Ejemplo

Informacin de tipos
Produccin Reglas Semnticas
DTL L.her := T.tipo
T int T.tipo := integer
T real T.tipo := real
L L1,id L1.her := L.her
aadetipo (id.entrada, L.her)
L id aadetipo (id.entrada, L.her)
Formas de traduccin dirigida por la sintaxis
Atributos Heredados (3/4)
Una declaracin generada por el terminal D en la definicin dirigida
por sintaxis en la figura 4.4 consta de la palabra clave INT o REAL,
seguida de una lista de identificadores.
El no terminal T tiene un atributo sintetizado tipo, cuyo valor viene
determinado por la palabra clave de la declaracin.
La regla semntica L.her:= T.tipo, asociada con la regla de
produccin D T L, asigna al atributo heredado L.her el tipo de la
declaracin.
Entonces las reglas pasan este tipo por el rbol de anlisis sintctico
utilizando el atributo heredado L.her. Las reglas asociadas con las
producciones de L llaman al procedimiento aadetipo para aadir
el tipo de cada identificador a su entrada en la tabla de smbolos
(apuntada por el atributo ptr_tds).
Formas de traduccin dirigida por la sintaxis
Atributos Heredados (4/4)
En la figura 4.5 se muestra un rbol de anlisis sintctico con
anotaciones para la frase real id1, id2, id3. El valor de L.her en los tres
nodos de L da el tipo de los identificadores id1, id2, id3. Estos valores se
determinan calculando el valor del atributo T.tipo en el hijo izquierdo
de la raz y evaluando despus L.her de forma descendente en los tres
nodos de L en el subrbol derecho de la raz. En cada nodo de L
tambin se llama al procedimiento aadetipo para insertar en la tabla
de smbolos el hecho de que el identificador en el hijo derecho de
este nodo tiene tipo real.
Las interdependencias entre atributos
heredados y sintetizados de un rbol de
Grafo de dependencias

anlisis sintctico se pueden representar


mediante un grafo dirigido llamado Grafo
de Dependencias

Se utiliza un grafo de dependencias para


saber el orden en el que se tienen que
evaluar las reglas semnticas.

Si un atributo b en un nodo depende de un


atributo c, entonces se debe evaluar la
regla semntica para b despus de la regla
semntica que define a c
Algoritmo de Construccin
Para cada nodo n en el rbol de anlisis sintctico
hacer
Grafo de dependencias

Para cada atributo a del smbolo gramatical en el


nodo n hacer
Construir un nodo en el grafo de
dependencias para a;
Para cada nodo n en el rbol de anlisis sintctico
hacer
Para cada regla semntica b:=f(c1, c2, ..., ck)
asociada con la produccin utilizada en n hacer
Para cada i:=1 hasta k hacer
Construir una arista desde el nodo ci hasta el
nodo para b;

Produccin Regla Semntica


E->E1+E2 E.val:=E1.val+E2.val
Ejemplo
real id1, id2, id3
Grafo de dependencias
Teora de lenguajes y compiladores

Unidad III

Analizador Semntico

Semana 12

Traduccin dirigida por la sintaxis

Вам также может понравиться