Está en la página 1de 87

1

Universidad Nstor Cceres Velsquez


Ingeniera de Sistemas
Generalidades
Ing. Max Jara Paredes
maxjarap@gmail.com
22
FORTRAN (FORmula TRANslation), Jhon Backus
Sin estructuras de datos como registros, apuntadores, tipos
enumerados
Sin recursividad
Los verdaderos programadores usan ensamblador
Compiladores Historia
GNU
Eiffel
2
33
Ayudan a comprender el funcionamiento de la mquina a
bajo nivel
Ayudan a comprender mejor el diseo e implementacin de
programas
Se aplican tcnicas aprendidas en semestres anteriores
Las tcnicas de su construccin son aplicables al desarrollo
software en general: anlisis lxico en formateadores y
editores de texto, lenguajes de consulta, transformacin de
formatos de ficheros
Aplicacin al procesamiento paralelo y distribuido
Compiladores Porqu estudiarlos?
GNU
Eiffel
3
44
MODELO LENGUAJE CARACTERISTICAS
Compilado Fortran,
Cobol, C,
C++, Pascal
Sintaxis rigurosa. Programas rpidos o de
tamao reducido. Explotacin de
instrucciones especiales del
microprocesador
Interpretado Lisp, Basic,
SQL
Desempeo lento. Ideal para desarrollos
rpidos (prototipos). Sintaxis ms relajada
y mayor libertad en la conversin de datos.
Pseudocompilado Java Transportabilidad absoluta. Requiere
mquina virtual para ser ejecutado. Mejor
desempeo que un programa interpretado
pero ms lento que uno compilado. La
sintaxis es rigurosa.
Ponencia presentada por el M. en C. Eduardo Ren Rodrguez vila en la Tercera Semana de Ingeniera IEEE; Abril 29,
1998; ENEP Aragn.
FUENTE
Compiladores Porqu estudiarlos?
GNU
Eiffel
4
55
Generalidades - Conceptos relacionados
Compiladores
Teora de algoritmos
Lenguajes de programacin
Arquitectura de computadores
Teora de lenguajes
Ingeniera del software
Matemticas discretas
GNU
Eiffel
5
66
Qu se entiende por comunicacin?
Cul es la finalidad de la comunicacin?
Cuales son los elementos comunes en una comunicacin?
Cmo el hombre se comunica con el hombre?
Cmo el hombre se comunica con el computador?
Qu se entiende por lenguaje?
Generalidades - Comunicacin
GNU
Eiffel
6
77
Cmo el hombre le indica al computador lo que debe
hacer?
En el marco de los conceptos: comunicacin y lenguaje, qu
papel juega la programacin?
Cules lenguajes de programacin conoce?
Qu sabe respecto a su nivel de abstraccin?
Lenguaje de programacin
GNU
Eiffel
7
88
Lenguaje programacin
tiene
Semntica
tiene
Significado
relacionada con
Sintxis
Aspecto
BNF
Traduccin
relacionada con
en formato
usada
Programa
de un
de un
Lenguaje de programacin - Concepto
GNU
Eiffel
8
99
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1949-1950
Primeros
ensambladores
simblicos
*
* ESCRIBE "HELLO, WORLD!" A DONDE SEA QUE HAYA SIDO APUNTADA SYSPRINT
* EN EL LANZADOR JCL
*
HELLOPRT START 0 INICIO
PRINT NOGEN RESERVA LAS MACRO EXPANSIONES
BEGIN SAVE (14,12) GUARDA LOS REGISTROS DE ENTRADA
LR 12,15 LOCALIZA....
USING HELLOPRT,12 ...DONDE ESTAMOS
ST 13,SAVE+4 GUARDA EL AREA ACTUAL DE DIRECCIONES
LA 11,SAVE APUNTA A UNA NUEVA AREA DE DIRECCIONES
ST 11,8(13) EN EL AREA ANTERIOR
LR 13,11 MUEVE EL AREA DE DIRECCIONES GUARDADA
*
*
DOPUT EQU *
PUT SYSPRINT,HELLOMSG ESCRIBE EL MENSAJE
B DOPUT EN UN CICLO SIN FIN
*
* CODIGO NECESARIO PARA REGRESAR EL CONTROL AL MVS
*
L 13,SAVE+4 OBTIENE AREA DE DIRECCIONES GUARDADA
RETURN (14,12),RC=0 AL SISTEMA OPERATIVO
*
* DEFINICIONES PARA AREA DE TRABAJO Y ARCHIVOS
*
SAVE DS 18F PARA GUARDAR AREA LOCAL
HELLOMSG DC C'Hello, world!!!'
SYSPRINT DCB DSORG=PS,MACRF=PM,DDNAME=SYSPRINT,RECFM=FA,LRECL=133,BLKSIZE=133
GNU
Eiffel
9
10 10
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1954-1957 Fortran
C
C Versin Fortran
C
Program Hello
implicit none
logical DONE
DO while (.NOT. DONE)
write(*,10)
END DO
10 format('Hello, world!!!')
END
GNU
Eiffel
10
11 11
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1959 Lisp
;
; Versin Lisp
;
(DEFUN HELLO-WORLD ()
(PRINT (LIST 'Hello, 'world!!!)))
GNU
Eiffel
11
12 12
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1959-1960 Cobol
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLOWORLD.
000300 DATE-WRITTEN. 02/05/96 21:04.
000400* AUTHOR EDUARDO RODRIGUEZ AVILA
000500 ENVIRONMENT DIVISION.
000600 CONFIGURATION SECTION.
000700 SOURCE-COMPUTER. RM-COBOL.
000800 OBJECT-COMPUTER. RM-COBOL.
000900
001000 DATA DIVISION.
001100 FILE SECTION.
001200
100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400 DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500 DISPLAY "Hello, world!!!" LINE 15 POSITION 1O.
100600 STOP RUN.
100700 MAIN-LOGIC/EXIT.
100800 EXIT.
GNU
Eiffel
12
13 13
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1960 Algol 60
;
; Versin Algol 60
;
BEGIN
FILE F (KIND=REMOTE);
EBCDIC ARRAY E [0:11];
REPLACE E BY "Hello, world!!!";
WHILE TRUE DO
BEGIN
WRITE (F, *, E);
  END;
END.
GNU
Eiffel
13
14 14
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1964 Basic
10 REM
20 REM Ejemplo
30 REM
40 print "Hello, world!!!"
50 goto 40
GNU
Eiffel
14
15 15
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1965 PL/I
/* Versin PL/1 */
Hello: procedure options(main);
declare My_String char(20) varying
initialize('Hello, world!!!');
put skip list(My_String);
end Test;
GNU
Eiffel
15
16 16
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1967 Simula
Begin
while 1 = 1 do begin
outtext ("Hello, world!!!");
outimage;
end;
GNU
Eiffel
16
17 17
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1971 Pascal
(* Ejemplo *)
Program Hello (input, output);
Begin
writeln('Hello, world!!!');
End
GNU
Eiffel
17
18 18
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1972 C
/* Ejemplo */
#include <stdio.h>
main()
{
for (;;)
{
printf ("Hello, world!!!\n");
}
}
GNU
Eiffel
18
19 19
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1972 Prolog
%
% Ejemplo
%
hello :-
printstring ("Hello, world!!!");
printstring ([])
printstring ([H|T]) :- put (H), printstring (T).
GNU
Eiffel
19
20 20
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
19719 Ada
--
-- Ejemplo
--
with Text_Io;
use Text_Io;
procedure Hello is
begin
put ("Hello, world!!!");
end Hello;
GNU
Eiffel
20
21 21
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1980 Modula 2
(* Ejemplo *)
MODULE PrintHelloWorld;
FROM InOut IMPORT WriteString, WriteLn;
BEGIN
WriteString('Hello world!');
WriteLn;
END PrintHelloWorld.
GNU
Eiffel
21
22 22
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1983 C++
// Ejemplo //
#include <iostream.h>
int main()
{
cout <<"Hello, world!!!" << '\n';
return 0;
}
GNU
Eiffel
22
23 23
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1996 Java
public class HelloWorld
{
public static void main (String[] args)
{
System.out.println("Hello, world!\n");
}
}
GNU
Eiffel
23
24 24
Select case expresin
case expresin:
proposicin
case expresin:
proposicin
case else:
proposicin
End select
1
if (expresin) then proposicin
2
Lenguaje de programacin - Gramtica
Gramtica
estudia
Morfologa Sintaxis
Oracin Palabras
forma estructura
Ejemplo
GNU
Eiffel
24
25 25
Alto nivel de
abstraccin
Bajo nivel de
abstraccin
Programa fuente
(Lenguaje fuente)
Programa objeto
(Lenguaje objeto)
Traductor
(Lenguaje de
Implementacin)
Semntica
Semntica
Traductor Esquema funcional
GNU
Eiffel
25
26 26
Lenguaje
programacin
Ejecucin de
programa
Intrprete
Traductor
Intrprete
Ensamblador
Compilador
Cargar, analizar y ejecutar
Fcil depuracin
Lentitud - bucles
Uso memoria
Traductor - Intrprete
Caractersticas
GNU
Eiffel
26
27 27
Lenguaje
ensamblador
Lenguaje
mquina
Ensamblador
Traductor
Intrprete
Ensamblador
Compilador
Traductor - Ensamblador
GNU
Eiffel
27
28 28
Lenguaje
programacin
Lenguaje
mquina
Compilador
Traductor
Intrprete
Ensamblador
Compilador
Optimizacin cdigo
Eficiencia cdigo resultante
Velocidad
Memoria
Traductor - Compilador
Caractersticas
GNU
Eiffel
28
29 29
Los Diagramas de TombStone o Maquinas T
Traductor - Notacin y simbologa
GNU
Eiffel
29
P
L
Programa
L S
M
Compilador
M
Mquina
L
M
Intrprete
30 30
P
L
ordenar
sparc
ordenar
x86
grafos
z80
Representacin Programa P escrito en un Lenguaje L (Cdigo ejecutable para la
mquina L)
Representacin de una Mquina ejecutando cdigo mquina M
M z80 x86 sparc
Traductor - Notacin y simbologa
GNU
Eiffel
30
Scalable Processor ARChitecture
RISC - Sun Microsystems
Zilog Z80 - Federico Faggin
Intel - 8080
31 31
Un programa corre en una mquina cuando est en el cdigo de la mquina.
L = M
P
L
M
grafos
z80
sparc
ordenar
x86
x86
Traductor Coherencia en los Diagramas
GNU
Eiffel
31
Todo se ejecuta sobre una mquina real
32 32
Traductor Coherencia en los Diagramas
GNU
Eiffel
32
Coherencia de interpretacin
L
M
M
P
L
Iguales
Iguales
L S
M
P
L
P
S
M
Iguales
Iguales
Iguales
Coherencia de Compilacin
33 33
S: lenguaje origen, T: lenguaje destino y L: lenguaje de implementacin para
una mquina particular
T S
L
x86 z80
sparc
x86 z80
x86
Traductor - Representacin
GNU
Eiffel
33
S
L
T
z80
sparc
x86
z80
x86
x86
34 34
z80: lenguaje origen, x86: lenguaje destino y x86: lenguaje de implementacin.
Estos 2 ltimos as mismos compilados?
Traductor - Representacin
GNU
Eiffel
34
z80
x86
x86
x86 z80
x86
Compilador
Z80
x86
Interpretes
x86
x86
Interpretes
x86 x86
Semntica
equivalente
Caer en una
ambigedad
x86
IF FOR THEN
FOR
ENDIF
35 35
z80: lenguaje origen, x86: lenguaje destino y x86: lenguaje de implementacin.
Estos 2 ltimos as mismos compilados?
Traductor - Representacin
GNU
Eiffel
35
z80
x86
x86
x86 z80
x86
Compilador
z80
x86
Nueva Simbologa?
36 36
Traductor implementado en lenguaje M de un programa escrito en un lenguaje S a
otro escrito en un lenguaje T
P
T
P
S
T S
M
M
Traductor - Representacin
GNU
Eiffel
36
37 37
El programa ordenar es traducido a cdigo de mquina para la
arquitectura Intel x86
ordenar
sparc
x86 sparc
x86
ordenar
x86
x86
x86
ordenar
x86
Traductor - Ejemplo
GNU
Eiffel
37
38 38
Traductor - Notacin y simbologa
GNU
Eiffel
38
39 39
Un traductor se ejecuta sobre una mquina M
solo si est escrito en cdigo mquina M.
El programa fuente debe escribirse en el
lenguaje fuente S del traductor.
El programa destino estar escrito en el
lenguaje destino T del traductor.
El programa destino debe ser
semnticamente equivalente al programa
fuente
Traductor - Consideraciones generales
GNU
Eiffel
39
40 40
ordenar
sparc
x86 z86
x86
x86
Traductor - Consideraciones generales
Ejemplo
GNU
Eiffel
40
41 41
Traductor sparc a 68000 y traductor 68000 a x86. Dos etapas
(n=2), dos traductores y un lenguaje intermedio (n-1)
Traductor - Traductores de n etapas
GNU
Eiffel
41
?
?
42 42
Compiladores Cruzados
GNU
Eiffel
42
Se denomina compilador cruzado (en ingls cross-compiler) a un
compilador que se ejecuta en una mquina pero el cdigo objeto es para
otra mquina.
Y la forma cruzada?
43 43
Compiladores Cruzados (modelo)
GNU
Eiffel
43
Si L
S
N se ejecuta a travs de S
M
M, entonces se tiene un compilador L
M
N ,
es decir un compilador de L a N que se ejecuta en M.
Ntese que el lenguaje de implementacin S del compilador L
S
N debe
ser el mismo que el lenguaje fuente del compilador ya existente S
M
M, y
a dems el lenguaje objeto M del compilador ya existente debe ser el
mismo que el lenguaje de implementacin de L
M
N.
Notacin en T
44 44
Compiladores Cruzados (BOOTSTRAPPING)
GNU
Eiffel
44
BOOTSTRAPPING (truco de arranque) se basa en utilizar las facilidades
que ofrece un lenguaje para compilarse a s mismo. Este puede plantear
la cuestin: Qu fue primero, el huevo o la gallina?
El lenguaje Pascal fue implementado por medio de varios
booststrapping logrando as, construir un compilador para el Pascal
completo, implementado por primera vez por Niklaus Wirth (1971)
45 45
Compiladores Cruzados (BOOTSTRAPPING-Ejm.)
GNU
Eiffel
45
Supngase que escribimos un compilador L
L
N, para un lenguaje L, escrito
en L para una mquina N.
Pero las tareas de desarrollo se llevan a cabo en otra mquina M, donde
existe un compilador L
M
M. En un primer paso se obtiene un compilador
cruzado L
M
N, que se ejecuta sobre M y produce el cdigo para N:
46 46
Compiladores Cruzados (BOOTSTRAPPING-Ejm.)
GNU
Eiffel
46
El resultado de la segunda compilacin es un compilador L
N
N que se
ejecuta en una mquina N, y produce un cdigo para N.
Sin embargo el compilador est construido en una mquina M
47 47
Notacin T (Ejercicios)
GNU
Eiffel
47
1. Se tiene dos compiladores que se ejecutan en la misma
mquina H, uno de los cuales traduce lenguaje A al
lenguaje B mientras que el otro traduce el lenguaje B al
lenguaje C, El resultado es?:
2. Sea A
H
B; Se pide construir un compilador en una
mquina M para que traduzca dicho lenguaje A en
Lenguaje B pero para una mquina K.
3. Se ha elaborado un traductor de un Lenguaje A (origen) a
un Lenguaje H (destino). Asumiendo que solo tenemos
Mquinas con arquitectura x86 y z80 respectivamente; es
posible construir un compilador para ambas
arquitecturas(inicio y final)? Sabiendo que la mquina
z80 predomina. Si es as; dibuje el modelo de maquinas.
Desarrollo: Notacion_T_desarrollado.odt
48 48
Compilador - Concepto
GNU
Eiffel
48
49 49
Front End
Back End
Tabla
smbolos
Manejo
errores
Compilador - Fases
Programa fuente
Anlisis lxico
Anlisis sintctico
Anlisis semntico
TOKENS
ARBOL SINTCTICO
ARBOL SEMANTICO
Generacin cdigo intermedio
Optimacin cdigo
Generacin cdigo
Programa objeto
CODIGO INTERMEDIO
CODIGO OPTIMADO
GNU
Eiffel
49
50 50
Programa fuente
Analizador lxico
Componentes
lxicos
Representacin intermedia
Analizador sintctico
Generador de
cdigo intermedio
Traductor dirigido
por la sintaxis
Compilador - Etapa inicial
GNU
Eiffel
50
51 51
Compilador de una pasada
Generacin de cdigo intermedio
Anlisis sintctico Anlisis lxico
Compilador Compilador de una pasada
GNU
Eiffel
51
52 52
PARSER
Analizador
Sintctico
RASTREADOR
Programa fuente
CHEQUEO TIPOS
GENERACIN CDIGO
Programa objeto
Fcil implementacin
Cdigo mediana eficiencia
Requerimiento extenso de memoria
Convenientes si es precisa velocidad
Compilador De una pasada
Caractersticas
GNU
Eiffel
52
53 53
PARSER
Analizador
Sintctico
RASTREADOR
Programa fuente
CHEQUEO TIPOS GENERACIN
CDIGO
Front End
Back End
Programa objeto
OPTIMADOR
CDIGO
GENERADOR CDIGO
Modularidad
Bajo requerimiento memoria
Mejora velocidad ejecucin (Compilador)
Compilador De dos pasadas
Caractersticas
GNU
Eiffel
53
54 54
Lex, Flex
Yacc, Bison
Assembler
Doxygen
Compilador - Herramientas
GNU
Eiffel
54
Construccin de un Traductor
Ms. Visual Basic .Net
(ver 2008 2010)
55 55
Elimina elementos
Tabulacin (\ t)
Fin de lnea (tomar en cuenta) (\ n)
Comentarios
Determina lexemas - tokens
Operadores = + - ( ) { } := < >
Palabras clave while, for, if
Constantes numricas 3, 0x34AF, -1.6e-19
Cadenas caracteres posicin, velocidad
Literal caracter x, y
Existen generadores
Lex, Flex
Compilador - Anlisis lxico
Caractersticas
Analizador lexicogrfico, escner, rastreador
GNU
Eiffel
55
56 56
Compilador Anlisis lxico
Tokenizacin
Token = ( Tipo, Valor )
Rastrea lneas de cdigo en busca de lexemas y los clasifica en
tokens, cada token tiene un Tipo y un Valor
GNU
Eiffel
56
57 57
B i e n v e n i d o s a l c u r s o c o m p i l a d o r e s
Compilador - Anlisis lxico
Adjetivo
Preposicin + artculo
c u r s o
Sustantivo
Sustantivo
B i e n v e n i d o s
a l
c o m p i l a d o r e s
Ejemplo
En lenguaje natural
GNU
Eiffel
57
58 58
Compilador Anlisis lxico
Ejemplo
En lenguaje de programacin
( Operador, = )
=
( Literal, 100000 )
1 0 0 0 0 0
( Identificador, n_dias )
n _ d i a s
( Operador, x )
x
( Identificador, total_h )
t o t a l _ h
( Puntuacin, ; )
;
GNU
Eiffel
58
t o t a l _ h = n _ d i a s x ; / / h o t e l 1 0 0 0 0 0
59 59
Componente lxico
Cadena caracteres
Significado
Identificador Palabra clave
Compilador Anlisis lxico
GNU
Eiffel
59
60 60
Compilador Anlisis lxico Ejercicio
GNU
Eiffel
60
Sea el siguiente Ejemplo:
X1 := a + bb * 12 ;
X2 := a / 2 + bb * 12 ;
Elaboremos los Tokens
Para algunos tipos:
-Identificador : Id
-Operacin : Op
-Literales : Lit
-Puntuacin : Punt
61 61
Compilador Anlisis sintctico
Ejemplo
t o t a l _ h = n _ d i a s x 1 0 0 0 0 0 ; / / h o t e l
Sentencia de asignacin
Expresin
Analizador gramatical o Parser
Agrupa tokens en frases gramaticales
Genera rbol sintctico o de parser
Existen generadores: yacc
total_h = n_dias x 1000; // Hotel
Caractersticas
GNU
Eiffel
61
Compilador Anlisis sintctico
Analizador gramatical o Parser
Construccin de un rbol sintctico rbol gramatical rbol
de estructura (GRAMATICA)
Consta de un conglomerado de Sentencias
Consta de un SentAsig (contiene una Expresin)
SentAsig Var := Expresin ;
Consta de una Expresin (
[1]
)
Expresin Expresin Trmino | Trmino
Consta de un Trmino (es un producto)
Trmino Trmino^Factor | Trmino*Factor | Trmino/Factor | Factor
Consta de un Factor (parte de un producto)
Factor (Expresin)
[1]
| Id
Indicaciones
GNU
Eiffel
63 63
Compilador Anlisis sintctico
Sentencia
SentAsig
Trmino
total_h = Expresin ;
Trmino x Factor
Factor
n_dias 1000
Recursividad
Ejemplo
total_h = n_dias x 1000; // Hotel
GNU
Eiffel
63
64 64
Compilador Anlisis sintctico
Ejemplo
X1 := a + bb * 12 ;
X2 := a / 2 + bb * 12 ;
GNU
Eiffel
64
Dibuje un rbol de anlisis gramatical para la lneas de
cdigo:
Compilador Anlisis sintctico
Sentencia
SentAsig
X2 = Expresin ;
GNU
Eiffel
Sentencia
Sentencia
Sentencia
SentAsig
X1 = Expresin ;
Expresin + Trmino
Trmino * Factor
Trmino
Factor
a
Factor
bb 12
Expresin
+ Trmino
Trmino / Factor
Trmino
Factor
a 12
Trmino * Factor
Factor
bb 12
66 66
Compilador Anlisis semntico
Determina significado (semntica) del programa
Funciones
Verificacin esttica del programa
Declaracin y uso de variables
Compatibilidad de tipos
Cantidad y tipo de parmetros en invocaciones
Dimensin de arreglos
Conversin de tipos cuando sea posible
Generacin representacin intermedia
rbol abstracto de sintaxis o rbol abstracto de estructura
Caractersticas
Chequeador de tipos
GNU
Eiffel
66
67 67
=
total_h x
n_dias 1000
Compilador Anlisis semntico
Ejemplo
total_h = n_dias x 1000; // Hotel
Ejercicio 2 Dibuje un rbol abstracto sintctico para la lnea de cdigo:
SI ( a > 5 ) ENTONCES z := z * 3
GNU
Eiffel
67
68 68
Compilador Anlisis semntico
Ejercicio 3
Dibuje un rbol abstracto sintctico para la lnea de cdigo:
X1 := a + bb * 12 ;
X2 := a / 2 + bb * 12 ;
GNU
Eiffel
68
SI ( A < B ) ENTONCES X := X + 1 SINO X := X - 1
Ejercicio 4
Ejercicio 5
Y en caso de Usar Condicionales anidadas o varias
condiciones (SELECT o SWITCH), como sera????
69 69
Compilador Anlisis semntico
Ejercicios
DESARROLLAR TALLER:
AAG_AAS.pdf
GNU
Eiffel
69
70 70
Compilador - Generador cdigo
intermedio
Representacin intermedia del cdigo (RI, sinnimos LI,CI)
Cdigo intermedio generado debe ser fcil de generar y de
traducir a instrucciones de procesador
Tipos de cdigo intermedio
Arboles abstractos de sintaxis
Grafos
Notacin posfija
Caractersticas
GNU
Eiffel
70
71 71
Compilador - Generador cdigo
intermedio
Grafos
GNU
Eiffel
71
Del problema anterior (Ejercicios 3): tenemos su RI
:=
X1 +
a
*
bb
12
:=
X2 +
/ *
bb
12
a
2
Optimizarlo
Para un RI Modificado
72 72
Compilador - Generador cdigo
intermedio
Grafos
GNU
Eiffel
72
Del problema anterior (Ejercicios 3): tenemos su RI
:=
X1 +
a
*
bb
12
:=
X2 +
/
a
2
Entonces el 2do rbol deja de comportase como es y se
transforma en un GRAFO
73 73
Compilador - Generador cdigo
intermedio
GNU
Eiffel
73
PROBLEMAS con expresiones
5+((1+2)*4)-3
Forma de entender el problema matemticamente
PROBLEMA:
y cmo entendrla
programablemente???
74 74
Compilador - Generador cdigo
intermedio
GNU
Eiffel
74
Expresiones infija y posfija
La Notacin Polaca Inversa, o notacin de
postfijo, (en ingls, Reverse polish notation, o
RPN), es un mtodo algebraico alternativo de
introduccin de datos. Su nombre viene por
analoga con la relacionada notacin polaca,
una notacin de prefijo introducida en 1920
por el matemtico polaco Jan Lukasiewicz
75 75
Compilador - Generador cdigo
intermedio
GNU
Eiffel
75
Expresiones infija y posfija
Del problema anterior la notacin matemtica se entiende por
expresiones INFIJAS
Pero una mquina no tiene nuestra lgica por tanto debe
darse una apoyo algortmico y es transformar dicha expresin
INFIJA a POSTFIJA
Por que????
5+((1+2)*4)-3
76 76
Compilador - Generador cdigo
intermedio
GNU
Eiffel
76
Expresiones infija y posfija
COMPLEJIDAD Matemtica: Los parntesis ( )
COMPLEJIDAD Operacional: La aritmtica y la lgica
SOLUCIN:
Crear un algoritmo que me permita cambiar
expresiones INFIJAS a POSTFIJAS, para luego estas
evaluarlas con otro algortmo
77 77
GNU
Eiffel
77
Pseudocdigo: Conversin infija a posfija
ALGORITMO Infija_PostFija
INICIO
Ingresar expresin Infija a lista E
Crear lista de salida L, y TDA Pila P
MIENTRAS Pto E != EOF y no ERROR HACER
SEGUN SEA E
CASO E si es nmero
Insertar dato de E al final de L
CASO E si es variable
Insertar dato de E al final de L
CASO E si es PaIZQ
Insertar dato de E a P
CASO E si es PaDER
. . .
78 78
GNU
Eiffel
78
Pseudocdigo: Conversin infija a posfija
CASO E si es PaDER
MIENTRAS P no vacia Y cima != PaIZQ HACER
Extraer elemento de P
Insertar al final de L
FINMIENTRAS
SI cima = PaIZQ ENTONCES Eliminar dato de P
SINO Error detectado
FINSI
CASO E si es un operador
MIENTRAS P no vacia Y cima != PaIZQ Y
Prioridad_Operador (cima) >= Prioridad_Operador (E) HACER
Extraer elemento de P
Insertar al final de L
FINMIENTRAS
Insertar E en P
FINSEGUN
Pto E sig
FINMIENTRAS
. . .
79 79
GNU
Eiffel
79
Pseudocdigo: Conversin infija a posfija
MIENTRAS P no vacia HACER
Extraer elemento de P
Insertar al final de L
FINMIENTRAS
Eliminar P
FIN
NOTA: Debe consignarse la prioridad de los operadores tal como:
80 80
GNU
Eiffel
80
Pseudocdigo: Conversin infija a posfija
Desarrollar graficamente el manejo del algoritmo anterior
para los siguientes problemas:
1) A* B / ( A+ C )
2) 4 * ( 5 + 6 - ( 8 / 2 ^ 3 ) 7 ) - 1
Desarrollo de estos problemas en Ejercicios/notacin InFija y AAS desarrollado.docx
81 81
INFIJA
POSFIJA
5+((1+2)*4)-3
5 1 2 + 4 * + 3 -
Compilador - Generador cdigo
intermedio
Expresiones infija y posfija
GNU
Eiffel
81 Explicacin en Ejercicios/notacin InFija y AAS desarrollado.docx
82 82
INFIJA
POSFIJA
((A-C)*D)/(A+(B+D))
Compilador - Generador cdigo
intermedio
Ejercicios infija y posfija
GNU
Eiffel
82
Y Si lo expresramos en forma de rbol
Notacin PostFija: Su recorrido es Izquierda - Derecha - Raz
83 83
POSFIJA
Compilador - Generador cdigo
intermedio
Ejercicios
GNU
Eiffel
83
Para su construccin nos guiamos de la notacin Post Fija pero esta
debe ser lea de derecha a izquierda y: IDR ahora RDI
AC-D*ABD++/
Explicacin en Ejercicios/notacin InFija y AAS desarrollado.docx
84 84
Compilador - Generador cdigo
intermedio
Ejercicios
GNU
Eiffel
84
4 / ( 14 + ( 7 * 3 ) 2 )
POSFIJA
POSFIJA
4 14 7 3 * + 2 - / AAS
-1 b * b 2 ^ 4 a * c * - 1 2 / ^ + 2 / a *
85 85
Ejercicios
DESARROLLAR TALLER:
Notacion_POSTFIJA_PRIO_AAS.pdf
GNU
Eiffel
85
Compilador - Generador cdigo
intermedio
86 86
Generacin de cdigo
Caractersticas
Implica una asignacin de registros y memoria
La notacin PostFija ayuda a poder manejar operaciones y
operandos mediante la estructura de datos: PILA (Memoria)
El uso de parntesis se descarta haciendo que la
complejidad de una operacin sea ms fcil de manejar en la
memoria.
Trabajar directamente con registros y memorias garantiza que
las operaciones se efecten mucho ms rpido
GNU
Eiffel
86
87 87
Estructura que contiene para almacenamiento y acceso:
Identificador
Atributos de identificador
Realizan dos operaciones: la insercin y la bsqueda.
En la operacin de insercin, esta se realiza cuando se
procesa una declaracin.
En la bsqueda, se detectan los identificadores que no
hayan sido declarados previamente, emitiendo un mensaje
de error.
Tabla de smbolos
Caractersticas
GNU
Eiffel
87

También podría gustarte