Generacion De Un Codigo Intermedio

Páginas: 5 (1031 palabras) Publicado: 26 de agosto de 2011
Generación de código intermedio
Transforma un árbol sintáctico (semántico) en una representación en un lenguaje intermedio, que suele ser código sencillo que después se convertirá en código de máquina.
Propiedades de la representación intermedia:
•Debe ser fácil de producir
•Debe ser fácil de traducir al programa objeto
Un formato de código intermedio es el código de tres direcciones.Forma: A:= B op C, donde A,B,C son operandos y op es un operador binario
Se permiten condicionales simples y saltos.
P/E
while (a >0) and (b0) goto L2 L4: t1:=b*a
goto L3 t2:=t1-10
L2: t1:=a*4 a:=t2
t2:=t1-5 goto L1
if (b < t2) goto L4 L3: …….
goto L3

Optimización de código
Trata de conseguir que el programa objeto sea más rápidoen la ejecución y que necesite menos memoria a la hora de ejecutarse. (No todos los compiladores llevan a cabo esta etapa)
Posibles optimizaciones locales:
•Cuando hay dos saltos seguidos se puede quedar uno solo
P/E El ejemplo anterior quedaría así:
L1: if (a= t2) goto L3 goto L1
L3: …….
•Eliminar expresiones comunes en favor de una sola expresión
a:=b+c+d Quedaríat1:=b+c b:=t1+e
b:=b+c+e a:=t1+d

•Optimización de bucles y lazos (sacar expresiones invariantes)
P/E
Repeat Se saca x:=3
x:=3;
y:=y-x*2;
until y A Recursividad izquierda
A=>A Recursividad derecha
2. Ambigüedad
Una gramática es ambigua si el lenguaje que define contiene alguna sentencia que tenga más de un único árbol de análisis sintáctico, es no ambigua cuando cualquiertira del lenguaje que representa, tiene un único árbol sintáctico.
No es posible construir analizadores sintácticos eficientes para gramáticas ambiguas.
No se disponen de técnicas para saber si una gramática es ambigua o no. La única forma de saberlo es encontrando una cadena con dos o más árboles sintácticos distintos

Algunas de las características que tiene las gramáticas ambiguas son lassiguientes:
• Gramáticas con ciclos simples o menos simples
SA | a
AS

• Alguna regla con una forma
EE … E

• Un conjunto de reglas de forma parecida a:
SA | B
AB

• Producciones recursivas en las que las variables no recursivas de la producción puedan derivar a la cadena vacía:
SHRS | s
Hh |
Rr |

• Variables que puedan derivar a la cadena vacía y a la misma cadena determinales, y que aparezcan juntas en la parte derecha de una regla o en alguna forma sentencial:
SHR
Hh |
Rr | h |

Ejemplo: Sea la gramática
SAa | C
CS | Ac
Aa
La tira ‘aa’ tiene dos árboles sintácticos.
Para solucionar la ambigüedad se deben modificar las reglas de producción de la gramática

S
C
S
A
a
a
S
A
a
a

3. Asociatividad y precedencia de operadores
AsociatividadLa asociatividad de un operador se define cómo se operan tres o más operandos.
Tipos de asociatividad:
• Asociatividad izquierda (se evalúa de izquierda a derecha)
•Asociatividad derecha (se evalúa de derecha a izquierda)
La asociatividad en una gramática se refleja en el tipo de recursividad que se emplea. Si la asociatividad del operador es por la izquierda, la reglasintáctica en la que interviene dicho operador debe ser recursiva por la izquierda; en el caso de asociatividad por la derecha se utiliza recursión por la derecha.

Precedencia
La precedencia de un operador especifica el orden relativo de cada operador con respecto a los demás operadores.
La precedencia en una gramática se refleja de la siguiente manera: cuánto más cerca esté la producción de la delsímbolo inicial, menor será la precedencia del operador.
Parentización
Los paréntesis son operadores especiales que tiene la máxima precedencia.
Para incluirlos en la gramática, se añade una variable que produzca expresiones entre paréntesis y los operandos (números, variables, etc.) a la mayor distancia posible del símbolo inicial. En esta producción se colocan los operadores unarios a no ser...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Unidad viii generación de código intermedio
  • Unidad vi.- generacion de codigo intermedio
  • Generación De Código Intermedio
  • generacion codigo intermedio
  • Generacion de Codigo Intermedio
  • Generacion de codigo intermedio (compilador)
  • codigo intermedio
  • Codigo intermedio

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS