Guia 8 2015-I (Generacion de Codigo Intermedio)

download Guia 8 2015-I (Generacion de Codigo Intermedio)

of 17

description

Esto se usa en el curso de Lenguajes y Compiladores

Transcript of Guia 8 2015-I (Generacion de Codigo Intermedio)

  • 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