Vous êtes sur la page 1sur 39

Procesadores de Lenguajes

Ingeniera Tcnica superior de Ingeniera Informtica


Departamento de Lenguajes y Sistemas informticos

Anlisis semntico I
Traduccin dirigida por la
sintaxis
Javier Vlez Reyes
jvelez@lsi.uned.es
Departamento de Lenguajes Y Sistemas Informticos
UNED

Anlisis semntico. Traduccin dirigida por la sintaxis


Objetivos Generales

Objetivos Generales
Aprender qu es la semntica de un lenguaje de programacin
Entender cmo funciona la semntica operacional y distinguirla de otros tipos de semntica
Aprender cmo se inyecta informacin semntica en una gramtica
Aprender el principio de traduccin dirigido por la sintaxis
Conocer las gramticas con atributos y las reglas y acciones semnticas
Aprender a distinguir los diferentes tipos de atributos que existen
Aprender a construir y analizar grafos de dependencia
Aprender a identificar compiladores de simple y doble pasada
Conocer los distintos tipos de formalismos de traduccin que existen
Aprender a especificar definiciones dirigidas por la sintaxis
Aprender a especificar esquemas de traduccin dirigidos por la sintaxis

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


ndice

ndice
Introduccin
Formalismos para la especificacin de traducciones
Definiciones dirigidas por la sintaxis
Reglas semnticas
Atributos
Grafos de dependencia
Diseo de definiciones dirigidas por la sintaxis
Gramticas con atributos por la izquierda
Esquemas de traduccin dirigidas por la sintaxis
Acciones semnticas
Atributos
Diseo de esquemas de traduccin
Traduccin dirigida por la sintaxis en la prctica
Bibliografa
Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Introduccin

Qu es la semntica de un lenguaje?
Tema 2

Tema 3 - 5

Tema 6 - 7

S
WHILE

DO

E > E

Cmo es el lenguaje?
Las dos primeras fases conceptuales de un
compilador atienden a responder la
pregunta de cmo es un lenguaje en
trminos de su estructura sintctica y sus
elementos lxicos constituyentes

S
WHILE

DO

E > E

LD a t1
LD b t2
GRT t3 t1 t2
BRZ t3 L1

Cdigo final

<WHILE, PR>

Cdigo intermedio

Analizador lxico

While ( a > b ) do
a := a + 1;

Analizador
semntico

Etapa de sntesis

Analizador sintctico

Etapa de anlisis

eli hw

Tema 10 - 11

Tema 8 - 9

0000 0011
0000 0011
0100 0001
0100 0000
0001 0010

Qu es el lenguaje?
Las tres fases subsiguientes tratan de dar
un significado nico, preciso y computable
a cada construccin del lenguaje de
manera que el programador sepa definir
programas
semnticamente
tiles
y
coherentes

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Introduccin

Qu es la semntica de un lenguaje?
El anlisis sintctico de un cdigo fuente comprueba que la secuencia de tokens llegada desde el
analizador lxico se corresponde con la esperada de acuerdo a las prescripciones gramaticales y se
obtiene como resultado un rbol de anlisis sintctico. Hemos obtenido por tanto una secuencia
correcta de tokens pero nada sabemos acerca de qu significado intencional subyace a la misma
PROGRAM BubbleSort;

PROCEDURE ReadVector (VAR v : TVector); ...


PROCEDURE Sort (VAR v : TVector, size : INTEGER);
VAR i, j, tmp : INTEGER;
BEGIN
FOR i := size - 1 DOWNTO 1 DO
FOR j := 1 TO i DO
IF (v[j] > v[j + 1]) THEN
BEGIN
tmp := v[j];
v[j] := v[j + 1];
v[j + 1] := tmp;
END;
END;

CONST MAX = 100;


TYPE TVector = ARRAY [1..MAX] OF INTEGER;
VAR v: TVector;

Sabemos comprobar que este


cdigo fuente corresponde a un
programa en Pascal de acuerdo a
la gramtica del lenguaje. Pero,
que significan la declaracin de
constantes,
tipos,
variables,
funciones y procedimientos, las
sentencias, expresiones, etc. que
en l aparecen?

BEGIN
ReadVector (v);
sort (v, MAX);
END.

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Introduccin

Qu es la semntica de un lenguaje?
Es necesario definir computacionalmente la semntica de un lenguaje para que el compilador sepa
interpretar cada posible cdigo fuente del mismo. La forma ms sencilla de hacer esto es asociar a
cada posible construccin gramatical ciertas reglas que permitan traducirla en trminos computables.
Esto slo es posible si se cumple el principio de traduccin dirigido por la sintaxis

Traduccin dirigida por la sintaxis


El significado de una construccin de un lenguaje est directamente
relacionado con su estructura sintctica segn se representa en su rbol de
anlisis
Es decir, el significado de cada construccin
gramatical, representada tpicamente por un no
terminal, solo debe depender de los elementos
que aparecen en la parte derecha de sus
reglas de produccin
DeclaracinTipo ::= TYPE ID = ARRAY [N..N]
OF Tipo;

La lectura prctica que debe hacerse de este


principio es que para establecer la semntica
de un lenguaje es suficiente con hacerlo sobre
cada una de sus reglas de produccin de
manera independiente. Esto a su vez se
consigue estableciendo una traduccin de los
elementos de la parte derecha de la regla a
una representacin con un significado
computable especfico

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Introduccin

Qu es la semntica de un lenguaje?
Es necesario definir computacionalmente la semntica de un lenguaje para que el compilador sepa
interpretar cada posible cdigo fuente del mismo. La forma ms sencilla de hacer esto es asociar a
cada posible construccin gramatical ciertas reglas que permitan traducirla en trminos computables.
Esto slo es posible si se cumple el principio de traduccin dirigido por la sintaxis

Traduccin dirigida por la sintaxis


El significado de una construccin de un lenguaje est directamente
relacionado con su estructura sintctica segn se representa en su rbol de
anlisis
Las traducciones con significado computacional especifico a las que antes hacamos referencia se
pueden clasificar en 2 grandes grupos dependiendo del momento en que se aplican dentro del ciclo de
compilacin
Tiempo de compilacin (semntica esttica)

Las traducciones en tiempo de ejecucin son acciones dirigidas


a generar cdigo ejecutable en tiempo de compilacin para que
se apliquen durante la ejecucin del programa compilado

Tema 7

Tiempo de ejecucin (semntica dinmica)

Tipos de acciones
de traduccin
semntica

Las traducciones en tiempo de compilacin son acciones que se


aplican sobre los artefactos del compilador y que tienen efecto
durante el proceso de compilacin

Tema 8, 9

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Introduccin

Qu es la semntica de un lenguaje?
Es necesario definir computacionalmente la semntica de un lenguaje para que el compilador sepa
interpretar cada posible cdigo fuente del mismo. La forma ms sencilla de hacer esto es asociar a
cada posible construccin gramatical ciertas reglas que permitan traducirla en trminos computables.
Esto slo es posible si se cumple el principio de traduccin dirigido por la sintaxis

Traduccin dirigida por la sintaxis


Construccin sintactica
Tipo

Ejemplo

Traduccin semntica
Tiempo de compilacin

Tiempo de ejecucin

Declaracin de
constantes

CONST MAX = 100;

Registrar
MAX
como
constante entera de valor
100

Declaracin de
tipos

TYPE TVector = ARRAY [1..MAX] OF INTEGER;

Registrar TVector como tipo


ARRAY de tamao 100 y base
INTEGER

Declaracin de
variables

VAR v : TVector;

Comprobar que TVector


existe como un tipo y
registrar v como una variable
de ese tipo

Declaracin de
procedimientos

PROCEDURE Sort (VAR v : TVector);

Registrar Sort como un


procedimiento del mbito en
curso indicando la lista de
tipos de los parmetros.
Crear un nuevo mbito y
registrar en l v como
variable de tipo TVector

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Introduccin

Qu es la semntica de un lenguaje?
Es necesario definir computacionalmente la semntica de un lenguaje para que el compilador sepa
interpretar cada posible cdigo fuente del mismo. La forma ms sencilla de hacer esto es asociar a
cada posible construccin gramatical ciertas reglas que permitan traducirla en trminos computables.
Esto slo es posible si se cumple el principio de traduccin dirigido por la sintaxis

Traduccin dirigida por la sintaxis


Construccin sintactica
Tipo
Declaracin de
funciones
Expresiones

Sentencia For

Ejemplo

Traduccin semntica
Tiempo de compilacin

Tiempo de ejecucin

Function Sort (VAR v : TVector):INTEGER;

Adicionalmente al caso de
procedimientos registrar que
el tipo de retorno es INTEGER

v[j] > v[j + 1]

Comprobar que v esta


declarado previamente y que
es
de
tipo
TVector.
Asegurarse de que las subexpresiones son correctas y
de tipos compatibles con el
operador mayor que

Generar
cdigo
para
recuperar de memoria el
valor de las sub-expresiones
y aplicar la comparacin
entre ambos con los
operadores del lenguaje de
bajo nivel

FOR j := 1 TO i DO
...

Comprobar que la expresin


1 e i son de tipo INTEGER.
Comprobar que j ha sido
previamente declarada como
una variable de tipo INTEGER

Generar
cdigo
para
inicializar j a 1. Generar
cdigo de salto para iterar
la ejecucin del bloque
dentro de FOR i veces.
Generar
cdigo
para
actualizar a cada paso el
valor de j a j + 1

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Introduccin

Qu es la semntica de un lenguaje?
Es necesario definir computacionalmente la semntica de un lenguaje para que el compilador sepa
interpretar cada posible cdigo fuente del mismo. La forma ms sencilla de hacer esto es asociar a
cada posible construccin gramatical ciertas reglas que permitan traducirla en trminos computables.
Esto slo es posible si se cumple el principio de traduccin dirigido por la sintaxis

Traduccin dirigida por la sintaxis


Construccin sintactica
Tipo
Sentencia If

Sentencia de
asignacin

Sentencia de
llamada a
procedimiento

Ejemplo

Traduccin semntica
Tiempo de compilacin

Tiempo de ejecucin

IF (v[j] > v[j + 1]) THEN


BEGIN
tmp := v[j];
v[j] := v[j + 1];
v[j + 1] := tmp;
END;

Comprobar que la expresin


de
comparacin
es
semnticamente
correcta
(ver anterior) y comprobar
que su evaluacin devuelve
un tipo lgico

Generar
cdigo
para
evaluar
la
expresin
durante
la
ejecucin.
Generar cdigo de salto que
ejecute el bloque THEN si la
evaluacin da TRUE en
ejecucin

tmp := v[j];

Comprobar que tmp esta


definido. Comprobar que el
tipo de base de v es
compatible con el de tmp

Generar
cdigo
para
evaluar el valor de v[j] y
copiar su valor en la
posicin
de
memoria
apuntada por tmp

sort (v, MAX);

Comprobar que Sort esta


declarado como procedimiento y que el nmero,
orden y tipo de los
parmetros
actuales
y
formales coinciden

Generar
cdigo
para
gestionar memoria que
permita la activacin del
procedimiento
Sort.
Generar cdigo de salto
para su ejecucin

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Formalismos para la especificacin de traducciones

Especificacin de traducciones dirigidas por la sintaxis


Una vez entendido el proceso de traduccin dirigida por la sintaxis que nos permite conferir semntica a
las construcciones de un lenguaje, necesitamos mecanismos formales y tecnolgicos para especificar
dicha traduccin de manera precisa

Formalismos para la especificacin de traducciones dirigidas por la sintaxis


I. Definiciones dirigidas por la sintaxis
Las definiciones dirigidas por la sintaxis son un mecanismo de alto nivel
que permite expresar la semntica asociada a las construcciones de un
lenguaje en trminos de una coleccin de reglas semnticas asociadas
a cada regla de produccin gramatical

R1. E ::= E + E , Rs1


R2. E ::= n

, Rs2

II. Esquemas de traduccin dirigidos por la sintaxis


Los esquemas de traduccin dirigidos por la sintaxis permiten insertar,
entre los smbolos gramaticales de la parte derecha de las reglas de
produccin, acciones semnticas cuyo propsito es realizar cierta
traduccin de carcter semntico. La ventaja de esta aproximacin es
que aqu se prescribe el momento exacto de la compilacin en el que
cada accin es ejecutada

E
E

{::}

{::}
{::}

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Elementos de las definiciones dirigidas por la sintaxis


Reglas de produccin

Subndice de
diferenciacin

Reglas semnticas

declaracion

::= lVariables : tipo

lVariables.tipo := tipo.tipo

lVariables

::= lVariables1 , ID

lVariables1.tipo := lVariables.tipo
<<registrar ID como variable de tipo tipo>>

lVariables

::= ID

<<registrar ID como variable de tipo tipo>>

tipo

::= INTEGER ;

tipo.tipo := ENTERO

tipo

::= REAL ;

tipo.tipo := REAL

atributo

I. Gramtica con atributos


A cada no terminal se asocian un conjunto de
atributos para contener determinada informacin
semntica que ser utilizada en otras reglas de
produccin

II. Reglas semnticas


Las reglas semnticas se encargan de transferir
la informacin de unos atributos a otros y
aplican acciones de traduccin de carcter
semntico

declaracion

[]

lVariables1.tipo := lVariables.tipo

lVariables

[tipo]

<<registrar ID como variable de tipo tipo>>

tipo

[tipo]

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Atributos
Un atributo es un espacio de informacin con tipificacin implcita que sirve
para albergar una caracterstica propia del proceso de traduccin y que
puede ser transferida a otras producciones gramaticales para que pueda
ser utilizada desde all por sus reglas semnticas

I. Atributos sintetizados

tipos de
atributos

A.a := f (B.b, C.c, D.D)

Se dice que un atributo es sintetizado si su valor es calculado


exclusivamente a partir de atributos de los smbolos gramaticales de la
parte derecha de sus reglas de produccin. El carcter sintetizado de un
atributo se mantiene a lo largo de toda la gramtica

II. Atributos heredados

A a
B

B.b := f (A.a, C.c, D.D)

Se dice que un atributo es heredados si su valor es calculado a partir de


atributos de los smbolos gramaticales de las regla de produccin en que
aparece o de los antecedentes de las misma. El carcter heredado de
un atributo se mantiene a lo largo de toda la gramtica

A a
B

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Reglas semnticas
Una regla semntica es una expresin formal asociada a una regla de
produccin que permite definir la semntica de la construccin gramatical
asociada a la misma en trminos de los smbolos de la regla de produccin
atributo

I. Reglas de ecuaciones de atributos

tipos de
reglas
semnticas

Las reglas de ecuaciones de atributos se utilizan para copiar, mover o


transformar la informacin soportada por los atributos asociados a los
smbolos de una regla hacia los atributos asociados a los smbolos no
terminales de otra u otras reglas. Para concatenar valores de tipo
cadena se usa el operador ||

lVariables1.tipo := lVariables.tipo

No terminal

Terminal o
No terminal
asignacin

II. Reglas de accin semntica


Las reglas de accin semntica son instrucciones o pseudoinsstrucciones que se utilizan para provocar algn efecto semntico
sobre la traduccin. Dado sus posibles efectos colaterales deben ser
evitadas en la medida de lo posible.

<<registrar ID como variable ...>>

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Grafos de dependencias
Un grafo de dependencias refleja, sobre un rbol de anlisis sintctico las
dependencias entre los atributos gramaticales establecidas en virtud de las
reglas semnticas que les asignan valor
La aplicacin de las ecuaciones de atributos de
las
reglas
semnticas
inducen
ciertas
dependencias entre los mismos. En efecto, si un
atributo se calcula a partir de otros, es natural
pensar que existe una dependencia del primero
para con los segundos. Esta dependencia se
dibuja en el grafo como un arco de cada uno de
los segundos al primero
a A

El grafo de dependencias se utiliza para


expresar grficamente el orden en que deben
ser calculados los atributos y por ende inducen
un orden de aplicacin de las regla semnticas.
En efecto, si un atributo se calcula a partir de
otros es natural pensar que antes de calcular el
primeros necesario calcular los segundos
Calcular A.a
Calcular C.c

B.b := f (A.a, C.c, D.D)

Calcular D.d
Calcular B.b

en cualquier
orden
Calcular despus

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Grafos de dependencias
Un grafo de dependencias refleja, sobre un rbol de anlisis sintctico las
dependencias entre los atributos gramaticales establecidas en virtud de las
reglas semnticas que les asignan valor

Algoritmo de clculo

A.a := f (B.b, C.c, D.D)


a A

Para cada produccin A ::= X1 X2 ... Xn


Crear un nodo por cada atributo Xi.aj de cada smbolo
Para cada regla semntica de la forma Xi.aj = f (... , Xk.al, ...)

Para cada k y cada l


Crear arco desde Xk.al hasta Xi.aj

a A

Unir todos los grafos resultantes


B.b := f (A.a, C.c, D.D)

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Grafos de dependencias
declaracion

::= lVariables : tipo

lVariables.tipo := tipo.tipo

a, b : INTEGER;

lVariables

::= lVariables1 , ID

lVariables1.tipo := lVariables.tipo
<<registrar ID como variable de tipo tipo>>

lVariables

::= ID

<<registrar ID como variable de tipo tipo>>

tipo

::= INTEGER ;

tipo.tipo := ENTERO

tipo

::= REAL ;

tipo.tipo := REAL

El grafo de dependencias pone de


manifiesto que para registrar las
variables a y b es necesario recuperar la
informacin de tipo extrada de la regla
tipo ::= INTEGER y moverla sobre el
rbol de anlisis sintctico hasta las
reglas con ID. Para ello se utiliza el
atributo tipo en cada no terminal y las
reglas semnticas adjuntas

lVariables.tipo
tipo.tipo

declaracin

lVariables .tipo

[Heredado]
[sintetizado]

tipo .tipo

:
ENTERO

ENTERO
ENTERO
lVariables .tipo
,

ID

INTEGER

<<registrar ID con tipo>>

ID
<<registrar ID con tipo>>

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Diseo de definiciones dirigidas por la sintaxis


El diseo de definiciones dirigidas por la sintaxis es un ejercicio complejo que requiere realizarse
cuidadosa y sistemticamente. A continuacin proporcionamos un procedimiento orientativo que
puede ayudar a alcanzar ms fcilmente este objetivo

I. Especificacin gramatical
Construya la gramtica sobre la cual desea
articular la definicin dirigida por la sintaxis.
Asegrese de que esta gramtica es correcta y
no ambigua

II. Seleccin de una frase representativa


Seleccione una frase del lenguaje. Asegrese de
que es lo suficientemente compleja como para
que implique visitar al menos una vez cada regla
gramatical

III. Construccin del rbol de anlisis


Construya el rbol de anlisis sintctico asociado
a dicha frase. Asegrese de que existe al menos
una instancia de cada regla

IV. Seleccin de atributos


Defina los atributos semnticos que requerir su
definicin en cada smbolo gramatical y
caractercelos como sintetizados o heredados.
Esto ltimo se puede postergar para el final

V. Grafo de dependencias
Dibuje el grafo de dependencias que debera
producirse para asegurar que la informacin
fluya adecuadamente. Considere siempre un
procesamiento descendente

VI. Especificacin de la definicin


Escriba las reglas semnticas necesarias , con el
nivel de abstraccin oportuno, para garantizar
que se satisface el grafo de dependencias.
Incluya las reglas de accin pertinentes

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Ejemplo

E.value
T.value
F.value
n.value

E ::= E + T

E.value := E.value + T.value

T ::= T * F | T / F | F

E ::= E T

E.value := E.value - T.value

F ::= ( E ) | n

E ::= T

E.value := T.value

T ::= T * F

T.value := T.value * F.value

T ::= T / F

T.value := T.value / F.value

T ::= F

T.value := F.value

F ::= ( E )

F.value := E.value

F ::= n

F.value := n.value

Se pretende construir una calculadora que permita


escribir expresiones aritmticas y calcular su valor
asociado
E ::= E + T | E T | T

2 + 3 * 5

E .value
2

E .value = 17
15

T .value
3

[Sintetizado]
[Sintetizado]
[Sintetizado]
[Sintetizado]

T .value
T

T .value
2

F
F
n

F .value
2

n .value
n

F .value

F .value

n.value

n .value

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Ejercicios
A continuacin se muestra una gramtica de
operadores no ambigua. Especifique sobre ella
una DDS para pasar expresiones aritmticas infijas
a notacin postfija
E ::= E + T | E T | T

La siguiente gramtica representa nmeros


binarios. Defina una DDS que traduzca
cualquier binario colocando todos los 0 delante
y todos los 1 detrs. Por ejemplo 01101 se
traduce a 00111

T ::= T * F | T / F | F

B ::= D B | D

F ::= ( E ) | n

D ::= 0 | 1

La siguiente gramtica corresponde a la


declaracin de variables es Pascal. Especifique
sobre ella una DDS para traducir dichas
declaraciones a sintaxis C

La siguiente gramtica se utiliza para


representar nmeros en octal. Constryase una
DDS para obtener su traduccin equivalente en
base 10

declaracion

::= lVariables : tipo

N ::= D N | D

lVariables

::= lVariables1 , ID

D ::= 0 | 1 | 2 | 3 | 4

lVariables

::= ID

tipo

::= INTEGER ;

tipo

::= REAL ;

5 | 6 | 7

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Gramticas con atributos por la izquierda


En algunas ocasiones, las definiciones dirigidas por la sintaxis imponen un orden de evaluacin de
las reglas semnticas contrario al orden natural en el que el analizador sintctico va consumiendo
tokens de la cadena de entrada y construyendo el rbol de anlisis sintctico. En concreto el
problema surge cuando aparecen dependencias que fluyen de derecha a izquierda dentro del grafo
declaracion

::= lVariables : tipo

lVariables

::= lVariables1 , ID

lVariables

::= ID

tipo

::= INTEGER ;

tipo

::= REAL ;

declaracin

lVariables .tipo

tipo .tipo

:
ENTERO

a, b : INTEGER;

ENTERO
ENTERO
lVariables .tipo
,

ID
<<registrar ID con tipo>>

INTEGER

ID <<registrar ID con tipo>>

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Gramticas con atributos por la izquierda


Este tipo de definiciones son conflictivas ya que las dependencias de derecha a izquierda exigen
dejar pendiente el clculo de un atributo y avanzar el procesamiento sintctico hasta alcanzar la
regla que calcula el atributo del que depende para posteriormente completar el primero en una
segunda pasada. Esto obliga a hacer la siguiente clasificacin
I. Traductores de una sola pasada

Tipos de
traductores

Los traductores sin dependencias de derecha a izquierda


consiguen articular el clculo de los atributos semnticos a
medida que construyen el rbol de anlisis sintctico con lo que
generan compiladores eficientes que recorren el rbol una sola
vez

II. Traductores de doble pasada

Gramtica C
declaracin

lVariables .tipo

tipo .tipo

Los traductores con dependencias de derecha a izquierda


deben postergar el clculo de algunos atributos hasta que se
conozca el valor de todos aquellos de los que depende. Este
tipo de compiladores deben construir el rbol de anlisis
sintctico y realizar una segunda pasada para calcular los
atributos pendientes

Gramtica Pascal
declaracin

lVariables .tipo

tipo .tipo

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Gramticas con atributos por la izquierda


Los traductores de doble pasada empeoran notablemente el rendimiento del compilador. Por lo tanto
es deseable que las definiciones dirigidas por la sintaxis no presenten dependencias de derecha a
izquierda. De se as pueden aplicarse transformaciones gramaticales para intentar invertir la
polaridad de las dependencias favorablemente
El rbol de anlisis sintctico ahora no
fuerza la existencia de dependencias de
derecha a izquierda puesto que para
procesar la frase de declaracin es
prescriptivo alcanzar el tipo

ENTERO

ID

::= ID , declaracion1
::= ID :

tipo

ENTERO

declaracion.tipo = declaracion1.tipo
<<registrar ID con tipo>>

declaracion

declaracin .tipo

<<registrar ID con tipo>>

a, b : INTEGER;
declaracion

declaracin

declaracion.tipo = tipo.tipo
<<registrar ID con tipo>>

tipo

::= INTEGER ;

tipo.tipo :=ENTERO

tipo

::= REAL ;

tipo.tipo := REAL

ID

<<registrar ID con tipo>>

tipo .tipo
ENTERO

INTEGER

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Definiciones dirigidas por la sintaxis

Definiciones dirigidas por la sintaxis


Las definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar a
cada regla de produccin gramatical una regla semntica descrita, principalmente, en trminos de una
transformacin de ciertos atributos asociados a cada no terminal de la gramtica.

Gramticas con atributos por la izquierda


Dados los problemas que presentan las dependencias de derecha a izquierda debemos buscar
gramticas que no induzcan este tipo ordenamiento semntico. A estas gramticas se les conoce por
el nombre de gramticas con atributos por la izquierda
Una gramtica con atributos por la izquierda es una gramtica de atributos
en la que cada atributo heredado Xi.h de una regla de produccin de la
forma A ::= X1 Xi Xn, solo depende de los atributos X1 a Xi-1 o los
atributos heredados de A
A

X1

X2

La informacin fluye de arriba abajo, de


de abajo a arriba y de izquierda a
derecha pero nunca de derecha a
izquierda

X3

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Esquemas de traduccin dirigidos por la sintaxis

Esquemas de traduccin dirigidos por la sintaxis


Las definiciones dirigidas por la sintaxis son formalismos abstractos de traduccin de alto nivel y por
tanto adolecen de un mecanismo para indica el momento exacto en el que cada regla semntica debe
ejecutarse. Una versin computacional que soluciona este problema son los esquemas de traduccin
dirigidos por la sintaxis

Elementos de las traducciones dirigidas por la sintaxis


Reglas de produccin
E ::= T {: E.trad := T.trad :} E {: E.trad := E.trad :}

Subndice de diferenciacin

E ::= + T {: E1.trad := E.trad || T.trad || + :} E1 {: E.trad := E1.trad :}


E ::= - T {: E1.trad := E.trad || T.trad || - :} E1 {: E.trad := E1.trad :}
E ::= {: E.trad := E.trad :}

Accin semntica

T ::= num {: T.trad := num.lexema :}

Atributo

I. Gramtica con atributos


Como en las definiciones dirigidas por la sintaxis,
los esquemas de traduccin tambin se
construyen sobre gramticas con atributos
E

[trad]

[trad]

[trad]

num

[lexema]

II. Acciones semnticas


Las acciones semnticas se insertan entre los
smbolos gramaticales de la parte derecha de
cada regla y, cuando se visitan durante la
construccin del rbol de anlisis sintctico,
realizan los traducciones semnticas pertinentes
E ::= T

{: E.trad := T.trad :}

E {: E.trad := E.trad :}

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Esquemas de traduccin dirigidos por la sintaxis

Esquemas de traduccin dirigidos por la sintaxis


Las definiciones dirigidas por la sintaxis son formalismos abstractos de traduccin de alto nivel y por
tanto adolecen de un mecanismo para indica el momento exacto en el que cada regla semntica debe
ejecutarse. Una versin computacional que soluciona este problema son los esquemas de traduccin
dirigidos por la sintaxis

Atributos
Un atributo es un espacio de informacin con tipificacin explcita que sirve
para albergar una caracterstica propia del proceso de traduccin y que
puede ser transferida a otras producciones gramaticales para que pueda
ser utilizada desde all por sus reglas semnticas
I. Atributos sintetizados

tipos de
atributos

A.a := f (B.b, C.c, D.D)

Se dice que un atributo es sintetizado si su valor es calculado


exclusivamente a partir de atributos de los smbolos gramaticales de la
parte derecha de sus reglas de produccin. El carcter sintetizado de un
atributo se mantiene a lo largo de toda la gramtica

II. Atributos heredados

A a
B

B.b := f (A.a, C.c, D.D)

Se dice que un atributo es heredados si su valor es calculado a partir de


atributos de los smbolos gramaticales de las regla de produccin en que
aparece o de los antecedentes de las misma. El carcter heredado de
un atributo se mantiene a lo largo de toda la gramtica

A a
B

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Esquemas de traduccin dirigidos por la sintaxis

Esquemas de traduccin dirigidos por la sintaxis


Las definiciones dirigidas por la sintaxis son formalismos abstractos de traduccin de alto nivel y por
tanto adolecen de un mecanismo para indica el momento exacto en el que cada regla semntica debe
ejecutarse. Una versin computacional que soluciona este problema son los esquemas de traduccin
dirigidos por la sintaxis

Accin semntica
Una accin semntica es un fragmento de cdigo ejecutable, insertado en
algn punto de la parte derecha de una regla de produccin, encargado de
realizar cierta lgica de traduccin a partir de la informacin soportada por
los atributos de los smbolos gramaticales de dicha regla

Cada accin semntica se inserta


en el lugar adecuado para que
sea ejecutada en el momento
preciso durante la construccin
del rbol de anlisis sintctico

El contenido de la accin se
expresa, frecuentemente, en el
lenguaje
de
programacin
anfitrin del compilador que se
est construyendo

E {: E.trad := E.trad :}

{: E.trad := T.trad :}

E ::= T

Como en las DDS, las acciones


semnticas
frecuentemente
realizan
operaciones
de
manipulacin de atributos pero
tambin puede llevar acabo
operaciones
con
potenciales
efectos colaterales

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Esquemas de traduccin dirigidos por la sintaxis

Esquemas de traduccin dirigidos por la sintaxis


Las definiciones dirigidas por la sintaxis son formalismos abstractos de traduccin de alto nivel y por
tanto adolecen de un mecanismo para indica el momento exacto en el que cada regla semntica debe
ejecutarse. Una versin computacional que soluciona este problema son los esquemas de traduccin
dirigidos por la sintaxis

Diseo de traducciones dirigidas por la sintaxis


Antes de dar un procedimiento orientativo para la construccin de esquemas de traduccin dirigidos
por la sintaxis es preciso conocer ciertas restricciones de diseo de los mismos relacionadas con el
lugar adecuado donde deben ubicarse las acciones semnticas
Si existen atributos sintetizados
colocar la accin semntica despus
de todos los smbolos implicados o al
final de la produccin

Si existen atributos heredados deben


calcularse antes de que aparezca el
smbolo en la parte derecha

A := B C {: A.a := f (B.a, C.a) :} D

A := B C {: D.h := f (B.a, C.a) :} D

A:= B C D {: A.a := f (B.a, C.a) :}

Un atributo sintetizado no debe


usarse antes de que aparezca el
smbolo en la parte derecha
A := B {: A.s := f (B.s, C.s) :} C D
A := B C {: A.s := f (B.s, C.s) :} D

Si existen acciones con efectos


laterales deben situarse en el punto
exacto de la parte derecha de la regla
en la que deberan evaluarse. Hay que
verificar que no utilizan atributos de
smbolos situados a la derecha de
dicho punto

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Esquemas de traduccin dirigidos por la sintaxis

Esquemas de traduccin dirigidos por la sintaxis


Las definiciones dirigidas por la sintaxis son formalismos abstractos de traduccin de alto nivel y por
tanto adolecen de un mecanismo para indica el momento exacto en el que cada regla semntica debe
ejecutarse. Una versin computacional que soluciona este problema son los esquemas de traduccin
dirigidos por la sintaxis

Diseo de traducciones dirigidas por la sintaxis


El diseo de esquemas de traduccin dirigidos por la sintaxis es un ejercicio complejo que requiere
realizarse cuidadosa y sistemticamente. A continuacin proporcionamos un procedimiento
orientativo que puede ayudar a alcanzar ms fcilmente este objetivo

I. Especificacin gramatical
Construya la gramtica sobre la cual desea
articular la traduccin dirigida por la sintaxis.
Asegrese de que esta gramtica es correcta y
no ambigua

II. Seleccin de una frase representativa


Seleccione una frase del lenguaje. Asegrese de
que es lo suficientemente compleja como para
que implique visitar al menos una vez cada regla
gramatical

III. Construccin del rbol de anlisis


Construya el rbol de anlisis sintctico asociado
a dicha frase. Asegrese de que existe al menos
una instancia de cada regla

IV. Seleccin de atributos


Defina los atributos que requerir su esquema
de traduccin en cada smbolo gramatical y
caractercelos como sintetizados o heredados.
Esto ltimo se puede postergar para el final

V. Grafo de dependencias
Dibuje el grafo de dependencias que debera
producirse para asegurar que la informacin
fluya adecuadamente. Considere siempre un
procesamiento descendente

VI. Especificacin de la traduccin


Escriba la traduccin dirigida por la sintaxis
ubicando las acciones semnticas de acuerdo a
las restricciones de diseo preliminares

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Esquemas de traduccin dirigidos por la sintaxis

Esquemas de traduccin dirigidos por la sintaxis


Las definiciones dirigidas por la sintaxis son formalismos abstractos de traduccin de alto nivel y por
tanto adolecen de un mecanismo para indica el momento exacto en el que cada regla semntica debe
ejecutarse. Una versin computacional que soluciona este problema son los esquemas de traduccin
dirigidos por la sintaxis

Ejemplo
E

num
(9)

{: T.trad := 9 :}

num
(5)

{: E.trad := 9 :}

{: E1.trad := 9 5 - :}

{: T.trad := 5 :}

num
(2)

{: E.trad := 9 5 2 + :}

{: E.trad := 9 5 2 + :}

{: E1.trad := 9 5 2 + :}

{: T.trad := 2 :}

{: E.trad := 9 5 2 + :}

{: E.trad := 9 5 2 + :}

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Traduccin dirigida por la sintaxis en la prctica
Consltese el documento
directrices de implementacin

Esquemas de traduccin en la prctica

El siguiente paso para construir el compilador es articular en cup un esquema de traduccin dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuacin damos la
secuencia de pasos que deben realizarse

Implementacin de clases No Terminales


La implementacin de esquemas de traduccin en cup parte de la implementacin de una clase para
cada no terminal. Estas clases son contenedores para los atributos semnticos que sern utilizados
posteriormente

I. Construccin de la clase
Para implementar la clase asociada a cada no
terminal recomendamos que se utilice el mismo
nombre que se us para nombrarlo en cup,
eliminando caracteres extraos y siguiendo los
criterios de nombrado de Java. Si lo cree
conveniente crese un script para automatizar
la construccin de estas clases
con un
esqueleto vaco. Adems considere la
posibilidad de extender de una clase base para
factorizar cierto cdigo comn a todas las
clases de no terminales

public Expresion extends NonTerminal {


...
}

Todas estas clases deben implementarse en el


paquete nonTerminal
Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Traduccin dirigida por la sintaxis en la prctica
Consltese el documento
directrices de implementacin

Esquemas de traduccin en la prctica

El siguiente paso para construir el compilador es articular en cup un esquema de traduccin dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuacin damos la
secuencia de pasos que deben realizarse

Implementacin de clases No Terminales


La implementacin de esquemas de traduccin en cup parte de la implementacin de una clase para
cada no terminal. Estas clases son contenedores para los atributos semnticos que sern utilizados
posteriormente

II. Implementacin de constructores


Incluya en cada clase tantos constructores
como resulten necesarios. Recomendamos
definir un constructor por defecto sin
argumentos y otros que reciban como
argumentos otras clases de no terminales
necesarias, de acuerdo al anlisis de
dependencias del esquema de traduccin
dirigido por la sintaxis

public Expresion extends NonTerminal {


...
public Expresion () { ... }
public Expresion (Expresion e) {...}
public Expresion (Expresion left,
Expresion right) {...}
}

Considere la posibilidad de centralizar la lgica


comn de cada constructor en uno de los
constructores de manera que el resto delegue
en ellos

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Traduccin dirigida por la sintaxis en la prctica
Consltese el documento
directrices de implementacin

Esquemas de traduccin en la prctica

El siguiente paso para construir el compilador es articular en cup un esquema de traduccin dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuacin damos la
secuencia de pasos que deben realizarse

Implementacin de clases No Terminales


La implementacin de esquemas de traduccin en cup parte de la implementacin de una clase para
cada no terminal. Estas clases son contenedores para los atributos semnticos que sern utilizados
posteriormente

III. Implementacin atributos

public Expresion extends NonTerminal {


List<QuadrupleIF> code;

Declare como variables privadas de clase cada


uno de los atributos que contendr el no
terminal de la clase que est implementando.
Para cada atributo implemente dos mtodos de
acceso pblico. una operacin consultora con
prefijo get y otra modificadora con prefijo set.

TypeIF type;
TemporalIF temporal;
...
public List<QuadrupleIF> getCode () {...}
public void setCode (List<QuadrupleIF> code) {...}

Considere esta tarea como un proceso de


refinamiento sucesivo que se ir completando
cuando tenga claro qu atributos es necesario
incluir en cada clase no terminal a tenor del
esquema de traduccin que est articulando

public TypeIF getType() {...}


public void setType (TypeIF type) {...}
public TemporalIF getTemporal () {...}
public void setTemporal (TemporalIF temporal) {...}
...
}

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Traduccin dirigida por la sintaxis en la prctica
Consltese el documento
directrices de implementacin

Esquemas de traduccin en la prctica

El siguiente paso para construir el compilador es articular en cup un esquema de traduccin dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuacin damos la
secuencia de pasos que deben realizarse

Implementacin de clases No Terminales


La implementacin de esquemas de traduccin en cup parte de la implementacin de una clase para
cada no terminal. Estas clases son contenedores para los atributos semnticos que sern utilizados
posteriormente

IV. Sobrescritura de mtodos de Object

public Expresion extends NonTerminal {


...

Java impone, normativamente, que la implementacin de cualquier clase debe incluir la


sobreescritura de 3 mtodos: hashcode, para
devolver una representacin numrica nica del
objeto; equals, para comparar un objeto con
otro y toString para devolver una cadena que
contenga inforrmacin sobre el estado del
problema.

long hashcode () {
return 67 * 67 * code.hashcode() +
67 * type.hashcode()

+ temporal.hascode();

}
boolean equals (Object o) {
if (!(o instanceof Expresion)) return false;
else {

Expression e = (Expresion) o;
return e.code.equals(this.code) &&

Recomendamos
encarecidamente
la
implementacin de estos tres mtodos puesto
que puede simplificar considerablemente la
construccin del compiladores en fases
subsiguientes

e.type.equals(this.type) &&
e.temporal.equals(this.temporal); }
}
public String toString () {...}
}

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Traduccin dirigida por la sintaxis en la prctica

Esquemas de traduccin en la prctica

Consltese el documento
directrices de implementacin

El siguiente paso para construir el compilador es articular en cup un esquema de traduccin dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuacin damos la
secuencia de pasos que deben realizarse

Tipificacin de No Terminales en cup


Se incluye el
nombre de la
clase entre
nonTerminal y
el nombre del
no terminal.
Asegrese de
haber importado
nonTerminal

Una vez construidas todas las clases de los no terminales que


conforman nuestra especificacin gramatical en cup, es
necesario indicar a esta herramienta que, durante el proceso de
construccin del rbol de anlisis sintctico, debe considerar
cada no terminal como un objeto de la clase correspondiente.
Esto se hace alterando la seccin de declaracin de no
terminales mediante su tipificacin
Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Traduccin dirigida por la sintaxis en la prctica
Consltese el documento
directrices de implementacin

Esquemas de traduccin en la prctica

El siguiente paso para construir el compilador es articular en cup un esquema de traduccin dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuacin damos la
secuencia de pasos que deben realizarse

Implementacin del esquema de traduccin en cup


En cup, la implementacin de esquemas de traduccin dirigidos por la sintaxis permite utilizar
solamente atributos sintetizados. Cada regla de produccin debe tener una accin semntica que
construya un objeto de la clase no terminal del antecedente, asigne valor a sus atributos, y, como
ltima instruccin, lo asigne a RESULT. Esto har que dicho objeto se copie al no terminal del
antecedente para que sea consultado en otras reglas
Nombramiento de smbolos gramaticales
expresion ::= expresion:e1 MAS expresion:e2

Uso de constructor

{: Expresion e = new Expresion (e1, e2);


<<comprobacin de tipos sobre e1 y e2>>
<<generacin de cdigo para e1 + e2>>

Acciones semnticas

...
RESULT = e; :}

Asignacin de reduccin

Al hacer esta asignacin el objeto en la expresin de la parte derecha del


igual se asigna como contenedor de informacin del no terminal del
antecedente. Asegrese de que el tipo de esta expresin es compatible
con el declarado en la seccin de no terminales para el antecedente

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Traduccin dirigida por la sintaxis en la prctica

Desarrollo paso a paso


La construccin de esta fase del compilador consiste en la preparacin de la infraestructura de
artefactos necesaria para articular los esquemas de traduccin dirigida por la sintaxis tal y como se ha
descrito con anterioridad. A continuacin damos un generacin de los pasos principales a dar
1. Implementacin de las clases java que representan los no terminales
1. Hacerlos heredar de la clase NonTerminal
2. Implementar constructores y constructores por copia
3. Sobrescribir mtodos heredados de la clase Object
4. Considere la posibilidad de automatizar el proceso con script

Los atributos de los no


terminales an no son
conocidos por lo tanto es
imposible implementar sus
mtodos de acceso

2. Tipificacin de cada no terminal en Cup


1. Declare el tipo clase java de cada no terminal de cup
2. Considere la posibilidad de hacer jerarquas de clases
3. Pruebe a implementar algn esquema de traduccin sencillo de prueba
1. Implemente una prueba para comprobar la propagacin de informacin en cup
2. Tenga en cuenta siempre que cada accin introducida semnticas pueden generar nuevos conflictos
En Cup A ::= B {: <<accin>> :} C se traduce a
A ::= B M C; M ::= {:<<accin>>:} lo cual puede
llegar a generar nuevos conflictos en
ocasiones

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Bibliografa

Material de estudio
Bibliografa bsica
Construccin de compiladores: principios y prctica
Kenneth C. Louden International Thomson Editores,
2004 ISBN 970-686-299-4

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis semntico. Traduccin dirigida por la sintaxis


Bibliografa

Material de estudio
Bibliografa complementaria
Compiladores: Principios, tcnicas y herramientas.
Segunda Edicin Aho, Lam, Sethi, Ullman
Addison Wesley, Pearson Educacin, Mxico 2008

Diseo de compiladores. A. Garrido, J. Iesta, F. Moreno


y J. Prez. 2002. Edita Universidad de Alicante

Javier Vlez Reyes jvelez@lsi.uned.es

Vous aimerez peut-être aussi