Presentaci - PowerPoint PPT Presentation

About This Presentation
Title:

Presentaci

Description:

Title: Presentaci n de PowerPoint Author: Eridan Otto Last modified by: Eridan Otto Created Date: 5/7/2001 12:40:39 PM Document presentation format – PowerPoint PPT presentation

Number of Views:23
Avg rating:3.0/5.0
Slides: 15
Provided by: Erid153
Category:

less

Transcript and Presenter's Notes

Title: Presentaci


1
Compiladores e intérpretes Generación de código
intermedio II Profesor Eridan Otto
2
Generación de código intermedio II
  • Uso de notación polaca
  • En parser desendente recursivo

3
Compiladores e intérpretes
Generación de código intermedio IIUso de
notación polaca
  • El código se genera cuando se encuentra el
    operador
  • Ejemplo
  • Pila Entrada Godigo Generado
  • SABC
  • S ABC
  • SA BC
  • SAB C
  • SABC (,B,C,T1)
  • SA T1 (,A,T1,T2)
  • ST2 (,T2, ,S)
  • (end,, ,)

4
Compiladores e intérpretes
Generación de código intermedio IIEn parser
desendente recursivo
  • Se pueden utilizar las rutinas de las
    analizadores sintácticos desendentes para ir
    creando Arboles de Sintaxis Abstracta (ASA), a
    partir del código. Recordar un no terminal es un
    procedimiento.
  • Supongamos que se genera con el análisis un arbol
    binario con tres campos por nodo
  • Info, información del nodo
  • Izda, puntero al subarbol izquierdo
  • Dcha, puntero al subárbol derecho
  • Se pueden definir las funciones
  • CreaNodo crea nodo del árbol
  • CreaHoja crea hoja del árbol
  • Se añade un parámetro a cada procedimiento que
    genera el árbol, el cual contiene la referencia
    al árbol hasta el momento
  • Una vez el árbol terminado, sepuede recorrer y
    generar grafos dirigidos para optimizar las
    expresiones matemáticas

5
Compiladores e intérpretes
Generación de código intermedio IIEn parser
desendente recursivo
  • Ejemplo, código para producción E
    identificadorE
  • Regla semántica CreaHoja(identificador,id.punter
    o)E.nodo
  • Funcion E(VAR arbolarbol)
  • cGetToken
  • IF cidentificador THEN
  • BEGIN
  • nodo CreaHoja(identificador,token.puntero(
    c))
  • c GetToken
  • if c THEN
  • BEGIN

  • arbolCreaNodo(,arbol,NIL)

  • E(nodo.dcha(arbol))
  • ELSE
  • error()
  • ELSE
  • error()
  • END

6
Compiladores e intérpretes
Generación de código intermedio IIEn parser
desendente recursivo
  • Definición dirigida por sintaxis para construir
    un ASA de una gramática para expresiones
    matemáticas.
  • Por ejemplo, al analizar a-42c se genera el
    siguiente árbol de sintáxis abstracta
  • En líneas punteadas aparece el arbol sintáctico
    con nodos etiquetados E y T usando
  • atributo sintetizado .nodo, como puntero a un
    nodo del árbol ASA
  • Para las producciones Tid y Tnum, hay un
    puntero a una hoja identificador o
  • valor numérico

7
Compiladores e intérpretes
Generación de código intermedio IIEn parser
desendente recursivo
  • Ejemplo a-42c

E.nodo
E.nodo
T.nodo


E.nodo


T.nodo
id
T.nodo
T.nodo
-
num
id
2
-
id
num
Entrada id c
id
4

Entrada id a

c
-
2
Ejemplo a-42c, ASA
a
4
8
Compiladores e intérpretes
Generación de código intermedio IIEn parser
desendente recursivo
  • Ejercicio derivar de aa(b-c)(b-c)d su ASA y
    optimizar




-
a

d
c
b
a
-
c
b
  • optimizando, generando
  • Un grafo dirigico acíclico




d
-
c
a
b
9
Compiladores e intérpretes
Generación de código intermedio IIGeneración de
cuartetos
  • Asignación y expresiones matemáticas con cuartetos

10
Compiladores e intérpretes
Generación de código intermedio IIGeneración de
cuartetos
  • Asignación y expresiones matemáticas con
    cuartetos, Ejercicio, derivar los cuartetos a
    partir de la sintaxis para a bcd

E.codigo(,b,c,t1) (,t1,d,t2) (,t2,a,)
S
E.valort2
E
id

E.codigo(,b,c,t1) (,t1,d,t2)
E.valort1

E
E
E.codigo(,b,c,t1)
E.valord
E.codigo
E.valorb
id
E
E

E.codigo
E.valorc
E.codigo
id
id
11
Compiladores e intérpretes
Generación de código intermedio IIGeneración de
cuartetos
  • Asignación y expresiones booleanas.
  • Para el código intermedio se supondrá valor 0
    representa a falso y valor 1 reprenta a
    verdadero.
  • Representación de una expresión booleana para los
    operadores lógicos, con el flujo de control del
    código intermedio. Por ejemplo, dadas las
    expresiones E1 or E2 ,si se determina que E1 es
    verdadera, la expresión completa es verdadera,
    sin nececitar evaluar E2 . And al contrario
    requiere de E1 fala para ser toda la expesión
    falsa. Agregando a las definiciones de asignación

12
Compiladores e intérpretes
Generación de código intermedio IIGeneración de
cuartetos
  • Asignación y expresiones booleanas.

EoE1 and E2
Eo.truenewlabel Eo.falsenewlabel Eo.salenewl
abel Eo.valornewtemp Eo.codigo Gen(relop, id1
, id2, Eo.true) Gen(GOTO, ,, Eo.false) Gen(LABEL,
, Eo.true) Gen(, 1 , , Eo.valor) Gen(GOTO, ,,
Eo.sale) Gen(LABEL, , Eo.false) Gen(, 0 , ,
Eo.valor) Gen(LABEL, , Eo.sale)
Eoid1 relop id2
relop lt gt lt gt ltgt
13
Compiladores e intérpretes
Generación de código intermedio IIGeneración de
cuartetos
  • Ejercicio, genere código intermedio para agtb or
    cltd
  • Sentencias de control de flujo , las expresiones
    booleanas se definieron en el contexto de su
    utilidad para las definiciones condicionales y de
    ciclo
  • EjercicioEscriba las reglas semánticas para IF
    E THEN S, de manera de
  • generar los cuartetos correspondientes

14
Compiladores e intérpretes
Generación de código intermedio IIGeneración de
cuartetos
  • Sentencia de repetición
  • Escriba las reglas semánticas para REPEAT S
    UNTIL E,
  • de manera de generar los cuartetos
    correspondientes
Write a Comment
User Comments (0)
About PowerShow.com