Está en la página 1de 17

Lenguajes y Traductores

2015-I

GUIA VIII
Generacin de cdigo
Acciones semnticas

intermedio

Si el error es corregido cada vez que es


reconocido como tal entonces, el camino del error,
es el camino de la verdad

Hans Reichenbach
Alan Mathison Turing (1912-1954)
En 1935, el matemtico y lgico ingles Alan Mathison
Turing (1912-1954) se intereso en el problema de Hilberrt,
que preguntaba si podra haber un mtodo general aplicable
a cualquier enunciado para determinar si este era
verdadero. El enfoque de Turing para la solucin de este
problema
lo
llevo
a
desarrollar
lo
que
ahora
se
conoce
como la maquina de Turing. Durante la segunda Guerra
Mundial, Turing trabajo en la oficina para asuntos externos
de Bletchley Park, donde hizo un amplio uso del
criptoanlisis de los mensajes nazis. Sus esfuerzos
produjeron una maquina descifradora mecnica, Enigma,
elemento muy importante que contribuyo a la cada del
Tercer Reich.

Objetivos de aprendizaje
1. Conocer tcnicas para generacin de cdigo intermedio
2. Conocer cmo se realiza el anlisis sintctico dirigido por la sintaxis
3. Conocer las acciones semnticas asociadas a la gramtica

CODIGO INTERMEDIO
A partir de rbol sintctico generado por el analizador sintctico, cuando una secuencia es
reconocida, se construye el cdigo intermedio de la secuencia. Este cdigo puede estar
codificado de varias formas[TEUFFEL].
CODIGOS

INTERMEDIO

Augusto Cortez Vsquez

Pag.1/17

Lenguajes y Traductores

2015-I

NOTACION POSTFIJA
NOTACION PREFIJA
CODIGO DE DOS DIRECCIONES
CODIGO DE TRES DIRECCIONES

NOTACION PREFIFA
(a - b) / (a + b)

/-ab+ab

NOTACION POSTFIJA
(a - b) / (a + b)

ab-ab+/

Por ejemplo si a = 2 b = 3
1
2
3
4
5
6
7

Empila 2
Empila 3
Saca los dos elementos superiores, aplica el operando y empila el resultado.
Empila 2
Empila 3
Saca los dos elementos superiores, aplica el operando + y
empila el resultado.
/ requiere dos operandos, saca los dos superiores y aplica / y el resultado se empila.

CODIGO DE DOS DIRECCIONES (triples)


OP

arg1

Arg2

TRIPLES

Ejemplo 1
c=a-b+a*b
1:
2:
3:
4:

SUB a b
MUL a b
ADD (1) (2)
STO (3) c

1:
2:
3:
4:

(-, a, b)
(*, a, b)
(+, (1), (2))
(:=, (3), c)

1:
2:
3:
4:

(*, r, s)
(*, s, t)
(+, (1), (2))
(:=, (3), w)

Ejemplo 2
w := r * s + s * t
1:
2:
3:
4:

MUL r s
MUL s t
ADD (1) (2)
STO (3) w

CODIGO DE TRES DIRECCIONES (Cuadruplos)

OP

OPE_1

Augusto Cortez Vsquez

OPE_2

RES

Pag.2/17

Lenguajes y Traductores

2015-I

Donde
OP
OPE_1
OPE_2
RES

Ejemplo 3
1:
2:
3:
4:

:
:
:
:

operador
operando 1
operando 2
resultado

c=a-b+a*b
SUB a b
V1
MUL a b
V2
ADD V1 V2 V3
STO V3
c

1:
2:
3:

(-, a, b, V1)
(*, a, b, V2)
(+, V1, V2, V3)
4:
(:=, V3, c, -)

Ejemplo 4
z := a + b - a * b
w := a * b
TRIPLES
(1)
(2)
(3)
(4)
(5)

ADD a b
MUL a b
SUB (1) (2)
STO (3) z
STO (2) w

CUADRUPLOS
1
2
3
4
5

ADD a b
MUL a b
SUB V1 V2
STO V3
STO V2

V1
V2
V3
z
w

Ejercicio 1
Construya triples y cuadruplos para las frases
o rea= (base *altura)/2
o Volumen = (2*PI*R)*Altura
o (a*b-c)*(x / (a*b))
La proposicin SUM = SUM + VALOR
Puede representarse mediante los cudruplos
+ , SUM , VALOR , i
= , i1
,
, SUM
La i1 especifica un resultado intermedio (SUM + VALOR); el segundo cudruplo
asigna el valor de este resultado intermedio a SUM. La asignacin se trata como una
operacin de asignacin aparte (=) , para permitir posibilidades adicionales a la
optimacin de cdigo.

ACCIONES SEMANTICAS
Son acciones que se asocian con las acciones de una gramtica independiente del
contexto

Augusto Cortez Vsquez

Pag.3/17

Lenguajes y Traductores

ACCION
SEMANTICA

2015-I

fragmento de cdigo que se ejecuta cuando el AS reconozca la


produccin apropiada.

Ejemplo 5
x

y*z

(A)

A es la accin semntica que se ejecuta al reducir Y * Z a X, cuando se trata de AS


ascendente al expandir X a Y * Z, cuando se trata de AS descendente.

TRADUCCION A POST FIJO


Ejemplo 6
Consideremos la gramtica:
G:

E
T
F

E
E
E
T
T
T
F
F

T
E+T
E-T
F
T*F
T/F
id
(E)

Anlisis de la frase
E

T/E+T/E-T
F/T*F/T/F
id / (E)

a+b-a*b

E-T
E + T1 - T2
T3 + T1 - T2
F + T1 - T2
id + T1 - T2
id + F - T
id + id - T
id + id - T * F
id + id - F1 * F2
id + id - id * F
id + id - id * id

a+b-a*b

Augusto Cortez Vsquez

(T)
(E T ADD)
(E T SUB)
(F)
(T F MUL)
(T F DIV)
(Load id)
(E)

(E T SUB)
(E T1 ADD T2 SUB)
(T3 T1 ADD T2 SUB)
(F T1 ADD T2 SUB)
(Load id T1 ADD T2 SUB)
(Load id F ADD T SUB)
(Load id Load id ADD T SUB)
(Load id Load id ADD T F MUL SUB)
(Load id Load id ADD F1 F2 MUL SUB)
(Load id Load id ADD Load a F MUL SUB)
(Load id Load id ADD Load id Load id MUL SUB)
Load a Load b ADD Load a Load b MUL SUB

Pag.4/17

Lenguajes y Traductores

2015-I

Ejercicio 2
verifique las frases

(a+b)*(a-b)
a+b* a b
(a+b) * a b
a+b * (a b)

TRADUCCION A CUADRUPLOS
La generacin de cdigo de tres direcciones (cudruplos) considera una gramtica G y el
anlisis por desplazamiento y reduccin . Para ello se supone que existe una matriz infinita
V en donde se almacenan las variables auxiliares. Cada vez que se usa una nueva variable
auxiliar, la variable K se incrementa. Se utilizan tambin los apuntadores PtroE, PtroT y
PtroF para apuntar al lugar donde se encuentran rel valor de una expresin, un factor o un
trmino.
El procedimiento GENERA produce un cudruplo segn sus parmetros

Ejemplo 7
1
2

E
E1

T
E2 + T

(PtroE = PtroT)
(INC(K); PtroE1 := V(K)
GENERA(ADD, PtroE2, PtroT, V(K)))

E1

E2 - T

4
5

T
T1

F
T2 * F

T1

T2 / F

7
8
9

F
F
F

x
y
(E)

(INC(K); PtroE1:= V(K);


GENERA(SUB, PtroE2 , PtroT, V(K)))
(PtroT = PtroF)
(INC(K); PtroT1 , := V(K)
GENERA (MUL, PtroT2, PtroF, V(K)))
(INC(K); PtroT1 = V(K)
GENERA (DIV, PtroT2, PtroF, V(K)))
(PtroF := x)
(PtroF := y)
(PtroF := PtroE)

Ejemplo 8

Anlisis de frase x + y - x * y
1
2
3
4
5
6

Entrada

Pila

Accin

x+y-x*y
+y-x*y
+y-x*y
+y-x*y
+y-x*y
y-x*y

$
$x
$F
$T
$E
$E +

d
r7
r4
r1
d
d

Augusto Cortez Vsquez

Cdigo

comentario
desplaza x a la pila
reduce x a F por regla 7
reduce F a T por regla 4
reduce T a E por regla 1
desplaza + a la pila
desplaza y a la pila

Pag.5/17

Lenguajes y Traductores
7
8
9
10
11
12
13
14
15
16
17
18
19
20

-x*y
-x*y
-x*y
-x*y
x*y
*y
*y
*y
y

2015-I

$E + y
$E + F
$E + T
$E
$E $E - x
$E - F
$E - T
$E - T *
$E - T * y
$E - T * F
$E - T
$E
$

r8
reduce y a F por regla 8
r4
reduce F a T por regla 4
r2 ADD a b V(1)
d
desplaza - a la pila
d
desplaza x a la pila
r7
reduce x a F por regla 7
r4
reduce F a T por regla 4
d
desplaza * a la pila
d
desplaza y a la pila
r8
reduce y a F por regla 7
r8
reduce T a F por regla 5
r5 MUL a b V(2) reduce T*F a T por regla 5
r3 SUB V(1) V(2) V(3)
acepta

Ejemplo 9
Hacer el anlisis para (a + b) / (a - b)
Anlisis
Entrada
1 a+b/a-b
2 +b/a-b
3
+b/a-b
4
+b/a-b
5
+b/a-b
6
b/a-b
7
/a-b
8
/a-b
9
/a-b
10
/a-b
11
a-b
12
-b
13
-b
14
-b
15
-b
16
b
17
18
19
20
21
22
23
24
25

Pila

Accin
$

$a

r7
$F
$T
$E
$E +
$E + b
$E + F r4
$E + T r2
$E
$E/
$E/a
$E/F
$E/T
$E/E
$E/E$E/E-b
$E/E-F
$E/E-T
$E/E
$F/E
$T/E
$T/F
$T
$E

Cdigo
d
r4
r1
d
d
r8
ADD a b V(1)
d
d
r7
r4
r1
d
d
r8
r4
r3
SUB a b V(2)
r9
r4
r9
r6
DIV V(1) V(2) V(3)
r1
Acepta

Ejercicio 3
Realice el anlisis para las frases siguientes
(a+b)*(a-b)
Augusto Cortez Vsquez

Pag.6/17

Lenguajes y Traductores

2015-I
a+b* a b
(a+b) * a b
a+b * (a b)

Ejemplo 10
Consideremos la gramtica simplificada de lenguaje C
P
void main(){ L_Decl L_Prop }
L_Decl
D; L_Decl / Decl;
Decl
Tipo L_Id
Tipo
int / float
L_Id
Id , L_Id / Id
L_Prop
Prop; L_Prop / Prop;
Prop
P_Asg /P_Lect /P_Escr /P_Decis / P_Iter
P_Asg
Id = Expr
P_Lect
cin >> Id
P_Escr
cout <<Id
P_Decis
if EL B_Sent / if EL B_Sent else B_Sent
B_Sent
{ L_Prop} / Prop;
P_Iter
While EL B_Sent
Expr
Expr + Termino / Expr - Termino / Termino
Termino
Termino * Factor / Termino Div Factor /Factor
Factor
Id / Cn / ( Expr) / - Expr
EL es considerado terminal

Ejercicio 4
Amplie la gramtica para que acepte la sentencia for
Amplie la gramtica para que acepte la sentencia switchr

void main()
{
int I, SUM,PROM,VAL;
SUM = 0;
I=1 ;
while ( I < =10 )
{ cin>>VALOR;
SUM= SUM + VALOR;
i++;
}
PROM = SUM/10;
cout<<SUM;
cout<<PROM;
}
Augusto Cortez Vsquez

Pag.7/17

Lenguajes y Traductores

2015-I

Supongamos que incluimos en la gramtica la sentencia iterativa con contador (for)


void main()
{
int I, SUM,PROM, VAL;
SUM = 0;
for ( I = 1; I < =10 ; I++ )
{
cin>>VALOR;
SUM= SUM + VALOR;
}
PROM = SUM/10;
cout<<SUM;
cout<<PROM;
}

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)

Componentes lxicos para la gramtica modificada

Componente
Lxico

cdigo

patrn

void
main
for
cin
cout
(
)
{
}
Id
cn
int
float
>>
<<
,
;
=
+
*
/
<
++

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

void
main

Augusto Cortez Vsquez

(
)
{

Pag.8/17

Lenguajes y Traductores

2015-I

Resultado del analisis lexico


Linea

Tipo de
Comp.lexico

01
02
06
07
08
12
10
16
10
16
10
16
10
17
10
18
11
17
03
06
10
18
11
17
10
23
11
17
10
24
04
14
10
17
10
18
10
19
10
17
09
10
18
10
22
11
05
15
10
17
05
15
10
17
09

2
3

8
9

10

11

12

Augusto Cortez Vsquez

Designador
Comp. lexico

*I
*SUM
*PROM
*VAL
*SUM
#0

*I
#1
*I
#10
*I

*VALOR
*SUM
*SUM
*VALOR

*PROM
*SUM
#10

*SUM

*PROM

Pag.9/17

Lenguajes y Traductores

2015-I

La operacin JGT del cuadruplo (3) compara los valores de sus dos operandos y salta al
cuadruplo (11) si el primer operando es mayor que el segundo
La operacin J del cuadruplo(10) salta incondicionalmente al cuadruplo (3)
(1) =
,
(2) =
,
(3) JGT
,
(4) CALL
,
(5) PARAM ,
(6) +
,
(7) =
,
(8) +
,
(9) =
,
(10) J
,
(11) DIV
,
(12) =
,
(13) CALL ,
(14) PARAM ,
(15) CALL ,
(16) PARAM ,

#0
#1
I
XCIN
VALOR
SUM
I1
I
I2
SUM
I3
XCOUT
SUM
XCOUT
PROM

,
,
, 10
,
,
, VALOR
,
, #1
,
,
, #10
,
,
,
,
,

,
,
,

SUM
I
(11)

// SUM = 0
// for ( I = 1; I <= 10 ; I++)
// cin>>VALOR

,
,
,
,
,
,
,
,

I1
SUM
I2
I
(3)
I3
PROM

// SUM = SUM +VALOR


// fin de ciclo for
// salta al cuadruplo 3
// PROM = SUM /10
// cout<<SUM;

,
// cout<<PROM;
,

codigo intermedio para el programa ejemplo

Ejercicio 5

Construya el programa para hallar el mayor, menor y promedio de 10


nmeros enteros ingresados desde teclado
Realice el anlisis lexicogrfico
Construya los cudruplos

Cdigo intermedio para arreglos


Ejemplo 11
Consideremos el vector

Int A[1..10]

Si cada variable entera ocupa una palabra de memoria, entonces, se debe asignar 10
palabras para almacenar el vector.
En general
Int A[i..f] deben asignarse f-i+1 palabras de almacenamiento para el
vector
En el caso de una matriz

Int A[0..5 , 1..7]

El primer subindice debe ocupar 6 valores y el segundo subindice debe ocupar 7 valores.
Para almacenar toda la matriz deben asignarse un total de 6* 7 = 42 palabras

Augusto Cortez Vsquez

Pag.10/17

Lenguajes y Traductores

2015-I

En general
Int A[i1..f1 , i2..f2]
Para almacenar la matriz se requieren (f1 - i1 + 1) * , (f2 - i2 + 1) palabras
Cuando se genera la generacin de cdigo para la referencia a matrices, es importante
conocer el elemento de la matriz que corresponde a cada palabra de almacenamiento
asignado. Para los vectores la primera palabra contendra A[1], la segunda palabra
contendra A[2] y as sucesivamente. En el caso de matrices no es tan obvio. Esto depender
de cmo se represente la matriz en memoria, por filas o por columnas. Si la representacin
de la matriz es por filas, todos los elementos de la matriz que tienen el mismo valor del
primer ndice se almacenan en localidades contiguas. Si la representacin de la matriz es por
columnas, todos los elementos de la matriz que tienen el mismo valor del segundo ndice se
almacenan en localidades contiguas.

Int A[i..f]

Supongamos :

Cada elemento ocupa w bytes


Para referirse a un elemento del vector, se debe calcular la direccin del elemento
referido en relacin con la direccin base del vector
Si w = 3 el elemento A[6] se encontrara en la direccin relativa 3*5=15
Respecto a la direccin inicial del vector.
En general el elemento A[k] se encuentra en la direccin relativa w *(k-1)
Para las matrices
Int A[i1..f1 , i2..f2]
En general el elemento A[i , j ] se encuentra en la direccin relativa
w * [ (i - i1) *( f2 - i2 + 1)+ (j - i2 )]
Int A[1..10];
...
...
A[i] =5
(1)
(2)
(3)

*
=

i
i1
#5

#1
#3

i1
i2
A[i2]

i
j
i1
i3
#5

#7
#1
i2
#3

i1
i2
i3
i4
A[i4]

Int A[0..5, 1..7];


...
...
A[i,J] =5

(1)
(2)
(3)
(4)
(5)

*
+
*
=

Augusto Cortez Vsquez

Pag.11/17

Lenguajes y Traductores

2015-I

Int A[10,10],B[10,10];
...
...
for(i=1 ; i =10 ; i++)
A[i , 2*j-1] = B[i , 2*j]
Fig. YY Segmento de codigo

(1) =
(2) JGT
(3) (4) *
(5) *
(6) (7) (8) +
(9) *
(10) (11) *
(12) *
(13) (14) +
(15) *
(16) =
(17) +
(18) =
(19) J
(20)

,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,

#1
I
I
I1
#2
I3
I4
I2
I6
I
I8
#2
I10
I9
I12
B[I13]
#1
I14

,
, #10
, #1
, #10
, J
, #1
, #1
, I5
, #3
, #1
, #10
,J
, #1
, I11
, #3
,
,I
,
,

,
(20)
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,

I
// I = 1
// Ir a la prop. 20
I1
// calculo del subindice para A
I2
I3
I4
I5
I6
I7
I8
// calculo del subindice para B
I9
I10
I11
I12
I13
A[I7]
I14
I
(2)
siguiente proposicin

cdigo intermedio para el programa ejemplo

los cudruplos 5 y 12 son iguales, con excepcin del nombre del resultado intermedio
producido.El operando J no cambia de valor entre los cuadruplos 5 y 12. Esto significa que se
puede eliminar el cuadruplo 12 y reemplazar cualquier referencia a su resultado I10

Augusto Cortez Vsquez

Pag.12/17

Lenguajes y Traductores

(1) =
(2) JGT
(3) (4) *
(5) *
(6) (7) (8) +
(9) *
(10) +
(11) *
(12) =
(13) +
(14) =
(15) J
(16)

,
,
,
,
,
,
,
,
,
,
,
,
,
,
,

#1
I
I
I1
#2
I3
I4
I2
I6
I2
I12
B[I13]
#1
I14

2015-I

,
, #10
, #1
, #10
, J
, #1
, #1
, I5
, #3
, I4
, #3
,
,I
,
,

,
(16)
,
,
,
,
,
,
,
,
,
,
,
,
,

I
// I = 1
// Ir a la prop. 16
I1
// calculo del subindice para A
I2
I3
I4
I5
I6
I7
I12
// calculo del subindice para B
I13
A[I7]
// operacin de asignacion
I14
I
(2)
siguiente proposicin

Cdigo intermedio optimizado para el programa ejemplo


Optimizacin de cdigo mediante la eliminacin de subexpresiones comunes

(1) *
(2) (3) (4) =
(5) JGT
(6) (7) *
(8) +
(9) *
(10) +
(11) *
(12) =
(13) +
(14) =
(15) J
(16)

,
,
,
,
,
,
,
,
,
,
,
,
,
,

#2
I3
I4
,
#1
I
I
I1
I2
I6
I2
I12
B[I13]
#1
I14

, J
, #1
, #1

,
,
,
,
, #10

, #1
, #10
, I5
, #3
, I4
, #3
,
,I
,
,

I3
I4
I5
,
,
I1
I2
I6
I7
I12
I13

,
,
,
,
,
,
, A[I7]
,
I14
,
I
,
(5)

// calculo de las invariantes

I
// I = 1
(16) // Ir a la prop. 16
// calculo del subindice para A

// calculo del subindice para B


// operacin de asignacion

siguiente proposicin

Cdigo intermedio optimizado para el programa ejemplo


Optimizacin de cdigo mediante la eliminacin de las invariantes

Augusto Cortez Vsquez

Pag.13/17

Lenguajes y Traductores

2015-I

Ejercicio 6
realizar el anlisis para la frase
int A[10,10],B[10,10];
...
...
for(i=1 ; i =5 ; i++)
A[2*i -k , j] = B[2*i , 2*j]

Optimizar el cdigo

Algoritmos dirigidos por la sintaxis


Para cada regla de produccin y el terminal se construye una rutina. Ejemplo para el no
Terminal SL ( sentencia de lectura)

Ejemplo 12
SL
LISTA_ID

Leer (LISTA_ID)
Id / LISTA_ID, Id

Procedimiento Lectura()
Inicio
Encontro = Falso
Si Token = Leer
Lexico(Token)
Si Token = (
Lexico(Token)
Si LISTA_ID devuelve xito
Si Token = )
Enccontro = verdad
Lexico(Token)
FinSi
FinSi
FinSi
FinSi
Si Encontro = Verdad
Retornar xito
Sino
Retornar Fracaso
FinSI
Fin Lectura

Augusto Cortez Vsquez

Pag.14/17

Lenguajes y Traductores

Leer

Lectura
Procedi
miento
Lectura(
)(
Inicio

Encontr
o=
Falso LISTA_ID()
Procedimiento
Inicio
S
Encontro
i Token = Falso
Token = Id
=SiLeer

2015-I

Lectura
Procedi
miento
Lectura(
Lectura
Leer ) (
Inicio Procedi
miento
Encontr Lectura(
)Id
o=
Falso Inicio
(valor)

Leer

S
i Token Encontr
= Leer o =
Encontro = verdad
Falso
Lexico(Token)
S
Mientras Token = , y Encontro = verdad
i
Token
Lexico(Token)
Lexico(
Lexico(
Si Token = IdToken) = Leer
Token)
S
i Token
= ( FinSi

S
Encontro = Fracaso
Lexico(

FinSi
Si Encontro = Verdad
Retornar xito
Sino
Lexico( Retornar Fracaso
FinSI
Token)
Fin LISTA_ID

EXP

S
i Token
Lexico( = (
Token)

S
i Token
Lexico(= (
Token)

Procedimiento
Asignacion()
Lexico(
S Lexico(
S
Inicio
Token)
Token)
Encontro = Falso
i
i
Si Token = Id
LISTA_
LISTA_
Lexico(Token)
ID
ID
S Si Token = =
S
devuelv
devuelv
Lexico(Token)
i
i
e xito
e xito
Si EXP
devuelve xito
LISTA_
LISTA_
Enccontro
= verdad
ID S
ID
FinSi
S
devuelv
FinSi
devuelvi
i
FinSi
e xito
e xito
Si Encontro = Verdad
T
T
Retornar xito
S
Sino
o
o
i
Retornar
Fracaso
k
k
FinSI
e
e
Fin Lectura
T

S
SA

S
i TokenLexico(
= ( Token)

i Token
Token)
= (

FinSi

i
ID = EXP
LISTA_
ID
devuelv
e xito
S
i
T
o
k
e
n

)
Augusto Cortez Vsquez

S
i TokenEncontr
o=
= Leer
Falso
S
i
Token
Lexico(
Token) = Leer

Lexico(Token)

Sino

Lectura
Procedi
miento
Lectura(
Lectura
)(
Inicio Procedi
miento
EncontrLectura(Id
)
o=
Falso Inicio

o
k
e
n

S
i
T
o
k
e
n

)
=
Pag.15/17

Lenguajes y Traductores

2015-I

Asignacio
nnectura

Asignacio

Asignacio

a
Procedi
Procedi
miento
miento
EXPRESI
Lectura(
ID
=
ID Lectura(
=
ID
ONctura
)
)
Inicio
Inicio Procedi
E miento
ProcedimientoEEXP()
Inicio ncontro
ncontro Lectura(
Encontro
=
Falso
= Falso
= Falso )(valor)
Si TERMINO devuelve exito
S Encontro = verdad
S Inicio
E
i Token Mientras Token = +i Token
o Token = - y Encontro
= verdad
= Leer
Lexico(Token)
= Leer ncontro
= Falso
Si TERMINO devuelve ffracaso
Encontro
=
Falso
S
L
L
FinSi
i
Token
exico(To FinMientras
exico(To
= Leer
ken)
ken)
FinSi
Si Encontro = Verdad
S Retornar xito
Sino
i Token
Retornar Fracaso
= (
FinSI
Fin LISTA_ID
7

L
exico(To
Procedimiento
TERMINO()
ken)
Inicio

a
Procedi
miento
EXPRES
Lectura(
=
Lectura
)
Inicio Procedi
Emiento
ncontro Lectura(
= Falso )
SInicio
E
i Token
ncontro
= Leer
= Falso
S
L
i
Token
exico(To
ken) = Leer

L
S
i Token exico(To
ken)
= (

L
S
exico(To
i Token
= ( ken)

S
L i Token
exico(To = (
ken)

S
iL Token
= (
exico(To

ken)

L
L
exico(To
S //
S exico(To
S
Se procede de forma similar
a EXPRESION
ken)
ken)
i
i
i
LISTA_I
LISTA_I
LISTA_I
D 7
D
D
Ejercicio
S
S
devuelve
devuelve
devuelve
Construya el cdigo para la sentencia While
i
i
xito
xito
xito
LISTA_I
LISTA_I
D
D S
S
S
Ejercicio
9
Fin TERMINO
devuelve
devuelve
i
i
i
xito
xito
Modifique la gramtica
del ejemplo 6 Tpara que reconozca la frase T5*( a+b)
T
S
S
Realice el anlisis
o para la frase 5*( a+b)
o
o
i
i
k
k
k
e
e
e
Ejercicio 10
T
T
n
n
n
o
o
a) Construya una
gramtica
para
reconocer
Frases
del
clculo
proposicional.
k
k
=
=
=
e
(a b) , (a^b-->c)
e
n
n

)
)
)
=
=

Augusto Cortez Vsquez


Pag.16/17
E

E
)

E
)

Lenguajes y Traductores

2015-I

b) Asigne acciones semnticas para las reglas de produccin que genere cdigo
en postfijo. Realice el anlisis para una frase no trivial ( ver ejemplo 6)
c) Asigne acciones semnticas para las reglas de produccin que genere cdigo
con cudruplos. Realice el anlisis para una frase no trivial ( ver ejemplo 7)
REFERENCIAS BIBLIOGRAFICAS
[1]

[AHO 1990] Aho A.,Sethi,Ullman Compiladores, principios, tcnicas y herramientas;


Addison-Wesley1990, Wilmington-Delaware EUA.

[2]

[BECK 1988] BBECK Leland Software de Sistemas


Addisson Wesley iberoamericana
Wilmington Delaware 1988

[3]

[BROOKSHEAR 1993] BROOKSHEAR J. Glean


Teora de la computacin
Addisson Wesley iberoamericana
Wilmington Delaware 1993

[4]

[CORTEZ 2012] Augusto .Cortez Vsquez. Lenguajes y Compiladores, Edit UCSS Lima
2012

[5]

[CORTEZ 2011] Augusto .Cortez Vsquez. Algoritmica, Edit EsVega Lima Per 2011

[6]

[CORTEZ 2012] Augusto .Cortez Vsquez. Algortmica, Tcnicas algoritmicas,


CEPREDIM Lima 2012

[7]

[CORTEZ 2011] Augusto .Cortez Vsquez. Matemticas Discretas, Edit San Marcos Lima
2011.

[8]

[CORTEZ 2009] Augusto .Cortez Vsquez, Procesamiento del lenguaje natural. Revista RISI
Vol 6 N 2 2009 , Pg 45-54 ISSN 1815-0268 Lima Per www.openjournal.unmsm.edu

[9]

[HOPCROFT 1993] Hopcroft Jhon, Ullman Jeffrey


Introduccin a la teora de autmatas

[10]

Edit. CECSA 1993

[MANZANO 2004] Mara Manzano Logia, lgicas y logicidad, 2004

[11] [PEA 1998] PEA MARI, Ricardo


Diseo de programas, Formalismo y abstraccin
Prentice Hall
Madrid 1998
[12] [PRATT 1988] Terrence W. Pratt. Lenguajes de programacin, Diseo e
implementacin; Prentice Hall Hispanoamericana 1988

Augusto Cortez Vsquez

Pag.17/17

También podría gustarte