87
1 Universidad N éstor Cáceres Velásquez Ingeniería de Sistemas Generalidades Ing. Max Jara Paredes [email protected]

01 Comp General 2012

Embed Size (px)

Citation preview

  • 1Universidad Nstor Cceres VelsquezIngeniera de Sistemas

    Generalidades

    Ing. Max Jara Paredes

    [email protected]

  • 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