Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

GENERACIÓN DE CÓDIGO INTERMEDIO

No description
by

cecilia villanueva

on 27 October 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of GENERACIÓN DE CÓDIGO INTERMEDIO

GENERACIÓN DE CÓDIGO INTERMEDIO
Representación de código intermedio


• Existen maneras formales para representar
código intermedio.
• Estas notaciones simplifican la traducción de
nuestro código fuente a nuestro código
objeto ya que ahorran y acotan símbolos de
la tabla de símbolos
AUTÓMATAS II
Generación de código intermedio
La administración de la memoria
se da en esta etapa.

Con la generación de código intermedio se inicia la tarea de síntesis.

Aunque un programa fuente se puede traducir directamente a lenguaje objeto.

Postfija
La notación postfija pone el operador al final
de los dos operandos, por lo que la
expresión queda: ab+5-
Algunas ventajas de utilizar una forma
intermedia son:

Aumentar la portabilidad del compilador de una máquina a otra.
Se puede utilizar el mismo analizador para diferentes generadores.
Se pueden utilizar optimizadores independientes de la máquina
Prefija
La notación prefija pone el operador primero
que los dos operandos, por lo que la
expresión anterior queda: +ab-5. Esto se
representa con una estructura del tipo FIFO
(First In First Out) o cola.
• Las estructuras FIFO son ampliamente
utilizadas pero tienen problemas con el
anidamiento aritmético.

• Las notaciones sirven de base para expresar
sentencias bien definidas.
• El uso más extendido de las notaciones sirve
para expresar operaciones aritméticas.
• Las expresiones aritméticas se pueden
expresar de tres formas distintas: infija,
prefija y postfija.
Notaciones
Infija
La notación infija es la más utilizada por los
humanos por que es la más comprensible ya
que ponen el operador entre los dos
operandos.

Por ejemplo a+b-5.

Lenguaje intermedio

• Los lenguajes intermedios nos sirven
para representar la producción final de
nuestro lenguaje fuente.

• Existen muchos lenguajes intermedios, la
mayoría de ellos son una representación
más simplificada del código original para
facilitar la traducción hacia el código final.
Árbol sintáctico
El uso de los árboles sintácticos como representación intermedia permite que la traducción se separe del análisis sintáctico. Además es útil para respresentar construcciones de lenguaje.
Grafo dirigidos acíclicos para expresiones (GDA)
Identifican las subexpresiones comunes de una expresión .
Un nodo interior representa un operador y sus hijos los operandos.
Un nodo tiene mas de un padre.
Código de tres direcciones
Es una secuencia de proposición de la forma general:
x:=y op z
donde x, y y z son nombres, constantes o variables temporales, op representa cualquier operador.
ejemplos:
Implementación de proposiciones de tres direcciones
Una proposición de tres direcciones es una forma abstracta de código intermedio. En un compilador estas proposiciones
se pueden implementar como registros con campos para el operador y los operandos.

Las implementaciones pueden ser:
Triplos
Cuádruplos
Triplos
Generalmente el código que generan los triples recibe el nombre de código de dos direcciones, aunque en ocasiones puede variar. Cuando se utilizan triples se ocupan punteros a la misma estructura de los triples.
• * b t1 t2 //cuádruplos
• * b (0) //triple
Esta notación se puede implementar como registros con campos para el operador y operadores.
Cuádruplos
Es una estructura tipo registro con cuatros campos que se llaman: op, arg1, arg2 y resultado. OP tiene un código intermedio.
Los operadores unarios como x:=-y no utilizan arg2. Generalmente arg1, arg2 y resultado son valores de tipo puntero y apuntan a una entrada en la tabla de símbolos.
Se implanta en una secuencia de registros con cuatro campos: Operación, Argumento 1, Argumento 2, y Resultado.
Esquemas de generación
Los esquemas de generación son las
estrategias o acciones que se deberán
realizarse y tomarse en cuenta en el
momento de generar código intermedio.
• Los esquemas de generación dependen de
cada lenguaje.
Estatuto Condicional
Las condiciones deben expresarse de manera lo más sencilla posible, de tal forma que puedan evaluarse en corto circuito.

Estatuto de ciclos
Los ciclos se descomponen en un ciclo genérico, por lo que ciclos while, for y do- while tienen la misma representación interna. Todo queda en forma de while.
Arreglos
Los arreglos se descomponen en estructuras básicas de manejo de manera simple.
Funciones
Las funciones pueden reducir a en línea, lo que se hace es expandir el código original de la función.

Las funciones se descomponen simplificando los parámetros de manera individual al igual que el valor de retorno.
Expresiones
• Para generar expresiones estas deben
representarse de manera más simple y más
literal para que su conversión sea más rápida.

• Por ejemplo la traducción de operaciones
aritméticas debe especificarse una por una,
de tal forma que una expresión sea lo más
mínimo posible.
Declaración de variables constantes
• Las declaraciones de variables y constantes
deben separarse de tal manera que queden
las expresiones una por una de manera
simple.

• Por ejemplo int a,b,c; se descompone a int a;
int b; intc; respectivamente.
Estatuto de asignacion
• Las operaciones de asignación deben
quedar expresadas por una expresión
sencilla, si está es compleja se debe reducir
hasta quedar un operador sencillo.

• Por ejemplo: x = a+b/5; debe quedar de la
forma y = b/5; z = a+y; x=z.
Equipo 2
Integrantes:
*De la cruz Villanueva Cecilia
*García Cerda Sergio
*Medina Gaitan Mónica Georgina
*Rodriguez Sandoval Alejandra

Bibliografía:
lenguajes y compiladores; Teoria y ejercicios
Perez Iván
publicaciones UCAB, primera edicion, 2005

compiladores; Teoria e implementación
Jacinto Ruiz Catalán
Grupo Ramirez Cogollor, 2010

http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r97375.PDF

http://www.slideshare.net/raude3538/esquemas-generacion-codigo-inetermedio





Para saber más...
Full transcript