1 / 14

Compiladores e intérpretes Generación de código intermedio II Profesor: Eridan Otto

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

yael
Download Presentation

Compiladores e intérpretes Generación de código intermedio II Profesor: Eridan Otto

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Compiladores einté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 II:Uso 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 II:En 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 II:En parser desendente recursivo • Ejemplo, código para producción E::= identificador:=E’ • Regla semántica CreaHoja(‘identificador’,id.puntero):=E’.nodo • Funcion E(VAR arbol:arbol) • c:=GetToken • IF c=‘identificador’ THEN • BEGIN • nodo:= CreaHoja(‘identificador’,token.puntero(c)) • c:= GetToken • if c= ‘:=‘ THEN • BEGIN • arbol:=CreaNodo(‘:=‘,arbol,NIL) • E’(nodo.dcha(arbol)) • ELSE • error() • ELSE • error() • END

  6. Compiladores e intérpretes Generación de código intermedio II:En 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-4+2+c 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 T::=id y T::=num, hay un puntero a una hoja identificador o • valor numérico

  7. Compiladores e intérpretes Generación de código intermedio II:En parser desendente recursivo • Ejemplo: a-4+2+c E.nodo E.nodo T.nodo + + E.nodo + + T.nodo id T.nodo T.nodo - num 2 id - id num Entrada id c id 4 + Entrada id a + c - 2 Ejemplo: a-4+2+c, ASA a 4

  8. Compiladores e intérpretes Generación de código intermedio II:En parser desendente recursivo • Ejercicio: derivar de a+a*(b-c)+(b-c)*d su ASA y optimizar + * + - a * d c b a - c b + • optimizando, generando • Un grafo dirigico acíclico * + * d - a c b

  9. Compiladores e intérpretes Generación de código intermedio II:Generación de cuartetos • Asignación y expresiones matemáticas con cuartetos

  10. Compiladores e intérpretes Generación de código intermedio II:Generación de cuartetos • Asignación y expresiones matemáticas con cuartetos, Ejercicio, derivar los cuartetos a partir de la sintaxis para a:= b*c+d E.codigo=(*,b,c,t1) (+,t1,d,t2) (:=,t2,a,) S E.valor=t2 E id := E.codigo=(*,b,c,t1) (+,t1,d,t2) E.valor=t1 + E.codigo=(*,b,c,t1) E E E.valor=d E.codigo=‘’ E.valor=b id E * E E.codigo=‘’ E.valor=c E.codigo=‘’ id id

  11. Compiladores e intérpretes Generación de código intermedio II:Generació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 II:Generación de cuartetos • Asignación y expresiones booleanas. Eo:=E1 ‘and’ E2 Eo.true:=newlabel Eo.false:=newlabel Eo.sale:=newlabel Eo.valor:=newtemp 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) Eo:=id1 relop id2 relop := < | > | <= |>= |= | <>

  13. Compiladores e intérpretes Generación de código intermedio II:Generación de cuartetos • Ejercicio, genere código intermedio para: a>b or c<d • Sentencias de control de flujo , las expresiones booleanas se definieron en el contexto de su utilidad para las definiciones condicionales y de ciclo • Ejercicio:Escriba 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 II:Generación de cuartetos • Sentencia de repetición • Escriba las reglas semánticas para REPEAT S UNTIL E, • de manera de generar los cuartetos correspondientes

More Related