-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.1/17
GUIA VIII Generacin de cdigo intermedio y
Acciones semnticas
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
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.2/17
NOTACION POSTFIJA
NOTACION PREFIJA
CODIGO DE DOS DIRECCIONES
CODIGO DE TRES DIRECCIONES
NOTACION PREFIFA
(a - b) / (a + b) / - a b + a b
NOTACION POSTFIJA
(a - b) / (a + b) a b - a b + /
Por ejemplo si a = 2 b = 3
1 Empila 2
2 Empila 3
3 Saca los dos elementos superiores, aplica el operando y empila el resultado.
4 Empila 2
5 Empila 3
6 Saca los dos elementos superiores, aplica el operando + y
empila el resultado.
7 / 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: SUB a b 1: (-, a, b)
2: MUL a b 2: (*, a, b)
3: ADD (1) (2) 3: (+, (1), (2))
4: STO (3) c 4: (:=, (3), c)
Ejemplo 2
w := r * s + s * t
1: MUL r s 1: (*, r, s)
2: MUL s t 2: (*, s, t)
3: ADD (1) (2) 3: (+, (1), (2))
4: STO (3) w 4: (:=, (3), w)
CODIGO DE TRES DIRECCIONES (Cuadruplos)
OP OPE_1 OPE_2 RES
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.3/17
Donde
OP : operador
OPE_1 : operando 1
OPE_2 : operando 2
RES : resultado
Ejemplo 3 c = a - b + a * b
1: SUB a b V1 1: (-, a, b, V1)
2: MUL a b V2 2: (*, a, b, V2)
3: ADD V1 V2 V3 3: (+, V1, V2, V3)
4: STO V3 c 4: (:=, V3, c, -)
Ejemplo 4
z := a + b - a * b
w := a * b
TRIPLES CUADRUPLOS
(1) ADD a b
(2) MUL a b
(3) SUB (1) (2)
(4) STO (3) z
(5) STO (2) w
1 ADD a b V1
2 MUL a b V2
3 SUB V1 V2 V3
4 STO V3 z
5 STO V2 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
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.4/17
ACCION
SEMANTICA 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 / E + T / E - T
T F / T * F / T / F
F id / (E)
1 E T (T)
E E + T (E T ADD)
E E - T (E T SUB)
T F (F)
T T * F (T F MUL)
T T / F (T F DIV)
F id (Load id)
F (E) (E)
Anlisis de la frase a + b - a * b
E E - T (E T SUB)
E + T1 - T2 (E T1 ADD T2 SUB)
T3 + T1 - T2 (T3 T1 ADD T2 SUB)
F + T1 - T2 (F T1 ADD T2 SUB)
id + T1 - T2 (Load id T1 ADD T2 SUB)
id + F - T (Load id F ADD T SUB)
id + id - T (Load id Load id ADD T SUB)
id + id - T * F (Load id Load id ADD T F MUL SUB)
id + id - F1 * F2 (Load id Load id ADD F1 F2 MUL SUB)
id + id - id * F (Load id Load id ADD Load a F MUL SUB)
id + id - id * id (Load id Load id ADD Load id Load id MUL SUB)
a + b - a * b Load a Load b ADD Load a Load b MUL SUB
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.5/17
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 E T (PtroE = PtroT)
2 E1 E2 + T (INC(K); PtroE1 := V(K)
GENERA(ADD, PtroE2, PtroT, V(K)))
3 E1 E2 - T (INC(K); PtroE1:= V(K);
GENERA(SUB, PtroE2 , PtroT, V(K)))
4 T F (PtroT = PtroF)
5 T1 T2 * F (INC(K); PtroT1 , := V(K)
GENERA (MUL, PtroT2, PtroF, V(K)))
6 T1 T2 / F (INC(K); PtroT1 = V(K)
GENERA (DIV, PtroT2, PtroF, V(K)))
7 F x (PtroF := x)
8 F y (PtroF := y)
9 F (E) (PtroF := PtroE)
Ejemplo 8
Anlisis de frase x + y - x * y Entrada Pila Accin Cdigo comentario
1 x + y - x * y $ d desplaza x a la pila
2 + y - x * y $x r7 reduce x a F por regla 7
3 + y - x * y $F r4 reduce F a T por regla 4
4 + y - x * y $T r1 reduce T a E por regla 1
5 + y - x * y $E d desplaza + a la pila
6 y - x * y $E + d desplaza y a la pila
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.6/17
7 - x * y $E + y r8 reduce y a F por regla 8
8 - x * y $E + F r4 reduce F a T por regla 4
9 - x * y $E + T r2 ADD a b V(1)
10 - x * y $E d desplaza - a la pila
11 x * y $E - d desplaza x a la pila
12 * y $E - x r7 reduce x a F por regla 7
13 * y $E - F r4 reduce F a T por regla 4
14 * y $E - T d desplaza * a la pila
15 y $E - T * d desplaza y a la pila
16 $E - T * y r8 reduce y a F por regla 7
17 $E - T * F r8 reduce T a F por regla 5
18 $E - T r5 MUL a b V(2) reduce T*F a T por regla 5
19 $E r3 SUB V(1) V(2) V(3)
20 $ acepta
Ejemplo 9
Hacer el anlisis para (a + b) / (a - b)
Anlisis Entrada Pila Accin Cdigo
1 a + b / a - b $ d
2 + b / a - b $a r7
3 + b / a - b $F r4
4 + b / a - b $T r1
5 + b / a - b $E d
6 b / a - b $E + d
7 / a - b $E + b r8
8 / a - b $E + F r4
9 / a - b $E + T r2 ADD a b V(1)
10 / a - b $E d
11 a - b $E/ d
12 - b $E/a r7
13 - b $E/F r4
14 - b $E/T r1
15 - b $E/E d
16 b $E/E- d
17 $E/E-b r8
18 $E/E-F r4
19 $E/E-T r3 SUB a b V(2)
20 $E/E r9
21 $F/E r4
22 $T/E r9
23 $T/F r6 DIV V(1) V(2) V(3)
24 $T r1
25 $E Acepta
Ejercicio 3 Realice el anlisis para las frases siguientes
(a+b)*(a-b)
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.7/17
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 VALOR;
SUM= SUM + VALOR;
i++;
}
PROM = SUM/10;
cout
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.8/17
Supongamos que incluimos en la gramtica la sentencia iterativa con contador (for)
Componentes lxicos para la gramtica modificada
Componente cdigo patrn
Lxico
void 01 void
main 02 main
for 03
cin 04
cout 05
( 06 (
) 07 )
{ 08 {
} 09
Id 10
cn 11 }
int 12
float 13
>> 14
>VALOR; (6)
SUM= SUM + VALOR; (7)
} (8)
PROM = SUM/10; (9)
cout
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.9/17
Resultado del analisis lexico
Linea Tipo de Designador
Comp.lexico Comp. lexico
1 01
02
06
07
2 08
3 12
10 *I
16
10 *SUM
16
10 *PROM
16
10 *VAL
17
4 10 *SUM 18
11 #0
17
5 03
06
10 *I
18
11 #1
17
10 *I
23
11 #10
17
10 *I
24
6 04
14 10 *VALOR
17
7 10 *SUM
18
10 *SUM
19
10 *VALOR
17
8 09
9 10 *PROM
18
10 *SUM
22
11 #10
10 05 15
10 *SUM
17
11 05
15
10 *PROM
17
12 09
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.10/17
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)
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
(1) = , #0 , , SUM // SUM = 0
(2) = , #1 , , I // for ( I = 1; I >VALOR
(5) PARAM , VALOR , ,
(6) + , SUM , VALOR , I1 // SUM = SUM +VALOR
(7) = , I1 , , SUM
(8) + , I , #1 , I2 // fin de ciclo for
(9) = , I2 , , I
(10) J , , , (3) // salta al cuadruplo 3
(11) DIV , SUM , #10 , I3 // PROM = SUM /10
(12) = , I3 , , PROM
(13) CALL , XCOUT , // cout
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.11/17
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.
Supongamos : Int A[i..f]
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) - i #1 i1
(2) * i1 #3 i2
(3) = #5 A[i2]
Int A[0..5, 1..7];
...
...
A[i,J] =5
(1) * i #7 i1
(2) - j #1 i2 (3) + i1 i2 i3 (4) * i3 #3 i4 (5) = #5 A[i4]
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.12/17
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
(1) = , #1 , , I // I = 1
(2) JGT , I , #10 , (20) // Ir a la prop. 20
(3) - , I , #1 , I1 // calculo del subindice para A
(4) * , I1 , #10 , I2
(5) * , #2 , J , I3
(6) - , I3 , #1 , I4 (7) - , I4 , #1 , I5
(8) + , I2 , I5 , I6
(9) * , I6 , #3 , I7
(10) - , I , #1 , I8 // calculo del subindice para B
(11) * , I8 , #10 , I9
(12) * , #2 , J , I10
(13) - , I10 , #1 , I11
(14) + , I9 , I11 , I12
(15) * , I12 , #3 , I13
(16) = , B[I13] , , A[I7]
(17) + , #1 , I , I14
(18) = , I14 , , I
(19) J , , , (2)
(20) siguiente proposicin
cdigo intermedio para el programa ejemplo
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
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.13/17
(1) = , #1 , , I // I = 1
(2) JGT , I , #10 , (16) // Ir a la prop. 16
(3) - , I , #1 , I1 // calculo del subindice para A
(4) * , I1 , #10 , I2
(5) * , #2 , J , I3
(6) - , I3 , #1 , I4 (7) - , I4 , #1 , I5
(8) + , I2 , I5 , I6
(9) * , I6 , #3 , I7
(10) + , I2 , I4 , I12 // calculo del subindice para B
(11) * , I12 , #3 , I13
(12) = , B[I13] , , A[I7] // operacin de asignacion
(13) + , #1 , I , I14
(14) = , I14 , , I
(15) J , , , (2)
(16) siguiente proposicin
Cdigo intermedio optimizado para el programa ejemplo
Optimizacin de cdigo mediante la eliminacin de subexpresiones comunes
(1) * , #2 , J , I3 // calculo de las invariantes
(2) - , I3 , #1 , I4 (3) - , I4 , #1 , I5
(4) = , #1 , , I // I = 1
(5) JGT , I , #10 , (16) // Ir a la prop. 16
(6) - , I , #1 , I1 // calculo del subindice para A
(7) * , I1 , #10 , I2
(8) + , I2 , I5 , I6
(9) * , I6 , #3 , I7
(10) + , I2 , I4 , I12 // calculo del subindice para B
(11) * , I12 , #3 , I13
(12) = , B[I13] , , A[I7] // operacin de asignacion
(13) + , #1 , I , I14
(14) = , I14 , , I
(15) J , , , (5)
(16) siguiente proposicin
Cdigo intermedio optimizado para el programa ejemplo
Optimizacin de cdigo mediante la eliminacin de las invariantes
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.14/17
Ejercicio 6
realizar el anlisis para la frase
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 Leer (LISTA_ID)
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
int A[10,10],B[10,10];
...
...
for(i=1 ; i =5 ; i++) A[2*i -k , j] = B[2*i , 2*j]
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.15/17
Leer ( Leer ( Leer ( )
Id Id
(valor)
SA ID = EXP
EXP
Lectura
Procedi
miento
Lectura(
)
Inicio
Encontr
o =
Falso
S
i Token
= Leer
Lexico(
Token)
S
i Token
= (
Lexico(
Token)
S
i
LISTA_
ID
devuelv
e xito
S
i
T
o
k
e
n
=
)
E
n
Lectura
Procedi
miento
Lectura(
)
Inicio
Encontr
o =
Falso
S
i Token
= Leer
Lexico(
Token)
S
i Token
= (
Lexico(
Token)
S
i
LISTA_
ID
devuelv
e xito
S
i
T
o
k
e
n
=
)
Lectura
Procedi
miento
Lectura(
)
Inicio
Encontr
o =
Falso
S
i Token
= Leer
Lexico(
Token)
S
i Token
= (
Lexico(
Token)
S
i
LISTA_
ID
devuelv
e xito
S
i
T
o
k
e
n
=
)
E
n
Lectura
Procedi
miento
Lectura(
)
Inicio
Encontr
o =
Falso
S
i Token
= Leer
Lexico(
Token)
S
i Token
= (
Lexico(
Token)
S
i
LISTA_
ID
devuelv
e xito
S
i
T
o
k
e
n
=
)
E
n
Lectura
Procedi
miento
Lectura(
)
Inicio
Encontr
o =
Falso
S
i Token
= Leer
Lexico(
Token)
S
i Token
= (
Lexico(
Token)
S
i
LISTA_
ID
devuelv
e xito
S
i
T
o
k
e
n
=
)
Procedimiento LISTA_ID()
Inicio
Encontro = Falso
Si Token = Id
Encontro = verdad
Lexico(Token)
Mientras Token = , y Encontro = verdad Lexico(Token)
Si Token = Id
Lexico(Token)
Sino
Encontro = Fracaso
FinSi
FinSi
FinSi
Si Encontro = Verdad
Retornar xito
Sino
Retornar Fracaso FinSI
Fin LISTA_ID
Procedimiento Asignacion()
Inicio
Encontro = Falso
Si Token = Id
Lexico(Token)
Si Token = = Lexico(Token)
Si EXP devuelve xito
Enccontro = verdad
FinSi
FinSi
FinSi
Si Encontro = Verdad Retornar xito
Sino
Retornar Fracaso
FinSI
Fin Lectura
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.16/17
ID = ID = ID = )
(valor)
7
Ejercicio 7 Construya el cdigo para la sentencia While
Ejercicio 9
Modifique la gramtica del ejemplo 6 para que reconozca la frase 5*( a+b)
Realice el anlisis para la frase 5*( a+b)
Ejercicio 10
a) Construya una gramtica para reconocer Frases del clculo proposicional. (a b) , (a^b-->c)
Asignacio
nnectura
Procedi
miento
Lectura(
)
Inicio
E
ncontro
= Falso
S
i Token
= Leer
L
exico(To
ken)
S
i Token
= (
L
exico(To
ken)
S
i
LISTA_I
D
devuelve
xito
S
i
T
o
k
e
n
=
)
E
n
EXPRESI
ONctura
Procedi
miento
Lectura(
)
Inicio
E
ncontro
= Falso
S
i Token
= Leer
L
exico(To
ken)
S
i Token
= (
L
exico(To
ken)
S
i
LISTA_I
D
devuelve
xito
S
i
T
o
k
e
n
=
)
Asignacio
a
Procedi
miento
Lectura(
)
Inicio
E
ncontro
= Falso
S
i Token
= Leer
L
exico(To
ken)
S
i Token
= (
L
exico(To
ken)
S
i
LISTA_I
D
devuelve
xito
S
i
T
o
k
e
n
=
)
E
n
Asignacio
a
Procedi
miento
Lectura(
)
Inicio
E
ncontro
= Falso
S
i Token
= Leer
L
exico(To
ken)
S
i Token
= (
L
exico(To
ken)
S
i
LISTA_I
D
devuelve
xito
S
i
T
o
k
e
n
=
)
E
n
EXPRES
Lectura
Procedi
miento
Lectura(
)
Inicio
E
ncontro
= Falso
S
i Token
= Leer
L
exico(To
ken)
S
i Token
= (
L
exico(To
ken)
S
i
LISTA_I
D
devuelve
xito
S
i
T
o
k
e
n
=
)
Procedimiento EXP()
Inicio
Encontro = Falso
Si TERMINO devuelve exito
Encontro = verdad
Mientras Token = + o Token = - y Encontro = verdad Lexico(Token)
Si TERMINO devuelve ffracaso
Encontro = Falso
FinSi
FinMientras
FinSi
Si Encontro = Verdad
Retornar xito
Sino
Retornar Fracaso FinSI
Fin LISTA_ID
Procedimiento TERMINO()
Inicio
// Se procede de forma similar a EXPRESION
Fin TERMINO
-
Lenguajes y Traductores 2015-I
Augusto Cortez Vsquez Pag.17/17
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)
RREEFFEERREENNCCIIAASS BBIIBBLLIIOOGGRRAAFFIICCAASS
[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 Edit. CECSA 1993
[10] [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