01 Comp General 2012
Transcript of 01 Comp General 2012
-
1Universidad Nstor Cceres VelsquezIngeniera de Sistemas
Generalidades
Ing. Max Jara Paredes
-
22
FORTRAN (FORmula TRANslation), Jhon Backus
Sin estructuras de datos como registros, apuntadores, tiposenumerados
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 debehacer?
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
Programade un
de un
Lenguaje de programacin - Concepto
GNU
Eiffel
8
-
99
Lenguaje de programacin - EjemplosAo 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
-
1010
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
-
1111
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1959 Lisp
;
; Versin Lisp
;
(DEFUN HELLO-WORLD ()
(PRINT (LIST 'Hello, 'world!!!)))
GNU
Eiffel
11
-
1212
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
-
1313
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
-
1414
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
-
1515
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
-
1616
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1967 Simula
Begin
while 1 = 1 do begin
outtext ("Hello, world!!!");
outimage;
end;
GNU
Eiffel
16
-
1717
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1971 Pascal
(* Ejemplo *)
Program Hello (input, output);
Begin
writeln('Hello, world!!!');
End
GNU
Eiffel
17
-
1818
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1972 C
/* Ejemplo */
#include
main()
{
for (;;)
{
printf ("Hello, world!!!\n");
}
}
GNU
Eiffel
18
-
1919
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
-
2020
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
-
2121
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
-
2222
Lenguaje de programacin - Ejemplos
Ao Lenguaje Descripcin
1983 C++
// Ejemplo //
#include
int main()
{
cout
-
2323
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
-
2424
Select case expresin
case expresin:
proposicin
case expresin:
proposicin
case else:
proposicin
End select
1
if (expresin) then proposicin2
Lenguaje de programacin - Gramtica
Gramtica
estudia
Morfologa Sintaxis
OracinPalabras
forma estructura
Ejemplo
GNU
Eiffel
24
-
2525
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
-
2626
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
-
2727
Lenguaje
ensamblador
Lenguaje
mquina
Ensamblador
Traductor
Intrprete
Ensamblador
Compilador
Traductor - Ensamblador
GNU
Eiffel
27
-
2828
Lenguaje
programacin
Lenguaje
mquina
Compilador
Traductor
Intrprete
Ensamblador
Compilador
Optimizacin cdigo
Eficiencia cdigo resultante
Velocidad
Memoria
Traductor - Compilador
Caractersticas
GNU
Eiffel
28
-
2929
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
-
3030
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 MicrosystemsZilog Z80 - Federico Faggin
Intel - 8080
-
3131
Un programa corre en una mquina cuando est en el cdigo de la mquina.
L = M
P
L
Mgrafos
z80
sparc
ordenar
x86
x86
Traductor Coherencia en los Diagramas
GNU
Eiffel
31
Todo se ejecuta sobre una mquina real
-
3232
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
-
3333
S: lenguaje origen, T: lenguaje destino y L: lenguaje de implementacin para
una mquina particular
TS
L
x86z80
sparc
x86z80
x86
Traductor - Representacin
GNU
Eiffel
33
SLT
z80sparcx86
z80x86x86
-
3434
z80: lenguaje origen, x86: lenguaje destino y x86: lenguaje de implementacin.
Estos 2 ltimos as mismos compilados?
Traductor - Representacin
GNU
Eiffel
34
z80x86x86
x86z80
x86
Compilador
Z80
x86
Interpretes
x86
x86
Interpretes
x86 x86
Semntica
equivalente
Caer en una
ambigedadx86IF FOR THEN
FOR
ENDIF
-
3535
z80: lenguaje origen, x86: lenguaje destino y x86: lenguaje de implementacin.
Estos 2 ltimos as mismos compilados?
Traductor - Representacin
GNU
Eiffel
35
z80x86x86
x86z80
x86
Compilador
z80 x86
Nueva Simbologa?
-
3636
Traductor implementado en lenguaje M de un programa escrito en un lenguaje S a
otro escrito en un lenguaje T
P
T
P
S TS
M
M
Traductor - Representacin
GNU
Eiffel
36
-
3737
El programa ordenar es traducido a cdigo de mquina para la
arquitectura Intel x86
ordenar
sparc x86sparc
x86
ordenar
x86
x86x86
ordenar
x86
Traductor - Ejemplo
GNU
Eiffel
37
-
3838
Traductor - Notacin y simbologa
GNU
Eiffel
38
-
3939
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
-
4040
ordenar
sparc x86z86
x86
x86
Traductor - Consideraciones generales
Ejemplo
GNU
Eiffel
40
-
4141
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
? ?
-
4242
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?
-
4343
Compiladores Cruzados (modelo)
GNU
Eiffel
43
Si LSN se ejecuta a travs de SMM, entonces se tiene un compilador LMN ,
es decir un compilador de L a N que se ejecuta en M.
Ntese que el lenguaje de implementacin S del compilador LSN debe
ser el mismo que el lenguaje fuente del compilador ya existente SMM, y
a dems el lenguaje objeto M del compilador ya existente debe ser el
mismo que el lenguaje de implementacin de LMN.
Notacin en T
-
4444
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)
-
4545
Compiladores Cruzados (BOOTSTRAPPING-Ejm.)
GNU
Eiffel
45
Supngase que escribimos un compilador LLN, 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 LMM. En un primer paso se obtiene un compilador
cruzado LMN, que se ejecuta sobre M y produce el cdigo para N:
-
4646
Compiladores Cruzados (BOOTSTRAPPING-Ejm.)
GNU
Eiffel
46
El resultado de la segunda compilacin es un compilador LNN que se
ejecuta en una mquina N, y produce un cdigo para N.
Sin embargo el compilador est construido en una mquina M
-
4747
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 AHB; 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
-
4848
Compilador - Concepto
GNU
Eiffel
48
-
4949
Front End
Back End
Tabla
smbolos
Manejo
errores
Compilador - FasesPrograma 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
-
5050
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
-
5151
Compilador de una pasada
Generacin de cdigo intermedio
Anlisis sintcticoAnlisis lxico
Compilador Compilador de una pasada
GNU
Eiffel
51
-
5252
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
-
5353
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
-
5454
Lex, Flex
Yacc, Bison
Assembler
Doxygen
Compilador - Herramientas
GNU
Eiffel
54
Construccin de un Traductor
Ms. Visual Basic .Net
(ver 2008 2010)
-
5555
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 lxicoCaractersticas Analizador lexicogrfico, escner, rastreador
GNU
Eiffel
55
-
5656
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
-
5757
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
-
5858
Compilador Anlisis lxicoEjemplo 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 l1 0 0 0 0 0
-
5959
Componente lxico
Cadena caracteres
Significado
Identificador Palabra clave
Compilador Anlisis lxico
GNU
Eiffel
59
-
6060
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
-
6161
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 sintcticoAnalizador 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
-
6363
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
-
6464
Compilador Anlisis sintcticoEjemplo 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 sintcticoSentencia
SentAsig
X2 = Expresin ;
GNU
Eiffel
Sentencia Sentencia
SentenciaSentAsig
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
-
6666
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
-
6767
=
total_h x
n_dias 1000
Compilador Anlisis semnticoEjemplo 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
-
6868
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 - 1Ejercicio 4
Ejercicio 5 Y en caso de Usar Condicionales anidadas o varias
condiciones (SELECT o SWITCH), como sera????
-
6969
Compilador Anlisis semntico
Ejercicios DESARROLLAR TALLER:
AAG_AAS.pdf
GNU
Eiffel
69
-
7070
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
CaractersticasGNU
Eiffel
70
-
7171
Compilador - Generador cdigo
intermedio
GrafosGNU Eiffel
71
Del problema anterior (Ejercicios 3): tenemos su RI
:=
X1 +
a *
bb 12
:=
X2 +
/ *
bb 12a 2
Optimizarlo Para un RI Modificado
-
7272
Compilador - Generador cdigo
intermedio
GrafosGNU 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
-
7373
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???
-
7474
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
-
7575
Compilador - Generador cdigo
intermedio
GNU
Eiffel
75
Expresiones infija y posfija
Del problema anterior la notacin matemtica se entiende porexpresiones INFIJAS
Pero una mquina no tiene nuestra lgica por tanto debedarse una apoyo algortmico y es transformar dicha expresinINFIJA a POSTFIJA
Por que????
5+((1+2)*4)-3
-
7676
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 cambiarexpresiones INFIJAS a POSTFIJAS, para luego estas
evaluarlas con otro algortmo
-
7777
GNU
Eiffel
77
Pseudocdigo: Conversin infija a posfija
ALGORITMO Infija_PostFija
INICIO
Ingresar expresin Infija a lista ECrear lista de salida L, y TDA Pila PMIENTRAS 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
. . .
-
7878
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 sigFINMIENTRAS
. . .
-
7979
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:
-
8080
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
-
8181
INFIJA
POSFIJA
5+((1+2)*4)-3
5 1 2 + 4 * + 3 -
Compilador - Generador cdigo
intermedio
Expresiones infija y posfijaGNU
Eiffel
81Explicacin en Ejercicios/notacin InFija y AAS desarrollado.docx
-
8282
INFIJA
POSFIJA
((A-C)*D)/(A+(B+D))
Compilador - Generador cdigo
intermedioEjercicios infija y posfija
GNU
Eiffel
82
Y Si lo expresramos en forma de rbol
Notacin PostFija: Su recorrido es Izquierda - Derecha - Raz
-
8383
POSFIJA
Compilador - Generador cdigo
intermedioEjercicios
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
-
8484
Compilador - Generador cdigo
intermedioEjercicios
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 *
-
8585
Ejercicios
DESARROLLAR TALLER:
Notacion_POSTFIJA_PRIO_AAS.pdf
GNU
Eiffel
85
Compilador - Generador cdigo
intermedio
-
8686
Generacin de cdigoCaractersticas
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
-
8787
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 seprocesa una declaracin.
En la bsqueda, se detectan los identificadores que nohayan sido declarados previamente, emitiendo un mensaje
de error.
Tabla de smbolosCaractersticas
GNU
Eiffel
87