01 Jun

2.2.1 Notación Polaca

La notación polaca es la originada por un Autómata con pila, en la que los operadores  siempre preceden a los operandos sobre los que actúan, y que tiene la ventaja de no necesitar paréntesis:

  • Se utiliza principalmente para la representación de expresiones aritméticas.
  • Expresión a notación polaca inversa.

Algoritmo

  • Representa la expresión en forma de árbol sintáctico.
  • Recorrer el árbol en postorden

Ejemplo: a + b * c-d

Código a b c * + d-


 

Ventajas y desventajas de la notación polaca

Generación de código: simple, no utiliza registros.

Optimización: es difícil de reordenar ya que hay que considerar el contenido de la pila.

Interpretación rápida: es muy fácil de interpretar ya que solo necesita una pila.

Transportable: si, ya que todos los procesadores implementan una pila

2.2.2 CÓDIGO P 

El código P comenzó como un código ensamblador objetivo estándar producido por varios compiladores Pascal en la década de 1970 y principios de la de 1980. Fue diseñado para código real para una máquina de pila hipotética la idea era hacer que los compiladores de Pascal se transportaran fácilmente requiriendo solo que se volviera a escribir el intérprete de la maquina P para una plataforma, el código P también ha probado ser útil como código intermedio y sean utilizado varias extensiones y modificaciones del mismo en diversos compiladores de código nativo, la mayor parte para lenguaje tipo Pascal. Como el código P fue diseñado para ser directamente ejecutable, contiene una descripción implícita de un ambiente de ejecución particular que incluye tamaños de datos, además de mucha información específica para la maquina P, que debe conocer si se desea que un programa de código P se comprensible. La máquina P está compuesta por una memoria de código, una memoria de datos no específica para variables nombre das y una pila para datos temporales, junto como cualquiera registro que sea necesario para mantener la pila y apoyar la ejecución.


2.2.3 TRIPLOS:

En la historia de los compiladores han sido utilizadas una amplia variedad de representaciones intermedias como lo es la siguiente clase de representación de código intermedio de un árbol de 3 direcciones,2 para los operandos y una para la ubicación del resultado. esta clase incluye un amplio número de representaciones diferentes entre las cuales encontramos cuádruplos y triples. la principal diferencia entre estas notaciones y la notación postfija es que ellos incluyen referencias explicitas para los resultados de los cálculos intermedios, mientras que la notación posfija los resultados son implícitos al representarlos en una pila.

La diferencia entre triples y cuádruplos es que con los triples es referenciado el valor intermedio hacia el número del triple que lo creo, pero en los cuádruplos requiere que ellos tengan nombre implícito.

Los triples tienen una ventaja obvia de ser más consistente, pero ellos dependen de su posición, y hacen que la optimización presente cambios de código mucho más compleja.

Para evitar tener que introducir nombres temporales en la tabla de símbolos, se hace referencia a un valor temporal según la posición de la proposición que lo calcula. Las propias instrucciones representan el valor del nombre temporal. La implementación se hace mediante registros de solo tres campos (op, arg1, arg2).

En la notación de tripletes se necesita menor espacio y el compilador no necesita generar los nombres temporales. Sin embargo, en esta notación, trasladar una proposición que defina un valor temporal exige que se modifiquen todas las referencias a esa proposición. Lo cual supone un inconveniente a la hora de optimizar el código, pues a menudo es necesario cambiar proposiciones de lugar.

Una forma de solucionar esto consiste en listar las posiciones a las tripletas en lugar de listar las tripletas mismas. De esta manera, un optimizador podría mover una instrucción reordenando la lista, sin tener que mover las tripletas en si.


2.2.4 CUADRUPLOS:

Ejemplo: (A+B)*(C+D)-E

+, A, B, T1

 +, C, D, T2

*, T1, T2, T3

-, T3, E, T4

 Las cuádruplas facilitan la aplicación de muchas optimizaciones, pero hay que tener un algoritmo para la reutilización de las variables temporales (reutilización de registros del procesador).

Comentarios
* No se publicará la dirección de correo electrónico en el sitio web.
ESTE SITIO FUE CONSTRUIDO USANDO