ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Representacion De Codigo Intermedio


Enviado por   •  21 de Mayo de 2013  •  5.746 Palabras (23 Páginas)  •  1.763 Visitas

Página 1 de 23

2.2 Representaciones de código Intermedio.

Existen dos representaciones intermedias principales:

• Notación sufija

• Cuádruplas

Los operadores diádicos (o binarios) pueden especificarse mediante tres notaciones principales:

• Prefija: el operador diádico es analizado antes que sus operandos.

• Infija: el operador diádico es analizado entre sus operandos.

• Sufija: el operador diádico es analizado después que sus operandos.

En los lenguajes de programación clásicos, los operadores diádicos se representan usualmente en notación infija. La notación prefija permite al operador influir sobre la manera en que se procesan sus operandos, pero a cambio suele exigir mucha más memoria. La sufija no permite esa influencia, pero es óptima en proceso de memoria y permite eliminar el procesado de los paréntesis.

Los operadores monádicos sólo pueden presentarse en notación prefija o sufija.

Además, un árbol sintáctico puede representarse en forma de tuplas de n elementos, de la forma (operador, operando-1, ..., operando-k, nombre). Las tuplas pueden tener longitud variable o fija (con operandos nulos). Las más típicas son las cuádruplas, aunque éstas pueden representarse también en forma de tripletes.

2.2.1 Notación Polaca

Llamada también postfija o polaca inversa, se usa para representar expresiones sin necesidad de paréntesis.

Ejemplos:

a*b ab*

a*(b+c/d) abcd/+*

a*b+c*d ab*cd*+

Los identificadores aparecen en el mismo orden. Los operadores en el de evaluación (de izquierda a derecha).

Problema: operadores monádicos (unarios). O bien se transforman en diádicos (binarios) o se cambia el símbolo.

Ejemplo: -a se convierte en 0-a o en @a

a*(-b+c/d) ab@cd/+*

Existen dos problemas principales:

• Construir la notación sufija a partir de la infija.

• Analizar la notación sufija en el segundo paso de la compilación.

Rutina semántica para transformar de infijo a sufijo

Si el analizador sintáctico es bottom-up, hacemos la siguiente suposición: "Cuando aparece un no terminal V en el asidero, la cadena polaca correspondiente a la subcadena que se redujo a V ya ha sido generada".

Se utiliza una pila donde se genera la salida, inicialmente vacía. Las acciones semánticas asociadas a las reglas son:

E ::= E + T Push +

E ::= E - T Push -

E ::= T

T ::= T * F Push *

T ::= T / F Push /

T ::= F

F ::= i Push i

F ::= (E)

F ::= - F Push @

Análisis de la notación sufija

La gramática completa que permite analizar la notación sufija es:

<Operando> ::= id |

cte |

<Operando> <Operando> <Operador diádico> |

<Operando> <Operador monádico>

<Operador diádico> ::= + | - | * | / | ...

<Operador monádico> ::= @ | ...

Algoritmo de evaluación de una expresión en notación sufija que utiliza una pila:

• Si el próximo símbolo es un identificador, se pasa a la pila. Corresponde a la aplicación de la regla

• <Operando> ::= id

• Si el próximo símbolo es una constante, se pasa a la pila. Corresponde a la aplicación de la regla

• <Operando> ::= cte

• Si el próximo símbolo es un operador diádico, se aplica el operador a los dos operandos situados en lo alto de la pila y se sustituyen éstos por el resultado de la operación. Corresponde a la aplicación de la regla

• <Operando> ::= <Operando> <Operando> <Operador diádico>

• Si el próximo símbolo es un operador monádico, se aplica el operador al operando situado en lo alto de la pila y se sustituye éste por el resultado de la operación. Corresponde a la aplicación de la regla

• <Operando> ::= <Operando> <Operador monádico>

Ejemplo: calcular ab@cd/+*.

Extensión de la notación sufija a otros operadores

• La asignación, teniendo en cuenta que podemos no querer valor resultante. Además, no interesa tener en la pila el valor del identificador izquierdo, sino su dirección.

• a:=b*c+d abc*d+:=

• La transferencia (GOTO).

• GOTO L L TR

• La instrucción condicional

• if p then inst1 else inst2

se convierte en

p L1 TRZ inst1 L2 TR inst2

L1: L2:

• Subíndices:

• a[exp1; exp2; ...; expn]

se convierte en

a exp1 exp2 ... expn SUBIN-n

2.2.2 Código P

2.2.3 Triplos

2.2.4 Cuádruplos.

Una operación diádica

...

Descargar como (para miembros actualizados)  txt (19.2 Kb)  
Leer 22 páginas más »
Disponible sólo en Clubensayos.com