RESUMEN CODIGO INTERMEDIO

INSTITUTO TECNOLÓGICO SUPERIOR DE ALVARADO INGENIERÍA EN SISTEMAS COMPUTACIONALES Materia: LENGUAJES Y AUTÓMATAS II Sem

Views 64 Downloads 0 File size 246KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

INSTITUTO TECNOLÓGICO SUPERIOR DE ALVARADO INGENIERÍA EN SISTEMAS COMPUTACIONALES Materia: LENGUAJES Y AUTÓMATAS II

Semestre-Grupo: SEPTIMO SEMESTRE – GRUPO UNICO

Producto Académico: SOLUCIÓN DE EJERCICIOS ARBOLES DE EXPRESIONES

Presenta: ALEJANDRA KIKEY JIMÉNEZ MEDINA – 116Z1168

Docente: I.S.C. GABRIELA HERNÁNDEZ CRUZ

H. Y G. ALVARADO, VER. AGO-2014/ENE-2015

Página 1

Página 2

INTRODUCCIÓN Ya hemos pasado por las etapas de análisis léxico, sintáctico y semántico, ahora viene la etapa de generador de código intermedio. El generador de código intermedio transforma la salida del análisis semántico, en una representación cercana a un lenguaje intermedio cercano al código objeto. Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto. Existen varias formas de representar el código intermedio, mediante árboles sintácticos, notación postfija y código de tres direcciones.

Página 3

GENERACIÓN DE CÓDIGO INTERMEDIO El objetivo del código intermedio es reducir el número de programas necesarios para construir traductores, y permitir más fácilmente la transpirabilidad de unas máquinas a otras. Supóngase que se tienen n lenguajes, y se desea construir traductores entre ellos. Sería necesario construir n*(n-1) traductores. Esta fase del compilador no es en realidad una parte separada del compilador, la mayoría de los compiladores generan código como parte del proceso de análisis sintáctico, esto es debido a que requieren del árbol de sintaxis y si este no va a ser construido físicamente, entonces deberá acompañar al analizador sintáctico al barrer el árbol implícito. La tarea de síntesis suele comenzar generando un código intermedio. El código intermedio no es el lenguaje de programación de ninguna máquina real, sino que corresponde a una máquina abstracta, que se debe de definir lo más general posible, de forma que sea posible traducir este código intermedio a cualquier máquina real. En lugar de generar código ensamblador directamente, los compiladores generan un código intermedio que es más parecido al código ensamblador, las operaciones por ejemplo nunca se hacen con más de dos operando. Al no generarse código ensamblador el cual es dependiente de la computadora específica, sino código intermedio, se puede reutilizar la parte del compilador que genera código intermedio en otro compilador para una computadora con diferente procesador cambiando solamente el generador de código ensamblador al cual llamamos back-end, la desventaja obviamente es la lentitud que esto conlleva.

ÁRBOLES SINTÁCTICOS La estructura sintáctica de los lenguajes de programación se especifica mediante Gramáticas Libres de Contexto (GLC).

Página 4

Analizar sintácticamente una cadena de tokens es encontrar para ella un árbol sintáctico, que tenga como raíz el símbolo inicial de la GLC y mediante la aplicación sucesiva de sus reglas de derivación se puede alcanzar dicha cadena como hojas del árbol sintáctico.

DERIVACIONES POR LA IZQUIERDA / DERECHA Las reglas de derivación desde el símbolo inicial hasta alcanzar la sentencia a reconocer, reemplazan los símbolos NT tomando el de más a la izquierda o el de más a la derecha. Habitualmente se trabaja con derivaciones más a la izquierda. Todo árbol de análisis sintáctico tiene asociado una derivación izquierda y una única derivación derecha. Sin embargo una sentencia de un lenguaje puede dar lugar a más de un árbol de análisis sintáctico tanto por la derecha como por la izquierda.

Página 5

NOTACIÓN POSTFIJA Es una forma de notación para la lógica, la aritmética, y el álgebra. Su característica distintiva es que coloca los operadores a la izquierda de sus operan dos sus características principales son:  Los operan dos conservan el mismo orden que la notación infija equivalente.  No requiere de paréntesis para indicar el orden de precedencia de operadores ya que él es una operación.  Se evalúa de izquierda a derecha hasta que encontrémosle primer operador seguido inmediatamente de un par de operan dos.  Se evalúa la expresión binaria y el resultado se cambia como un nuevo operando. Se repite este hasta que nos quede un solo resultado. +A B C (A+B)*C

CÓDIGO DE TRES DIRECCIONES

Página 6