La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Compiladores e intérpretes Generación de código intermedio II Profesor: Eridan Otto."— Transcripción de la presentación:

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 Generación de código intermedio II:Uso de notación polaca Compiladores e intérpretes –El código se genera cuando se encuentra el operador –Ejemplo: Pila EntradaGodigo Generado $SABC*+:=$ $SABC *+:=$(*,B,C,T1) $SAT1 +:=$(+,A,T1,T2) $ST2 :=$(:=,T2,,S) $ $(end,,,)

4 Generación de código intermedio II:En parser desendente recursivo Compiladores e intérpretes –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 –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 Generación de código intermedio II:En parser desendente recursivo

6 Compiladores e intérpretes –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 Generación de código intermedio II:En parser desendente recursivo

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

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

9 Compiladores e intérpretes –Asignación y expresiones matemáticas con cuartetos Generación de código intermedio II:Generación de 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 E EE E + * id E.valor=b E.codigo=E.valor=c E.codigo= E.valor=t1 E.codigo=(*,b,c,t1) S id := E.valor=d E.codigo= E.valor=t2 E.codigo=(*,b,c,t1) (+,t1,d,t2) E.codigo=(*,b,c,t1) (+,t1,d,t2) (:=,t2,a,)

11 Compiladores e intérpretes –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 E 1 or E 2,si se determina que E 1 es verdadera, la expresión completa es verdadera, sin nececitar evaluar E 2. And al contrario requiere de E 1 fala para ser toda la expesión falsa. Agregando a las definiciones de asignación: Generación de código intermedio II:Generación de cuartetos

12 Compiladores e intérpretes –Asignación y expresiones booleanas. Generación de código intermedio II:Generación de cuartetos Eo:=E 1 and E 2 Eo:=id 1 relop id 2 Eo.true:=newlabel Eo.false:=newlabel Eo.sale:=newlabel Eo.valor:=newtemp Eo.codigo:= Gen(relop, id 1, id 2, 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) relop := | = |= | <>

13 Compiladores e intérpretes –Ejercicio, genere código intermedio para: a>b or c

14 Compiladores e intérpretes –Sentencia de repetición Generación de código intermedio II:Generación de cuartetos – Escriba las reglas semánticas para REPEAT S UNTIL E, de manera de generar los cuartetos correspondientes


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

Presentaciones similares


Anuncios Google