Professional Documents
Culture Documents
Cdigo Intermedio
Lecciones 1 y 2
- 1.1 -
Optimizacin
Representacin de fcil modificacin
Compiladores transportables
PASCAL /P-Code JAVA
Interpretacin rpida
OAKLisp CLISP
Debug
Intrpretes de C
- 1.2 -
Notacin polaca Inversa (postfija) Se utiliza principalmente para la representacin de expresiones aritmticas Expresin a notacin polaca inversa
Algoritmo
Representar la expresin en forma de rbol sintctico Recorrer el rbol en postorden
Ejemplo: a+b*c-d + a * d
Cdigo: a b c * + d -
- 1.3 -
No se puede traducir a
<cond> <instr1> <instr2> If
- 1.4 -
Optimizacin
Es difcil de reordenar ya que hay que considerar el contenido de la pila
Interpretacin rpida
Es muy fcil de interpretar ya que solo necesita una pila
Transportable:
Si, ya que todos los procesadores implementan una pila.
- 1.5 -
Control de flujo:
IF X>Y THEN Z=X ELSE Z=Y+1 1. >, X, Y 2. Saltar si falso, (1), 5 3. =, Z, X 4. Saltar, , 7 5. +, Y, 1 6. =, Z, (5) 7. ...
Problema: La optimizacin supone mover tripletas y hay que recalcular las referencias
- 1.6 -
Tripletas Indirectas Tripletas indirectas. Solucionan el problemas de la reordenacin mediante indireccin Ejemplo:
Fuente:
A=B+C*D/E F=C*D
Operaciones
1. (1) 2. (2) 3. (3) 4. (4) 5. (1) 6. (5)
Tripletas
(1) *, C, D (2) /, (1), E (3) +, B (2) (4) =, A, (3) (5) =, F, (1)
- 1.7 -
Cudruplas Cudrupla:
<operacin>, <operando1>, <operando2>, <resultado>
Ejemplo:
(A+B)*(C+D)-E +, A, B, T1 +, C, D, T2 *, T1, T2, T3 -, T3, E, T4
Las cudruplas facilitan la aplicacin de muchas optimizaciones, pero hay que tener un algoritmo para la reutilizacin de las variables temporales (reutilizacin de registros del procesador).
- 1.8 -
Fcil optimizacin:
El rbol representa directamente la estructura del lenguaje fuente, y por tanto, las modificaciones que haramos en el fuente son fciles de realizar en el rbol. Como el rbol representa la estructura del lenguaje es fcil aplicarle las propiedades de este para optimizar.
Propiedad conmutativa. Propiedad asociativa. etc.
Compiladores II (96-97 12/10/2013 19:38) - 1.9 -
Ejemplos de rbol en CoSeL Un rbol sintctico esta formado por las estructuras apply con el contenido:
Funcin: operador raz Arg(0), Arg(1)... Argumentos del operador Ejemplo:
VerArbol(`( Fun f(n)=> if (n<=2) 1 else f(n-2)+f(n-1) )) Fun +- [] +- => +- f | +- n +- If_Else +- <= | +- n | +- 2 +- 1 +- + +- f | +| | +- f +-
+- n +- 2 +- n +- 1
- 1.10 -
- 1.11 -
- 1.12 -
; +| | | | +-
b c
d * +- a +- 5 e + +- c +- b
rbol de la entrada ; +- = | +- a | +- + | +- b | +- c +- ; +- = | +- d | +- * | +- + | | +- b | | +- c | +- 5 +- = +- e +- + +- c +- b
- 1.14 -
Construcciones equivalentes
[1,2,3]==cons(1,cons(2,cons(3,[]))) Cons(h,t)==h::t [1,2,3]==1::2::3::[] [h1,h2...|t]==h1::h2::...::t
Operaciones
[1,2,3].Head==1 [1,2,3].Tail==[2,3] [1,2,3].Head(0)==1 [1,2,3].Head(1)==2 [1,2]++[2,3]==[1,2,2,3] (append) [1,2] | [2,3]==[1,2,3] (unin) [1,2] & [2,3]==[2] (interseccin) [1,2] - [2,3]==[1] (resta)
- 1.15 -
rboles Estructura
Nodo del arbol
Type apply(function,arg...)
Hoja
Cualquier tipo de datos que no sea apply
Construccin
rbol en forma de literal
`(1+2+A) apply(\+,apply(\+,1,2),A) == 1+2+A
- 1.16 -
No tpicas
for (generadores) instruccin Search (generadores) instruccin Search (generadores) sentencia else sentencia Found (generadores) sentencia
Generadores
variable variable variable variable variable <- lista <- vector : Index <- apply : Index <- mnimo .. mximo <-~ mnimo .. mximo
- 1.17 -
Cdigo Enhebrado Es una representacin til para la interpretacin independiente de mquina. Cdigo enhebrado directo: El cdigo es una secuencia de direcciones de rutinas que implementan las instrucciones.
Algunas rutinas son estndar (Add), pero otras las ha de generar el compilador para que puedan tratar los operandos (Push). Estas ltimas limitan la transportabilidad.
funciones
cdigo Push B
Push C Contador de programa virtual Bucle de interpretacin For (;;) (*pc++)();
Compiladores II (96-97 12/10/2013 19:38) - 1.18 -
Add Pop B
argumento argumento
argumento
Funcin
void pushLiteral() { *--SP=PC[1]; PC=PC+2; }
- 1.19 -
Cdigo para mquinas abstractas Un objetivo de los compiladores es ser adaptables y portables a nuevas mquinas. Una de las formas de conseguirlo es con la generacin de cdigo para mquinas abstractas. Aplicacines:
Modelos de compilacin
WAM modelo de compilacin de PROLOG G-machine modelo de compilacin de lenguajes funcionales con evaluacin perezosa. FAM modelo de compilacin de lenguajes funcionales con evaluacin estricta.
Compiladores portables
Compilador ha cdigo intermdio + intrprete. Compilador ha cdigo intermedio + compilador de cdigo intermedio a cdigo mquina n+m mdulos -> n*m compiladores
Compiladores II (96-97 12/10/2013 19:38) - 1.20 -
- 1.21 -